//Validate data and Build Error Message
function validateContact(ref) {
	var errorMsg = "";
	//Check Those Names
   if  (ref.subject != undefined && !/^.+$/i.test(ref.subject.value)) { errorMsg += "Please enter a Subject \n";}
   if  (ref.message != undefined && ref.message.value.length < 10) { errorMsg += "Please enter a Message more than 10 letters/numbers \n";}
   if  (ref.firstName.value=="") { errorMsg += "Please enter a First Name (Letters only) \n";}
   if  (ref.lastName.value =="") { errorMsg += "Please enter a Last Name (Letters only) \n";}
	errorMsg += validate(ref.email.value);
	if  (ref.zip.value && !/^\d{5}$/.test(ref.zip.value)) { errorMsg += "Please enter a valid 5 digit Zip Code \n";}
	//Check The Phone Numbers
   if( !/^\d{3}$/.test(ref.dayPhoneAreaCode.value) || !/^\d{3}$/.test(ref.dayPhonePrefix.value) || !/^\d{4}$/.test(ref.dayPhoneSuffix.value))
      errorMsg += "Daytime phone number must be complete and digits \n"; 

	if(ref.nightPhoneAreaCode.value || ref.nightPhonePrefix.value || ref.nightPhoneSuffix.value) 
      if( !/^\d{3}$/.test(ref.nightPhoneAreaCode.value) || !/^\d{3}$/.test(ref.nightPhonePrefix.value) || !/^\d{4}$/.test(ref.nightPhoneSuffix.value)) 
         errorMsg += "Nightime phone number must be complete and digits \n"; 

	if(ref.faxAreaCode.value || ref.faxPrefix.value || ref.faxSuffix.value) 
      if( !/^\d{3}$/.test(ref.faxAreaCode.value) || !/^\d{3}$/.test(ref.faxPrefix.value) || !/^\d{4}$/.test(ref.faxSuffix.value))
         errorMsg += "Fax number must be complete and digits \n"; 

   if (errorMsg) { 
      dispErrorMsg(errorMsg);
      return false;
   }  else { 
      return true; 
   }
}

function validateTestDrive(ref) {
	var errorMsg = "";
	var formDate = new Date();
	var currentDate = new Date();
	formDate.setFullYear(ref.dateYear.value, ref.dateMonth.value - 1, ref.dateDay.value);
	
	if (ref.dateMonth.value != 0 || ref.dateDay.value != '') {
		if (formDate <= currentDate)
			errorMsg += "Please enter a valid date after today: " + currentDate + "\n";
	}
	
	//Check Those Names
	if  (ref.firstName.value=="") { errorMsg += "Please enter a First Name (Letters only) \n";}
	if  (ref.lastName.value =="") { errorMsg += "Please enter a Last Name (Letters only) \n";}
   
	errorMsg += validate(ref.email.value);
	
	//Check The Phone Numbers
	if( !/^\d{3}$/.test(ref.dayPhoneAreaCode.value) || !/^\d{3}$/.test(ref.dayPhonePrefix.value) || !/^\d{4}$/.test(ref.dayPhoneSuffix.value))
		errorMsg += "Daytime phone number must be complete and digits \n"; 

	if(ref.nightPhoneAreaCode.value || ref.nightPhonePrefix.value || ref.nightPhoneSuffix.value) {
		if( !/^\d{3}$/.test(ref.nightPhoneAreaCode.value) || !/^\d{3}$/.test(ref.nightPhonePrefix.value) || !/^\d{4}$/.test(ref.nightPhoneSuffix.value)) 
			errorMsg += "Nightime phone number must be complete and digits \n";
	}

	if(ref.faxAreaCode.value || ref.faxPrefix.value || ref.faxSuffix.value) {
		if( !/^\d{3}$/.test(ref.faxAreaCode.value) || !/^\d{3}$/.test(ref.faxPrefix.value) || !/^\d{4}$/.test(ref.faxSuffix.value))
			errorMsg += "Fax number must be complete and digits \n";
	}
	
	// Check Zip
	if  (ref.zip.value && !/^\d{5}$/.test(ref.zip.value)) { errorMsg += "Please enter a valid 5 digit Zip Code \n";}

	if (errorMsg) { 
		dispErrorMsg(errorMsg);
		return false;
	} else { 
		return true; 
	}
}

function validateCreditApp(ref) {
   	var errorMsg = "";
   	if (!/^[\d.]{2,11}$/.test(ref.amountRequested.value)){ errorMsg += "Amount must be between 2 and 11 numbers long\n"; }
   	if(ref.miles.value) {
      	if (!/^\d{1,6}$/.test(ref.miles.value)){ errorMsg += "Miles must be between 1 and 6 numbers long\n"; }
   	}
   	if (ref.employer.value == "" ){ errorMsg += "Employer must not be blank.\n"; }
   	if (ref.occupation.value ==""){ errorMsg += "Occupation must not be blank.\n"; }
   	if (!/^[\d.]{4,10}$/.test(ref.monthlyIncome.value)){ errorMsg += "Monthly Income must be between 4 and 10 numbers long\n"; }
	if (!/^\d{1,2}$/.test(ref.timeAtResidenceYears.value)){ errorMsg += "Time at Residence -Years must be between 0 and 2 numbers long\n"; }
   	if (!/^\d{1,2}$/.test(ref.timeAtResidenceMonths.value)){ errorMsg += "Time at Residence -Months must be between 0 and 2 numbers long\n"; }
   	if (!/^\d{1,2}$/.test(ref.timeOnJobYears.value)){ errorMsg += "Time on Job -Years must be between 0 and 2 numbers long\n"; }
   	if (!/^\d{1,2}$/.test(ref.timeOnJobMonths.value)){ errorMsg += "Time on Job -Months must be between 0 and 2 numbers long\n"; }
   	if( !/^\d{3}$/.test(ref.empPhoneAreaCode.value) || !/^\d{3}$/.test(ref.empPhonePrefix.value) || !/^\d{4}$/.test(ref.empPhoneSuffix.value)) { errorMsg += "Employee Phone Number must be filled with numbers\n"; }
   	if (!/^[^@]{5,50}$/i.test(ref.empAddress1.value)){ errorMsg += "Employer Address 1 must be between 5 and 50 letters long and not contain @\n"; }
   	if(ref.empAddress2.value) 
    {if (!/^[^@]{5,50}$/i.test(ref.empAddress2.value)){ errorMsg += "Employer Address 2 must be between 5 and 50 letters long and not contain @\n"; }}
   	if (!/^[a-z ]{2,50}$/i.test(ref.empCity.value)){ errorMsg += "Employer City must be between 2 and 50 letters long\n"; }
	if (!/^[a-z0-9]{2}$/i.test(ref.empState.value)){ errorMsg += "Please Select an employer State\n"; }
   	if (!/^\d{5}$/i.test(ref.empZip.value)){ errorMsg += "Employer ZIP must be 5 numbers long\n"; }
   	if(ref.otherIncomeSource.value) 
     {
      	if (!/^[a-z0-9 ]{2,50}$/i.test(ref.otherIncomeSource.value)){ errorMsg += "Other Monthly Income Source must be between 2 and 50 letters long\n"; }
       	if (!/^[\d.]{3,10}$/.test(ref.otherMonthlyIncome.value)){ errorMsg += "Other Monthly Income must be between 3 and 10 numbers long\n"; }
   	}
	
	if(ref.manufacturer.value == "") { errorMsg += "Vehicle make is required\n"; }
	if(ref.modelYear.value == "") { errorMsg += "Vehicle year is required\n"; }
	if(ref.modelName.value == "") { errorMsg += "Vehicle model is required\n"; }
	
   	if (ref.firstName.value == ""){ errorMsg += "First Name must be between 1 and 40 letters long\n"; }
   	if(ref.middleName.value) { if (!/^[a-z]{1}$/i.test(ref.middleName.value)){ errorMsg += "Middile Initial must be a letter\n"; }}
   	if (ref.lastName.value == ""){ errorMsg += "Last Name must be between 1 and 40 letters long\n"; }
	errorMsg += validate(ref.email.value);
    if( !/^\d{3}$/.test(ref.phoneAreaCode.value) || !/^\d{3}$/.test(ref.phonePrefix.value) || !/^\d{4}$/.test(ref.phoneSuffix.value)) { errorMsg += "Phone Number must be filled with numbers\n"; }
	if (ref.phoneType.value == "") { errorMsg += "Please indicate phone number type\n"; }
    if(ref.faxAreaCode.value || ref.faxPrefix.value || ref.faxSuffix.value) 
    {if( !/^\d{3}$/.test(ref.faxAreaCode.value) || !/^\d{3}$/.test(ref.faxPrefix.value) || !/^\d{4}$/.test(ref.faxSuffix.value)) { errorMsg += "Fax Phone Number must be filled with numbers\n"; }}
    if (!/^[^@]{5,50}$/i.test(ref.address1.value)){ errorMsg += "Address must be between 5 and 50 letters long and not contain @\n"; }
    if (!/^[a-z ]{2,50}$/i.test(ref.city.value)){ errorMsg += "City must be between 2 and 50 letters long\n"; }
	if (!/^[a-z]{2}$/i.test(ref.state.value)){ errorMsg += "Please Select a State\n"; }
    if (!/^\d{5}$/i.test(ref.zip.value)){ errorMsg += "ZIP must be 5 numbers long\n"; }
    if (!/^\d{9}$/i.test(ref.ssn.value)){ errorMsg += "SSN must be 9 numbers long (should not include hyphens or spaces)\n"; }
    if (!/^\d{4}$/i.test(ref.dobYear.value)){ errorMsg += "Date Of Birth -Year must be 4 numbers long\n"; }
    else {
		var min_age = 18;
		var year = parseInt(ref.dobYear.value);
		var month = parseInt(ref.dobMonth.selectedIndex);
		var day = parseInt(ref.dobDay.value);
		var bday = new Date((year + min_age), month, day);
		var today = new Date;
    	if ( (today.getTime() - bday.getTime()) < 0) { errorMsg += "Date Of Birth -Year: You must be 18 or older to apply \n"; }
    }
    if (!/^[\d.]{3,6}$/.test(ref.monthlyPayment.value)){ errorMsg += "Monthly Payment must be between 3 and 6 numbers long\n"; }
    if (!/^\d{0,2}$/.test(ref.timeAtResidenceYears.value)){ errorMsg += "Time at Residence -Years must be between 0 and 2 numbers long\n"; }
    if (!/^\d{0,2}$/.test(ref.timeAtResidenceMonths.value)){ errorMsg += "Time at Residence -Months must be between 0 and 2 numbers long\n"; }
	if (ref.residentialType.value == "") { errorMsg += "Residence type is required\n"; }
	if (ref.consent.checked != true) { errorMsg += "Please agree to the acknowledgment and consent\n"; }

	if (errorMsg) { 
		dispErrorMsg(errorMsg);
		return false;
	}  else { 
		return true; 
	}
}


function dispErrorMsg(errorMsg) {alert("We're Sorry - We could not send your data as submitted\n\n" + errorMsg);}

function validate(email){
	var errorMsg = "";
	if((email == '')||(email == null))
		{errorMsg += "Email cannot be empty, please type in your email address \n";}
	//CHECK @
	else if(email.indexOf('@')==-1)
		{errorMsg += "EMAIL ADDRESS MUST CONTAIN @!! \n";}
	else if (email.indexOf('@')!=email.lastIndexOf('@'))
		{errorMsg += "EMAIL ADDRESS CANNOT HAVE MORE THAN ONE @!! \n";}
	else if ((email.indexOf('@')==0)||(email.lastIndexOf('@')==email.length-1))
		{errorMsg += "EMAIL ADDRESS CANNOT START OR END WITH @!! \n";}
		
	//CHECK PERIOD
	else if(email.indexOf('.')==-1)
		{errorMsg += "EMAIL ADDRESS MUST CONTAIN PERIODS '.' !! \n";}
	else if ((email.indexOf('.')==0)||(email.lastIndexOf('.')==email.length-1))
		{errorMsg += "EMAIL ADDRESS CANNOT START OR END WITH A PERIOD!! \n";}
	else if (email.indexOf("..")!=-1)
		{errorMsg += "EMAIL ADDRESS CANNOT CONATIN CONSECUTIVE PERIODS!! \n";}
		
	//CHECK LOCAL PART AND DOMAIN PART SEPERATELY
	else{
		var local = email.substring(0,email.indexOf('@'));
		var domain = email.substring(email.indexOf('@')+1);
		var last = domain.substring(domain.lastIndexOf('.')+1);	
	
		//CHECK LENGTH
		if(local.length>64)
			{errorMsg += "LOCAL PART (THE PART BEFORE @) CANNOT BE LONGER THAN 64 CHARACTERS!! \n";}
		if(domain.length>255)
			{errorMsg += "DOMAIN PART (THE PART AFTER @) CANNOT BE LONGER THAN 255 CHARACTERS!! \n";}
		else{
			var sections = domain.split('.');
			for(i=0; i< sections.length; i++){
				if(sections[i].length>63)
					{errorMsg += "DOMAIN SECTIONS (SEPERATED BY PERIODS) CANNOT BE LONGER THAN 63 CHARACTERS!! \n";}
			}
		}
		//CHECK LOCAL PART ILLEGAL CHARACTERS
		var regex1 = /[^A-Za-z0-9\.\!\#\$\%\&\*\+\-\/\=\?\^\_\`\{\|\}\~]/g;
		var regex2 = /^[^A-Za-z0-9]/g;
		if(regex1.test(local))
			{errorMsg += "LOCAL PART (THE PART BEFORE @) CONTAINS ILLEGAL CHARACTERS SUCH AS SPACE, COMMA OR SEMICOLON!! \n";}
		else if(regex2.test(local))
			{errorMsg += "LOCAL PART (THE PART BEFORE @) CANNOT START WITH A NON WORD CHARACTER \n";}
		
		//CHECK DOMAIN PART ILLEGAL CHARACTERS
		var regex3 = /[^a-zA-Z0-9\-\.]/g;
		var regex4 = /^[^a-zA-Z0-9]/g;
		var regex5 = /[a-zA-Z]/g;		
		var regex6 = /[a-zA-Z]/g;	
		if(regex3.test(domain))
			{errorMsg += "DOMAIN PART (THE PART AFTER @) CONTAINS ILLEGAL CHARACTERS SUCH AS COMMA, SEMICOLON, etc. \n";}
		else{
			if(regex4.test(domain))
				{errorMsg += "DOMAIN PART (THE PART AFTER @) CANNOT START WITH A NONWORD CHARACTER \n";}
			else if(!regex5.test(domain))			
				{errorMsg += "DOMAIN PART (THE PART AFTER @) CANNOT BE NUMBERS ONLY \n";}
			else if(!regex6.test(last))
				{errorMsg += "THE LAST SECTION OF DOMAIN PART (THE PART AFTER @) CANNOT BE NUMBERS ONLY \n";}
		}
	}
	
	return errorMsg;
}