var g_oValidationTypes={currency:{regex:/^\$?[0-9\,\.]+$/,msg:"{fieldname} is a currency field. Only numbers, commas, and a decimal are allowed."},number:{regex:/^[0-9\.]+$/,msg:"{fieldname} requires numeric values only."},email:{regex:/^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/,msg:"{fieldname} must contain a valid email address."},alphanum:{regex:/^[a-zA-Z0-9_]+$/,msg:"{fieldname} must contain only letters and numbers."},alpha:{regex:/^[a-zA-Z_]+$/,msg:"{fieldname} must contain only letters."},url:{regex:/(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i,msg:"{fieldname} must be a valid URL. The format is invalid."}};
validateForm=function(oFormConfig){var frm;if(!document.forms[oFormConfig.formname]){alert("Could not find form "+oFormConfig.formname);return false}else{frm=document.forms[oFormConfig.formname]}var aErrorMessages=[];for(var i in oFormConfig.fields){oFieldConfig=oFormConfig.fields[i];if(oFieldConfig.required){if(!frm.elements[i].type){frm.elements[i].type=document.getElementById(i).tagName}switch(frm.elements[i].type){case"select":if(typeof oFieldConfig.noSelectionIndex!="undefined"){if(frm.elements[i].selectedIndex==oFieldConfig.noSelectionIndex){aErrorMessages.push({msg:"You must select a value for "+oFieldConfig.label,fld:i})
}}break;case"radio":bChecked=false;for(var index;index<frm.elements[i].length;index++){if(frm.elements[i][index].checked){bChecked=true}}if(!bChecked){aErrorMessages.push({msg:'You must select one of the options in the group "'+oFieldConfig.label+'"',fld:i})}case"checkbox":if(!frm.elements[i].checked){aErrorMessages.push({msg:'You must check the box labeled "'+oFieldConfig.label+'"',fld:i})}break;default:if(frm.elements[i].value.stripCurrency()==""){aErrorMessages.push({msg:oFieldConfig.label+" cannot be blank. Please enter a value.",fld:i})
}break}}if(oFieldConfig.type&&g_oValidationTypes[oFieldConfig.type]){switch(frm.elements[i].type){default:if(!g_oValidationTypes[oFieldConfig.type].regex.test(frm.elements[i].value.stripCurrency())){aErrorMessages.push({msg:g_oValidationTypes[oFieldConfig.type].msg.replace(/\{fieldname\}/,oFieldConfig.label),fld:i})}}}else{if(((oFieldConfig.type&&oFieldConfig.type=="custom"&&oFieldConfig.regex)||oFieldConfig.regex)&&oFieldConfig.msg){if(!oFieldConfig.regex.test(frm.elements[i].value.stripCurrency())){aErrorMessages.push({msg:oFieldConfig.msg.replace(/\{fieldname\}/,oFieldConfig.label),fld:i})
}}}if(oFieldConfig.range){bRangeFailed=false;if(typeof oFieldConfig.range.start!="undefined"){operator=(oFieldConfig.range.inclusive===false)?" <= ":" < ";expression=(frm.elements[i].value.stripCurrency()||0)+operator+(oFieldConfig.range.start||0);if(eval("("+expression+")")===true){bRangeFailed=true}}if(typeof oFieldConfig.range.end!="undefined"){operator=(oFieldConfig.range.inclusive===false)?" >= ":" > ";expression=(frm.elements[i].value.stripCurrency()||0)+operator+(oFieldConfig.range.end||0);if(eval("("+expression+")")===true){bRangeFailed=true
}}if(bRangeFailed){strOrEqual=(oFieldConfig.range.inclusive===false)?"or equal to ":"";sMsg=oFieldConfig.label+" must be ";aMsgParts=[];if(typeof oFieldConfig.range.start!="undefined"){aMsgParts.push("greater than "+strOrEqual+AddCommas(oFieldConfig.range.start))}if(typeof oFieldConfig.range.end!="undefined"){aMsgParts.push("less than "+strOrEqual+AddCommas(oFieldConfig.range.end))}aErrorMessages.push({msg:sMsg+aMsgParts.join(" and ")+".",fld:i})}}if(oFieldConfig.validation){if((result=oFieldConfig.validation(frm.elements[i],oFieldConfig))!==true){aErrorMessages.push({msg:result,fld:i})
}}RemoveClass(i,"calculator_field_error")}if(aErrorMessages.length>0){sMsg="There were some errors in the data you entered:\n\n";for(j=0;j<aErrorMessages.length;j++){AddClass(aErrorMessages[j].fld,"calculator_field_error");sMsg+=(j+1)+". "+aErrorMessages[j].msg+"\n"}if(!oFormConfig.suppresserrors){alert(sMsg)}if(oFormConfig.failure){oFormConfig.failure(oFormConfig)}return false}else{if(oFormConfig.success){oFormConfig.success(oFormConfig)}return true}};