//version 1.01
//this javascript code is used to validate the form
//the form is also validated server side in case javascript is disabled or circumvented

//the return value boolean - determines whether or not the form will be submitted
var rVal = true;

//adding a trim function - http://javascript.crockford.com/remedial.html
String.prototype.trim = function () {
	return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

//autotabbing function for phone number fields
//put this on onkeyup event
//maxlength must be specified
function autoTab(currentField, nextField) {
	if(currentField.value.length == currentField.maxLength) {
		nextField.focus();
	}
}

//function to clear form (reset to original state)
//called when reset is pressed
function clearAll() {
	//reset all fields manually
	//start at 1 to skip hidden field
	
	for(var i = 1; i < document.forms[0].length; i++) {
		if((document.forms[0].elements[i].type == "text") || (document.forms[0].elements[i].type == "textarea")) {
			
			document.forms[0].elements[i].value = "";
			
		} else if(document.forms[0].elements[i].type == "select-one") {
			document.forms[0].elements[i].selectedIndex = 0;
		} else if(document.forms[0].elements[i].name == "sources[]") {
			document.forms[0].elements[i].checked = false;
		}
	}
	
	document.forms[0].elements.warranty[1].checked = true;
	document.forms[0].elements.exchange[1].checked = true;
	document.forms[0].elements.reported[1].checked = true;
	
	resetBackgrounds();
	agencyEnabled(false);
	document.forms[0].elements.brand.focus();
	
	return false; //if the form tries to clear itself, it will reinsert all the POST values
}

//enables/disables the fields below "reported yes/no"
function agencyEnabled(enableMe) {
	document.forms[0].elements.agency.disabled = !enableMe;
	document.forms[0].elements.agencycity.disabled = !enableMe;
	document.forms[0].elements.agencystate.disabled = !enableMe;
	document.forms[0].elements.submonth.disabled = !enableMe;
	document.forms[0].elements.subyear.disabled = !enableMe;
	document.forms[0].elements.filenum.disabled = !enableMe;
}

//takes a field and trims its value
function trimField(theField) {
	theField.value = theField.value.trim();
}

//checks the specified field for length
//maxLength specifies the maximum allowed length as an integer
function checkLength(theField, maxLength) {
	if(theField.value.length > maxLength) {
		theField.value = theField.value.substring(0, maxLength);
	}
}

//highlights the input and sets rVal to false
function invalidate(theInput) {
	theInput.style.backgroundColor = "yellow";
	rVal = false;
}

//checks to see if a field has text input other than whitespace
//calls invalidate() if true
function checkField(theField) {
	trimField(theField);
	if(theField.value == "") {
		invalidate(theField);
	} else {
		theField.style.backgroundColor = "#FFF";
	}
}

//checks the phone number pattern for the 3 fields
//parameter is the root name of the fields to check
//for example: "subPhone" for subPhone1, subPhone2 and subPhone3
function checkPhone(phoneName) {
	eval("var p1 = document.forms[0].elements."+phoneName+"1;");
	eval("var p2 = document.forms[0].elements."+phoneName+"2;");
	eval("var p3 = document.forms[0].elements."+phoneName+"3;");
	
	trimField(p1);
	trimField(p2);
	trimField(p3);
	
	if((p1.value != "") || (p2.value != "") || (p3.value != "")) {
		
		if(!p1.value.match(/\d{3}/)) {
			invalidate(p1);
		} else {
			p1.style.backgroundColor = "#FFF";
		}
		
		if(!p2.value.match(/\d{3}/)) {
			invalidate(p2);
		} else {
			p2.style.backgroundColor = "#FFF";
		}
		
		if(!p3.value.match(/\d{4}/)) {
			invalidate(p3);
		} else {
			p3.style.backgroundColor = "#FFF";
		}
	} else {
		p1.style.backgroundColor = "#FFF";
		p2.style.backgroundColor = "#FFF";
		p3.style.backgroundColor = "#FFF";
	}
}

//checks to make sure the zip code is made up of 5 numbers
function checkZip(zipField) {
	trimField(zipField);
	if(zipField.value != "") {
		if(!zipField.value.match(/\d{5}/)) {
			invalidate(zipField);
		} else {
			zipField.style.backgroundColor = "#FFF";
		}
	} else {
		zipField.style.backgroundColor = "#FFF";
	}
}

//changes all the highlighting back to white
function resetBackgrounds() {
	for(var i=0; i < document.forms[0].length; i++) {
		if(document.forms[0].elements[i].style.backgroundColor == "yellow") {
			document.forms[0].elements[i].style.backgroundColor = "#FFF";
		}
	}
}

//function to validate the form before sending
function validate() {
	rVal = true; //reset return value
	
	//trim all extra white space
	for(var i=0; i < document.forms[0].length; i++) {
		trimField(document.forms[0].elements[i]);
	}
	
	//change everything back to white
	resetBackgrounds();
	
	//check the required fields
	checkField(document.forms[0].elements.brand);
	checkField(document.forms[0].elements.model);
	checkField(document.forms[0].elements.partnum);
	checkField(document.forms[0].elements.month);
	checkField(document.forms[0].elements.year);
	checkField(document.forms[0].elements.state);
	
	//check the nonrequired fields for accuracy
	checkPhone("ownerPhone");
	checkPhone("subPhone");
	checkZip(document.forms[0].elements.zip);
	
	//if validation failed, inform the user
	if(!rVal) {
		alert("The form could not be submitted as is.\nPlease make sure all required fields are completed\nand all fields are filled out properly.");
	}
	
	return rVal;
}

//calls the function to set the fields enabled or disabled
function start() {
	if(document.forms[0].elements.reported[0].checked == true) {
		agencyEnabled(true);
	} else {
		agencyEnabled(false);
	}
	document.forms[0].elements.brand.focus();
}

window.onload = start;