var Validator=Class.create();Validator.prototype={initialize:function(C,B,D,A){if(typeof D=="function"){this.options=$H(A);this._test=D}else{this.options=$H(D);this._test=function(){return true}}this.error=B||"Validation failed.";this.className=C},test:function(A,B){return(this._test(A,B)&&this.options.all(function(C){return Validator.methods[C.key]?Validator.methods[C.key](A,B,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(C,A){this.options=Object.extend({onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,onFormValidate:function(E,F){return E},onElementValidate:function(E,F){return E}},A||{});this.form=$(C);if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false)}if(this.options.immediate){var B=this.options.useTitles;var D=this.options.onElementValidate;Form.getElements(this.form).each(function(E){Event.observe(E,"blur",function(F){Validation.validate(Event.element(F),{useTitle:B,onElementValidate:D})})})}},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()}A=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(D,E){}},A||{});C=$(C);var B=C.classNames();return result=B.all(function(D){var E=Validation.test(D,C,A.useTitle);A.onElementValidate(E,C);return E})},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='<div class="validation-advice" id="advice-'+B+"-"+Validation.getElmID(G)+'" style="display:none">'+E+"</div>";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(A,B){return $("advice-"+A+"-"+Validation.getElmID(B))||$("advice-"+Validation.getElmID(B))},getElmID:function(A){return A.id?A.id:A.name},reset:function(B){B=$(B);var A=B.classNames();A.each(function(D){var E="__advice"+D.camelize();if(B[E]){var C=Validation.getAdvice(D,B);C.hide();B[E]=""}B.removeClassName("validation-failed");B.removeClassName("validation-passed")})},add:function(D,C,E,B){var A={};A[D]=new Validator(D,C,E,B);Object.extend(Validation.methods,A)},addAllThese:function(A){var B={};$A(A).each(function(C){B[C[0]]=new Validator(C[0],C[1],C[2],(C.length>3?C[3]:{}))});Object.extend(Validation.methods,B)},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(A){var B=new Date(A);return Validation.get("IsEmpty").test(A)||!isNaN(B)}],["validate-email","Please enter a valid email address.",function(A){return Validation.get("IsEmpty").test(A)||/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.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(A,B){return B.options?B.selectedIndex>0:!Validation.get("IsEmpty").test(A)}],["validate-one-required","Please select one of the above options.",function(A,D){var C=D.parentNode;var B=C.getElementsByTagName("INPUT");return $A(B).any(function(E){return $F(E)})}]]);