/*******************************************************
    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 validateBandUrl = false;
var validateBandMembers = false;
var validateGender = false;
var validateLabel = false;
var validateComment = false;
var validateNotify = false;
var validateSongTitle = false;
var validateContactName = false;
var validateFirstName = true;
var validateLastName = false;
var validateStreetAddress = true;
var validateCity = true;
var validateState = true;
var validateZip = true;
var validateCountry = true;
var validatePhone = true;
var validateEmail = true;
var validateBirthday = true;
var validateUpload = true;
var validateContactName = true;
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()
{
    // band name
    if (validateBandName == true && document.getElementById('bandName') != null)
    {
        if (IsNotEmpty(document.getElementById('bandName'), 'Please enter a band name.') == false )
            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;
    }
   
    // gender
    if (validateGender == true && document.getElementById('Gender') != null)
    {
        if (document.getElementById('Gender').value.length < 1)
        {
            alert('Please enter a gender');
            return false;
        }
    }     
    
    // label
    if (validateLabel == true && document.getElementById('label') != null)
    {
        if (IsNotEmpty(document.getElementById('label'), 'Please enter a label.') == false )
            return false;
    }
    
    // comment
    if (validateComment == true && document.getElementById('comment') != null)
    {
        if (IsNotEmpty(document.getElementById('comment'), 'Please enter a comment.') == false )
            return false;
    }
    
    // notify
    if (validateNotify == true && document.getElementById('notify') != null)
    {
        if (IsNotEmpty(document.getElementById('notify'), 'Please enter a notification.') == false )
            return false;
    }
    

    // contact name
    if (validateContactName == true && document.getElementById('contactName') != null)
    {
        if (IsNotEmpty(document.getElementById('contactName'), 'Please enter a contact name.') == false )
            return false;
    }
    
    // first name
    if (validateFirstName == true && document.getElementById('fname') != null)
    {
        if (IsNotEmpty(document.getElementById('fname'), 'Please enter a first name.') == false )
            return false;
    }
    
    // last name
    if (validateLastName == true && document.getElementById('lname') != null)
    {
        if (IsNotEmpty(document.getElementById('lname'), 'Please enter a last name.') == false )
            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;
		}
    }
      // country
    if (validateCountry == true && document.getElementById('country') != null)
    {
        if (IsNotEmpty(document.getElementById('country'), 'Please enter country.') == 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').value) == true)
        {
            alert('Please enter a valid phone number'); 
			return false;
        }    
    }  

        
    // email 
    if (validateEmail == true && document.getElementById('email') != null)
    {
        if (ValidateEmail(document.getElementById('email')) == false)
            return false;  
    }
    
    
    // birthday
    if (validateBirthday == true && document.getElementById('bdate') != null)
    {
        if ( IsValidDate(document.getElementById('bdate').value) == false )
            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;
        }
    }
    
    // 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;
        }
    }      

    // success
    return true;
}
// end ValidateForm



// normal form submit to uploadmedia.aspx
function SubmitMediaUploadForm()
{
    var form = GetForm();

       
    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!
		form.action = 'http://adsupport.myspace.com/index.cfm?fuseaction=advertiser.uploadmedia';
		form.submit();
        //if (openDialog != null)
        //{
		//	openDialog('loadingBox');
		//}

    }
}



// 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 == null)
        alert('Error:  unable to find a correct form ID for the form submission.  Designer, please make sure the form has the id: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("The 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");
        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");
           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");
          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()
{
    try
    {
	    if (document.getElementById("filename"))
	        document.getElementById("filename").value = SetFileName() + "-" + SetFileName();
    	    
	    //create elements for birthdate in form
	    // without this, other cultures besides US will fail to store this data.
        // set the delimiter and year ranges
        
        if (validateBirthday == true && document.getElementById('bdate') != null)
        {
            var dtCh= "/";
            var dtStr = document.getElementById('bdate').value;
            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);
            
            // remove preceding zeros    
            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);
        	
	        // add month
	        var monthInput = document.createElement('input');
	        monthInput.setAttribute('type', 'hidden');
	        monthInput.setAttribute('id', 'bmonth');
	        monthInput.setAttribute('value', month);
        	
	        // add day
	        var dayInput = document.createElement('input');
	        dayInput.setAttribute('type', 'hidden');
	        dayInput.setAttribute('id', 'bday');
	        dayInput.setAttribute('value', day);
        	
	        // add year
	        var yearInput = document.createElement('input');
	        yearInput.setAttribute('type', 'hidden');
	        yearInput.setAttribute('id', 'byear');
	        yearInput.setAttribute('value', year);
        	
        	
	        // add elements to form
	        var form = GetForm();
	        form.appendChild(monthInput);
	        form.appendChild(dayInput);
	        form.appendChild(yearInput);
	    }
    }
    catch(ex)
    {
        alert('Error setting post data: ' + ex);
    }
}
//************************************
