var fValidator=new Class({options:{msgContainerTag:"div",msgClass:"fValidator-msg",styleInvalid:{"background-color":"#fcc","border-color":"#c00"},styleValid:{"background-color":"#fff","border-color":"#CCCCCC"},required:{type:"required",re:/[^.*]/,msg:""},alpha:{type:"alpha",re:/^[a-z ρσνια._-]+$/i,msg:""},alphanum:{type:"alphanum",re:/^[a-z0-9 ._-]+$/i,msg:""},integer:{type:"integer",re:/^[-+]?\d+$/,msg:""},alphanumespaniol:{type:"alphanumespaniol",re:/^[a-z0-9ΡΑΙΝΣΪρσνια._-]+$/i,msg:""},real:{type:"real",re:/^[-+]?\d*\.?\d+$/,msg:""},dni:{type:"real",re:/^[-+]?\d?\d+$/,msg:""},date:{type:"date",re:/^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$/,msg:""},email:{type:"email",re:/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,msg:""},phone:{type:"phone",re:/^[\d\s ()-]+$/,msg:""},url:{type:"url",re:/^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i,msg:""},confirm:{type:"confirm",msg:""},onValid:Class.empty,onInvalid:Class.empty},initialize:function(form,options){this.form=$(form);this.setOptions(options);this.fields=this.form.getElements("*[class^=fValidate]");this.validations=[];this.fields.each(function(element){if(!this._isChildType(element))element.setStyles(this.options.styleNeutral);element.cbErr=0;var classes=element.getProperty("class").split(" ");classes.each(function(klass){if(klass.match(/^fValidate(\[.+\])$/)){var aFilters=eval(klass.match(/^fValidate(\[.+\])$/)[1]);for(var i=0;i<aFilters.length;i++){if(this.options[aFilters[i]])this.register(element,this.options[aFilters[i]]);if(aFilters[i].charAt(0)=="=")this.register(element,$extend(this.options.confirm,{idField:aFilters[i].substr(1)}))}}}.bind(this))}.bind(this));this.form.addEvents({submit:this._onSubmit.bind(this),reset:this._onReset.bind(this)})},register:function(a,b){a=$(a);this.validations.push([a,b]);if(a.type=="file")a.addEvent("change",function(){this._validate(a,b)}.bind(this));else a.addEvent("blur",function(){this._validate(a,b)}.bind(this))},_isChildType:function(a){var b=a.type.toLowerCase();if(b=="radio"||b=="checkbox")return true;return false},_validate:function(a,b){if(a.type!="file")switch(b.type){case"confirm":if($(b.idField).getValue()==a.getValue())this._msgRemove(a,b);else this._msgInject(a,b);break;default:if(b.re.test(a.getValue()))this._msgRemove(a,b);else this._msgInject(a,b)}else if(b.re.test(a.value))this._msgRemove(a,b);else this._msgInject(a,b)},_validateChild:function(a,b){var c=this.form[a.getProperty("name")],d=0,e=true;for(var f=0;f<c.length;f++)if(c[f].checked){d++;if(!b.re.test(c[f].getValue())){e=false;break}}if(d==0&&b.type=="required")e=false;if(e)this._msgRemove(a,b);else this._msgInject(a,b)},_msgInject:function(a,b){if(a.type!="file"){if(!$(a.getProperty("id")+b.type+"_msg")){var c=new Element(this.options.msgContainerTag,{id:a.getProperty("id")+b.type+"_msg","class":this.options.msgClass}).setHTML(b.msg).setStyle("opacity",0).injectAfter(a).effect("opacity",{duration:500,transition:Fx.Transitions.linear}).start(0,1);a.cbErr++;this._chkStatus(a,b)}}else if(!$(a.id+b.type+"_msg")){var c=new Element(this.options.msgContainerTag,{id:a.id+b.type+"_msg","class":this.options.msgClass}).setHTML(b.msg).setStyle("opacity",0).injectAfter(a).effect("opacity",{duration:500,transition:Fx.Transitions.linear}).start(0,1);a.cbErr++;this._chkStatus(a,b)}},_msgRemove:function(a,b,c){if(a.type!="file"){c=c||false;if($(a.getProperty("id")+b.type+"_msg")){var d=$(a.getProperty("id")+b.type+"_msg");d.effect("opacity",{duration:500,transition:Fx.Transitions.linear,onComplete:function(){d.remove()}}).start(1,0);if(!c){a.cbErr--;this._chkStatus(a,b)}}}else{c=c||false;if($(a.id+b.type+"_msg")){var d=$(a.id+b.type+"_msg");d.effect("opacity",{duration:500,transition:Fx.Transitions.linear,onComplete:function(){d.remove()}}).start(1,0);if(!c){a.cbErr--;this._chkStatus(a,b)}}}},_chkStatus:function(a,b){if(a.cbErr==0){a.effects({duration:500,transition:Fx.Transitions.linear}).start(this.options.styleValid);this.fireEvent("onValid",[a,b],50)}else{a.effects({duration:500,transition:Fx.Transitions.linear}).start(this.options.styleInvalid);this.fireEvent("onInvalid",[a,b],50)}},_onSubmit:function(a){a=new Event(a);var b=true;this.validations.each(function(a){if(this._isChildType(a[0]))this._validateChild(a[0],a[1]);else this._validate(a[0],a[1]);if(a[0].cbErr>0)b=false}.bind(this));if(!b)a.stop();return b},_onReset:function(){this.validations.each(function(a){if(!this._isChildType(a[0]))a[0].setStyles(this.options.styleNeutral);a[0].cbErr=0;this._msgRemove(a[0],a[1],true)}.bind(this))}});fValidator.implement(new Events);fValidator.implement(new Options)

