var FormValidator=new Class({initialize:function(){this.fields=[];this.rules=[];},addRule:function(rule){this.rules.push(rule);return this;},getRules:function(field){if($chk(field)){return this.rules.filter(function(rule,index){return rule.hasField(field);});}
return this.rules;},validate:function(data){var errors=[];var error=null;this.rules.each(function(rule){if((error=rule.validate(data))){errors.merge(error);}});var e3=[];var fields=[];while(errors.length){var field_name=errors[0].field_name;var index=fields.indexOf(field_name);if(index==-1){index=e3.push(errors[0])-1;fields.push(field_name);}else{errors.each(function(e,i){if(e.field_name==field_name){e3[index].rules.push(e.rules[0]);}});}
errors.shift();}
return e3.length==0?null:e3;}});var CRuleAbstract=new Class({initialize:function(field_name){this.fields=[field_name];},hasField:function(field_name){return this.fields.indexOf(field_name)!=-1;},validate:function(data){throw $E.ExFatal;}});var CRuleNotEmpty=new Class({Extends:CRuleAbstract,initialize:function(field_name,min,max){this.min=min||0;this.max=max||0;this.field_name=field_name;this.parent(field_name);},validate:function(data){var l=data[this.fields[0]].length;if(($chk(data[this.fields[0]])==false)||(this.min>0&&l<this.min)||(this.max>0&&l>this.max)){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleNotEmpty"});var CRuleEquals=new Class({Extends:CRuleAbstract,initialize:function(field_name1,field_name2){this.parent(field_name1);this.fields.push(field_name2);},validate:function(data){if((($defined(data[this.fields[0]])==false)||($defined(data[this.fields[1]])==false))||(data[this.fields[0]]!=data[this.fields[1]])){return[{field_name:this.fields[0],rules:[this.className]},{field_name:this.fields[1],rules:[this.className]}];}
return null;},className:"CRuleEquals"});var CRulePasswordMatch=new Class({Extends:CRuleAbstract,initialize:function(field_name1,field_name2){this.parent(field_name1);this.fields.push(field_name2);},validate:function(data){if((($defined(data[this.fields[0]])==false)||($defined(data[this.fields[1]])==false))||(data[this.fields[0]]!=data[this.fields[1]])){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRulePasswordMatch"});var CRuleNewPasswordMatch=new Class({Extends:CRuleAbstract,initialize:function(field_name1,field_name2){this.parent(field_name1);this.fields.push(field_name2);},validate:function(data){if((($defined(data[this.fields[0]])==false)||($defined(data[this.fields[1]])==false))||(($chk(data[this.fields[0]])!=false||$chk(data[this.fields[1]])!=false)&&data[this.fields[0]]!=data[this.fields[1]])){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleNewPasswordMatch"});var CRuleBadChars=new Class({Extends:CRuleAbstract,initialize:function(field_name,regexp){this.parent(field_name);this.regexp=regexp||"[?@#$%^&*()\\[\\]<>]";},validate:function(data){if(($defined(data[this.fields[0]])==false)||(data[this.fields[0]].test(this.regexp)!=false)){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleBadChars"});var CRuleEmail=new Class({Extends:CRuleAbstract,initialize:function(field_name,not_empty){this.parent(field_name);this.not_empty=$defined(not_empty)?not_empty:true;this.regexp="[0-9a-zA-Z._%+-]+@[0-9a-zA-Z][0-9a-zA-Z-]+(\\.[0-9a-zA-Z]{2,})*$";},validate:function(data){if(!this.not_empty&&($defined(data[this.fields[0]])==false||data[this.fields[0]]=='')){return null;}
if(($defined(data[this.fields[0]])==false)||(data[this.fields[0]].test(this.regexp)==false)){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleEmail"});var CRuleValueLength=new Class({Extends:CRuleAbstract,initialize:function(field_name,min,max){this.parent(field_name);this.min=min;this.max=max;},validate:function(data){if(($defined(data[this.fields[0]])!=false)&&(data[this.fields[0]].length>0)&&(this.min>0&&data[this.fields[0]].length<this.min)||(this.max>0&&data[this.fields[0]].length>this.max)){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleValueLength"});var CRuleUrl=new Class({Extends:CRuleAbstract,validate:function(data){var regExp=new RegExp("^(https?://)?[0-9a-zA-Z-]{2,}[\.]([-.\w]*[0-9a-zA-Z]{2,})+(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#=_]*)?$","i");var result=regExp.exec(data[this.fields[0]]);if(($defined(data[this.fields[0]])==false)||(result==null&&$chk(data[this.fields[0]])!=false)){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleUrl"});var CRuleIncorrectBirthDay=new Class({Extends:CRuleAbstract,initialize:function(field_name,split_char){this.parent(field_name);split_char=split_char?split_char:"-";this.split_char=split_char;},validate:function(data,split_char){if($defined(data[this.fields[0]])!=false){if(data[this.fields[0]]==""){return null;}
var date=data[this.fields[0]].split(this.split_char);if(date.length!=3){return[{field_name:this.fields[0],rules:[this.className]}];}
if(date[2].length!=4||date[1]<1||date[1]>12||date[1].length!=2||date[0]<1||date[0]>31||date[0].length!=2){return[{field_name:this.fields[0],rules:[this.className]}];}
var currentTime=new Date();var old_year=currentTime.getFullYear()-100;var young_year=currentTime.getFullYear()-7;if(date[2]<old_year||date[2]>young_year){return[{field_name:this.fields[0],rules:[this.className]}];}}else{return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleIncorrectBirthDay"});var CRuleIncorrectDate=new Class({Extends:CRuleAbstract,initialize:function(field_name,split_char){this.parent(field_name);split_char=split_char?split_char:"-";this.split_char=split_char;},validate:function(data,split_char){if($defined(data[this.fields[0]])!=false){if(data[this.fields[0]]==""){return null;}
var date=data[this.fields[0]].split(this.split_char);if(date.length!=3){return[{field_name:this.fields[0],rules:[this.className]}];}
if(date[2].length!=4||date[1]<1||date[1]>12||date[1].length!=2||date[0]<1||date[0]>31||date[0].length!=2){return[{field_name:this.fields[0],rules:[this.className]}];}
var currentTime=new Date();var old_year=currentTime.getFullYear()-100;var young_year=currentTime.getFullYear()-7;}else{return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleIncorrectDate"});var CRuleIncorrectTime=new Class({Extends:CRuleAbstract,initialize:function(field_name,split_char){this.parent(field_name);split_char=split_char?split_char:":";this.split_char=split_char;},validate:function(data,split_char){if($defined(data[this.fields[0]])!=false){if(data[this.fields[0]]==""){return null;}
var time=data[this.fields[0]].split(this.split_char);if(time.length!=2){return[{field_name:this.fields[0],rules:[this.className]}];}
if(time[0]<0||time[0]>23||time[1]<0||time[1]>59){return[{field_name:this.fields[0],rules:[this.className]}];}}else{return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleIncorrectTime"});var CRuleEmptyRangeLength=new Class({Extends:CRuleAbstract,initialize:function(field_name,min,max){this.parent(field_name);this.min=min;this.max=max;},validate:function(data){if(($defined(data[this.fields[0]])==false)||($chk(data[this.fields[0]])!=false&&data[this.fields[0]].length>=this.min&&data[this.fields[0]].length<this.max)){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleEmptyRangeLength"});var CRuleRange=new Class({Extends:CRuleAbstract,initialize:function(field_name,min,max){this.parent(field_name);this.min=min;this.max=max;},validate:function(data){if(($defined(data[this.fields[0]])==false)||data[this.fields[0]].toInt()<this.min||data[this.fields[0]].toInt()>this.max){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleRange"});var CRuleValueInRange=new Class({Extends:CRuleAbstract,initialize:function(field_name,min,max){this.parent(field_name);this.min=min?min:null;this.max=max?max:null;},validate:function(data){if(($defined(data[this.fields[0]])==false)){return[{field_name:this.fields[0],rules:[this.className]}];}
if(isNaN(data[this.fields[0]].toFloat())){return null;}
var validate1=this.min==null?true:data[this.fields[0]].toFloat()>=this.min;var validate2=this.max==null?true:data[this.fields[0]].toFloat()<=this.max;if(validate1==false||validate2==false){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleValueInRange"})
var CRuleValueInRangeOrNull=new Class({Extends:CRuleAbstract,initialize:function(field_name,min,max){this.parent(field_name);this.rule=new CRuleValueInRange(field_name,min,max);},validate:function(data){if(data[this.fields[0]].toInt()!=0&&this.rule.validate(data)){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleValueInRangeOrNull"})
var CRuleBadSearchPhrase=new Class({Extends:CRuleAbstract,initialize:function(field_name,min_chars){this.parent(field_name);this.min_chars=min_chars==undefined?3:min_chars;},validate:function(data){if(($defined(data[this.fields[0]])==false)||(this.checkPhrase(data[this.fields[0]])==false)){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},checkPhrase:function(phrase){var reg=new RegExp("[^A-Za-z0-9_ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю]","g");phrase=phrase.replace(reg," ");var words=phrase.split(" ");var result=false;var self=this;words.each(function(word){if(word.length>=self.min_chars){result=true;}});return result;},className:"CRuleBadSearchPhrase"});var CRuleNumberFormat=new Class({Extends:CRuleAbstract,initialize:function(field_name,break_negative){this.parent(field_name);this.break_negative=break_negative;},validate:function(data){if(data[this.fields[0]]!=""){var value=isNaN(data[this.fields[0]]);if(value==true||(this.break_negative===true&&value<0)){return[{field_name:this.fields[0],rules:[this.className]}];}}
return null;},className:"CRuleNumberFormat"});var CRuleLatinChars=new Class({Extends:CRuleAbstract,initialize:function(field_name){this.parent(field_name);},validate:function(data){var regExp=new RegExp("^([0-9a-zA-Z-_]*)?$","i");var result=regExp.exec(data[this.fields[0]]);if(result===null){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleLatinChars"});var CRuleInvalidFormat=new Class({Extends:CRuleAbstract,initialize:function(field_name,hash){this.hash=hash;this.parent(field_name);},validate:function(data){var format=data[this.fields[0]].split(".");if(this.hash.indexOf(format[format.length-1])==-1){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleInvalidFormat"});var CRuleMoney=new Class({Extends:CRuleAbstract,initialize:function(field_name,min_summ,max_summ){this.min_summ=min_summ||0;this.max_summ=max_summ||0;this.parent(field_name);},validate:function(data){var regExp=/^ *[0-9]+(\.[09]+)? *$/;var result=regExp.exec(data[this.fields[0]]);if(result===null){return[{field_name:this.fields[0],rules:[this.className]}];}
input_summ=parseFloat(data[this.fields[0]]);if(this.min_summ>0&&input_summ<this.min_summ){return[{field_name:this.fields[0],rules:[this.className]}];}
if(this.max_summ>0&&input_summ>this.max_summ){return[{field_name:this.fields[0],rules:[this.className]}];}
return null;},className:"CRuleMoney"});top.FormValidator=FormValidator;