var Validator=Class.extend({init:function(A){this.callback=A;this.valid=null},isValid:function(){return false},validate:function(){var A=this.isValid();if(A!=this.valid){this.valid=A;if(this.callback){this.callback.apply(this,[A])}}return A}});var StringLengthValidator=Validator.extend({init:function(C,B,A,D){this._super(D);this.field=C;this.minLen=B;this.maxLen=A},isValid:function(){var A=this.field.value.trim().length;return A>=this.minLen&&A<=this.maxLen}});var RegexValidator=Validator.extend({init:function(B,A,C){this._super(C);this.field=B;this.regex=A},isValid:function(){var A=this.field.value;return this.regex.test(A)}});var EmailAddressValidator=RegexValidator.extend({init:function(A,B){this._super(A,/^[A-Z0-9._%+-]+\@[A-Z0-9.-]+\.[A-Z]{2,4}$/i,B)}});var NumberFieldValidator=RegexValidator.extend({init:function(D,B,C,A,E){this._super(D,B?/^\s*-?\d+(,\d\d\d)*(\.\d+)?$/:/^-?\d+(,\d\d\d)*\s*$/,E);this.fp=B;this.min=C;this.max=A},isValid:function(){if(!this._super()){return false}else{var A=this.field.value;var B=this.fp?A.toFloat():A.toInt();return !isNaN(B)&&B>=this.min&&B<=this.max}}});function DelayedValidationTrigger(C,D,A){this.delay=C;var B=0;this.needsValidation=function(){B=new Date().getTime();if(A){A()}window.setTimeout(function(){var E=new Date().getTime();if(E-B>=C){switch(typeof D){case"function":D();break;case"object":D.validate();break}}},C)}};