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 "nominationname":
		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 == "nominationname"){
				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 + " cannot contain numbers</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)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can only be alpha numeric characters (0-9, A-Z), spaces, commas, apostrophes, hyphens and periods</LI>";
				}
				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)
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must contain at least two alpha numeric characters (0-9, A-Z)</LI>";
				}

			}
			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) and spaces</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)</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 "nominationmiddleinit":	
				var n_regExpression = new RegExp("[^A-Za-z]","gi");
				var n_strAlphaOnlyMI = n_formObject.value.trim();
				var n_strAlphaOnlyMI = n_strAlphaOnlyMI.replace(n_regExpression,"");
				if (n_strAlphaOnlyMI != n_formObject.value.trim()){
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be a single letter</LI>";
				}
			break;
		case "nominationphone":
			var n_regExpressionTemp = new RegExp("[^0-9()+ -]","gi");
			var n_regExpressionTemp2 = new RegExp("[^0-9]","gi");
			var n_strPhoneOnly = n_formObject.value.trim();
			var n_strPhoneOnly = n_strPhoneOnly.replace(n_regExpressionTemp,"");
			if (n_formObject.value.trim().length > 0){
				if (n_strPhoneOnly != n_formObject.value.trim() || n_strPhoneOnly.replace(n_regExpressionTemp2,'').length != 10 ){	
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be 10 numeric characters</LI>";
				}	
			}	
			break;
		case "nominationphoneextn":
			var n_regExpressionTemp = new RegExp("[^0-9]","gi");
			var n_strExtnOnly = n_formObject.value.trim();
			var n_strExtnOnly = n_strExtnOnly.replace(n_regExpressionTemp,"");
			if (n_strExtnOnly != n_formObject.value.trim()){	
				thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be numeric characters</LI>";
			}	
			break;		
		case "noofdoctors":
			var n_regExpressionTemp = new RegExp("[^0-9-]","gi");
			var n_strNoOfDoctors = n_formObject.value.trim();
			var n_strNoOfDoctors = n_strNoOfDoctors.replace(n_regExpressionTemp,"");
			if(n_formObject.value.trim().length){
				if (n_strNoOfDoctors != n_formObject.value.trim()){
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be a numeric</LI>";
				} else 
					if(n_formObject.value.trim()<1 || n_formObject.value.trim() >9999 ){	
						thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be between 1 and 9999</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 "phone":
			var n_regExpressionTemp = new RegExp("[^0-9()+ -]","gi");
			var n_strPhoneOnly = n_formObject.value.trim();
			var n_strPhoneOnly = n_strPhoneOnly.replace(n_regExpressionTemp,"");

			if (n_formObject.value.trim().length > 0){
				if (n_strPhoneOnly != n_formObject.value.trim()){
					blnSuccess = false;
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can only contain numbers, spaces, parentheses, dashes and plus signs</LI>";
				}
			}
			if (blnSuccess){

				var n_regExpression = new RegExp("[^0-9]","gi");
				var n_intTelephone = n_formObject.value.replace(n_regExpression,"");

				var n_strCountry = "USA";
				if (fncValidateFormField.arguments.length > 3){
					var n_strCountry = fncValidateFormField.arguments[3];
				}

				if (!n_blnRequired && n_formObject.value.length == 0)
					break;

				if (n_blnRequired && n_formObject.value.trim().length == 0){
					blnSuccess = false;
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " is required</LI>";
				}


				switch(n_strCountry){
					case "USA":
					case "CAN":
					case "ASM":
					case "GUM":
					case "MHL":
					case "MNP":
					case "PRI":
					case "PLW":
					case "VIR":
					case "FSM":
						//000000000
						var n_regExpressionUsPhone1 = new RegExp("^[0-9]{10}$","gi");
						if (n_regExpressionUsPhone1.exec(n_intTelephone) != n_intTelephone){
							blnSuccess = false;
							thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be 10 digits</LI>";
						}
						else if (n_intTelephone == '0000000000') {
							blnSuccess = false;
							thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can not be all zero's (0000000000)</LI>";
						}
						else if (n_intTelephone.substr(0, 1) == '0' || n_intTelephone.substr(0, 1) == '1') {
							blnSuccess = false;
							thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " can not start with zero or 1</LI>";
						}


					break;

					default:
						if (fncValidateFormField.arguments.length > 4)
							var n_intLength = parseInt(fncValidateFormField.arguments[4])+1;

						if (n_intTelephone.length >= n_intLength){
							blnSuccess = false;
							thisError = thisError = "<LI class='errorList'>" + n_formObject.title + "must be less than "+n_intLength+" digits</LI>";
						}
					break;
				}
			}

			break;	
		
		
		
		
		case "NPI":
			var n_regExpressionTemp = new RegExp("[^0-9]","gi");
			var n_strNPI = n_formObject.value.trim();
			var n_strNPI = n_strNPI.replace(n_regExpressionTemp,"");
			if (n_formObject.value.trim().length > 0){
				if (n_strNPI != n_formObject.value.trim() || n_formObject.value.trim().length != 10 ){	
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be a 10 digit number</LI>";
				}	
			}	
			break;
		case "TIN":
			var n_regExpressionTemp = new RegExp("[^0-9()+ -]","gi");
			var n_strTIN = n_formObject.value.trim();
			var n_strTIN = n_strTIN.replace(n_regExpressionTemp,"");
			if (n_formObject.value.trim().length > 0){
				if (n_strTIN != n_formObject.value.trim() || n_strTIN.replace('-','').length != 9 ){	
					thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must be a 9 digit number</LI>";
				}	
			}	
			break;
		case "nominationzip":
			var n_regExpressionTemp = new RegExp("[^0-9]","gi");
			var n_strZip = n_formObject.value.trim();
			var n_strZip = n_strZip.replace(n_regExpressionTemp,"");
			
			if (n_formObject.value.trim().length == 0){
				//thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " is required</LI>";
			} else	if (n_strZip != n_formObject.value.trim() || n_formObject.value.trim().length != 5){	
				thisError = thisError = "<LI class='errorList'>" + n_formObject.title + " must contain 5 digits</LI>";
			}	
			break;	
		case "email":
			var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.*[.].{2,4}$";
   			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;
}



