var Validator=Class.create();Validator.prototype={initialize:function(l,A,L,B){if(typeof L=="function"){this.options=$H(B);this._test=L;}else{this.options=$H(L);this._test=function(){return true;};}this.error=A||"Validation failed.";this.className=l;},test:function(B,A){return (this._test(B,A)&&this.options.all(function(l){return Validator.methods[l.key]?Validator.methods[l.key](B,A,l.value):true;}));}};Validator.methods={pattern:function(B,l,A){return Validation.get("IsEmpty").test(B)||A.test(B);},minLength:function(B,l,A){return B.length>=A;},maxLength:function(B,l,A){return B.length<=A;},min:function(B,l,A){return B>=parseFloat(A);},max:function(B,l,A){return B<=parseFloat(A);},notOneOf:function(B,l,A){return $A(A).all(function(L){return B!=L;});},oneOf:function(B,l,A){return $A(A).any(function(L){return B==L;});},is:function(B,l,A){return B==A;},isNot:function(B,l,A){return B!=A;},equalToField:function(B,l,A){return B==$F(A);},notEqualToField:function(B,l,A){return B!=$F(A);},include:function(B,l,A){return $A(A).all(function(L){return Validation.get(L).test(B,l);});}};var Validation=Class.create();Validation.prototype={initialize:function(l,B){this.options=Object.extend({onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,onFormValidate:function(Z,Q){},onElementValidate:function(Z,Q){}},B||{});this.form=$(l);if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false);}if(this.options.immediate){var A=this.options.useTitles;var L=this.options.onElementValidate;Form.getElements(this.form).each(function(Z){Event.observe(Z,"blur",function(Q){Validation.validate(Event.element(Q),{useTitle:A,onElementValidate:L});});});}},onSubmit:function(B){if(!this.validate()){Event.stop(B);}},validate:function(){var B=false;var A=this.options.useTitles;var l=this.options.onElementValidate;if(this.options.stopOnFirst){B=Form.getElements(this.form).all(function(L){return Validation.validate(L,{useTitle:A,onElementValidate:l});});}else{B=Form.getElements(this.form).collect(function(L){return Validation.validate(L,{useTitle:A,onElementValidate:l});}).all();}if(!B&&this.options.focusOnError){Form.getElements(this.form).findAll(function(L){return $(L).hasClassName("validation-failed");}).first().focus();}this.options.onFormValidate(B,this.form);return B;},reset:function(){Form.getElements(this.form).each(Validation.reset);}};Object.extend(Validation,{validate:function(l,B){B=Object.extend({useTitle:false,onElementValidate:function(L,Z){}},B||{});l=$(l);var A=l.classNames();return result=A.all(function(L){var Z=Validation.test(L,l,B.useTitle);B.onElementValidate(Z,l);return Z;});},test:function(A,H,h){var f=Validation.get(A);var B="__advice"+A.camelize();try{if(Validation.isVisible(H)&&!f.test($F(H),H)){if(!H[B]){var L=Validation.getAdvice(A,H);if(L==null){var Z=h?((H&&H.title)?H.title:f.error):f.error;L="<div class=\"validation-advice\" id=\"advice-"+A+"-"+Validation.getElmID(H)+"\" style=\"display:none\">"+Z+"</div>";switch(H.type.toLowerCase()){case "checkbox":case "radio":var l=H.parentNode;if(l){new Insertion.Bottom(l,L);}else{new Insertion.After(H,L);}break;default:new Insertion.After(H,L);}L=Validation.getAdvice(A,H);}if(typeof Effect=="undefined"){L.style.display="block";}else{new Effect.Appear(L,{duration:1});}}H[B]=true;H.removeClassName("validation-passed");H.addClassName("validation-failed");return false;}else{var L=Validation.getAdvice(A,H);if(L!=null){L.hide();}H[B]="";H.removeClassName("validation-failed");H.addClassName("validation-passed");return true;}}catch(Q){throw (Q);}},isVisible:function(B){while(B.tagName!="BODY"){if(!$(B).visible()){return false;}B=B.parentNode;}return true;},getAdvice:function(B,A){return $("advice-"+B+"-"+Validation.getElmID(A))||$("advice-"+Validation.getElmID(A));},getElmID:function(B){return B.id?B.id:B.name;},reset:function(A){A=$(A);var B=A.classNames();B.each(function(L){var Z="__advice"+L.camelize();if(A[Z]){var l=Validation.getAdvice(L,A);l.hide();A[Z]="";}A.removeClassName("validation-failed");A.removeClassName("validation-passed");});},add:function(L,l,Z,A){var B={};B[L]=new Validator(L,l,Z,A);Object.extend(Validation.methods,B);},addAllThese:function(B){var A={};$A(B).each(function(l){A[l[0]]=new Validator(l[0],l[1],l[2],(l.length>3?l[3]:{}));});Object.extend(Validation.methods,A);},get:function(B){return Validation.methods[B]?Validation.methods[B]:Validation.methods["_LikeNoIDIEverSaw_"];},methods:{"_LikeNoIDIEverSaw_":new Validator("_LikeNoIDIEverSaw_","",{})}});Validation.add("IsEmpty","",function(B){return ((B==null)||(B.length==0));});Validation.addAllThese([["required","This is a required field.",function(B){return !Validation.get("IsEmpty").test(B);}],["validate-number","Please enter a valid number in this field.",function(B){return Validation.get("IsEmpty").test(B)||(!isNaN(B)&&!/^\s+$/.test(B));}],["validate-digits","Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.",function(B){return Validation.get("IsEmpty").test(B)||!/[^\d]/.test(B);}],["validate-alpha","Please use letters only (a-z) in this field.",function(B){return Validation.get("IsEmpty").test(B)||/^[a-zA-Z]+$/.test(B);}],["validate-alphanum","Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.",function(B){return Validation.get("IsEmpty").test(B)||!/\W/.test(B);}],["validate-date","Please enter a valid date.",function(B){var A=new Date(B);return Validation.get("IsEmpty").test(B)||!isNaN(A);}],["validate-email","Please enter a valid email address. For example fred@domain.com .",function(B){return Validation.get("IsEmpty").test(B)||/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(B);}],["validate-url","Please enter a valid URL.",function(B){return Validation.get("IsEmpty").test(B)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(B);}],["validate-date-au","Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.",function(B){if(Validation.get("IsEmpty").test(B)){return true;}var A=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!A.test(B)){return false;}var l=new Date(B.replace(A,"$2/$1/$3"));return (parseInt(RegExp.$2,10)==(1+l.getMonth()))&&(parseInt(RegExp.$1,10)==l.getDate())&&(parseInt(RegExp.$3,10)==l.getFullYear());}],["validate-currency-dollar","Please enter a valid $ amount. For example $100.00 .",function(B){return Validation.get("IsEmpty").test(B)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(B);}],["validate-selection","Please make a selection",function(B,A){return A.options?A.selectedIndex>0:!Validation.get("IsEmpty").test(B);}],["validate-one-required","Please select one of the above options.",function(B,L){var l=L.parentNode;var A=l.getElementsByTagName("INPUT");return $A(A).any(function(Z){return $F(Z);});}]]);