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){},onElementValidate:function(E,F){}},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();}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))||$(B.readAttribute("advice"));},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","Ce champ est obligatoire.",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","L'adresse email n'est pas valide",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);});}]]);
