//Have we tried to submit yet?
var submitTry=false;

function init() {
}

//Form-specific testing. Field id's begin with "spec"
//Return true or false. Also, set class and After text appropriately.
function specialTesting(fid) {
	if(fid.substring(4,9)=="Phone") {
		if(((document.getElementById("specPhoneH").value == "")||(document.getElementById("specPhoneH").value == null))&&
		   ((document.getElementById("specPhoneW").value == "")||(document.getElementById("specPhoneW").value == null))&&
		   ((document.getElementById("specPhoneM").value == "")||(document.getElementById("specPhoneM").value == null))) {
			if(submitTry) {
				document.getElementById("specPhoneHAfter").innerHTML = "<br>Please enter at least one phone number.";
				//alert(document.getElementById("specPhoneW").value);
				document.getElementById("specPhoneH").className = "formBad";
				document.getElementById("specPhoneW").className = "formBad";
				document.getElementById("specPhoneM").className = "formBad";
				return false;
			}
			else {
				document.getElementById("specPhoneH").className = "formOff";
				document.getElementById("specPhoneHAfter").innerHTML = "";
				document.getElementById("specPhoneW").className = "formOff";
				document.getElementById("specPhoneWAfter").innerHTML = "";
				document.getElementById("specPhoneM").className = "formOff";
				document.getElementById("specPhoneMAfter").innerHTML = "";
				return true;
			}
		}
		else if((document.getElementById(fid).value == "")||(document.getElementById(fid).value == null)) {
			document.getElementById(fid).className = "formOff";
			document.getElementById(fid+"After").innerHTML = "";
			return true;
		}
		else {
			var num=document.getElementById(fid).value;
			var testNum=checkphone(num);
			if(testNum==0) {
				document.getElementById(fid+"After").innerHTML = "<br>This needs to be a ten digit phone number";
				document.getElementById(fid).className = "formBad";
				return false;
			}
			else {
				document.getElementById(fid).value = formatphone(testNum);
				document.getElementById(fid+"After").innerHTML = "";
				document.getElementById(fid).className = "formOn";
				if((document.getElementById("specPhoneH").value == "")||(document.getElementById("specPhoneH").value == null)) {
					document.getElementById("specPhoneH").className = "formOff";
					document.getElementById("specPhoneHAfter").innerHTML = "";
				}
				if((document.getElementById("specPhoneW").value == "")||(document.getElementById("specPhoneW").value == null)) {
					document.getElementById("specPhoneW").className = "formOff";
					document.getElementById("specPhoneWAfter").innerHTML = "";
				}
				if((document.getElementById("specPhoneM").value == "")||(document.getElementById("specPhoneM").value == null)) {
					document.getElementById("specPhoneM").className = "formOff";
					document.getElementById("specPhoneMAfter").innerHTML = "";
				}
				return true;
			}		
		}
	}
		
	if(fid.substring(4,9)=="IDNum") {
		if((document.getElementById("specIDNumA").value == "")||(document.getElementById("specIDNumA").value == null)||
		   (document.getElementById("specIDNumB").value == "")||(document.getElementById("specIDNumB").value == null)) {
			if(submitTry) {
				document.getElementById("specIDNumAfter").innerHTML = "<br>Please enter your ID Number";
				document.getElementById("specIDNumA").className = "formBad";
				document.getElementById("specIDNumB").className = "formBad";
				return false;
			}
		}
		else {
			if(checkid(document.getElementById("specIDNumA").value.toUpperCase(), document.getElementById("specIDNumB").value)==1) {
				document.getElementById("specIDNumAfter").innerHTML = "";
				document.getElementById("specIDNumA").className = "formOn";
				document.getElementById("specIDNumB").className = "formOn";
				return true;
			}
			else {
				document.getElementById("specIDNumAfter").innerHTML = "<br>That is not a valid ID Number";
				document.getElementById("specIDNumA").className = "formBad";
				document.getElementById("specIDNumB").className = "formBad";
				return false;
			}
		}
	}
	else if((fid.substring(4,10)=="NPANXX") || (fid.substring(4,11)=="Address") || (fid.substring(4,8)=="City")) {
		var num = parseInt(fid.split("-")[1]);
		if(num>remotenum) return true;
		if((document.getElementById(fid).value == "")||(document.getElementById(fid).value == null)) {
			document.getElementById(fid+"After").innerHTML = "<br>Required entry";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}
	}
	else if(fid.substring(4,9)=="State") {
		var num = parseInt(fid.split("-")[1]);
		if(num>remotenum) return true;
		if((document.getElementById(fid).value == "")||(document.getElementById(fid).value == null)) {
			document.getElementById(fid+"After").innerHTML = "<br>State is required";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}
	}
	else if(fid.substring(4,7)=="Zip") {
		var num = parseInt(fid.split("-")[1]);
		if(num>remotenum) return true;
		var zip=document.getElementById(fid).value;
		if((zip == "")||(zip == null)) {
			document.getElementById(fid+"After").innerHTML = "<br>Zip code is required";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		var testNum=checkzip(zip);
		if(testNum==0) {
			document.getElementById(fid+"After").innerHTML = "<br>Zip code is invalid";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid).value = formatzip(testNum);
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}		
	}
	return true;
}

//Form-specific testing of select-one drop down boxes.
//Field id's begin with "spec"
//Return true or false. Also, set class and After text appropriately.
function specialSelectTesting(fid) {
	if((fid.substring(4,11)=="PortSpd") || (fid.substring(4,10)=="CIRSpd") || (fid.substring(4,10)=="CIRQoS")) {
		var num = parseInt(fid.split("-")[1]);
		if(num>remotenum) return true;
	
		if(document.getElementById(fid).value == "unchanged") {
			document.getElementById(fid+"After").innerHTML = "<br>Please select a value";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}
	}	
	return true;
}

function specialRadioTesting(fid) {
	if(fid.substring(4,12)=="RadioGrad") {
		if((document.getElementById("specRadioGrad1").checked == false) && (document.getElementById("specRadioGrad2").checked == false)) {
			document.getElementById("specRadioGrad1After").innerHTML = "< Please Choose";
			document.getElementById("specRadioGrad1text").className = "formBad";
			document.getElementById("specRadioGrad2text").className = "formBad";
			return false;
		}
		else {
			document.getElementById("specRadioGrad1After").innerHTML = "";
			document.getElementById("specRadioGrad1text").className = "";
			document.getElementById("specRadioGrad2text").className = "";
			return true;
		}
	}
	return true;
}

function specialRadioTesting(fid) {
	if(fid.substring(4,12)=="RadioJob") {
		if((document.getElementById("specRadioJob1").checked == false) && (document.getElementById("specRadioJob2").checked == false)) {
			document.getElementById("specRadioJob1After").innerHTML = "< Please Choose";
			document.getElementById("specRadioJob1text").className = "formBad";
			document.getElementById("specRadioJob2text").className = "formBad";
			return false;
		}
		else {
			document.getElementById("specRadioJob1After").innerHTML = "";
			document.getElementById("specRadioJob1text").className = "";
			document.getElementById("specRadioJob2text").className = "";
			return true;
		}
	}
	return true;
}

function specialCheckTesting(fid) {
	if(fid.substring(4,14)=="CheckTerms") {
		if(document.getElementById(fid).checked == false) {
			document.getElementById(fid+"After").innerHTML = "<br>You must agree to these terms in order to submit this form.";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			return true;
		}
	}
	return true;
}
	
function formSubmit(fname) {
	if(formTest(fname)) {
		if(document.getElementById("formErrMessage"))
			document.getElementById("formErrMessage").innerHTML = "";
		document.getElementById(fname).submit();
	}
	else {
		//alignPage(1);
		if(document.getElementById("formErrMessage"))
			document.getElementById("formErrMessage").innerHTML = "<br>Please correct the highlighted fields before submitting your responses.";
	}		
}

function formClear(fname) {
	if(confirm("Clear the form?\nYou will lose all the information you have entered.")) {
		var theForm = document.getElementById(fname);
		var els = theForm.elements; 

		for(i=0; i<els.length; i++) { 
		switch(els[i].type) {
			case "select-one" :
				els[i].selectedIndex = 0;
				if(document.getElementById(els[i].id+"After")) document.getElementById(els[i].id+"After").innerHTML = "";
				if(document.getElementById(els[i].id).className) document.getElementById(els[i].id).className = "formOff";
				break;

			case "select-multiple" :
				break;

			case "text":
			case "textarea":
				els[i].value = "";
				if(document.getElementById(els[i].id+"After")) document.getElementById(els[i].id+"After").innerHTML = "";
				if(document.getElementById(els[i].id).className) document.getElementById(els[i].id).className = "formOff";
				break;

			case "checkbox":
				els[i].checked = false;
				if(document.getElementById(els[i].id+"After")) document.getElementById(els[i].id+"After").innerHTML = "";
				if(document.getElementById(els[i].id).className) document.getElementById(els[i].id).className = "formOff";
				break;

			case "radio":
				break;
			}
		}
		//Jampcom special cases
		if(document.getElementById("specNumRemote")) {
			document.getElementById("specNumRemote").value = "1";
			updateremotes();
		}
		if(document.getElementById("specIDNumAfter")) {
			document.getElementById("specIDNumAfter").innerHTML = "";
		}
	}
}

function formTest(fname) {
	var theForm = document.getElementById(fname);
	var els = theForm.elements; 
	var condition = true;

	for(i=0; i<els.length; i++) { 
	switch(els[i].type) {
		case "select-one" :
			condition = testSelect(els[i].id) && condition;
			//els[i].options[els[i].selectedIndex].value == ""
			//els[i].selectedIndex = 1;
			break;

		case "text":
			condition = testField(els[i].id) && condition;
			break;

		case "textarea":
			condition = testField(els[i].id) && condition;
			break;

		case "checkbox":
			condition = testCheck(els[i].id) && condition;
			break;

		case "radio":
			condition = testRadio(els[i].id) && condition;
			break;
		
		case "file":
			condition = testFile(els[i].id) && condition;
		}
	}
	
	return condition;
}

function formFocus(fid) {
	document.getElementById(fid).className = "formOn";
}

function formBlur(fid) {
	testField(fid);
	//alignPage(1);
}

function selectFocus(fid) {
	document.getElementById(fid).className = "formOn";
}

function selectChange(fid) {
	document.getElementById(fid+"After").innerHTML = "";
	//alignPage(1);
}

function selectBlur(fid) {
	testSelect(fid);
	//alignPage(1);
}

function radioFocus(fid) {
	document.getElementById(fid+"After").innerHTML = "";
}	

function radioChange(fid) {
	testRadio(fid);
}	

function checkChange(fid) {
	testCheck(fid);
}	

function checkphone(num) {
	var stripped = num.replace(/[\(\)\.\-\ ]/g, '');
	if (isNaN(stripped)) {
		return(0);
	}

	//if(stripped.length == 7) stripped = "217" + stripped;
	
	if (!(stripped.length == 10)) {
		return(0);
	}
	return stripped;
}

function formatphone(num) {
	return "("+num.substring(0,3)+") "+num.substring(3,6)+"-"+num.substring(6,10);
}

function checkzip(num) {
	var stripped = num.replace(/[\(\)\.\-\ ]/g, '');
	if (isNaN(stripped)) {
		return(0);
	}
	if((stripped.length == 5) || (stripped.length == 9)) {
		return stripped;
	}
	return(0);
}

function formatzip(num) {
	if(num.length == 5) return num;
	return num.substring(0,5)+"-"+num.substring(5,9);
}

function checkemail(addr) {
	var emailFilter=/^.+@.+\..{2,4}$/;
	if (!(emailFilter.test(addr))) { 
		return(false);
	}

	var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
	if (addr.match(illegalChars)) {
	   return(false);
	}
	
	return(true);
}

function testField(fid) {
	if(fid.substring(0,4)=="spec") {
		return(specialTesting(fid));
	}
	else if((document.getElementById(fid).value == "")||(document.getElementById(fid).value == null)) {
		if(fid.substring(0,3)=="req") {
			if((fid=="reqName")||(fid=="reqLastName"))
				document.getElementById(fid+"After").innerHTML = "<br>Your name, please";
			else if((fid=="reqComments")||(fid=="reqComments2"))
				document.getElementById(fid+"After").innerHTML = "<br>Please leave your comments";
			else if((fid=="reqQuestion")||(fid=="reqQuestion2"))
				document.getElementById(fid+"After").innerHTML = "<br>Please enter your question";
			else if(fid=="reqEmail")
				document.getElementById(fid+"After").innerHTML = "<br>Please enter your email address";
			else if(fid=="reqEmail2")
				document.getElementById(fid+"After").innerHTML = "<br>Please enter your email address";
			else if(fid=="reqAddress")
				document.getElementById(fid+"After").innerHTML = "<br>Please enter your address";
			else if(fid=="reqCity")
				document.getElementById(fid+"After").innerHTML = "<br>Please enter your city";
			else if(fid=="reqPhone")
				document.getElementById(fid+"After").innerHTML = "<br>Please enter your phone number";
			else if(fid=="reqFax")
				document.getElementById(fid+"After").innerHTML = "<br>Please enter your fax number";
			else if(fid.substring(0,6)=="reqZip")
				document.getElementById(fid+"After").innerHTML = "<br>Zip code is required";
			else if(fid.substring(0,8)=="reqState")
				document.getElementById(fid+"After").innerHTML = "<br>State is required";
			else
				document.getElementById(fid+"After").innerHTML = "<br>Please enter your response";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOff";
			return true;
		}
	}
	else if((fid.substring(0,9)=="textEmail") || (fid.substring(0,8)=="reqEmail")) {
		if(!checkemail(document.getElementById(fid).value)) {
			if(fid.substring(0,8)=="reqEmail")
				document.getElementById(fid+"After").innerHTML = "<br>You must provide a valid email address";
			else
				document.getElementById(fid+"After").innerHTML = "<br>Enter a valid email address (or leave it blank)";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}
	}
	else if((fid=="confEmail2")) {
		var e1 = document.getElementById("reqEmail2").value.replace(/^\s+|\s+$/g,"");
		var e2 = document.getElementById(fid).value.replace(/^\s+|\s+$/g,"");
		
		if(e1 != e2) {
			document.getElementById(fid+"After").innerHTML = "<br>The email addresses do not match.";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}
	}
	else if((fid.substring(0,9)=="textPhone") || (fid.substring(0,8)=="reqPhone") || (fid.substring(0,7)=="textFax") || (fid.substring(0,6)=="reqFax")) {
		var num=document.getElementById(fid).value;
		var testNum=checkphone(num);
		if(testNum==0) {
			document.getElementById(fid+"After").innerHTML = "<br>This needs to be a ten digit phone number";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid).value = formatphone(testNum);
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}		
	}
	else if((fid=="textZip") || (fid=="reqZip")) {
		var num=document.getElementById(fid).value;
		var testNum=checkzip(num);
		if(testNum==0) {
			document.getElementById(fid+"After").innerHTML = "<br>Zip code is invalid";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid).value = formatzip(testNum);
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}		
	}
	else {
		document.getElementById(fid+"After").innerHTML = "";
		document.getElementById(fid).className = "formOn";
		return true;
	}
}

function testSelect(fid) {
	if(fid.substring(0,4)=="spec") {
		return(specialSelectTesting(fid));
	}
	else if(fid.substring(0,3)=="req") {
		if(document.getElementById(fid).value == "unchanged") {
			document.getElementById(fid+"After").innerHTML = "<br>Please select a value";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}
	}
	
	return true;
}		

function testRadio(fid) {
	if(fid.substring(0,4)=="spec") {
		return(specialRadioTesting(fid));
	}
/*	else if(fid.substring(0,3)=="req") {
		if(document.getElementById(fid).checked) {
			document.getElementById(fid+"After").innerHTML = "<br>Please select a plan:";
			document.getElementById(fid).className = "formBad";
			return false;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "";
			document.getElementById(fid).className = "formOn";
			return true;
		}
	}
*/	
	return true;
}		

function testCheck(fid) {
	if(fid.substring(0,4)=="spec") {
		return(specialCheckTesting(fid));
	}
	return true;
}

function testFile(fid) {
	if(fid=="fileResume") {
		var fname=trim(document.getElementById(fid).value);
		var len=fname.length;
		if(len < 1) {
			document.getElementById(fid+"After").innerHTML = "";
			return true;
		}
		if(len < 6) {
			document.getElementById(fid+"After").innerHTML = "<br>The file name is too short to be valid.";
			return false;
		}
		var ext3 = fname.substring(len-4, len)
		var ext4 = fname.substring(len-5, len)
		if((ext3==".doc")||(ext3==".txt")||(ext3==".htm")||(ext4==".html")||(ext3==".pdf")||(ext3==".rtf")||(ext3==".wpd")||(ext3==".odt")) {
			document.getElementById(fid+"After").innerHTML = "";
			return true;
		}
		else {
			document.getElementById(fid+"After").innerHTML = "<br>Please use an accepted file format. (.doc, .rtf, .htm, .html, .pdf, .txt, .wpd, .odt)";
			return false;
		}			
	}
	document.getElementById(fid+"After").innerHTML = "";
	return true;
}

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}