var FormCheck=new Class({Implements:[Options,Events],options:{tipsClass:'tipsbox',errorClass:'error_f',fieldErrorClass:'fc-field-error',submitByAjax:false,ajaxResponseDiv:false,ajaxEvalScripts:false,onAjaxRequest:$empty,onAjaxSuccess:$empty,onAjaxFailure:$empty,display:{showErrors:1,errorsLocation:1,indicateErrors:1,keepFocusOnError:0,checkValueIfEmpty:1,addClassErrorToField:0,fixPngForIe:1,replaceTipsEffect:1,flashTips:0,closeTipsButton:1,tipsPosition:"right",tipsOffsetX:-45,tipsOffsetY:0,listErrorsAtTop:false,scrollToFirst:true,fadeDuration:300},alerts:{required:"This field is required.",alpha:"This field accepts alphabetic characters only.",alphanum:"This field accepts alphanumeric characters only.",nodigit:"No digits are accepted.",digit:"Please enter a valid number.",digitmin:"The number must be at least %0",digitltd:"The value must be between %0 and %1",number:"Please enter a valid number.",email:"Please enter a valid email address..",phone:"Please enter a valid phone number.",domain:"Invalid Domain format, only Alphanumeric characters are accepted and - no space, hyphens or periods.",url:"Please enter a valid web address.",confirm:"This field is different from %0",differs:"This value must be different of %0",length_str:"Please enter between %0 and %1 characters",lengthmax:"The length is incorrect, it must be at max %0",lengthmin:"The length is incorrect, it must be at least %0",checkbox:"Please check the box",radios:"Please select a radio",select:"Please choose a value"},regexp:{required:/[^.* ]/,alpha:/^(?! +$)[a-z.,_ -]+$/i,alphanum:/^(?! +$)[a-z\d,_ -]+$/i,digit:/^(?! +$)[\dd.,_ -]+$/,nodigit:/^(?! +$)\D+$/,number:/^(?! $)[-+]?\d*\.?\d+$/,phone:/^(?! $)[\d\s ().-]+$/,domain:/^[a-z\d\-]+$/i,email:/^(?! $)[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i,url:/^(?! $)(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&%\$#\=~])*$/i}},initialize:function(form,options){if(this.form=$(form)){this.form.isValid=true;this.regex=['length'];this.setOptions(options);if(typeof(formcheckLanguage)!='undefined')this.options.alerts=formcheckLanguage;this.validations=[];this.alreadyIndicated=false;this.firstError=false;var regex=new Hash(this.options.regexp);regex.each(function(el,key){this.regex.push(key);},this);this.form.getElements("*[class*=validate]").each(function(el){el.validation=[];var classes=el.getProperty("class").split(' ');classes.each(function(classX){if(classX.match(/^validate(\[.+\])$/)){var validators=eval(classX.match(/^validate(\[.+\])$/)[1]);for(var i=0;i=ruleArgs[0])var valueres=true;else var valueres=false;msg=this.options.alerts.digitmin.replace("%0",ruleArgs[0]);}else{if(el.value>=ruleArgs[0]&&el.value<=ruleArgs[1])var valueres=true;else var valueres=false;msg=this.options.alerts.digitltd.replace("%0",ruleArgs[0]).replace("%1",ruleArgs[1]);} if(regres==false||valueres==false){el.errors.push(msg);return false;}}else if(this.options.regexp[ruleMethod].test(el.value)==false){el.errors.push(msg);return false;} return true;},validateConfirm:function(el,ruleArgs){if(el.validation.contains('required')==false){el.validation.push('required');} var confirm=ruleArgs[0];if(el.value!=this.form[confirm].value){msg=this.options.alerts.confirm.replace("%0",ruleArgs[0]);el.errors.push(msg);return false;} return true;},validateDiffers:function(el,ruleArgs){var confirm=ruleArgs[0];if(el.value==this.form[confirm].value){msg=this.options.alerts.differs.replace("%0",ruleArgs[0]);el.errors.push(msg);return false;} return true;},isChildType:function(el){var elType=el.type.toLowerCase();if((elType=="radio"))return true;return false;},validateGroup:function(el){el.errors=[];var nlButtonGroup=this.form[el.getProperty("name")];el.group=nlButtonGroup;var cbCheckeds=false;for(var i=0;i"+obj[0].name+" : "+obj[0].errors[0]).injectInside(this.form.element);}else{if((obj.validation.contains('required')&&obj.errors.length>0)||(obj.errors.length>0&&obj.value&&obj.validation.contains('required')==false)){obj.errors.each(function(error){new Element('p').set('html',""+obj.name+" : "+error).injectInside(this.form.element);},this);}}},manageError:function(el,method){var isValid=this.validate(el);if((!isValid&&el.validation.contains('required'))||(!el.validation.contains('required')&&el.value&&!isValid)){if(this.options.display.listErrorsAtTop==true&&method=='submit') this.listErrorsAtTop(el,method);if(this.options.display.indicateErrors==2||this.alreadyIndicated==false||el.name==this.alreadyIndicated.name) {if(!this.firstError)this.firstError=el;this.alreadyIndicated=el;if(this.options.display.keepFocusOnError&&el.name==this.firstError.name)(function(){el.focus()}).delay(20);this.addError(el);return false;}}else if((isValid||(!el.validation.contains('required')&&!el.value))&&el.element){this.removeError(el);return true;} return true;},addError:function(obj){if(this.options.display.showErrors==1&&(!obj.element&&this.options.display.indicateErrors!=0)){if(this.options.display.errorsLocation==1){var pos=(this.options.display.tipsPosition=='left')?obj.getCoordinates().left:obj.getCoordinates().right;var options={'opacity':0,'position':'absolute','float':'left','left':pos+this.options.display.tipsOffsetX} obj.element=new Element('div',{'class':this.options.tipsClass,'styles':options}).injectInside(document.body);this.addPositionEvent(obj);}else if(this.options.display.errorsLocation==2){obj.element=new Element('div',{'class':this.options.errorClass,'styles':{'opacity':0}}).injectBefore(obj);}else if(this.options.display.errorsLocation==3){obj.element=new Element('div',{'class':this.options.errorClass,'styles':{'opacity':0}});if($type(obj.group)=='object'||$type(obj.group)=='collection') obj.element.injectAfter(obj.group[obj.group.length-1]);else obj.element.injectAfter(obj);}} if(obj.element){obj.element.empty();if(this.options.display.errorsLocation==1){var errors=[];obj.errors.each(function(error){errors.push(new Element('p').set('html',error));});var tips=this.makeTips(errors).injectInside(obj.element);if(this.options.display.closeTipsButton){tips.getElements('a.close').addEvent('click',function(){this.removeError(obj);}.bind(this));} var offset=(Browser.Engine.trident)?this.options.display.tipsOffsetY+10:this.options.display.tipsOffsetY;obj.element.setStyle('top',obj.getCoordinates().top-tips.getCoordinates().height+offset);}else{obj.errors.each(function(error){new Element('p').set('html',error).injectInside(obj.element);});} if(!Browser.Engine.trident5&&obj.element.getStyle('opacity')==0) new Fx.Morph(obj.element,{'duration':this.options.display.fadeDuration}).start({'opacity':[1]});else obj.element.setStyle('opacity',1);} if(this.options.display.addClassErrorToField&&this.isChildType(obj)==false) {obj.addClass(this.options.fieldErrorClass);}},addPositionEvent:function(obj){if(this.options.display.replaceTipsEffect){obj.event=function(){new Fx.Morph(obj.element,{'duration':this.options.display.fadeDuration}).start({'left':[obj.element.getStyle('left'),obj.getCoordinates().right+this.options.display.tipsOffsetX],'top':[obj.element.getStyle('top'),obj.getCoordinates().top-obj.element.getCoordinates().height+this.options.display.tipsOffsetY]});}.bind(this);}else{obj.event=function(){obj.element.setStyles({'left':obj.getCoordinates().right+this.options.display.tipsOffsetX,'top':obj.getCoordinates().top-obj.element.getCoordinates().height+this.options.display.tipsOffsetY});}.bind(this)} window.addEvent('resize',obj.event);},removeError:function(obj){this.firstError=false;this.alreadyIndicated=false;obj.errors=[];obj.isOK=true;window.removeEvent('resize',obj.event);if(this.options.display.errorsLocation==2) new Fx.Morph(obj.element,{'duration':this.options.display.fadeDuration}).start({'height':[0]});if(!Browser.Engine.trident5){new Fx.Morph(obj.element,{'duration':this.options.display.fadeDuration,'onComplete':function(){if(obj.element){obj.element.destroy();obj.element=false;}}.bind(this)}).start({'opacity':[1,0]});}else{obj.element.destroy();obj.element=false;} if(this.options.display.addClassErrorToField&&!this.isChildType(obj)) {obj.removeClass(this.options.fieldErrorClass);}},focusOnError:function(obj){if(this.options.display.scrollToFirst&&!this.alreadyFocused&&!this.isScrolling){if(this.alreadyIndicated.element){switch(this.options.display.errorsLocation){case 1:var dest=obj.element.getCoordinates().top;break;case 2:var dest=obj.element.getCoordinates().top-30;break;case 3:var dest=obj.getCoordinates().top-30;break;} this.isScrolling=true;}else if(!this.options.display.indicateErrors){var dest=obj.getCoordinates().top-30;} if(window.getScroll.y!=dest){new Fx.Scroll(window,{onComplete:function(){this.isScrolling=false;obj.focus();}.bind(this)}).start(0,dest);}else{this.isScrolling=false;obj.focus();} this.alreadyFocused=true;}},fixIeStuffs:function(){if(Browser.Engine.trident4){var rpng=new RegExp('url\\(([\.a-zA-Z0-9_/:-]+\.png)\\)');var search=new RegExp('(.+)formcheck\.css');for(var i=0;i