var FORM_SubmitWasClicked=false;var FORM_TheFormWasSubmitted=false;var RequiredFields=new Array();
function FORM_Validate(TheForm){MM_showHideLayers('WaitDiv','','show');if(FORM_SubmitWasClicked){alert('You already clicked Submit!');return false}if(FORM_TheFormWasSubmitted){if(!window.confirm("The form has already been submitted.\nAre you sure you want to submit it again?")){return false}}FORM_SubmitWasClicked=true;for(var i=1;i<=TheForm.elements.length;i++){var tp=TheForm.elements[i-1].type;if(tp=="text"||tp=="password"){FORM_TrimValueInTextbox(TheForm.elements[i-1]);FORM_RemoveNonPrintingCharactersInTextbox(TheForm.elements[i-1])}else if(tp=="textarea"){FORM_TrimValueInTextbox(TheForm.elements[i-1])}}var MissingDataFieldname="";var MissingDataDescription="";var TheElmType,TheElmName;var TheElement,TheMissingElement;for(var i=1;i<=TheForm.elements.length;i++){TheElement=TheForm.elements[i-1];TheElmType=TheForm.elements[i-1].type;TheElmName=TheForm.elements[i-1].name;for(var n=1;n<=RequiredFields.length-1;n++){MissingDataFieldname=RequiredFields[n].Fieldname;if(TheElmName==MissingDataFieldname){switch(TheElmType){case "text":if(TheElement.value==""){MissingDataDescription=RequiredFields[n].FieldDescription}break;case "textarea":if(TheElement.value==""){MissingDataDescription=RequiredFields[n].FieldDescription}break;case "password":if(TheElement.value==""){MissingDataDescription=RequiredFields[n].FieldDescription}break;case "checkbox":if(!TheElement.checked){MissingDataDescription=RequiredFields[n].FieldDescription}break;case "radio":var AnOptionIsChecked=false;var TheRadioGroup;eval('TheRadioGroup = TheForm.'+TheElmName);for(var j=1;j<=TheRadioGroup.length;j++){if(TheRadioGroup[j-1].checked){AnOptionIsChecked=true;break}}if(!AnOptionIsChecked){MissingDataDescription=RequiredFields[n].FieldDescription}break;case "select-one":if(TheElement[TheElement.selectedIndex].value==""){MissingDataDescription=RequiredFields[n].FieldDescription}break}}if(MissingDataDescription!=""){break}}if(MissingDataDescription!=""){TheMissingElement=TheElement;break}}if(MissingDataDescription==""){for(var n=1;n<=RequiredFields.length-1;n++){Fieldname=RequiredFields[n].Fieldname;if(Fieldname.toLowerCase().indexOf("email")>-1){var Email=eval('TheForm.'+Fieldname+'.value');if(!FORM_ValidateEmail(Email)){alert("Sorry: Invalid email address ("+Fieldname+")\nValid Example: name@domain.com");MM_showHideLayers('WaitDiv','','hide');FORM_SubmitWasClicked=false;eval('TheForm.'+Fieldname+'.focus()');return false}}}var CheckboxNames=new Array();var CheckboxStates=new Array();var NumCheckboxes=0;for(var i=1;i<=TheForm.elements.length;i++){var tp=TheForm.elements[i-1].type;if(tp=="checkbox"){var FieldName=TheForm.elements[i-1].name;var IsChecked=TheForm.elements[i-1].checked;NumCheckboxes+=1;CheckboxNames[NumCheckboxes]=FieldName;CheckboxStates[NumCheckboxes]=IsChecked;if(IsChecked){TheForm.elements[i-1].value="ck:checked"}else{TheForm.elements[i-1].checked=true;TheForm.elements[i-1].value="ck:unchecked"}}}var T=FORM_NowArray();if(TheForm.SubmissionTime){TheForm.SubmissionTime.value=T[3]}if(TheForm.SubmissionTimeUTC){TheForm.SubmissionTimeUTC.value=T[1]}if(TheForm.SubmissionTimeMinsFromUTC){TheForm.SubmissionTimeMinsFromUTC.value=T[2]}try{if(!DoCustomValidation(TheForm)){MM_showHideLayers('WaitDiv','','hide');FORM_SubmitWasClicked=false;return false}}catch(e){}TheForm.submit();for(var i=1;i<=NumCheckboxes;i++){eval("TheForm."+CheckboxNames[i]+".checked="+CheckboxStates[i])}return false}else{MM_showHideLayers('WaitDiv','','hide');alert(MissingDataDescription+" is required");if(TheMissingElement.focus()){TheMissingElement.focus()}FORM_SubmitWasClicked=false;return false}}
function FORM_DefineRequiredFields(){var args=FORM_DefineRequiredFields.arguments;var RequiredFields=new Array();var i,n,Fieldname,Fieldvalue;for(i=1;i<=args.length-1;i+=2){n=(i+1)/2;Fieldname=args[i-1];Fieldvalue=args[i];RequiredFields[n]=new FORM_RequiredFieldObj(Fieldname,Fieldvalue)}return RequiredFields}
function FORM_RequiredFieldObj(Fieldname,FieldDescription){this.Fieldname=Fieldname;this.FieldDescription=FieldDescription}
function FORM_TrimValueInTextbox(Textbox){while(''+Textbox.value.charAt(0)==' ')Textbox.value=Textbox.value.substring(1,Textbox.value.length);var Length=Textbox.value.length;var LastChar=Textbox.value.charAt(Length-1);while(''+LastChar==' '){Textbox.value=Textbox.value.substring(0,Textbox.value.length-1);Length=Textbox.value.length;LastChar=Textbox.value.charAt(Length-1)}FORM_RemoveNonPrintingCharactersInTextbox(Textbox);}
function TrimText(Text){var TrimmedText=Text;while(''+TrimmedText.charAt(0)==' '){TrimmedText=TrimmedText.substring(1,Text.length)}var Length=TrimmedText.length;var LastChar=TrimmedText.charAt(Length-1);while(''+LastChar==' '){TrimmedText=TrimmedText.substring(0,TrimmedText.length-1);Length=TrimmedText.length;LastChar=TrimmedText.charAt(Length-1)}return TrimmedText}
function FORM_RemoveNonPrintingCharactersInTextbox(Textbox){var NoPrints=new RegExp("[\n\r\t]","g");Textbox.value=Textbox.value.replace(NoPrints," ")}
function FORM_EncodeXmlReservedCharacters(InpText){var TheText=DecodeReservedCharacters(InpText);TheText=TheText.replace(/&/g,"&amp;");TheText=TheText.replace(/</g,"&lt;");TheText=TheText.replace(/>/g,"&gt;");TheText=TheText.replace(/'/g,"&apos;");TheText=TheText.replace(/"/g, "&quot;");return TheText}
function FORM_DecodeXmlReservedCharacters(InpText){var TheText=InpText;TheText=TheText.replace(/&amp;/g,"&");TheText=TheText.replace(/&lt;/g,"<");TheText=TheText.replace(/&gt;/g,">");TheText=TheText.replace(/&apos;/g,"'");TheText=TheText.replace(/&quot;/g,'"');return TheText}
function FORM_NoBlanks(InpString){var Blank=new RegExp(" ","g");var OutString;OutString=InpString.replace(Blank,"");return OutString}
function FORM_RestrictToNumeralKey(EventObj){var KeysAllowed="0,8,46,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105";if(EventObj.shiftKey==true){EventObj.returnValue=false;return;}var keyCode=(EventObj.keyCode)?EventObj.keyCode:EventObj.which;if(KeysAllowed.indexOf(keyCode.toString())==-1){EventObj.returnValue=false}}
function FORM_RemoveNonNumerals(Textbox){Textbox.value=Textbox.value.replace(/[^0-9]/g,'')}
function FORM_RestrictToRange(TheTextbox,Minval,Maxval){var Val=TheTextbox.value;if(Val==''||isNaN(Val)||isNaN(Minval)||isNaN(Maxval)){return}else{if(parseFloat(Val)<parseFloat(Minval)){TheTextbox.value=Minval}else if(parseFloat(Val)>parseFloat(Maxval)){TheTextbox.value=Maxval}}}
function FORM_IsNumericInt(Inp){if(Inp=='')return false;var NumeralsOnly=Inp.replace(/[^0-9]/g,'');if(Inp==NumeralsOnly){return true}else{return false}}
function FORM_ValidateMinLength(TheTextbox,MinLength){if(TheTextbox.value.length<MinLength){alert('Field must have\nat least '+MinLength+' characters');TheTextbox.focus()}}
function FORM_ShadowCheckbox(FieldName,BooleanFormat){var BooleanVals=new Array();BooleanVals[0]="true";BooleanVals[1]="false";if(BooleanFormat!=""){if(BooleanFormat.search('/')!=-1)BooleanVals=BooleanFormat.split('/',2)}var TheForm=document.forms[0];if(eval("TheForm.frm"+FieldName+".checked")){eval("TheForm."+FieldName+".value = '"+BooleanVals[0]+"'")}else{eval("TheForm."+FieldName+".value = '"+BooleanVals[1]+"'")}}
function FORM_AssignHiddenValue(FieldName,OptionType){if(!OptionType){OptionType=''}var TheForm=document.forms[0];var ListValue;if(OptionType==''){ListValue=eval("TheForm.frm"+FieldName+"Options.options[TheForm.frm"+FieldName+"Options.selectedIndex].value")}else if(OptionType=='radio'){ListValue=eval("TheForm.frm"+FieldName+"Options.value")}if(ListValue=="Other"){eval("TheForm."+FieldName+".value = TheForm.frm"+FieldName+"Other.value")}else{eval("TheForm."+FieldName+".value = ListValue");if(eval("TheForm.frm"+FieldName+"Other.value != ''")){eval("TheForm.frm"+FieldName+"Other.value = ''")}}}
function FORM_SelectRadioBtnByHiddenValue(FieldName,TheForm){var HiddenFieldValue;eval('HiddenFieldValue = TheForm.'+FieldName+'.value');var TheOptionGroup;eval('TheOptionGroup = TheForm.frm'+FieldName);for(var n=1;n<=TheOptionGroup.length;n++){if(TheOptionGroup[n-1].value==HiddenFieldValue){TheOptionGroup.selectedIndex=n-1;break}}}
function FORM_ValidateEmail(Email){var checkbeg=/^[.+]/;var checkmid=/@[\w\-]+\./;var checkend=/\..{2,3}$/;if((Email.search(checkbeg)!=-1)||(Email.search(checkmid)==-1)||(Email.search(checkend)==-1)){return false}else{return true}}
function FORM_ValidateDateInTextbox(Textbox){if(Textbox.value=='')return;if(!IsADate(Textbox.value)){alert(Textbox.value+' is not a valid date');Textbox.focus()}}
function FORM_IsADate(InpToTest){var aDate=new Date(InpToTest);if(aDate.getDay()){return true}else{return false}}
function FORM_Now(timezone){var T,N,MonthNames;MonthNames=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");T=new Date();if(timezone==null){timezone=""}if(timezone.toLowerCase()=="utc"){N=T.getUTCDate()+" "+MonthNames[T.getUTCMonth()]+" "+T.getUTCFullYear()+" "+T.getUTCHours()+":"+T.getUTCMinutes()+":"+T.getUTCSeconds()}else{N=T.getDate()+" "+MonthNames[T.getMonth()]+" "+T.getFullYear()+" "+T.getHours()+":"+T.getMinutes()+":"+T.getSeconds()}return N}
function FORM_NowArray(){var T,N,MonthNames;var NowArray=new Array();MonthNames=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");T=new Date();N=T.getUTCDate()+" "+MonthNames[T.getUTCMonth()]+" "+T.getUTCFullYear()+" "+T.getUTCHours()+":"+T.getUTCMinutes()+":"+T.getUTCSeconds();NowArray[1]=N;NowArray[2]=T.getTimezoneOffset();N=T.getDate()+" "+MonthNames[T.getMonth()]+" "+T.getFullYear()+" "+T.getHours()+":"+T.getMinutes()+":"+T.getSeconds();NowArray[3]=N;return NowArray}
function FORM_GetHoursFromUTC(){var TheDate=new Date();return TheDate.getTimezoneOffset()/60}
function FORM_GetMinutesFromUTC(){var TheDate=new Date();return TheDate.getTimezoneOffset()}
function FORM_OneZero(IsTrue){if(IsTrue)return "1";else return "0"}
function FORM_TF(IsOne){if(IsOne==1)return true;else return false}
function FORM_OptionGroupValue(OptionGroup){var NumItems=OptionGroup.length;for(var n=1;n<=NumItems;n++){if(OptionGroup[n-1].checked){return OptionGroup[n-1].value}}}
function FORM_IndexOfListValue(List,Val){var NumItems=List.length;for(var n=1;n<=NumItems;n++){if(List[n-1].value==Val)return n-1}return-1}
function FORM_AutoTab(TheTextbox,Action){switch(Action){case "check_previous":var PreviousTextbox=TheTextbox.form[FORM_GetFormElementIndex(TheTextbox)-1];if(PreviousTextbox.value.length<PreviousTextbox.maxLength){PreviousTextbox.focus();if(PreviousTextbox.value.length>0){if(PreviousTextbox.createTextRange()){var TextRangeObj=PreviousTextbox.createTextRange();TextRangeObj.findText(PreviousTextbox.value);TextRangeObj.move("character",PreviousTextbox.value.length);TextRangeObj.select()}}return}break;case "check_current":if(TheTextbox.value.length==TheTextbox.maxLength){var NextTextbox=TheTextbox.form[FORM_GetFormElementIndex(TheTextbox)+1];NextTextbox.focus();return}break;default:var Msg="Invalid Action argument ("+Action+") in FORM_AutoTab(TheTextbox, Action)\nMust be one of 'check_previous' and 'check_current'";alert(Msg);break}}
function FORM_GetFormElementIndex(FormElement){var index=-1,i=0,found=false;while(i<FormElement.form.length&&index==-1){if(FormElement.form[i]==FormElement){index=i}else{i++}}return index}

