var Validation={timer:0,formFields:new Array(),modelName:"",submitId:"",formId:"",usernameRequest:"",emailRequest:"",usernameRequestResult:true,emailRequestResult:true,ajaxRequestUrl:"users",hideMessage:function(c){this.hideSubmitMessage();d=$("#"+c+"Error");if(d){d.html("");d.css("display","none")}},showMessage:function(f,g){d=$("#"+f+"Error");if(d){d.html('<div class="error-message">'+g+"</div>");d.css("display","block")}},hideSubmitMessage:function(){d=$("#SubmitError");if(d){d.html("");d.css("display","none")}},add:function(h,l,k,j){if($("#"+h)){a=new Array(5);a.tag=h;a.message=l;a.rule=k;a.params=j;a.validates=true;a.doValidate=true;if(!this.formFields[h]){this.formFields[h]=new Array()}this.formFields[h].push(a);$("#"+h).blur(function(){Validation.validateTag(h)});$("#"+h).keyup(function(){if(Validation.timer){clearTimeout(Validation.timer)}Validation.timer=setTimeout(function(){Validation.validateTag(h)},1000)});$("#"+h).mouseup(function(){if(Validation.timer){clearTimeout(Validation.timer)}Validation.timer=setTimeout(function(){Validation.validateTag(h)},1000)})}},init:function(j,h,k,l){this.modelName=l;this.formId=j;this.submitId=h;if($("#"+this.submitId)){$("#"+this.submitId).attr("disabled",false);$("#"+this.submitId).click(function(){validation=true;var b;for(b in Validation.formFields){if(Validation.formFields[b][0]){if(Validation.formFields[b][0]["tag"]){for(var c=0;c<Validation.formFields[b].length;c++){if(Validation.formFields[b][c]["doValidate"]){if(!Validation.doValidate(Validation.formFields[b][c]["tag"],Validation.formFields[b][c]["message"],Validation.formFields[b][c]["rule"],Validation.formFields[b][c]["params"])){validation=false;Validation.formFields[b][c]["validates"]=false;break}}}}}}if($("#"+Validation.formId)){if(validation==true){Validation.hideSubmitMessage();$("#"+Validation.submitId).attr("disabled",true);$("#"+Validation.formId).submit()}else{Validation.showMessage(Validation.submitId,k)}}})}},validateTag:function(c){validation=true;if(this.formFields[c]){for(i=0;i<this.formFields[c].length;i++){if(this.formFields[c][i]["doValidate"]){if(this.doValidate(this.formFields[c][i]["tag"],this.formFields[c][i]["message"],this.formFields[c][i]["rule"],this.formFields[c][i]["params"])==false){validation=false;break}}}}return validation},doValidate:function(h,l,k,j){if(!this.validate(h,k,j,l)){this.showMessage(h,l);return false}else{this.hideMessage(h);return true}},validate:function(tag,rule,params,message){el=$("#"+tag);val="";if(el){if(!el.attr("type")){e=el.find("input[type=radio]");if(e){e.each(function(i){r=$(this);if((r.attr("type")=="radio")&&(r.attr("checked"))){val=r.val()}})}if(!val){e=el.find("select");if(e){if(e.length==3){if((e.eq(0).val())&&(e.eq(1).val())&&(e.eq(2).val())){val=e.eq(0).val()+"-"+e.eq(1).val()+"-"+e.eq(2).val()}}else{if(e.length==5){if((e.eq(0).val())&&(e.eq(1).val())&&(e.eq(2).val())&&(e.eq(3).val())&&(e.eq(4).val())){val=e.eq(0).val()+"-"+e.eq(1).val()+"-"+e.eq(2).val()+" "+e.eq(3).val()+":"+e.eq(4).val()}}}}}}else{switch(el.attr("type")){case"checkbox":if(el.attr("checked")==true){val=1}break;case"select-one":case"select-multiple":if(el.val()){val=el.val()}break;default:if(el.val()){val=el.val()}else{if(el.text()){val=el.text()}}break}}if(!val){if((rule=="required")){return false}else{if(rule!="confirmPassword"){return true}}}switch(rule){case"between":return(((val.length)>=eval(params.param1))&&((val.length)<=eval(params.param2)))?true:false;break;case"comparison":if(isNaN(val)){return false}switch(params.param1){case"isgreater":case">":return(eval(val)>eval(params.param2))?true:false;break;case"isless":case"<":return(eval(val)<eval(params.param2))?true:false;break;case"greaterorequal":case">=":return(eval(val)>=eval(params.param2))?true:false;break;case"lessorequal":case"<=":return(eval(val)>=eval(params.param2))?true:false;break;case"equalto":case"==":return(eval(val)==eval(params.param2))?true:false;break;case"notequal":case"!=":return(eval(val)!=eval(params.param2))?true:false;break}break;case"datetime":r=/^(?:(?:(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\/|-|\.|\x20)(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})(\/|-|\.|\x20)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8])))) ([01]\d|2[0-3])(:[0-5]\d){0,2}$/;return val.match(r);break;case"date":r=/^(?:(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\/|-|\.|\x20)(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})(\/|-|\.|\x20)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))))$/;return val.match(r);break;case"time":return val.match(/^([01]\d|2[0-3])(:[0-5]\d){0,2}$/);break;case"boolean":return val.match(/^0|1$/);break;case"decimal":return val.match(/^[-+]?[0-9]*\.{1}[0-9]+(?:[eE][-+]?[0-9]+)?$/);break;case"email":return this.validateEmail(val);break;case"equalTo":return(val==params.param1)?true:false;break;case"extension":return val.match(params.param1);break;case"ip":return val.match(/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/);break;case"minLength":return(val.length<params.param1)?false:true;break;case"maxLength":return(val.length>params.param1)?false:true;break;case"length":return(val.length==params.param1);break;case"numeric":return val.match(/^[-+]?[0-9]*\.{1}[0-9]+(?:[eE][-+]?[0-9]+)?$/);break;case"phone":return val.match(/^\+[0-9]{11}$/);break;case"postal":return val.match(/^[0-9]{2}-[0-9]{3}$/);break;case"range":if(isNaN(val)){return false}return((eval(val)>eval(params.param1))&&(eval(val)<eval(params.param2)))?true:false;break;case"inList":return val.match(params.param1);break;case"username":return val.match(/^[a-zA-Z0-9_]*$/);break;case"alpha":return val.match(/^[a-zA-Z]*$/);break;case"alphanumeric":return val.match(/^[a-zA-Z0-9]*$/);break;case"int":return val.match(/^[0-9]+$/);break;case"float":return val.match(/[0-9]+\.[0-9]+$|^[0-9]+$/);break;case"tags":return val.match(/^[ ]*[\w ,]*[ ]*$/);break;case"required":return val;break;case"checked":return val;break;case"selected":return val;break;case"custom":case"regex":return val.match(params.param1);break;case"url":return val.match(/^(?:(?:https?|ftps?|file|news|gopher):\/\/)?(?:(?:(?:25[0-5]|2[0-4]\d|(?:(?:1\d)?|[1-9]?)\d)\.){3}(?:25[0-5]|2[0-4]\d|(?:(?:1\d)?|[1-9]?)\d)|(?:[0-9a-z]{1}[0-9a-z\-]*\.)*(?:[0-9a-z]{1}[0-9a-z\-]{0,62})\.(?:[a-z]{2,6}|[a-z]{2}\.[a-z]{2,6})(?::[0-9]{1,4})?)(?:\/?|\/[\w\-\.,@?^=%&:;\/~\+#]*[\w\-\@?^=%&\/~\+#])$/i);break;case"uniqueUsername":return this.uniqueUsername(tag,message);break;case"uniqueEmail":return this.uniqueEmail(tag,message);break;case"confirmPassword":return this.confirmPassword(tag);break;default:try{eval("this.rule="+rule);return this.rule(tag,params,message)}catch(err){}return true;break}}return true},validateEmail:function(n){if(n.length<=0){return true}var k=n.match("^(.+)@(.+)$");if(k==null){return false}if(k[1]!=null){var l=/^\"?[\w-_\.]*\"?$/;if(k[1].match(l)==null){return false}}if(k[2]!=null){var m=/^[\w-\.]*\.[A-Za-z]{2,4}$/;if(k[2].match(m)==null){var j=/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;if(k[2].match(j)==null){return false}}return true}return false},uniqueUsername:function(f,g){el=$("#"+f);val=el.attr("value");if((val)&&(val!=this.usernameRequest)){this.usernameRequest=val;$.ajax({url:this.ajaxRequestUrl+"/check_username/"+val+"/",cache:false,success:function(b){if(b.match("err")){Validation.showMessage(f,g);Validation.emailRequestResult=false}else{Validation.hideMessage(f);Validation.emailRequestResult=true}}})}else{return Validation.usernameRequestResult}return true},uniqueEmail:function(f,g){el=$("#"+f);val=el.attr("value");if((val)&&(val!=this.emailRequest)){this.emailRequest=val;$.ajax({url:this.ajaxRequestUrl+"/check_email/"+val+"/",cache:false,success:function(b){if(b.match("err")){Validation.showMessage(f,g);Validation.emailRequestResult=false}else{Validation.hideMessage(f);Validation.emailRequestResult=true}}})}else{return Validation.emailRequestResult}return true},confirmPassword:function(c){if(($("#"+c).attr("value"))!=($("#"+this.modelName+"Password").attr("value"))){return false}return true},turnOff:function(h,j){var k;for(k in this.formFields){if(Validation.formFields[k][0]){if(Validation.formFields[k][0]["tag"]){for(var l=0;l<Validation.formFields[k].length;l++){if((Validation.formFields[k][l]["tag"]==h)&&(Validation.formFields[k][l]["rule"]==j)){Validation.formFields[k][l]["doValidate"]=false}}}}}},turnOn:function(h,j){var k;for(k in this.formFields){if(Validation.formFields[k][0]){if(Validation.formFields[k][0]["tag"]){for(var l=0;l<Validation.formFields[k].length;l++){if((Validation.formFields[k][l]["tag"]==h)&&(Validation.formFields[k][l]["rule"]==j)){Validation.formFields[k][l]["doValidate"]=true}}}}}}};