// JavaScript document

var valid = new Object();

//matches email
valid.emailAddress = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;

// matches phone
valid.phoneNumber = /^\(?\d{3}\)?(\s|-|\.)\d{3}(\s|-|\.)\d{4}$/;

// International Phone Number
valid.phoneNumberInternational = /^\d(\d|-){7,20}/;

// Zip/postal code
valid.zipPostalCode = /^(\d{5}|\d{9}|\d{5}-\d{4}|[a-zA-Z]\d[a-zA-Z]\s*\d[a-zA-Z]\d)$/;

// Date xx/xx/xxxx
valid.date = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;

// State/Province Abbreviation
valid.state = /^(AB|AK|AL|AR|AZ|BC|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NB|NC|ND|NH|NJ|NM|NT|NV|NY|OH|OK|ON|OR|PA|PQ|QC|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i;

// Social Security Number
valid.SSN = /^\d{3}\-\d{2}\-\d{4}$/;

var errorMessages = new Array();


function validateVehicleInfo(formObj) {
	// Ensure that all required values are present and in the proper format
	var vehicleMake = trim(removeBadCharacters(formObj.contactTestDriveVehicleMake.value));
	var vehicleModel = trim(removeBadCharacters(formObj.contactTestDriveVehicleModel.value));
	var vehicleYear = trim(removeBadCharacters(formObj.contactTestDriveVehicleYear.value));
	
	if(vehicleMake.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle make";
	
	if(vehicleModel.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle model";
	
	if(vehicleYear.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle year";
}


function validateQuickQuoteVehicleInfo(formObj) {
	// Ensure that all required values are present and in the proper format
	var vehicleMake = trim(removeBadCharacters(formObj.vehicleMake.value));
	var vehicleModel = trim(removeBadCharacters(formObj.vehicleModel.value));
	var vehicleExteriorColor = trim(removeBadCharacters(formObj.vehicleExteriorColor.value));
	
	if(vehicleMake.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle make";
	
	if(vehicleModel.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle model";
	
	if(vehicleExteriorColor.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle exterior color";
}


function validateTradeInVehicleInfo(formObj) {
	// Ensure that all required values are present and in the proper format
	var tradeInYear = trim(removeBadCharacters(formObj.tradeInYear.value));
	var tradeInMake = trim(removeBadCharacters(formObj.tradeInMake.value));
	var tradeInModel = trim(removeBadCharacters(formObj.tradeInModel.value));
	var tradeInMileage = trim(removeBadCharacters(formObj.tradeInMileage.value));
	var tradeInExteriorColor = trim(removeBadCharacters(formObj.tradeInExteriorColor.value));
	var tradeInTransmission = trim(removeBadCharacters(formObj.tradeInTransmission.value));
	var tradeInBodyStyle = trim(removeBadCharacters(formObj.tradeInBodyStyle.value));
	var tradeInVehicleHistory = trim(removeBadCharacters(formObj.tradeInVehicleHistory.value));
	
	if(tradeInYear.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle year";

	if(tradeInMake.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle make";
	
	if(tradeInModel.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle model";

	if(tradeInMileage.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle mileage";
	
	if(tradeInExteriorColor.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle exterior color";

	if(tradeInTransmission.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle transmission";

	if(tradeInBodyStyle.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle body style";

	if(tradeInVehicleHistory.length == 0)
		errorMessages[errorMessages.length] = "Please enter the vehicle history";
}


function validateCompletePersonalInfo(formObj) {
	// Ensure that all required values are present and in the proper format
	var firstName = trim(removeBadCharacters(formObj.contactFirstName.value));
	var lastName = trim(removeBadCharacters(formObj.contactLastName.value));
	var emailAddress = trim(removeBadCharacters(formObj.contactEmailAddress.value));
	var phoneNumber = trim(removeBadCharacters(formObj.contactPhoneNumber.value));
	
	if(firstName.length == 0)
		errorMessages[errorMessages.length] = "Please enter your first name";
	
	if(lastName.length == 0)
		errorMessages[errorMessages.length] = "Please enter your last name";
	
	if(isValidEmailAddress(emailAddress) == false)
		errorMessages[errorMessages.length] = "Please enter a valid email address in the format: name@host.domain";
	
	if(isValidPhoneNumber(phoneNumber) == false)
		errorMessages[errorMessages.length] = "Please enter a valid ten-digit phone number";
}


function validateCompletePersonalInfo(formObj) {
	// Ensure that all required values are present and in the proper format
	var firstName = trim(removeBadCharacters(formObj.contactFirstName.value));
	var lastName = trim(removeBadCharacters(formObj.contactLastName.value));
	var addressOne = trim(removeBadCharacters(formObj.contactAddressOne.value));
	var city = trim(removeBadCharacters(formObj.contactCity.value));
	var state = trim(removeBadCharacters(formObj.contactState.value));
	var zipCode = trim(removeBadCharacters(formObj.contactZipCode.value));
	var emailAddress = trim(removeBadCharacters(formObj.contactEmailAddress.value));
	var homePhoneNumber = trim(removeBadCharacters(formObj.contactHomePhoneNumber.value));
	var workPhoneNumber = trim(removeBadCharacters(formObj.contactWorkPhoneNumber.value));
	
	if(firstName.length == 0)
		errorMessages[errorMessages.length] = "Please enter your first name";
	
	if(lastName.length == 0)
		errorMessages[errorMessages.length] = "Please enter your last name";

	if(addressOne.length == 0)
		errorMessages[errorMessages.length] = "Please enter your street address";

	if(city.length == 0)
		errorMessages[errorMessages.length] = "Please enter your city";

	if(state.length == 0)
		errorMessages[errorMessages.length] = "Please enter your state";

	if(zipCode.length == 0)
		errorMessages[errorMessages.length] = "Please enter your zip code";
	
	if(isValidEmailAddress(emailAddress) == false)
		errorMessages[errorMessages.length] = "Please enter a valid email address in the format: name@host.domain";
	
	if(isValidPhoneNumber(homePhoneNumber) == false)
		errorMessages[errorMessages.length] = "Please enter a valid ten-digit home phone number";

	if(isValidPhoneNumber(workPhoneNumber) == false)
		errorMessages[errorMessages.length] = "Please enter a valid ten-digit work phone number";
}


function validateOfferPrice(formObj) {
	// Ensure that all required values are present and in the proper format
	var offerPrice = trim(removeBadCharacters(formObj.contactVehicleOfferPrice.value));
	
	if(offerPrice.length == 0)
		errorMessages[errorMessages.length] = "Please enter an offer price";
}


function validateAddress(formObj) {
	// Ensure that all values are in the proper format, if present
	var zipCode = trim(removeBadCharacters(formObj.contactZipCode.value));
	var state = trim(removeBadCharacters(formObj.contactState.value));
	
	if(zipCode.length > 0) {
		if(isValidZipPostalCode(zipCode) == false)
			errorMessages[errorMessages.length] = "Please enter a valid zip/postal code";
	}
	
	if(state.length > 0) {
		if(isValidState(state) == false)
			errorMessages[errorMessages.length] = "Please enter a valid state";
	}
}


function validateSurveyForm(formObj) {
	// Ensure that all required values are present and in the proper format
	var firstName = trim(removeBadCharacters(formObj.contactFirstName.value));
	var lastName = trim(removeBadCharacters(formObj.contactLastName.value));
	var emailAddress = trim(removeBadCharacters(formObj.contactEmailAddress.value));
	
	if(firstName.length == 0)
		errorMessages[errorMessages.length] = "Please enter your first name";
	
	if(lastName.length == 0)
		errorMessages[errorMessages.length] = "Please enter your last name";
	
	if(isValidEmailAddress(emailAddress) == false)
		errorMessages[errorMessages.length] = "Please enter a valid email address in the format: name@host.domain";
	
	if(validateRadioButton(formObj.howFoundSite) == false)
		errorMessages[errorMessages.length] = "Please select how you found the site";
	
	if(validateRadioButton(formObj.wasSiteUseful) == false)
		errorMessages[errorMessages.length] = "Please select whether or not you found the site useful";

	if(validateRadioButton(formObj.wasSiteEasyToUse) == false)
		errorMessages[errorMessages.length] = "Please select whether or not you found the site easy to use";

	if(validateRadioButton(formObj.couldFindVehicles) == false)
		errorMessages[errorMessages.length] = "Please select whether or not you could easily find vehicles";

	if(validateRadioButton(formObj.wouldPurchaseVehicle) == false)
		errorMessages[errorMessages.length] = "Please select whether or not you would use the site to purchase a vehicle";

	if(validateRadioButton(formObj.wouldRecommendSite) == false)
		errorMessages[errorMessages.length] = "Please select whether or not you would recommend the site to others";

	return returnErrors();
}


function validateAppointment(formObj) {
	var apptFirstChoiceDate = trim(removeBadCharacters(formObj.appointmentFirstChoiceDate.value));
	var apptFirstChoiceTime = trim(removeBadCharacters(formObj.appointmentFirstChoiceTime.value));
	var apptSecondChoiceDate = trim(removeBadCharacters(formObj.appointmentSecondChoiceDate.value));
	var apptSecondChoiceTime = trim(removeBadCharacters(formObj.appointmentSecondChoiceTime.value));
	
	if(isValidDate(apptFirstChoiceDate) == false)
		errorMessages[errorMessages.length] = "Please enter a primary appointment date in the format mm/dd/yyyy";
	
	if(apptFirstChoiceTime.length == 0)
		errorMessages[errorMessages.length] = "Please select a primary appointment time";
	
	if(isValidDate(apptSecondChoiceDate) == false)
		errorMessages[errorMessages.length] = "Please enter a secondary appointment date in the format mm/dd/yyyy";
	
	if(apptSecondChoiceTime.length == 0)
		errorMessages[errorMessages.length] = "Please select a secondary appointment time";
}


function validateFinancingForm(formObj) {
	errorMessages.length = 0;
	
	// Personal info.
	var firstName = trim(removeBadCharacters(formObj.contactFirstName.value));
	var lastName = trim(removeBadCharacters(formObj.contactLastName.value));
	var emailAddress = trim(removeBadCharacters(formObj.contactEmailAddress.value));
	var daytimePhoneNumber = trim(removeBadCharacters(formObj.contactDaytimePhoneNumber.value));
	var ssn = trim(removeBadCharacters(formObj.contactSSN.value));

	// Address
	var currentAddress = trim(removeBadCharacters(formObj.contactAddressOne.value));
	var currentTown = trim(removeBadCharacters(formObj.contactTown.value));
	var currentState = trim(removeBadCharacters(formObj.contactState.value));
	var currentPostalCode = trim(removeBadCharacters(formObj.contactPostalCode.value));
	var yearsAtCurrentResidence = formObj.contactYearsAtCurrentResidence[formObj.contactYearsAtCurrentResidence.selectedIndex].value;
	
	var mortgagePayment = trim(removeBadCharacters(formObj.contactMortgagePayment.value));
	var mortgageCompany = trim(removeBadCharacters(formObj.contactMortgageCompany.value));
	var mortgageCompanyPhoneNumber = trim(removeBadCharacters(formObj.contactMortgageCompanyPhoneNumber.value));
	
	var previousAddress = trim(removeBadCharacters(formObj.contactPreviousAddressOne.value));
	var previousTown = trim(removeBadCharacters(formObj.contactPreviousTown.value));
	var previousState = trim(removeBadCharacters(formObj.contactPreviousState.value));
	var previousPostalCode = trim(removeBadCharacters(formObj.contactPreviousPostalCode.value));
	
	// Employment
	var currentEmployer = trim(removeBadCharacters(formObj.contactCurrentEmployer.value));
	var currentEmployerAddress = trim(removeBadCharacters(formObj.contactCurrentEmployerAddressOne.value));
	var currentEmployerTown = trim(removeBadCharacters(formObj.contactCurrentEmployerTown.value));
	var currentEmployerState = trim(removeBadCharacters(formObj.contactCurrentEmployerState.value));
	var currentEmployerPostalCode = trim(removeBadCharacters(formObj.contactCurrentEmployerPostalCode.value));
	var currentEmployerPhoneNumber = trim(removeBadCharacters(formObj.contactCurrentEmployerPhoneNumber.value));
	var currentEmployerPosition = trim(removeBadCharacters(formObj.contactCurrentEmployerPosition.value));
	var currentEmployerMonthlyIncome = trim(removeBadCharacters(formObj.contactCurrentEmployerMonthlyIncome.value));
	var yearsAtCurrentPosition = formObj.contactCurrentEmployerYearsAtPosition[formObj.contactCurrentEmployerYearsAtPosition.selectedIndex].value;
	
	var previousEmployer = trim(removeBadCharacters(formObj.contactPreviousEmployer.value));
	var previousEmployerAddress = trim(removeBadCharacters(formObj.contactPreviousEmployerAddressOne.value));
	var previousEmployerTown = trim(removeBadCharacters(formObj.contactPreviousEmployerTown.value));
	var previousEmployerState = trim(removeBadCharacters(formObj.contactPreviousEmployerState.value));
	var previousEmployerPostalCode = trim(removeBadCharacters(formObj.contactPreviousEmployerPostalCode.value));
	var previousEmployerPhoneNumber = trim(removeBadCharacters(formObj.contactPreviousEmployerPhoneNumber.value));
	
	// Validate personal info.
	if(firstName.length == 0)
		errorMessages[errorMessages.length] = "Please enter your first name";
	
	if(lastName.length == 0)
		errorMessages[errorMessages.length] = "Please enter your last name";
	
	if(isValidEmailAddress(emailAddress) == false)
		errorMessages[errorMessages.length] = "Please enter a valid email address in the format: name@host.domain";
	
	if(isValidPhoneNumber(daytimePhoneNumber) == false)
		errorMessages[errorMessages.length] = "Please enter a valid ten-digit daytime phone number";
	
	if(isValidSSN(ssn) == false)
		errorMessages[errorMessages.length] = "Please enter a valid nine-digit social-security number";
	
	// Current address
	if(currentAddress.length == 0)
		errorMessages[errorMessages.length] = "Please enter your current address";
	
	if(currentTown.length == 0)
		errorMessages[errorMessages.length] = "Please enter your current town";
	
	if(isValidZipPostalCode(currentPostalCode) == false)
		errorMessages[errorMessages.length] = "Please enter a valid current zip/postal code";
	
	if(isValidState(currentState) == false)
		errorMessages[errorMessages.length] = "Please enter a valid current state";
	
	if(mortgagePayment.length == 0)
		errorMessages[errorMessages.length] = "Please enter your monthly rent or mortgage payment";
	
	if(mortgageCompany.length == 0)
		errorMessages[errorMessages.length] = "Please enter your landlord or mortgage company's name";
	
	if(isValidPhoneNumber(mortgageCompanyPhoneNumber) == false)
		errorMessages[errorMessages.length] = "Please enter a valid ten-digit phone number for your landlord or mortgage company";
	
	// Previous address (if applicable)
	if((yearsAtCurrentResidence == '0 Years') || (yearsAtCurrentResidence == '1 Year')) {
		if(previousAddress.length == 0)
			errorMessages[errorMessages.length] = "Please enter your previous address";
		
		if(previousTown.length == 0)
			errorMessages[errorMessages.length] = "Please enter your previous town";
		
		if(isValidState(previousState) == false)
			errorMessages[errorMessages.length] = "Please enter your previous state";
		
		if(isValidZipPostalCode(previousPostalCode) == false)
			errorMessages[errorMessages.length] = "Please enter a valid previous zip/postal code";
	}
	
	// Employer
	if(currentEmployer.length == 0)
		errorMessages[errorMessages.length] = "Please enter the name of your current employer";
	
	if(currentEmployerPosition.length == 0)
		errorMessages[errorMessages.length] = "Please enter your current position";
	
	if(currentEmployerMonthlyIncome.length == 0)
		errorMessages[errorMessages.length] = "Please enter your current monthly income";
	
	if(currentEmployerAddress.length == 0)
		errorMessages[errorMessages.length] = "Please enter your current employer's address";
	
	if(currentEmployerTown.length == 0)
		errorMessages[errorMessages.length] = "Please enter your current employer's town";
	
	if(isValidZipPostalCode(currentEmployerPostalCode) == false)
		errorMessages[errorMessages.length] = "Please enter your current employer's zip/postal code";
	
	if(isValidState(currentEmployerState) == false)
		errorMessages[errorMessages.length] = "Please enter your current employer's state";
	
	if(isValidPhoneNumber(currentEmployerPhoneNumber) == false)
		errorMessages[errorMessages.length] = "Please enter your current employer's ten-digit phone number";
	
	// Previous address (if applicable)
	if((yearsAtCurrentPosition == '0 Years') || (yearsAtCurrentPosition == '1 Year')) {
		if(previousEmployer.length == 0)
			errorMessages[errorMessages.length] = "Please enter your previous employer's name";
		
		if(previousEmployerAddress.length == 0)
			errorMessages[errorMessages.length] = "Please enter your previous employer's address";
		
		if(previousEmployerTown.length == 0)
			errorMessages[errorMessages.length] = "Please enter your previous employer's town";
		
		if(isValidState(previousEmployerState) == false)
			errorMessages[errorMessages.length] = "Please enter your previous employer's state";
		
		if(isValidZipPostalCode(previousEmployerPostalCode) == false)
			errorMessages[errorMessages.length] = "Please enter your previous employer's zip/postal code";
	}
	
	return returnErrors();
}


function validateContactForm(formObj) {
	errorMessages.length = 0;
	
	validatePersonalInfo(formObj);
	
	validateAddress(formObj);
	
	return returnErrors();
}


function validateMakeAnOfferForm(formObj) {
	errorMessages.length = 0;
	
	validatePersonalInfo(formObj);
	
	validateOfferPrice(formObj);
	
	return returnErrors();
}


function validateRequestInfoForm(formObj) {
	errorMessages.length = 0;
	
	validatePersonalInfo(formObj);
	
	return returnErrors();
}


function validateEmploymentForm(formObj) {
	errorMessages.length = 0;
	
	validatePersonalInfo(formObj);
	
	return returnErrors();
}


function validatePartsForm(formObj) {
	errorMessages.length = 0;
	
	validatePersonalInfo(formObj);
	
	return returnErrors();
}


function validateServiceRequestForm(formObj) {
	errorMessages.length = 0;
	
	validatePersonalInfo(formObj);
	
	//validateAppointment(formObj);
	
	return returnErrors();
}


function validateScheduleTestDriveForm(formObj) {
	errorMessages.length = 0;
	
	validateVehicleInfo(formObj);
	
	validatePersonalInfo(formObj);
	
	//validateAppointment(formObj);
	
	return returnErrors();
}


function validateTestDriveForm(formObj) {
	errorMessages.length = 0;
	
	validatePersonalInfo(formObj);
	
	//validateAppointment(formObj);
	
	return returnErrors();
}


function validateQuickQuoteForm(formObj) {
	errorMessages.length = 0;
	
	validateQuickQuoteVehicleInfo(formObj);
	
	validatePersonalInfo(formObj);
	
	return returnErrors();
}


function validateTradeInForm(formObj) {
	errorMessages.length = 0;
	
	validateTradeInVehicleInfo(formObj);
	
	validateCompletePersonalInfo(formObj);
	
	return returnErrors();
}



function returnErrors() {
	if(errorMessages.length == 0)
		return true;
	else {
		var strErrorMessage = 'The form could not be submitted because of the following errors:\r\n';
		
		for(i = 0; i < errorMessages.length; i++)
			strErrorMessage += errorMessages[i] + '\r\n';
		
		alert(strErrorMessage);
		
		return false;
	}
}


function isValidState(state) {
	if(state.length == 0)
		return false;
	else {
		if(state.search(valid.state) != -1)
			return true;
		else
			return false;
	}
}


function isValidZipPostalCode(zipPostalCode) {
	if(zipPostalCode.length == 0)
		return false;
	else {
		if(zipPostalCode.search(valid.zipPostalCode) != -1)
			return true;
		else
			return false;
	}
}


function isValidEmailAddress(emailAddress) {
	// Check that an email address is valid based on RFC 821 (?)
   	if (emailAddress != '' && emailAddress.search) {
    	if (emailAddress.search(valid.emailAddress) != -1) {
			var domain = emailAddress.substring(emailAddress.indexOf('@') + 1);
		   	
			if (domain.indexOf('.') == -1)
				return false;
		   	
			if (domain.indexOf('.') == 0 || domain.indexOf('.') == domain.length - 1)
				return false;
		   	
			return true;
		}
      	else
			return false;
   	}
   	else
		return false;
}


function isValidPhoneNumber(phoneNumber) {
	var stripped = phoneNumber.replace(/[\(\)\.\-\ ]/g, '');
	
	//strip out acceptable non-numeric characters
	if (isNaN(parseInt(stripped)))
	   return false;
	
	if (!(stripped.length == 10))
		return false;
}


function isValidSSN(ssn) {
	if (ssn != '' && ssn.search) {
    	if(ssn.search(valid.SSN) != -1)
			return true;
		else
			return false;
   	}
   	else
		return false;
}


function isValidDate(date) {
	if(date != '' && date.search) {
		if(date.search(valid.date) != -1)
			return true;
		else
			return false;
	}
	else
		return false;
}


function removeBadCharacters(string) {
   if (string.replace) {
      string.replace(/[<>\"\'%;\)\(&\+]/, '');
   }
   return string;
}

function trim(sString) {
	while (sString.substring(0,1) == ' ')
		sString = sString.substring(1, sString.length);
	
	while (sString.substring(sString.length-1, sString.length) == ' ')
		sString = sString.substring(0,sString.length-1);
	
	return sString;
}

function validateRadioButton(theButton) {
	var isSelected = false;
	var counter = 0;

	// Loop from zero to the one minus the number of radio button selections
	for (counter = 0; counter < theButton.length; counter++) {
		// If a radio button has been selected it will return true
		// (If not it will return false)
		if (theButton[counter].checked)
			isSelected = true; 
	}

	return isSelected;
}