Validator=Class.create();
Validator.prototype={initialize:function(_1,_2,_3){
this.test=_3?_3:function(){
return true;
};
this.error=_2?_2:"Validation failed.";
this.className=_1;
}};
var Validation=Class.create();
Validation.prototype={initialize:function(_4,_5){
this.options=Object.extend({stopOnFirst:false,immediate:false,focusOnError:true},_5||{});
this.form=$(_4);
Event.observe(this.form,"submit",this.onSubmit.bind(this),false);
if(this.options.immediate){
Form.getElements(this.form).each(function(_6){
Event.observe(_6,"blur",function(ev){
Validation.validate(Event.element(ev).id);
});
});
}
},onSubmit:function(ev){
if(!this.validate()){
Event.stop(ev);
if(this.options.focusOnError){
$$(".validation-failed").first().focus();
}
}
},validate:function(){
if(this.options.stopOnFirst){
return Form.getElements(this.form).all(Validation.validate);
}else{
return Form.getElements(this.form).collect(Validation.validate).all();
}
},reset:function(){
Form.getElements(this.form).each(Validation.reset);
}};
Object.extend(Validation,{validate:function(_9,_a,_b){
var _b=Object.extend({},_b||{});
_9=$(_9);
var cn=_9.classNames();
return result=cn.all(Validation.test.bind(_9));
},test:function(_d){
var v=Validation.get(_d);
var _f="__advice"+_d.camelize();
if(Validation.isVisible(this)&&!v.test($F(this))){
if(!this[_f]){
var _10=Validation.getAdvice(_d,this.id);
if(typeof _10=="undefined"){
_10=document.createElement("div");
_10.appendChild(document.createTextNode(v.error));
_10.className="validation-advice";
_10.id="advice-"+_d+"-"+this.id;
_10.style.display="none";
this.parentNode.insertBefore(_10,this.nextSibling);
}
if(typeof Effect=="undefined"){
_10.style.display="block";
}else{
new Effect.Appear(_10.id,{duration:1});
}
}
this[_f]=true;
this.removeClassName("validation-passed");
this.addClassName("validation-failed");
return false;
}else{
var _10=Validation.getAdvice(_d,this.id);
if(typeof _10!="undefined"){
_10.hide();
}
this[_f]="";
this.removeClassName("validation-failed");
this.addClassName("validation-passed");
return true;
}
},isVisible:function(elm){
while(elm.tagName!="BODY"){
if(!$(elm).visible()){
return false;
}
elm=elm.parentNode;
}
return true;
},getAdvice:function(_12,id){
var _14=Try.these(function(){
return $("advice-"+_12+"-"+id);
},function(){
return $("advice-"+id);
});
return _14;
},reset:function(elm){
var cn=new Element.ClassNames(elm);
cn.each(function(_17){
var _18="__advice"+_17.camelize();
if(elm[_18]){
var _19=Validation.getAdvice(_17,elm.id);
_19.hide();
elm[_18]="";
}
elm.removeClassName("validation-failed");
elm.removeClassName("validation-passed");
});
},add:function(_1a,_1b,_1c,_1d){
var nv={};
nv[_1a]=new Validator(_1a,_1b,_1c,_1d);
Object.extend(Validation.methods,nv);
},addAllThese:function(_1f){
var nv={};
$A(_1f).each(function(_21){
nv[_21[0]]=new Validator(_21[0],_21[1],_21[2],(_21.length>3?_21[3]:{}));
});
Object.extend(Validation.methods,nv);
},get:function(_22){
return Validation.methods[_22]?Validation.methods[_22]:new Validator();
},methods:{}});
Validation.add("IsEmpty","",function(v){
return ((v==null)||(v.length==0)||/^\s+$/.test(v));
});
Validation.addAllThese([["required","The above is a required field.",function(v){
return !Validation.get("IsEmpty").test(v);
}],["validate-number","Please use numbers only in the above field.",function(v){
return Validation.get("IsEmpty").test(v)||!isNaN(v);
}],["validate-digits","Please use numbers only in the above field.",function(v){
return Validation.get("IsEmpty").test(v)||!/[^\d]/.test(v);
}],["validate-alpha","Please use letters only (a-z) in the above 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 the above 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 _2a=new Date(v);
return Validation.get("IsEmpty").test(v)||!isNaN(_2a);
}],["validate-email","Please enter a valid email address. For example fred@domain.com .",function(v){
return Validation.get("IsEmpty").test(v)||/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.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)){
var _2d=31;
if(/^(\d{2})\/(\d{2})\/(\d{4})$/.test(v)){
if(RegExp.$2=="02"){
_2d=29;
}
if((RegExp.$1<=_2d)&&(RegExp.$2<=12)){
return true;
}else{
return false;
}
}else{
return false;
}
}else{
return true;
}
}],["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);
}]]);


