var InputMatcher=new Class({options:{classes:{ok:"inputmatcherok",notok:"inputmatchernotok"},timeout:1000,method:["icon","css"],autostart:true},initialize:function(formulaire,options,group){if($defined(options)){this.setOptions(options);}this.formulaire=formulaire;this.inputliste=[];this.timer=false;var liste=$(this.formulaire).getElements("input");liste.extend($(this.formulaire).getElements("textarea"));liste.each(function(item,index){var m=item.getProperty("matcher");if(!$defined(m)){return ;}if($defined(group)){var grp=item.getProperty("group");if(!$defined(grp)||(grp!=group)){return ;}}this.inputliste.push(item);item.cachedvalue=item.value;try{m=new RegExp(m,"g").exec(item.value);if(this.options.method.contains("icon")){item.icone=new Element("button").addClass(m?this.options.classes.ok:this.options.classes.notok).injectAfter(item);item.icone.addEvent("click",function(el){el.stop();});}if(this.options.method.contains("css")){item.addClass(m?this.options.classes.ok:this.options.classes.notok);}item.matchervalid=$defined(m);}catch(ex){}},this);if(this.options.autostart){this.doStart();}},doStart:function(){this.timer=function(){this.doCheck();}.periodical(this.options.timeout,this);},doCheck:function(){this.inputliste.each(function(item,index){try{if(item.value==item.cachedvalue){return ;}m=new RegExp(item.getProperty("matcher"),"g").exec(item.value);if(this.options.method.contains("icon")){item.icone.removeClass(this.options.classes.notok);item.icone.removeClass(this.options.classes.ok);item.icone.addClass($defined(m)?this.options.classes.ok:this.options.classes.notok);}if(this.options.method.contains("css")){item.removeClass(this.options.classes.notok);item.removeClass(this.options.classes.ok);item.addClass($defined(m)?this.options.classes.ok:this.options.classes.notok);}item.cachedvalue=item.value;item.matchervalid=$defined(m);}catch(ex){}},this);},isFormOk:function(){try{return this.inputliste.every(function(item,index,array){return item.matchervalid;},this);}catch(ex){return false;}},idInputOk:function(i){try{return $(i).matchervalid;}catch(ex){return false;}},setActivate:function(mode){if((mode)&&(this.timer)){return ;}if((mode)&&(!this.timer)){this.doStart();return ;}try{a=this.timer;this.timer=false;$clear(a);}catch(e){}},getActivate:function(){return($defined(this.timer));}});InputMatcher.implement(new Options,new Events);
