var HasFormSubmitted = false; //set to true after submit to prevent a user from submitting twice

function IsRequiredField(FieldName){
	//PURPOSE: determine if a field is required to contain a value before submission
	var i = 0;
	var CanContinue=true;
	var RetVal = false;
	while (i<RequiredFields.length && CanContinue==true){
		if (RequiredFields[i]==FieldName){
			CanContinue=false;
			RetVal = true;
		}
		i++;
	}
	return RetVal;
}

function IsNumeric(PossibleNumber){	
	//PURPOSE: determines if a value is a numeric value
	var PNum = new String(PossibleNumber);	
	var regex = /[^0-9]/;	
	return !regex.test(PNum);
}
	
function CheckEmail(val){
	//PURPOSE: determine if an email address is in the correct format
	var RetVal = false;
	var RegX=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-zA-Z]{2,4}$");
	if(! RegX.test(val)) RetVal = true;
	return RetVal;
}

function DoesFieldExist(theForm, fieldname){
	//PURPOSE: determine if a field exists on a form.
	var RetVal = false;
	var i = -1;
	var Cont = true;
	while (i<theForm.elements.length-1 && Cont==true){
		i++;
		if (theForm.elements[i].name == fieldname){
			Cont = false;
			RetVal = true;
		}
	}
	return RetVal;
}

function DoubleFieldValidation(theForm, Field1, Field2){
	//PURPOSE: validates when one of two fields must have a value
	//VARIABLES: Field1: the name of a dropdown list
	//			Field2: the name of a textbox
	var RetVal = "";
	if (DoesFieldExist(theForm,theForm.elements[Field2].name)==true && (RetCaps("Entire", theForm.elements[Field1].value)=="OTHER" || theForm.elements[Field1].value=="")){
		if (theForm.elements[Field2].value == ""){
			RetVal = "Please select a value in the '"+theForm.elements[Field1].title+"' box or select 'Other' and enter a value in the box directly below.";
		}
	}
	return RetVal;
}

function UserControlPrefixes(theForm){
    //creates an array of user control names
    var uCtrlPrefixes = new Array();
	var FieldPos = -1;
	var PrefixesString = "";
	for (i=0;i<theForm.elements.length-1;i++){
		//check to see if the field name contains a User Web Control name prefix
	    FieldPos = -1;
	    FieldName = theForm.elements[i].name;
		FieldPos = FieldName.indexOf(":",0);
		if (FieldPos==-1) FieldPos = FieldName.indexOf("$",0);
		if (FieldPos > -1 && PrefixesString.indexOf(FieldName.substring(0,FieldPos+1),0) < 0){
	        uCtrlPrefixes[uCtrlPrefixes.length] = FieldName.substring(0,FieldPos+1);
	        PrefixesString = PrefixesString + FieldName.substring(0,FieldPos+1);
	    }
	}
	return uCtrlPrefixes;
}

function AppendElementPrefix(uCtrlPrefixes, FieldNameToCheck, theForm){
    //returns a User Control name (with its prefix) if it exists in the list of available form elements.
    var i = 0;
    var Cont = true;
    var ElemCnt = 0;
    var ElemFlag = true;
    var RetVal = FieldNameToCheck;
    while (ElemCnt<theForm.elements.length && ElemFlag==true){
        FieldName = theForm.elements[ElemCnt].name;
        i = 0;
        while (i<uCtrlPrefixes.length && Cont==true){
            if (FieldName.indexOf(uCtrlPrefixes[i]+FieldNameToCheck,0)>-1){
                Cont=false;
                RetVal = uCtrlPrefixes[i]+FieldNameToCheck;
            }
            i++;
        }
        if (Cont==false) ElemFlag=false;
        ElemCnt++;
    }
    return RetVal;
}

function RemoveElementPrefix(uCtrlPrefixes, theForm, FieldName){
    var i = 0;
    var RetVal = FieldName;
    while (i<uCtrlPrefixes.length){
        RetVal = Replace(RetVal, uCtrlPrefixes[i], "");
        i++;
    }
    return RetVal
}

function contactform_validate(theForm){
	//PURPOSE: ensure that all field values have been entered and contain correctly formated values.
	var RetVal = true; //true if all field values validated successfully
	var i = -1;
	var Cont = true;
	var FormVal;
	var FieldName;
	var errMsg = "";
	var SetTheFocus = true;
	var uCtrlPrefixes = new Array();
	uCtrlPrefixes = UserControlPrefixes(theForm);
	while (i<theForm.elements.length-1 && Cont==true){
		i++;
		SetTheFocus = true;
		//if (IsRequiredField(theForm.elements[i].name)==true || theForm.elements[i].value != ""){
			//this form field is a required field... validate the value
			FormVal = theForm.elements[i].value;
			FieldName = theForm.elements[i].name;
			FieldType = theForm.elements[i].type;
			if (FieldType == "radio"){
				//this is a radiobox entry
				var MyVal = false;
				for (j=0;j<theForm.elements[FieldName].length;j++){
					if (theForm.elements[FieldName][j].checked == true) MyVal=true;
				}
				if (MyVal == false) FormVal = "";
				SetTheFocus = false;
			}else if (FieldType == "checkbox"){
				if (theForm.elements[FieldName].checked == false){
					FormVal = "";
				}
			}else if (FieldType == "hidden"){
				SetTheFocus = false;
			}
			//alert("here"+RemoveElementPrefix(uCtrlPrefixes, theForm, theForm.elements[i].name));
			if (FormVal == "" && IsRequiredField(RemoveElementPrefix(uCtrlPrefixes, theForm, theForm.elements[i].name))==true){
				//this field is blank
				if (FieldName==AppendElementPrefix(uCtrlPrefixes, "ddlState", theForm)) {
					//special rules for province
					errMsg = DoubleFieldValidation(theForm, AppendElementPrefix(uCtrlPrefixes, "ddlState", theForm), AppendElementPrefix(uCtrlPrefixes, "txtOthState", theForm));
					if (errMsg.length > 0) Cont = false;
				/*}else if (FieldName=="ddlCountry") {
					//special rules for country
					errMsg = DoubleFieldValidation(theForm, "ddlCountry", "OtherCountry");
					if (errMsg.length > 0) Cont = false;
				*/
				}else{
					errMsg = "Please enter a value for '"+theForm.elements[i].title+"'.";
					Cont = false;
				}
			}else{
				//a value exists in the form field
				if (FormVal.indexOf("#") > -1){
					errMsg = "Please enter a value that does not contain a '#' symbol in the '"+theForm.elements[i].title+"' box.";
					Cont = false;
				}else{
					if (FieldName==AppendElementPrefix(uCtrlPrefixes, "ddlState", theForm)) {
						//special rules for province
						errMsg = DoubleFieldValidation(theForm, AppendElementPrefix(uCtrlPrefixes, "ddlState", theForm), AppendElementPrefix(uCtrlPrefixes, "txtOthState", theForm));
						if (errMsg.length > 0) Cont = false;
					}else if (FieldName=="txtEmail") {
						//special rules for email
						if (CheckEmail(FormVal) == true){
							errMsg = "Please enter a valid email.\n\nExample: johndoe@myplace.com";
							Cont = false;
						}
					}else if (FieldName=="txtEmailVerify") {
						//special rules for email
						if (CheckEmail(FormVal) == true){
							errMsg = "Please enter a valid email.\n\nExample: johndoe@myplace.com";
							Cont = false;
						}else{
							if(FormVal != theForm.elements["txtEmail"].value){
								errMsg = "The email address does not match the verified email address. Please ensure that both values are correct and that they match one another.\n\nExample: johndoe@myplace.com";
								Cont = false;
							}
						}
					}else if (FieldName == AppendElementPrefix(uCtrlPrefixes, "txtPhone", theForm) || FieldName == AppendElementPrefix(uCtrlPrefixes, "txtOtherPhone", theForm) || FieldName == AppendElementPrefix(uCtrlPrefixes, "txtFax", theForm)){
						//special rules for phone numbers
						if (IsNumeric(FormVal) == false || FormVal.length < 7){
						    if (IsRequiredField(theForm.elements[i].name)==true || (IsRequiredField(theForm.elements[i].name)==false && FormVal.length > 0) ){
							    errMsg = "Please enter a valid phone number without symbols such as dashes and parentheses. Phone numbers must be at least 7 digits.\n\nExample: 1236547890";
							    Cont = false;
							}
						}
					}else if (FieldName == AppendElementPrefix(uCtrlPrefixes, "txtAge", theForm)){
						//special rules for Age
						if (IsNumeric(FormVal) == false){
							errMsg = "Please enter a numeric age.\n\nExample: 36";
							Cont = false;
						}else{
							if (FormVal > 130){
								errMsg = "Please enter a valid age.\n\nExample: 36";
								Cont = false;
							}
						}
					}else if (FieldName == AppendElementPrefix(uCtrlPrefixes, "ElectSignature", theForm)){
						//special rules for captcha electronic signature
						/*if (IsNumeric(FormVal) == false){
							errMsg = "Please enter a numeric '"+theForm.elements[i].title+"'.\n\nExample: 1232";
							Cont = false;
						}*/
					}
				}
			}
		//}
	}

	if (errMsg.length > 0) {
		setfocus = "['"+theForm.elements[i].name+"']";
		if (SetTheFocus == true) eval("theForm" + setfocus + ".focus()");
		RetVal = false;
		alert(errMsg);
	}else{
		//theForm.submit();
		if (HasFormSubmitted==false){
			//HasFormSubmitted = true;
			//theForm.elements["txtNotaHack"].value="true";
			RetVal = true;
		}else{
		    //prevents the form from being submitted twice (unless the user reloads).
			RetVal = false;
		}
	}
	return RetVal;
}

function RemoveSpecialChars(stringval){
	//PURPOSE: removes all special characters from a string
	stringval = stringval.replace(/[\\,./<>?;:\'\"\[\]{}|=\-_+()\^&*#$%!@~`]/g, "");
	return stringval;
}

function RemoveCarriageReturns(stringval){
	//PURPOSE: removes all special characters from a string
	stringval = stringval.replace(/\r|\n|\r\n/g, "");
	return stringval;
}

function RemoveBasicSpecialChars(stringval){
	//PURPOSE: removes certain special characters from a string
//	stringval = stringval.replace(/[\\,.\'\"\-`]/g, "");
	stringval = stringval.replace(/[\\/<>?;:\[\]{}|=_+()\^&*#$%!@~]/g, "");
	return stringval;
}

function RemoveWebSpecialChars(stringval){
	//PURPOSE: removes certain special characters from a string
//	stringval = stringval.replace(/[\\,.\'\"\-`]/g, "");
	stringval = stringval.replace(/[\\/<>?;:\[\]{}|=()\^&*#%!@~]/g, "");
	return stringval;
}