
var Validator={name:"validator",init:function(){var _1=$$(".validator");_1.each((function(_2){_2.getElements().each(this.registerElemListeners.bind(this));_2.onsubmit=this.validateSubmit.bindAsEventListener(this);_2.descendants().each(function(_3){if(_3.readAttribute("validation")=="submit"){Event.observe(_3,"click",Validator.submitTarget.bindAsEventListener(Validator));}});}).bind(this));},registerElemListeners:function(_4){var _5=_4.readAttribute("validation");var _6=this;if(_5=="password"){_6=$(_4.readAttribute("passid"));Event.observe(_6,"keyup",(function(_7){return this.keyup(_4);}).bindAsEventListener(this));Event.observe(_6,"blur",(function(_8){return this.validate(_4);}).bindAsEventListener(this));}
if(_4.tagName.toLowerCase()=="select"||(_4.readAttribute("type")&&$(_4).readAttribute("type").toLowerCase()=="checkbox")){Event.observe(_4,"change",(function(_9){return this.validate(Event.element(_9));}).bindAsEventListener(this));}else{Event.observe(_4,"keyup",(function(_a){return this.keyup(Event.element(_a));}).bindAsEventListener(this));Event.observe(_4,"blur",(function(_b){return this.validate(Event.element(_b));}).bindAsEventListener(this));}
_4.origColor=_4.style.backgroundColor;_4.untouched=true;},submitTarget:function(_c){var _d=$$(".validator");var _e=Event.element(_c);var _f=_d.find(function(_10){return _e.descendantOf(_10);});if(!_f){alert("Submit button was not properly placed on the page!");}
if(_f.submitted){return;}
var _11=_f.getElements().map(Validator.validate).all();if(_11){if(_f.SOMITarget){_f.SOMITarget();}
_f.submitted=true;_f.submit();}},validateSubmit:function(_12){var _13=Event.element(_12);var _14=_13.getElements().map(Validator.validate);var res=_14.all();if(res){_13.getInputs("submit").each(function(_16){_16.disable();});}
if(!res){Event.stop(_12);}},setError:function(_17,_18){if(!_17.stdError){_17.stdError=$(_17.name+"Error");}
var _19=new Array(null,_17.stdError,_17.displayID);$R(0,_19.size(),true).each(function(num){if(!_19[num]){return;}
if(num==_18){$(_19[num]).show();}else{$(_19[num]).hide();}});if(_18==0){_17.style.backgroundColor=_17.origColor;}else{_17.style.backgroundColor=Validator.alert_color;}
if(_17.readAttribute("validation")=="password"){this.setError($(_17.readAttribute("passid")),_18);}},keyup:function(_1b){if(!_1b.untouched){this.validate(_1b);}},recursiveVisible:function(_1c){return _1c.ancestors().concat([_1c]).all(function(e){return e.visible?e.visible():true;});},validate:function(_1e){_1e.untouched=false;var _1f=$(_1e).readAttribute("validation");var _20=0;if(_1f==null){return true;}
if(!Validator.recursiveVisible(_1e)){return true;}
if(_20==0&&_1f.indexOf("required")!=-1){_20=Validator.val_required(_1e)?0:1;}
if(_20==0&&_1f.indexOf("dropdownstrict")!=-1){_20=Validator.val_dropdownstrict(_1e)?0:1;}
if(_20==0&&_1f.indexOf("postalcode")!=-1){_20=Validator.val_postalcode(_1e)?0:1;}
if(_20==0&&_1f.indexOf("containsdigits")!=-1){_20=Validator.val_containsdigits(_1e)?0:1;}
if(_20==0&&_1f.indexOf("email")!=-1){_20=Validator.val_email(_1e)?0:1;}
if(_20==0&&_1f.indexOf("password")!=-1){var _21=$(_1e.readAttribute("passid"));var _22=_1e.value==_21.value;if(_21.untouched){_22=true;}
_20=_22?0:1;}
if(_20==0&&_1f.indexOf("twowords")!=-1){_20=Validator.val_twowords(_1e)?0:1;}
if(_20==0&&_1f.indexOf("telephone")!=-1){_20=Validator.val_telephone(_1e)?0:1;}
if(_20==0&&_1f.indexOf("servercall")!=-1){_1e.lastSCQuery=_1e.value;Validator.val_servercall(_1e);_20=_1e.servercallPassed?0:2;}
Validator.setError(_1e,_20);return _20==0;},val_required:function(_23){if(_23.tagName.toLowerCase().startsWith("select")){if(_23.selectedIndex==-1){return false;}
if(_23.options[_23.selectedIndex].innerHTML.startsWith("Select")){return false;}
if(_23.options[_23.selectedIndex].value.startsWith("none")){return false;}
return true;}else{if(_23.type.startsWith("text")){return!(_23.value.blank());}else{if(_23.type.startsWith("checkbox")){return _23.checked;}else{alert("Form scripting error. Unsupported input type "+_23.type+" for validation type 'required'");return true;}}}},val_dropdownstrict:function(_24){return _24.strict;},val_email:function(_25){var val=_25.value;var at=val.indexOf("@");var dot=val.lastIndexOf(".");return(at!=-1&&dot!=-1&&at>=1&&(dot-at)>=3&&(val.length-dot)>=3);},val_postalcode:function(_29){var val=_29.value;if(val.length==0){return true;}
var re=/[a-z][0-9][a-z][ ]?[0-9][a-z][0-9]/i;return val.match(re);},val_containsdigits:function(_2c){var val=_2c.value;if(val.length==0){return true;}
for(var i=0;i<val.length;i++){if(val[i]>="0"&&val[i]<="9"){return true;}}
return false;},val_twowords:function(_2f){return _2f.value.strip().indexOf(" ")!=-1;},val_telephone:function(_30){var _31=0;if(_30.value.length==0){return true;}
_30.value.strip().toArray().each(function(c){if(c>="0"&&c<="9"){_31++;}});return _31==10;},val_servercall:function(_33){var _34=_33.value;if(!_33.displayID){_33.displayID=$(_33.readAttribute("displayID"));}
if(!_33.calltype){_33.calltype=_33.readAttribute("calltype");}
if(_33.servercallPassed===undefined){_33.servercallPassed=true;}
if(!_33.calltype||!_33.displayID){alert("Error: either \"calltype\" or \"displayID\" have not been set for element "+_33.name+" using validation servercall.");return;}
if(_33.SCInProgress===true){return;}
_33.SCInProgress=true;new Ajax.Request(this.validator_url,{method:"post",parameters:{type:_33.calltype,value:_33.value},onSuccess:function(_35){if(_33.value!=_34){_33.servercallPassed=true;}else{if(_35.responseText.indexOf("true")!=-1){_33.servercallPassed=true;}else{if(_35.responseText.indexOf("false")!=-1){_33.servercallPassed=false;}else{_33.servercallPassed=true;}}}
Validator.validate(_33);_33.SCInProgress=false;},onFailure:function(_36){alert("Ajax query failed.  Server unreachable at "+Validator.validator_url+". Will retry in 5 seconds.");_33.servercallPassed=true;_33.SCInProgress=false;}});},alert_color:"#990000",validator_url:"validator.php"};Event.observe(window,"load",function(){Validator.init();});