Event.observe(window,"load",function(){$$("form.validate").each(function(B){$(B).validator=new Validation(B)})});var Validator=Class.create();Validator.prototype={initialize:function(F,G,E,H){if(typeof E=="function"){this.options=$H(H);this._test=E}else{this.options=$H(E);this._test=function(){return true}}this.error=G||"Validation failed.";this.className=F},test:function(D,C){return(this._test(D,C)&&this.options.all(function(A){return Validator.methods[A.key]?Validator.methods[A.key](D,C,A.value):true}))}};Validator.methods={pattern:function(E,F,D){return Validation.get("IsEmpty").test(E)||D.test(E)},minLength:function(E,F,D){return E.length>=D},maxLength:function(E,F,D){return E.length<=D},min:function(E,F,D){return E>=parseFloat(D)},max:function(E,F,D){return E<=parseFloat(D)},notOneOf:function(E,F,D){return $A(D).all(function(A){return E!=A})},oneOf:function(E,F,D){return $A(D).any(function(A){return E==A})},is:function(E,F,D){return E==D},isNot:function(E,F,D){return E!=D},equalToField:function(E,F,D){return E==$F(D)},notEqualToField:function(E,F,D){return E!=$F(D)},include:function(E,F,D){return $A(D).all(function(A){return Validation.get(A).test(E,F)})}};var Validation=Class.create();Validation.prototype={initialize:function(F,H){this.options=Object.extend({onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,onFormValidate:function(A,B){},onElementValidate:function(A,B){}},H||{});this.form=$(F);if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false)}if(this.options.immediate){var G=this.options.useTitles;var E=this.options.onElementValidate;Form.getElements(this.form).each(function(A){Event.observe(A,"blur",function(B){Validation.validate(Event.element(B),{useTitle:G,onElementValidate:E})})})}},onSubmit:function(B){if(!this.validate()){Event.stop(B)}},validate:function(){var E=false;var D=this.options.useTitles;var F=this.options.onElementValidate;if(this.options.stopOnFirst){E=Form.getElements(this.form).all(function(A){return Validation.validate(A,{useTitle:D,onElementValidate:F})})}else{E=Form.getElements(this.form).collect(function(A){return Validation.validate(A,{useTitle:D,onElementValidate:F})}).all()}if(!E&&this.options.focusOnError){Form.getElements(this.form).findAll(function(A){return $(A).hasClassName("validation-failed")}).first().focus()}this.options.onFormValidate(E,this.form);return E},reset:function(){Form.getElements(this.form).each(Validation.reset)}};Object.extend(Validation,{validate:function(F,E){E=Object.extend({useTitle:false,onElementValidate:function(A,B){}},E||{});F=$(F);var D=F.classNames();return result=D.all(function(A){var B=Validation.test(A,F,E.useTitle);E.onElementValidate(B,F);return B})},test:function(M,I,K){var O=Validation.get(M);var J="__advice"+M.camelize();try{if(Validation.isVisible(I)&&!O.test($F(I),I)){var N=Validation.getAdvice(M,I);if(N!=null){N.style.display="block";$(N).up(".adviceContainer").show()}I[J]=true;I.removeClassName("validation-passed");I.addClassName("validation-failed");return false}else{var N=Validation.getAdvice(M,I);if(N!=null){N.hide();var P=$(N).up(".adviceContainer");if($(P).select("li").findAll(function(A){return A.visible()}).length==0){P.hide()}}I[J]="";I.removeClassName("validation-failed");I.addClassName("validation-passed");return true}}catch(L){throw (L)}},isVisible:function(B){while(B.tagName!="BODY"){if(!$(B).visible()){return false}B=B.parentNode}return true},getAdvice:function(D,C){return $("advice-"+D+"-"+Validation.getElmID(C))||$("advice-"+Validation.getElmID(C))},getElmID:function(B){return B.id?B.id:B.name},reset:function(C){C=$(C);var D=C.classNames();D.each(function(A){var F="__advice"+A.camelize();if(C[F]){var B=Validation.getAdvice(A,C);B.hide();C[F]=""}C.removeClassName("validation-failed");C.removeClassName("validation-passed")})},add:function(F,G,J,H){var I={};I[F]=new Validator(F,G,J,H);Object.extend(Validation.methods,I)},addAllThese:function(D){var C={};$A(D).each(function(A){C[A[0]]=new Validator(A[0],A[1],A[2],(A.length>3?A[3]:{}))});Object.extend(Validation.methods,C)},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(D){var C=new Date(D);return Validation.get("IsEmpty").test(D)||!isNaN(C)}],["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-phone","Please enter a valid phone number",function(B){return Validation.get("IsEmpty").test(B)||/^[(]?[0-9]{3}[)-.]? ?[0-9]{3}[-. ]?[0-9]{4}$/.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(E){if(Validation.get("IsEmpty").test(E)){return true}var D=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!D.test(E)){return false}var F=new Date(E.replace(D,"$2/$1/$3"));return(parseInt(RegExp.$2,10)==(1+F.getMonth()))&&(parseInt(RegExp.$1,10)==F.getDate())&&(parseInt(RegExp.$3,10)==F.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(D,C){return C.options?C.selectedIndex>0:!Validation.get("IsEmpty").test(D)}],["validate-one-required","Please select one of the above options.",function(H,E){var F=E.parentNode;var G=F.getElementsByTagName("INPUT");return $A(G).any(function(A){return $F(A)})}],["validate-compare-date","Starting Date must occur before Ending Date",function(O,Q){var J={lt:function(A,B){return A<B},lte:function(A,B){return A<=B},gt:function(A,B){return A>B},gte:function(A,B){return A>=B},e:function(A,B){return A==B}};var L=Q.readAttribute("validateOptions");var N=L.evalJSON(true);if($(N.sister).value==""){return true}var K=new Date();var M=new Date();var P=O.split("/");var R=$(N.sister).value.split("/");K.setFullYear(P[2],P[0],P[1]);M.setFullYear(R[2],R[0],R[1]);return(J[N.type])(K,M)}],["validate-compare-fields","Fields must be exactly the same",function(I,J){var H={lt:function(A,B){return A<B},lte:function(A,B){return A<=B},gt:function(A,B){return A>B},gte:function(A,B){return A>=B},e:function(A,B){return A==B}};var F=J.readAttribute("validateOptions");var G=F.evalJSON(true);return(H[G.type])(I,$(G.sister).value)}],["validate-compare-value","Fields must be exactly the same",function(I,J){var H={lt:function(A,B){return A<B},lte:function(A,B){return A<=B},gt:function(A,B){return A>B},gte:function(A,B){return A>=B},e:function(A,B){return A==B},ne:function(A,B){return !(A==B)}};var F=J.readAttribute("validateOptions");var G=F.evalJSON(true);console.log(G);return(H[G.type])(I,G.value)}],["validate-us-postal","Please enter a valid US zip code.",function(E,F){E=E.toUpperCase();var D=/((^\d{5}([- |]\d{4})?$)|(^[A-Z]\d[A-Z][- |]\d[A-Z]\d$))/;if(Validation.get("IsEmpty").test(E)||D.test(E)){$(F).value=E;return true}return false}]]);