var Validator=Class.create();
Validator.prototype={initialize:function(_1,_2,_3,_4){
if(typeof _3=="function"){
this.options=$H(_4);
this._test=_3;
}else{
this.options=$H(_3);
this._test=function(){
return true;
};
}
this.error=_2||"Validation failed.";
this.className=_1;
},test:function(v,_6){
return (this._test(v,_6)&&this.options.all(function(p){
return Validator.methods[p.key]?Validator.methods[p.key](v,_6,p.value):true;
}));
}};
Validator.methods={pattern:function(v,_9,_a){
return Validation.get("IsEmpty").test(v)||_a.test(v);
},minLength:function(v,_c,_d){
return v.length>=_d;
},maxLength:function(v,_f,opt){
return v.length<=opt;
},min:function(v,elm,opt){
return v>=parseFloat(opt);
},max:function(v,elm,opt){
return v<=parseFloat(opt);
},notOneOf:function(v,elm,opt){
return $A(opt).all(function(_1a){
return v!=_1a;
});
},oneOf:function(v,elm,opt){
return $A(opt).any(function(_1e){
return v==_1e;
});
},is:function(v,elm,opt){
return v==opt;
},isNot:function(v,elm,opt){
return v!=opt;
},equalToField:function(v,elm,opt){
return v==$F(opt);
},notEqualToField:function(v,elm,opt){
return v!=$F(opt);
},include:function(v,elm,opt){
return $A(opt).all(function(_2e){
return Validation.get(_2e).test(v,elm);
});
}};
var Validation=Class.create();
Validation.prototype={initialize:function(_2f,_30){
this.options=Object.extend({onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,onFormValidate:function(_31,_32){
},onElementValidate:function(_33,elm){
}},_30||{});
this.form=$(_2f);
if(this.options.onSubmit){
Event.observe(this.form,"submit",this.onSubmit.bind(this),false);
}
if(this.options.immediate){
var _35=this.options.useTitles;
var _36=this.options.onElementValidate;
Form.getElements(this.form).each(function(_37){
Event.observe(_37,"blur",function(ev){
Validation.validate(Event.element(ev),{useTitle:_35,onElementValidate:_36});
});
});
}
},onSubmit:function(ev){
if(!this.validate()){
Event.stop(ev);
}
},validate:function(){
var _3a=false;
var _3b=this.options.useTitles;
var _3c=this.options.onElementValidate;
if(this.options.stopOnFirst){
_3a=Form.getElements(this.form).all(function(elm){
return Validation.validate(elm,{useTitle:_3b,onElementValidate:_3c});
});
}else{
_3a=Form.getElements(this.form).collect(function(elm){
return Validation.validate(elm,{useTitle:_3b,onElementValidate:_3c});
}).all();
}
if(!_3a&&this.options.focusOnError){
Form.getElements(this.form).findAll(function(elm){
return $(elm).hasClassName("validation-failed");
}).first().focus();
}
this.options.onFormValidate(_3a,this.form);
return _3a;
},reset:function(){
Form.getElements(this.form).each(Validation.reset);
}};
Object.extend(Validation,{validate:function(elm,_41){
_41=Object.extend({useTitle:false,onElementValidate:function(_42,elm){
}},_41||{});
elm=$(elm);
var cn=elm.classNames();
return result=cn.all(function(_45){
var _46=Validation.test(_45,elm,_41.useTitle);
_41.onElementValidate(_46,elm);
return _46;
});
},test:function(_47,elm,_49){
var v=Validation.get(_47);
var _4b="__advice"+_47.camelize();
try{
if(Validation.isVisible(elm)&&!v.test($F(elm),elm)){
if(!elm[_4b]){
var _4c=Validation.getAdvice(_47,elm);
if(_4c==null){
var _4d=_49?((elm&&elm.title)?elm.title:v.error):v.error;
_4c="<div class=\"validation-advice\" id=\"advice-"+_47+"-"+Validation.getElmID(elm)+"\" style=\"display:none\">"+_4d+"</div>";
switch(elm.type.toLowerCase()){
case "checkbox":
case "radio":
var p=elm.parentNode;
if(p){
new Insertion.Bottom(p,_4c);
}else{
new Insertion.After(elm,_4c);
}
break;
default:
new Insertion.After(elm,_4c);
}
_4c=Validation.getAdvice(_47,elm);
}
if(typeof Effect=="undefined"){
_4c.style.display="block";
}else{
new Effect.Appear(_4c,{duration:1});
}
}
elm[_4b]=true;
elm.removeClassName("validation-passed");
elm.addClassName("validation-failed");
return false;
}else{
var _4f=Validation.getAdvice(_47,elm);
if(_4f!=null){
_4f.hide();
}
elm[_4b]="";
elm.removeClassName("validation-failed");
elm.addClassName("validation-passed");
return true;
}
}
catch(e){
throw (e);
}
},isVisible:function(elm){
while(elm.tagName!="BODY"){
if(!$(elm).visible()){
return false;
}
elm=elm.parentNode;
}
return true;
},getAdvice:function(_51,elm){
return $("advice-"+_51+"-"+Validation.getElmID(elm))||$("advice-"+Validation.getElmID(elm));
},getElmID:function(elm){
return elm.id?elm.id:elm.name;
},reset:function(elm){
elm=$(elm);
var cn=elm.classNames();
cn.each(function(_56){
var _57="__advice"+_56.camelize();
if(elm[_57]){
var _58=Validation.getAdvice(_56,elm);
_58.hide();
elm[_57]="";
}
elm.removeClassName("validation-failed");
elm.removeClassName("validation-passed");
});
},add:function(_59,_5a,_5b,_5c){
var nv={};
nv[_59]=new Validator(_59,_5a,_5b,_5c);
Object.extend(Validation.methods,nv);
},addAllThese:function(_5e){
var nv={};
$A(_5e).each(function(_60){
nv[_60[0]]=new Validator(_60[0],_60[1],_60[2],(_60.length>3?_60[3]:{}));
});
Object.extend(Validation.methods,nv);
},get:function(_61){
return Validation.methods[_61]?Validation.methods[_61]:Validation.methods["_LikeNoIDIEverSaw_"];
},methods:{"_LikeNoIDIEverSaw_":new Validator("_LikeNoIDIEverSaw_","",{})}});
Validation.add("IsEmpty","",function(v){
return ((v==null)||(v.length==0));
});
Validation.addAllThese([["required","This is a required field.",function(v){
return !Validation.get("IsEmpty").test(v);
}],["validate-number","Please enter a valid number in this field.",function(v){
return Validation.get("IsEmpty").test(v)||(!isNaN(v)&&!/^\s+$/.test(v));
}],["validate-digits","Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.",function(v){
return Validation.get("IsEmpty").test(v)||!/[^\d]/.test(v);
}],["validate-alpha","Please use letters only (a-z) in this field.",function(v){
return Validation.get("IsEmpty").test(v)||/^[a-zA-Z]+$/.test(v);
}],["validate-alphanum","Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.",function(v){
return Validation.get("IsEmpty").test(v)||!/\W/.test(v);
}],["validate-date","Please enter a valid date.",function(v){
var _69=new Date(v);
return Validation.get("IsEmpty").test(v)||!isNaN(_69);
}],["validate-email","Please enter a valid email address.",function(v){
return Validation.get("IsEmpty").test(v)||/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v);
}],["validate-url","Please enter a valid URL.",function(v){
return Validation.get("IsEmpty").test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v);
}],["validate-date-au","Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.",function(v){
if(Validation.get("IsEmpty").test(v)){
return true;
}
var _6d=/^(\d{2})\/(\d{2})\/(\d{4})$/;
if(!_6d.test(v)){
return false;
}
var d=new Date(v.replace(_6d,"$2/$1/$3"));
return (parseInt(RegExp.$2,10)==(1+d.getMonth()))&&(parseInt(RegExp.$1,10)==d.getDate())&&(parseInt(RegExp.$3,10)==d.getFullYear());
}],["validate-currency-dollar","Please enter a valid $ amount. For example $100.00 .",function(v){
return Validation.get("IsEmpty").test(v)||/^\$?\-?([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(v);
}],["validate-selection","Please make a selection",function(v,elm){
return elm.options?elm.selectedIndex>0:!Validation.get("IsEmpty").test(v);
}],["validate-one-required","Please select one of the above options.",function(v,elm){
var p=elm.parentNode;
var _75=p.getElementsByTagName("INPUT");
return $A(_75).any(function(elm){
return $F(elm);
});
}]]);

