var Validation={timer:0,formFields:new Array(),modelName:"",submitId:"",formId:"",usernameRequest:"",emailRequest:"",usernameRequestResult:true,emailRequestResult:true,ajaxRequestUrl:"users",hideMessage:function(b){this.hideSubmitMessage();d=$("#"+b+"Error");if(d){d.html("");d.css("display","none")}},showMessage:function(b,c){d=$("#"+b+"Error");if(d){d.html('<div class="error-message">'+c+"</div>");d.css("display","block")}},hideSubmitMessage:function(){d=$("#SubmitError");if(d){d.html("");d.css("display","none")}},add:function(b,c,f,g){if($("#"+b)){a=new Array(5);a.tag=b;a.message=c;a.rule=f;a.params=g;a.validates=true;a.doValidate=true;if(!this.formFields[b]){this.formFields[b]=new Array()}this.formFields[b].push(a);$("#"+b).blur(function(){Validation.validateTag(b)});$("#"+b).keyup(function(){if(Validation.timer){clearTimeout(Validation.timer)}Validation.timer=setTimeout(function(){Validation.validateTag(b)},1000)});$("#"+b).mouseup(function(){if(Validation.timer){clearTimeout(Validation.timer)}Validation.timer=setTimeout(function(){Validation.validateTag(b)},1000)})}},init:function(g,b,f,c){this.modelName=c;this.formId=g;this.submitId=b;if($("#"+this.submitId)){$("#"+this.submitId).attr("disabled",false);$("#"+this.formId).submit(function(){validation=true;var j;for(j in Validation.formFields){if(Validation.formFields[j][0]){if(Validation.formFields[j][0]["tag"]){for(var h=0;h<Validation.formFields[j].length;h++){if(Validation.formFields[j][h]["doValidate"]){if(!Validation.doValidate(Validation.formFields[j][h]["tag"],Validation.formFields[j][h]["message"],Validation.formFields[j][h]["rule"],Validation.formFields[j][h]["params"])){validation=false;Validation.formFields[j][h]["validates"]=false;break}}}}}}if($("#"+Validation.formId)){if(validation==true){Validation.hideSubmitMessage();$("#"+Validation.submitId).attr("disabled",true);return true}else{Validation.showMessage(Validation.submitId,f);return false}}return false})}},validateTag:function(b){validation=true;if(this.formFields[b]){for(i=0;i<this.formFields[b].length;i++){if(this.formFields[b][i]["doValidate"]){if(this.doValidate(this.formFields[b][i]["tag"],this.formFields[b][i]["message"],this.formFields[b][i]["rule"],this.formFields[b][i]["params"])==false){validation=false;break}}}}return validation},doValidate:function(b,c,f,g){if(!this.validates(b,f,g,c)){this.showMessage(b,c);return false}else{this.hideMessage(b);return true}},getValue:function(b){el=$("#"+b);val="";if(el){if(!el.attr("type")){e=el.find("input[type=radio]");if(e){e.each(function(c){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((window.CKEDITOR!=undefined)&&(window.CKEDITOR.instances[b]!=undefined)){val=window.CKEDITOR.instances[b].getData()}}return val}else{return false}},validates:function(id,rule,params,message){val=this.getValue(id);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.validEmail(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(id,message);break;case"uniqueEmail":return this.uniqueEmail(id,message);break;case"confirmPassword":return this.confirmPassword(id);break;default:try{eval("this.rule="+rule);return this.rule(id,params,message)}catch(err){}return true;break}},validEmail:function(c){if(c.length<=0){return true}var h=c.match("^(.+)@(.+)$");if(h==null){return false}if(h[1]!=null){var g=/^\"?[\w-_\.]*\"?$/;if(h[1].match(g)==null){return false}}if(h[2]!=null){var f=/^[\w-\.]*\.[A-Za-z]{2,4}$/;if(h[2].match(f)==null){var b=/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;if(h[2].match(b)==null){return false}}return true}return false},uniqueUsername:function(b,c){el=$("#"+b);val=el.attr("value");if((val)&&(val!=this.usernameRequest)){this.usernameRequest=val;$.ajax({url:this.ajaxRequestUrl+"/check_username/"+val+"/",cache:false,success:function(f){if(f.match("err")){Validation.showMessage(b,c);Validation.emailRequestResult=false}else{Validation.hideMessage(b);Validation.emailRequestResult=true}}})}else{return Validation.usernameRequestResult}return true},uniqueEmail:function(b,c){el=$("#"+b);val=el.attr("value");if((val)&&(val!=this.emailRequest)){this.emailRequest=val;$.ajax({url:this.ajaxRequestUrl+"/check_email/"+val+"/",cache:false,success:function(f){if(f.match("err")){Validation.showMessage(b,c);Validation.emailRequestResult=false}else{Validation.hideMessage(b);Validation.emailRequestResult=true}}})}else{return Validation.emailRequestResult}return true},confirmPassword:function(b){if(($("#"+b).attr("value"))!=($("#"+this.modelName+"Password").attr("value"))){return false}return true},turnOff:function(b,g){var f;for(f in this.formFields){if(Validation.formFields[f][0]){if(Validation.formFields[f][0]["tag"]){for(var c=0;c<Validation.formFields[f].length;c++){if((Validation.formFields[f][c]["tag"]==b)&&(Validation.formFields[f][c]["rule"]==g)){Validation.formFields[f][c]["doValidate"]=false}}}}}},turnOn:function(b,g){var f;for(f in this.formFields){if(Validation.formFields[f][0]){if(Validation.formFields[f][0]["tag"]){for(var c=0;c<Validation.formFields[f].length;c++){if((Validation.formFields[f][c]["tag"]==b)&&(Validation.formFields[f][c]["rule"]==g)){Validation.formFields[f][c]["doValidate"]=true}}}}}}};