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