// JavaScript Document

/*

When a field returns invalid, assign a class whereupon that class
will highlight in red that fields respective label. Additionally, 
alert the user to double check those fields hightlighted in red.

*/

function validateNewSubForm()
{
	//alert(document.newSubscription.accountNum.value == 0);
	if (document.newSubscription.accountNum) {
		if (document.getElementById('accountNum').value  == '') {
			alert('Please enter your account number found on the mail piece');
			document.getElementById('accountNum').style.backgroundColor='#a31617';
			document.getElementById('accountNum').style.color='#ccc';
			return false;
		}
		else {
			document.getElementById('accountNum').style.backgroundColor='#fff';
			document.getElementById('accountNum').style.color='#000';		
		}
	}
// make phone # numbers only
	var invalidChar = /\s*\D*/g;
	var day1 = document.getElementById('daytimePhonePri').value;
	var eve1 = document.getElementById('eveningPhonePri').value;
	var day2 = document.getElementById('daytimePhoneSec').value;
	var eve2 = document.getElementById('eveningPhoneSec').value;
	
	var cleanedDay1 = day1.replace(invalidChar, "");
	var cleanedEve1 = eve1.replace(invalidChar, "");
	var cleanedDay2 = day2.replace(invalidChar, "");
	var cleanedEve2 = eve2.replace(invalidChar, "");
	
	document.getElementById('daytimePhonePri').value=cleanedDay1;
	document.getElementById('eveningPhonePri').value=cleanedEve1;
	document.getElementById('daytimePhoneSec').value=cleanedDay2;
	document.getElementById('eveningPhoneSec').value=cleanedEve2;
// end numbers only

	var allTrue;
	var reZip = /^\d{5}\-?(\d{4})?$/
	var formObj = document.newSubscription;

//Begin validate primary address
	var primaryAddy = new Array();
	
	primaryAddy[0] = document.getElementById('firstName');
	primaryAddy[1] = document.getElementById('lastName');
	primaryAddy[2] = document.getElementById('address1Pri');
	primaryAddy[3] = document.getElementById('cityPri');
	primaryAddy[4] = document.getElementById('statePri');
	primaryAddy[5] = document.getElementById('zipCodePri');
	primaryAddy[6] = document.getElementById('emailAddress');
	primaryAddy[7] = document.getElementById('daytimePhonePri');
	
	for(i=0;i<primaryAddy.length;i++)
	{
		if(primaryAddy[i].value == "")
		{
			primaryAddy[i].style.backgroundColor='#a31617';
			primaryAddy[i].style.color='#ccc';
			allTrue = 0;
		}
		else
		{
			primaryAddy[i].style.backgroundColor='#fff';
			primaryAddy[i].style.color='#000';
		}
	}
//End primary
//Begin validate secondary address
	if(formObj.residency[1].checked)
	{	
		if(isNaN(document.getElementById('fromMonth').value)||isNaN(document.getElementById('fromDay').value))
		{
			alert("You have entered an invalid \"From\" date for your secondary address. Please enter a valid date and submit again.");
			return false;
		}
		if(isNaN(document.getElementById('toMonth').value)||isNaN(document.getElementById('toDay').value))
		{
			alert("You have entered an invalid \"To\" date for your secondary address. Please enter a valid date and submit again.");
			return false;
		}
		var secondaryAddy = new Array();

		secondaryAddy[0] = document.getElementById('address1Sec');
		secondaryAddy[1] = document.getElementById('citySec');
		secondaryAddy[2] = document.getElementById('stateSec');
		secondaryAddy[3] = document.getElementById('zipCodeSec');
		secondaryAddy[4] = document.getElementById('daytimePhoneSec');

//not validating secondary and billing zip yet since zip may be Canada format.
		/*if(!reZip.test(secondaryAddy[3].value))
		{
			alert("You have entered an invalid zip code for your secondary address. Please enter a correct zip code and submit again.");
			return false;
		}*/

		for(i=0;i<secondaryAddy.length;i++)
		{
			if(secondaryAddy[i].value == "")
			{
				secondaryAddy[i].style.backgroundColor='#a31617';
				secondaryAddy[i].style.color='#ccc';
				allTrue = 0;
			}
			else
			{
				secondaryAddy[i].style.backgroundColor='#fff';
				secondaryAddy[i].style.color='#000';
			}
		}
	// Start Check if primary and secondary addy are same
	
		if (document.getElementById('address1Pri').value==document.getElementById('address1Sec').value)
		{
			if (document.getElementById('zipCodePri').value==document.getElementById('zipCodeSec').value)
			{
					alert("It looks like you have entered an identical address for both your Florida and Secondary address.\n\nA secondary address is only needed if you do not reside at the same residence year-round");
					return false;
			}
		}
	
	// End Check if primary and secondary addy are same
	}
//End secondary


//Start alert for primary and secondary
	if (allTrue==0)
	{
		alert("I am sorry. One or more required address fields are either missing information or have been supplied invalid information. Fields that require your attention are marked in a \"red\" background. Please correct and submit again.");
		return false;
	}
//End alert

//start zip
//not validating secondary and billing zip yet since zip may be Canada format.

	var zipErrMsgStart = "You have entered an invalid zip code for your ";
	var zipErrMsgEnd = ". Please enter a correct zip code and submit again.";
	var zipArray = new Array();
	
	zipArray[0] = document.getElementById('zipCodePri');
	//zipArray[1] = document.getElementById('ccZipCode');
	
	var zipErrArray = new Array();
	
	zipErrArray[0] = "Florida address";
	//zipErrArray[1] = "billing address";
	
	for (i=0;i<zipArray.length;i++)
	{
		if(!reZip.test(zipArray[i].value))
		{
			zipInsert = zipErrArray[i];
			alert(zipErrMsgStart+zipInsert+zipErrMsgEnd);
			return false;
		}
	}
	
//end zip

//start email addy
	var reEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,8})+$/
	var formEmail = document.getElementById('emailAddress').value;
	if(!reEmail.test(formEmail))
	{
		document.getElementById('emailAddress').style.backgroundColor='#a31617';
		document.getElementById('emailAddress').style.color='#ccc';
		alert("Your email address looks to be invalid. Please check your email address and submit again");
		return false;
	}
	else
	{
		document.getElementById('emailAddress').style.backgroundColor='#fff';
		document.getElementById('emailAddress').style.color='#000';
	}

//end email addy

//Start check for empty series
	if (!(document.newSubscription.accountNum)) {
		var obj = new Array()
		obj[0] = document.getElementById('firstChoice');
		obj[1] = document.getElementById('secondChoice');
		obj[2] = document.getElementById('thirdChoice');
		for(i=0;i<obj.length;i++)
		{
			if(obj[i].value=="")
			{
				alert("You must select a 1st, 2nd and 3rd series. You will be assigned best available seating.");
				return false;
			}
		}
	}
//End check for empty series

//Start check for empty series
	if (document.newSubscription.accountNum && !(document.newSubscription.accountNum.value == '')) {
		//alert(document.getElementById('renew').checked);
		//alert(document.getElementById('change').checked);
		var obj = new Array()
		if (document.getElementById('change').checked) {
		obj[0] = document.getElementById('firstChoice');
		obj[1] = document.getElementById('secondChoice');
		obj[2] = document.getElementById('thirdChoice');
		msg = 'You must select a 1st, 2nd and 3rd series. You will be assigned best available seating.';
		}
		else if (document.getElementById('renew').checked) {
		obj[0] = document.getElementById('currentSeries');
		msg = 'You must select current series.';
		}
		for(i=0;i<obj.length;i++)
		{
			if(obj[i].value=="")
			{
				alert(msg);
				return false;
			}
		}
	}
//End check for empty series

//Begin number of plays	
	var numOfPlays;
	for(i=0;i<formObj.playCode.length;i++)
	{
		if(formObj.playCode[i].checked)
			//formObj.playCode[i].style.backgroundColor='#a31617';
			//formObj.playCode[i].style.color='#ccc';
			numOfPlays = 1;
	}
	if (numOfPlays!=1)
	{
		document.getElementById('playCodeChoice').style.className = 'errorRedTextBold';
		alert("You have not specified play code. Please select a play code and submit again.");
		return false;
	}
//End number of plays

// check for numbers only
	var donated = document.getElementById('donation');
	var numSubs = document.getElementById('numberSubscriptions');
	var reNumOnly = /^\d+$/;
	
	/*
	if (!reNumOnly.test(numSubs.value)||!reNumOnly.test(donated.value))
	{
		alert("Number of subscriptions or dollar amount donated must be a whole number and entered without a decimal, i.e.: 3 and not 3.65");
		return false;
	}
	*/
// end numbers only

//begin number of subscriptions
	if(document.getElementById('numberSubscriptions').value==0||document.getElementById('numberSubscriptions').value=="")
	{
		alert("You must elect to purchase at least one (1) subscription. Please enter the number of suscriptions you wish to purchase and submit again.");
		document.getElementById('numberSubscriptions').style.backgroundColor='#a31617';
		document.getElementById('numberSubscriptions').style.color='#ccc';
		return false;
	}
		else
	{
		document.getElementById('numberSubscriptions').style.backgroundColor='#fff';
		document.getElementById('numberSubscriptions').style.color='#000';
	}

//end number of subscriptions
//Begin sit next to
	if (document.getElementById('withFirstName').value!=""&&document.getElementById('withLastName').value==""||document.getElementById('withFirstName').value==""&&document.getElementById('withLastName').value!="")
	{
		alert("You have asked to be seated next to another subscriber however you have not supplied a complete name. Please enter both a first and last name of the person you wish to sit next to.");
		return false;
	}
//End sit next to

//begin billing address
	var ccAllTrue;
	var ccAddy = new Array();
	
	ccAddy[0] = document.getElementById('ccFirstName');
	ccAddy[1] = document.getElementById('ccLastName');
	ccAddy[2] = document.getElementById('ccAddress1');
	ccAddy[3] = document.getElementById('ccCity');
	ccAddy[4] = document.getElementById('ccState');
	ccAddy[5] = document.getElementById('ccZipCode');
	
	for(i=0;i<ccAddy.length;i++)
	{
		if(ccAddy[i].value == "")
		{
			ccAddy[i].style.backgroundColor='#a31617';
			ccAddy[i].style.color='#ccc';
			ccAllTrue = 0;
		}
		else
		{
			ccAddy[i].style.backgroundColor='#fff';
			ccAddy[i].style.color='#000';
		}
	}
	if (ccAllTrue==0)
	{
		alert("I am sorry. One or more required billing address fields are either missing information or have been supplied invalid information. Fields that require your attention are marked in a \"red\" background. Please correct and submit again.");
		return false;
	}
//end billing address

//begin CC Number
//testing parameters at http://www.verisign.com/support/payflow/pro/pfptestprocess.html
//AMEX: 378282246310005
//Discover: 6011111111111117
//MasterCard: 5105105105105100
//VISA: 4222222222222 or 4321432143214321
//Diners Club: 38520000023237
//JCB: 3530111333300000

	var ccNumObj = document.getElementById('ccNumber');
	var ccNameObj = document.getElementById('cc');
	var invalidChar = /\s*\D*/g
	var getCCNum = ccNumObj.value;
	var formCCNumber = getCCNum.replace(invalidChar, "");
	ccNumObj.value = formCCNumber;
	var reCCNumAmex = /^3{1}([4-7])(\d{13})$/;
	//var reCCNumDiners = /^(30{1}[0-5])(\d{11})|(36|38)(\d{12})$/;
	var reCCNumDisc = /^6{1}(\d{15})$/;
	var reCCNumMC = /^5{1}[1-5](\d{14})$/;
	var reCCNumVISA = /^4{1}((\d{12})|(\d{15}))$/;
	var ccErrMsg = "I am sorry. The credit card number you have supplied is invalid. Check to see you have selected the correct credit card type, entered the number in correctly or have entered only digits.";
	
	if (ccNumObj.value=="")
	{
		alert("Please enter a valid credit card number.");
		return false;
	}
	
	if (ccNameObj.value=="")
	{
		alert("Please select a valid credit card type.");
		return false;
	}
	
	if (document.getElementById('ccMo').value==""||document.getElementById('ccYr').value=="")
	{
		alert("Please enter a valid credit card expration date.");
		return false;
	}
	
	if (!reCCNumAmex.test(formCCNumber) && (ccNameObj.value == "AMEX"))
	{
		alert(ccErrMsg);
		return false;
	}
	
	/*if (!reCCNumDiners.test(formCCNumber) && (ccNameObj.value == "Diners")){
		alert("Oops! The credit card number you have supplied is invalid. Check to see you have selected the correct credit card type, entered the number in correctly or have entered only digits.");
		ccNumberField.focus();
		ccNumberField.select();
		return false;
	}*/
	
	if (!reCCNumDisc.test(formCCNumber) && (ccNameObj.value == "Discover"))
	{
		alert(ccErrMsg);
		return false;
	}
	
	if (!reCCNumMC.test(formCCNumber) && (ccNameObj.value == "MasterCard"))
	{
		alert(ccErrMsg);
		return false;
	}
	
	if (!reCCNumVISA.test(formCCNumber) && (ccNameObj.value == "VISA"))
	{
		alert(ccErrMsg);
		return false;
	}
	
	now = new Date;
	
	nowMonth = now.getUTCMonth()+01;
	nowYear = now.getUTCFullYear();
	var selectedMonth = parseInt(document.getElementById('ccMo').value);
	var selectedYear = parseInt(document.getElementById('ccYr').value);
	
	if ((selectedMonth < nowMonth) && (selectedYear == nowYear))
	{
		alert("The expiration date you have selected is prior to today's date. Please selected a date equal to or later than today.")
		return false;
	}
	
//End CC Number

//agree to form
	if (document.getElementById('agree').checked!=true)
	{
		alert("You must check that you agree to pay the total order amount per your card issuer agreement");
		document.getElementById('accept').className='errorRedTextBold';
		return false;
	}

}