function fncLZ(x) {return(x<0||x>9?"":"0")+x}

String.prototype.trim = function()
{
  return( this.replace(/^\s*([\s\S]*\S+)\s*$|^\s*$/,'$1') );
}

function fncValidateFAQTypeField(n_formObject, n_type, n_blnRequired){
	var thisError = "";
	var intCount = n_formObject.length;
	var blnSuccess = false;
	if(intCount){
		for (var i=0; i < intCount; i++) {
			if (n_formObject[i].checked)
				blnSuccess = true;
		}
	}
	
	if (blnSuccess == false) {
		thisError = "<LI class='errorList'>Request Type is required" + "</LI>";
		blnSuccess = 0;
	}
	
	return thisError;
}
function fncValidateFormField(n_formObject, n_type, n_blnRequired){
	var thisError = "";
	var blnSuccess = true;
	if (n_blnRequired){
		if (!n_formObject.value.trim().length && (n_type != 'dateterm')){
			thisError = "<LI class='errorList'>" + n_formObject.title + " is required" + "</LI>";
			blnSuccess = 0;
		}
	}
	switch (n_type){
		case "string":
		case "nonreservedstring":
		case "numeric":
		case "alpha":
		case "alphanospace":
		case "alphanumeric":
		case "name":
		case "corporatename":
		case "nonpobox":
		case "any":

			if (fncValidateFormField.arguments.length == 4) {
				var intMinLength = parseInt(fncValidateFormField.arguments[3]);
				if (n_formObject.value.trim().length < intMinLength && n_formObject.value.length > 0){
					blnSuccess = false;
					fncWriteError("must be at least " + intMinLength + " characters" + "\n" , n_formObject)
				}
			}
			if (((n_blnRequired) || (n_formObject.value.trim().length > 0)) && (fncValidateFormField.arguments.length == 5)) {
				var intMinLength = parseInt(fncValidateFormField.arguments[3]);
				var intMaxLength = parseInt(fncValidateFormField.arguments[4]);

				if(isNaN(intMinLength) && isNaN(intMaxLength)){
					//No boundary search
					blnSuccess = false;
					fncRemoveError(n_formObject);
					fncWriteError(""+isNaN(intMinLength)+" "+isNaN(intMaxLength), n_formObject);
				}else if(isNaN(intMinLength) && (n_formObject.value.trim().length > intMaxLength)){
					blnSuccess = false;
					//fncRemoveError(n_formObject);
					//fncWriteError("can only be " + intMaxLength + " characters, currently you have " +n_formObject.value.trim().length+" characters", n_formObject)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " characters, currently you have " +n_formObject.value.trim().length+" characters</LI>";
				}else if((n_formObject.value.trim().length < intMinLength) && isNaN(intMaxLength)){
					blnSuccess = false;
					//fncRemoveError(n_formObject);
					//fncWriteError("must be at least " + intMinLength + " characters, currently you have " +n_formObject.value.trim().length+" characters", n_formObject)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be at least " + intMinLength + " characters, currently you have " +n_formObject.value.trim().length+" characters</LI>";
				}else if((intMinLength == intMaxLength) && (n_formObject.value.trim().length != intMinLength)){
					blnSuccess = false;
					//fncRemoveError(n_formObject);
					//fncWriteError("must be exactly " + intMinLength + " characters, currently you have " +n_formObject.value.trim().length+" characters", n_formObject);
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be exactly " + intMinLength + " characters, currently you have " +n_formObject.value.trim().length+" characters</LI>";
				}else if((n_formObject.value.trim().length < intMinLength) || (n_formObject.value.trim().length > intMaxLength)){
					blnSuccess = false;
					//fncRemoveError(n_formObject);
					//fncWriteError("must be between " + intMinLength + ' and '+ intMaxLength + " characters, currently you have " +n_formObject.value.trim().length+" characters", n_formObject);
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be between " + intMinLength + ' and '+ intMaxLength + " characters, currently you have " +n_formObject.value.trim().length+" characters</LI>";
				}
			}

			if (n_type == "nonreservedstring"){

				if (n_formObject.value.indexOf('%') >= 0){
					blnSuccess = false;
					fncWriteError("cannot contain a '%'", n_formObject)
				}

			}

			if (n_type == "name"){
				var n_regExpression = new RegExp("[^A-Za-z .'`,-]","gi");
				var n_strAlphaOnly = n_formObject.value.trim();
				var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");
				if (n_strAlphaOnly != n_formObject.value.trim()){
					blnSuccess = false;
					//fncWriteError("can only be alpha characters (A-Z), spaces, commas, apostrophes, hyphens and periods", n_formObject)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can only be alpha characters (A-Z), spaces, commas, apostrophes, hyphens and periods</LI>";
				}
				var n_regExpression = new RegExp("[^A-Za-z ]","gi");
				var n_strAlphaOnly = n_formObject.value.trim();
				var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");

				if (blnSuccess && (n_formObject.value.trim().length > 0) && (n_strAlphaOnly.length < 2) ){
					blnSuccess = false;
					//fncWriteError("must contain at least two alpha characters (A-Z)", n_formObject)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must contain at least two alpha characters (A-Z)</LI>";
				}

			}

			if (n_type == "corporatename"){
				var n_regExpression = new RegExp("[^0-9A-Za-z .'`,-]","gi");
				var n_strAlphaOnly = n_formObject.value.trim();
				var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");
				if (n_strAlphaOnly != n_formObject.value.trim()){
					blnSuccess = false;
					//fncWriteError("can only be alpha numeric characters (0-9, A-Z), spaces, commas, apostrophes, hyphens and periods", n_formObject)
				}
				var n_regExpression = new RegExp("[^0-9A-Za-z ]","gi");
				var n_strAlphaOnly = n_formObject.value.trim();
				var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");


				if (blnSuccess && (n_formObject.value.trim().length > 0) && (n_strAlphaOnly.length < 2) ){
					blnSuccess = false;
					//fncWriteError("must contain at least two alpha numeric characters (0-9, A-Z)", n_formObject)
				}

			}
			if (n_type == "numeric"){
				var n_regExpression = new RegExp("[^0-9]","gi");
				var n_strAlphaOnly = n_formObject.value.trim();
				var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");
				if (n_strAlphaOnly != n_formObject.value.trim()){
					blnSuccess = false;
					//fncWriteError("can only be numeric (0-9) and dashes", n_formObject)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can only be numeric (0-9)</LI>";
				}

			}
			if (n_type == "alpha"){
				var n_regExpression = new RegExp("[^A-Za-z ]","gi");
				var n_strAlphaOnly = n_formObject.value.trim();
				var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");
				if (n_strAlphaOnly != n_formObject.value.trim()){
					blnSuccess = false;
					//fncWriteError("can only be alpha characters (A-Z) and spaces", n_formObject)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can only be alpha characters (A-Z)</LI>";
				}

			}
			if (n_type == "alphanospace"){
				var n_regExpression = new RegExp("[^A-Za-z]","gi");
				var n_strAlphaOnly = n_formObject.value.trim();
				var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");
				if (n_strAlphaOnly != n_formObject.value.trim()){
					blnSuccess = false;
					//fncWriteError("can only be alpha characters (A-Z)", n_formObject)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can only be alpha characters (A-Z) no spaces</LI>";
				}

			}
			if (n_type == "nonpobox"){

				var n_regExpression = new RegExp("[ ]","gi");
				var n_regExpression = n_formObject.value.trim().toUpperCase().replace(n_regExpression,"");

				var n_regExpressionPoBox = new RegExp("PO[0-9]{1}|POB[0-9]{1}|POBOX[0-9]{1}|P.O.BOX[0-9]{1}|P.O.[0-9]{1}P.O.B.[0-9]{1}","gi");
				if (n_regExpressionPoBox.exec(n_regExpression) != null){
					blnSuccess = false;
					fncWriteError("can not be a Post Office Box", n_formObject)
				}

			}
			if (n_type == "alphanumeric"){
				var n_regExpression = new RegExp("[^0-9A-Za-z]","gi");
				var n_strAlphaOnly = n_formObject.value.trim();
				var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");
				if (n_strAlphaOnly != n_formObject.value.trim()){
					blnSuccess = false;
					//fncWriteError("can only be alpha numeric characters (0-9, A-Z)", n_formObject)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can only be alpha numeric characters (0-9, A-Z)</LI>";
				}
			}

			break;
		case "phone":
			var phoneReg = "^[2-9][0-9]{2}-[0-9]{3}-[0-9]{4}";
   			var regex = new RegExp(phoneReg);

			if (n_formObject.value.trim().length > 0){
				if (!regex.test(n_formObject.value.trim())){
					blnSuccess = false;
					//fncWriteError("is not a syntactically valid email address", n_formObject);
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be of the correct format (999-999-9999)</LI>";
				}
			}
		break;
		case "email":
			var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.*[.].*$";
   			var regex = new RegExp(emailReg);

			if (n_formObject.value.trim().length > 0){

				if (!regex.test(n_formObject.value.trim())){
					blnSuccess = false;
					//fncWriteError("is not a syntactically valid email address", n_formObject);
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " is not a syntactically valid email address</LI>";
				}
			}
		break;
		case "select":
			if (fncValidateFormField.arguments.length > 3){
				if(n_formObject.selectedIndex < fncValidateFormField.arguments[3]){
					blnSuccess = false;
					fncRemoveError(n_formObject);
					fncWriteError("is required", n_formObject);
				}
			}
		break;
	}
	return thisError;
	//return blnSuccess;
}

function processKeyDown(ev) {
	var retVal = true;
	var kc;
	var e;
	if (!(ev)){
		e = event;
	} else {
		e = ev;
	}
	if (typeof e.which == "undefined") {
		kc = e.keyCode;
	} else {
		kc = e.which;
	}
	
	if (kc == 13) { //carriage return
		retVal = false;
		e.returnValue = false;
		//above 2 SHOULD work to cancel the ENTER, but, have found that
		//  to make it work, one needs to switch the keystroke to something
		//  that does nothing all by itself: such as shift
		if (e.keyCode) {
			e.keyCode = 16;
		} else {
			e.which = 16;
		}
	}
	return retVal;
}



