/*******************************************************
    in order to do the form validation, just set whichever
    ones you want to validate to true.
    also, make sure that the form inputs are named 
    the way they are in the function call.
*******************************************************/
var validateBandName = false;
var validateSongName = true;
var validateBandUrl = false;
var validateBandMembers = false;
var validateGender = false;
var validateLabel = true;
var validateComment = false;
var validateNotify = false;
var validateSongTitle = true;
var validateContactName = false;
var validateFirstName = true;
var validateLastName = true;
var validateStreetAddress = true;
var validateCity = true;
var validateState = true;
var validateZip = true;
var validatePhone = true;
var validateEmail = true;
var validateBirthday = true;
var validateUpload = true;
var validateContactName = false;
var validateCheckRules = true;
var validateCheckTerms = true;

// main validation function.  No changes should have to be made here, just define the validation
// variables in your .js file.
function ValidateForm()
{
           
    // last name
    if (validateLastName == true && document.getElementById('lname') != null)
    {
        if (IsNotEmpty(document.getElementById('lname'), 'Please enter your name.') == false )
            return false;
    }
        
    // birthday
    if (validateBirthday == true && document.getElementById('bdate') != null)
    {
        if ( IsValidDate(document.getElementById('bdate').value) == false )
            return false;
    }
    
    
    // first name
    if (validateFirstName == true && document.getElementById('fname') != null)
    {
        if (IsNotEmpty(document.getElementById('fname'), 'Please enter performer/group name.') == false )
            return false;
    }
    
    if (document.getElementById('member2').value != '')
    {
      if ( document.getElementById('bdate2').value == '')
      {
         alert('Please enter birth date for member 1.');
         return false;
      }
      else
      {
        if ( !IsValidDateLite(document.getElementById('bdate2').value, 'member 1'))
            return false;
      }
    }
    
    if (document.getElementById('member3').value != '')
    {
      if ( document.getElementById('bdate3').value == '')
      {
         alert('Please enter birth date for member 2.');
         return false;
      }
      else
      {
        if ( !IsValidDateLite(document.getElementById('bdate3').value, 'member 2'))
            return false;
      }
    }
    
    if (document.getElementById('member4').value != '')
    {
      if ( document.getElementById('bdate4').value == '')
      {
         alert('Please enter birth date for member 3.');
         return false;
      }
      else
      {
        if ( !IsValidDateLite(document.getElementById('bdate4').value, 'member 3'))
            return false;
      }
    }
    
    if (document.getElementById('member5').value != '')
    {
      if ( document.getElementById('bdate5').value == '')
      {
         alert('Please enter birth date for member 4.');
         return false;
      }
      else
      {
        if ( !IsValidDateLite(document.getElementById('bdate5').value, 'member 4'))
            return false;
      }
    }
    
    if (document.getElementById('member6').value != '')
    {
      if ( document.getElementById('bdate6').value == '')
      {
         alert('Please enter birth date for member 5.');
         return false;
      }
      else
      {
        if ( !IsValidDateLite(document.getElementById('bdate6').value, 'member 5'))
            return false;
      }
    }
    
    // address
    if (validateStreetAddress == true && document.getElementById('streetAddress') != null)
    {
        if (document.getElementById('streetAddress').value.length < 3)
        {
            alert('Please enter address.'); 
            return false;
        }
    }
    
    // city
    if (validateCity == true && document.getElementById('city') != null)
    {
        if (IsNotEmpty(document.getElementById('city'), 'Please enter city.') == false )
            return false; 
    }       
   
        
    // state
    if (validateState == true && document.getElementById('state') != null)
    {
        if (document.getElementById('state').value.length < 2)
        {
            alert('Please enter state.'); 
            return false;
        }
    }
    
    // zip code
    if (validateZip == true && document.getElementById('zip') != null)
    {
        if (IsNotEmpty(document.getElementById('zip'), 'Please enter zip code.') == false)
            return false;
		
		if (isNaN(document.getElementById('zip').value))
		{
			alert('Please enter a valid zip code.');	
			return false;
		}
    }

    // email 
    if (validateEmail == true && document.getElementById('email') != null)
    {
        if (ValidateEmail(document.getElementById('email')) == false)
            return false;  
    }
    
    // phone  
    if (validatePhone == true && document.getElementById('pnumber') != null)
    {
		// empty
		if (IsNotEmpty(document.getElementById('pnumber'), 'Please enter a phone number.') == false )
            return false;
		
		//length
		if (document.getElementById('pnumber').value.length < 10)
        {
            alert('Please enter a valid phone number.'); 
            return false;
        }
		
		// invalid characters
        if ( InvalidPhone(document.getElementById('pnumber')) == true)
        {
            alert('Please enter a valid phone number'); 
			return false;
        }    
    }  
       
    // upload
    if (validateUpload == true && document.getElementById('attachedfile') != null)
    {
        if (IsNotEmpty(document.getElementById('attachedfile'), 'Please select file to upload.') == false)
            return false;
            
        // make sure it's an mp3
        if(document.getElementById('attachedfile').value.indexOf('.mp3') < 0 &&
            document.getElementById('attachedfile').value.indexOf('.MP3') < 0)
        {
            alert('Please enter a valid .mp3 file');
            return false;
        }
    }

    // song name
    if (validateSongName == true && document.getElementById('songName') != null)
    {
        if (IsNotEmpty(document.getElementById('songName'), 'Please enter a song Name.') == false )
            return false;
    }
    
    // label
    if (validateLabel == true && document.getElementById('label') != null)
    {
        if (document.getElementById('label').value.length < 2)
        {
            alert('Please select genre.'); 
            return false;
        }
    }
    
    // band url
    if (validateBandUrl == true && document.getElementById('bandURL') != null)
    {
        if (IsNotEmpty(document.getElementById('bandURL'), 'Please enter a band URL.') == false )
            return false;
    }
    
    // band members
    if (validateBandMembers == true && document.getElementById('bandmembers') != null)
    {
        if (IsNotEmpty(document.getElementById('bandmembers'), 'Please enter band member names.') == false )
            return false;
    }
   

    // band name
    if (validateBandName == true && document.getElementById('bandName') != null)
    {
        if (IsNotEmpty(document.getElementById('bandName'), 'Please enter a band name.') == false )
            return false;
    }

    
    // rules
    if (validateCheckRules == true && document.getElementById('checkRules') != null)
    {
        if (document.getElementById('checkRules').checked == 0)
        {
            alert('Please check the official rules.'); 
            return false;
        }
    }  
    
    // terms of agreement  
    if (validateCheckTerms == true && document.getElementById('checkTerms') != null)
    {
        if (document.getElementById('checkTerms').checked == 0)
        {
            alert('Please check the official terms and agreement.'); 
            return false;
        }
    }      

    //document.getElementById("submit").style.visibility = 'hidden';
    document.getElementById("uploadStatus").style.visibility = 'visible';
    document.getElementById("uploadStatus").style.backgroundImage = 'url(http://creative.myspace.com/design/_mn/doritos/contest/progress.gif)';
    document.getElementById("uploadStatus").style.backgroundRepeat = 'no-repeat';
    document.getElementById("uploadStatus").style.backgroundRepeat = 'no-repeat';

    // success
    return true;
}
// end ValidateForm



// normal form submit to uploadmedia.aspx
function SubmitMediaUploadForm()
{
    var form = GetForm();
    //form.action = 'http://adsupport.myspace.com/index.cfm?fuseaction=advertiser.uploadmedia';
       
    if (ValidateForm() == true)
    {
        // set the file name for the upload so that it's unique
        SetPostData();
        // this will use the prototype windows open dialog function to show a loading box.  make sure you have a div called loadingBox!
        //if (openDialog != null)
        //    openDialog('loadingBox');
        form.submit();
    }
}



// submits the form to the uploadmedia.aspx page
// for an mp3 upload
function SubmitMp3()
{
    SubmitMediaUploadForm();
}

// assumes the upload media form is named aspnetForm
function GetForm()
{
    var theForm = document.forms['aspnetForm'];
    if (!theForm)theForm = document.aspnetForm;
    return theForm;
}



/***********************************
* returns boolean indicating 
* whether an input's value is empty
* or not.
***********************************/
function IsNotEmpty(inputElement, errorMessage)
{
    if (inputElement.value.length < 1)
    {
        alert(errorMessage);
        return false;
    }
    return true;
}

// performs email check via regex
function ValidateEmail(inputElement)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	if (filter.test(inputElement.value))
	    return true;
	else 
	{
	    alert('Please enter a valid email address');
	    return false;
	}
}

// performs phone number check
// phone # must be in format: (###) ###-####
function InvalidPhone(p)
{
    if(p.length < 6)
        return true;
    
    if(p.length > 15)
        return true;
    
    for(i=0;i<p.length;i++)
        if(IsInvalidChar(p.charAt(i)))return true;
    
    return false;
}

function IsInvalidChar(c)
{
    var vC = "0123456789 ()-";
    if(vC.indexOf(c)<0){return true};
    return false;
}



// performs date check via regex
// date must be in format: mm/dd/yyyy
/*
OLD VERSION
function IsValidDate(inputElement)
{
	var filter  = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
	
	if (filter.test(inputElement.value))
	    return true;
	else 
	{
	    alert('Please enter a valid date');
	    return false;
	}
}
*/

function isInteger(s)
{
    var i;
    for (i = 0; i < s.length; i++)
    {   

        // Check that current character is number.

        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
function stripCharsInBag(s, bag)
{
    var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}


function IsValidDate(dtStr)
{
    // set the delimiter and year ranges
    var dtCh= "/";
    var minYear=1920;
    var maxYear=2100; 
    var daysInMonth = DaysArray(12);
    var pos1 = dtStr.indexOf(dtCh);
    var pos2 = dtStr.indexOf(dtCh,pos1 + 1);
    var strMonth = dtStr.substring(0, pos1);
    var strDay = dtStr.substring(pos1 + 1, pos2);
    var strYear=dtStr.substring(pos2 + 1);
    strYr=strYear;
    
    if (strDay.charAt(0) == "0" && strDay.length>1) 
        strDay=strDay.substring(1);
        
    if (strMonth.charAt(0)=="0" && strMonth.length>1) 
        strMonth = strMonth.substring(1);
        
    for (var i = 1; i <= 3; i++) 
    {
        if (strYr.charAt(0)=="0" && strYr.length>1) 
            strYr = strYr.substring(1);
    }

    // set month day and year as variables    
    month = parseInt(strMonth);
    day = parseInt(strDay);
    year = parseInt(strYr);
    
    // make sure its delimited properly
    if (pos1==-1 || pos2==-1)
    {
         alert("Your birth date format should be : mm/dd/yyyy");
         return false;
    }
    
    // check month between 1-12
    if (strMonth.length<1 || month<1 || month>12)
    {
        alert("Please enter a valid month for your birth date");
        return false;
    }
    
    // make sure day is less than 31
    if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
    {
           alert("Please enter a valid day for your birth date");
           return false;
    }
    
    // check the year is in valid max and min range
    if (strYear.length != 4 || year==0 || year<minYear || year>maxYear)
    {
          alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
          return false;
    }
    
    if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
    {
          alert("Please enter a valid date your birth date");
          return false;
    }

    if (!checkAge(year, month, day))
      return false;

    if (document.getElementById('bday') != null)
          document.getElementById('bday').value = day;
                                 
    if (document.getElementById('bmonth') != null)
          document.getElementById('bmonth').value = month;
                                 
    if (document.getElementById('byear') != null)
          document.getElementById('byear').value = year;
                                 
    // success
    return true;
}

function IsValidDateLite(dtStr, member)
{
    // set the delimiter and year ranges
    var dtCh= "/";
    var minYear=1920;
    var maxYear=2100; 
    var daysInMonth = DaysArray(12);
    var pos1 = dtStr.indexOf(dtCh);
    var pos2 = dtStr.indexOf(dtCh,pos1 + 1);
    var strMonth = dtStr.substring(0, pos1);
    var strDay = dtStr.substring(pos1 + 1, pos2);
    var strYear=dtStr.substring(pos2 + 1);
    strYr=strYear;
    
    if (strDay.charAt(0) == "0" && strDay.length>1) 
        strDay=strDay.substring(1);
        
    if (strMonth.charAt(0)=="0" && strMonth.length>1) 
        strMonth = strMonth.substring(1);
        
    for (var i = 1; i <= 3; i++) 
    {
        if (strYr.charAt(0)=="0" && strYr.length>1) 
            strYr = strYr.substring(1);
    }

    // set month day and year as variables    
    month = parseInt(strMonth);
    day = parseInt(strDay);
    year = parseInt(strYr);
    
      // make sure its delimited properly
    if (pos1==-1 || pos2==-1)
    {
         alert("The date format for " + member + " should be : mm/dd/yyyy");
         return false;
    }
    
    // check month between 1-12
    if (strMonth.length<1 || month<1 || month>12)
    {
        alert("Please enter a valid month for " + member);
        return false;
    }
    
    // make sure day is less than 31
    if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
    {
           alert("Please enter a valid day for " + member);
           return false;
    }
    
    // check the year is in valid max and min range
    if (strYear.length != 4 || year==0 || year<minYear || year>maxYear)
    {
          alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
          return false;
    }
    
    if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
    {
          alert("Please enter a valid date for " + member);
          return false;
    }

    if (!checkAge(year, month, day))
    {
      return false;
    }  
    // success
    return true;
}

function daysInFebruary (year)
{
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
        return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n)
{
    for (var i = 1; i <= n; i++) 
    {
        //regular months
        this[i] = 31;
        
        // set to 30 for those weird months
        if (i==4 || i==6 || i==9 || i==11) 
            this[i] = 30;
        
        // february
        if (i==2) 
            this[i] = 29;
   } 
   return this;
}




/*  set unique name for file upload */
//************************************
function SetFileName() 
{
    var rndNum = Math.floor((Math.random())*10000);

    if (rndNum > 999)
        return rndNum;
    else if ( rndNum > 99)
        return "0" + rndNum
    else if ( rndNum > 9)
        return "00" + rndNum
    else    
        return "000" + rndNum

}

function SetPostData()
{
	if (document.getElementById("filename"))
	    document.getElementById("filename").value = SetFileName() + "-" + SetFileName();

   var tempStr = '';

	if (document.getElementById("member2").value != '')
	{
	   if (tempStr != '') tempStr = tempStr + ';';
	   tempStr = tempStr + document.getElementById("member2").value + '|' + document.getElementById("bdate2").value;   
	} 
	if (document.getElementById("member3").value != '')
	{
	   if (tempStr != '') tempStr = tempStr + ';';
	   tempStr = tempStr + document.getElementById("member3").value + '|' + document.getElementById("bdate3").value;   
	} 
	if (document.getElementById("member4").value != '')
	{
	   if (tempStr != '') tempStr = tempStr + ';';
	   tempStr = tempStr + document.getElementById("member4").value + '|' + document.getElementById("bdate4").value;   
	} 
	if (document.getElementById("member5").value != '')
	{
	   if (tempStr != '') tempStr = tempStr + ';';
	   tempStr = tempStr + document.getElementById("member5").value + '|' + document.getElementById("bdate5").value;   
	} 
	if (document.getElementById("member6").value != '')
	{
	   if (tempStr != '') tempStr = tempStr + ';';
	   tempStr = tempStr + document.getElementById("member6").value + '|' + document.getElementById("bdate6").value;   
	} 

   document.getElementById("comment").value = tempStr;	
}
//************************************


function checkAge(year, month, day)
{
	/* the minumum age you want to allow in */
	var min_age = 18;
   
	var theirDate = new Date((year + min_age), month-1, day);
	var today = new Date;

	if ( (today.getTime() - theirDate.getTime()) < 0) {
		alert("Sorry, you are not eligible");
		return false;
	}
	else {
		return true;
	}
}
