
var Validation={};Validation.init=function(valData,form,errorClass,balloonClass){var jQFld,jqForm;Validation.errorClass=errorClass;Validation.form=form;Validation.fields=[];if(balloonClass){Validation.balloonClass=balloonClass;}else{Validation.balloonClass="FloatingError";}
jqForm=$(form);Validation.AddValidation(valData);if(jqForm.hasClass("stopDouble")){jqForm.unbind("submit");}
jqForm.bind("submit",Validation.validateForm);};Validation.GetField=function(name){for(var i=0;i<Validation.fields.length;i++){if(Validation.fields[i].name==name){return(Validation.fields[i]);}}}
Validation.RemoveValidation=function(form,fieldList){var myFields=fieldList.split(",");for(var i=0;i<myFields.length;i++){for(var j=0;j<Validation.fields.length;j++){if(Validation.fields[j].name==myFields[i]){Validation.fields[j].rules="";}}}}
Validation.AddValidation=function(valData){var field;var jQFld;for(var name in valData){jQFld=$("[name="+name+"]",Validation.form);field={name:name,JQ:jQFld,top:jQFld.offset().top,rules:valData[name],errors:[],valid:true}
if(field.top==0)
field.top=jQFld.parent().offset().top;Validation.fields.push(field);jQFld.bind("change",name,function(e){Validation.validateField(e.data,true);}).bind("focus",name,function(e){Validation.onFocus(e.data);});}}
Validation.DontValidate=function(form){$(form).unbind("submit",Validation.validateForm);};Validation.onFocus=function(name){var field;field=Validation.GetField(name);if(field.errors.length>0)
Validation.showErrors(name,true);};Validation.validateField=function(name,ShowErrorText){var aTest,type,params,val,errors=[];var field;field=Validation.GetField(name);field.valid=true;if(field.rules){if(Validation.checkDependencies(field)){for(var i=0;i<field.rules.length;i++){aTest=field.rules[i].test.split(":");type=aTest.shift();params=aTest.join(":");if(!Validation.check(field.JQ,type,params)){field.valid=false;errors.push(field.rules[i].msg);}}}
field.errors=errors;this.showErrors(name,ShowErrorText);}
return field.valid;};Validation.validateForm=function(){var jqForm,fld,valid=true;if(this.submitInProgress===true){return false;}
jqForm=$(this);for(var i=0;i<Validation.fields.length;i++){fld=Validation.fields[i];if(!Validation.validateField(fld.name,false)){valid=false;}}
if(valid===true){if((jqForm.hasClass("stopDouble"))||(jqForm.hasClass("preventDoubleSubmit"))){this.submitInProgress=true;setTimeout(function(){$("input[type='submit'], input[type='image']",jqForm).attr("disabled",true);},2);}}else{var show=-1;for(var i=0;i<Validation.fields.length;i++){fld=Validation.fields[i];if(fld.valid==false){if(show==-1){show=i;}else if(Validation.fields[i].top<Validation.fields[show].top){show=i;}}}
if(show!=-1)
Validation.showErrors(Validation.fields[show].name,true);$(".ErrorNotice").removeClass("Hide").addClass("Error").html("Please correct the highlighted fields before continuing.");}
return valid;};Validation.showErrors=function(name,ShowErrorText){var field;field=Validation.GetField(name);if(typeof field=="undefined")return;if(field.errors.length>0){var Offset=field.JQ.filter(":last").position();if(Offset.top==0)
Offset=field.JQ.filter(":last").parent().position();var Width=field.JQ.filter(":last").width();if(field.JQ[0].type=="radio"){Width+=30;field.JQ.parent().addClass(Validation.errorClass);}else{field.JQ.addClass(Validation.errorClass);}
if(ShowErrorText){var ErrorText="<div style='top: "+(Offset.top-15)+"px; left: "+(Offset.left+Width+5)+"px;' class='"+Validation.balloonClass+"'><div>"+
field.errors.join(".  ")+"</div></div>";$("."+Validation.balloonClass).remove();$("#body").append(ErrorText);$("."+Validation.balloonClass).bind("click",function(){$(this).remove()});}}else{if(field.JQ[0].type=="radio"){field.JQ.parent().removeClass(Validation.errorClass);}else{field.JQ.removeClass(Validation.errorClass);}
if(ShowErrorText)
$(Validation.balloonClass).remove();}};Validation.GetValue=function(JQField){var value;if(JQField[0].type=="radio"){value=JQField.filter(":checked").val();}else if(JQField[0].type=="checkbox"){value=JQField.filter(":checked").val();}else if(JQField[0].type=="selected"){value=JQField.filter(":selected").val();}else{value=JQField.val();}
return(value);};Validation.checkDependencies=function(field){var doValidation=true;var aChecks,type,params;for(var i=0;i<field.rules.length;i++){var aTest=field.rules[i].test.split(":");if(aTest.shift()=="ValidateIf"){var relField=Validation.form.elements[aTest.shift()];if(relField){var checks=aTest.join(":").split("\n");for(var j=0;j<checks.length;j++){aChecks=checks[j].split(":");type=aChecks.shift();params=aChecks.join(":");if(!Validation.check($(relField),type,params)){doValidation=false;}}}}}
return doValidation;};Validation.check=function(field,type,params){var aParams,val,max,min;aParams=params.split(",");val=Validation.GetValue(field);switch(type){case"ValidateIf":return true;case"Required":return Validation.checkRequired(val);case"Email":return Validation.checkEmail(val);case"Website":return Validation.checkWebsite(val);case"Range":max=32767;min=aParams[0];if(aParams.length>1){max=aParams[1];}
return Validation.checkNumberRange(val,min,max);case"Length":max=32767;min=aParams[0];if(aParams.length>1){max=aParams[1];}
return Validation.checkStringLength(val,min,max);case"Regex":return Validation.checkString(val,params);case"Match":return Validation.checkString(val,params);case"Function":return Validation.checkFunction(fld,params);default:return false;}};Validation.checkRequired=function(val){return(val>"");};Validation.checkEmail=function(val){var nameExp="^[a-z0-9\._-]+$";var domainExp="^([a-z0-9]?[a-z0-9\-_]*[a-z0-9]{1})+[\.]{1}([a-z]+\.){0,3}([a-z]+){1}$";var pieces=val.toLowerCase().split("@");if(pieces.length!=2){return false;}
return((Validation.checkString(pieces[0],nameExp))&&(Validation.checkString(pieces[1],domainExp)));};Validation.checkWebsite=function(val){var urlExp="^([a-zA-Z]+(:\/\/)+)?[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-_~]+$";return(Validation.checkString(val,urlExp));}
Validation.checkNumberRange=function(val,min,max){if(typeof val=="string"){val=val.replace(/\$|\,/g,"");val=parseInt(val,10);}
min=parseInt(min,10);max=parseInt(max,10);if(typeof val=="number"){return((val>=min)&&(val<=max));}
return false;};Validation.checkStringLength=function(val,min,max){min=parseInt(min,10);max=parseInt(max,10);if(typeof val=="string"){return((val.length>=min)&&(val.length<=max));}
return false;};Validation.checkString=function(val,regex){if(regex.charAt(0)=="/"){regex=regex.substring(1,regex.length-1);}
var re=new RegExp(regex);if(typeof val=="string"){return re.test(val);}
return false;};Validation.checkFunction=function(fld,params){var aParams=params.split(",");var func=aParams.shift();params=aParams.join(",");if(typeof fld[func]=="function"){return fld[func](fld,params);}
if(typeof fld.form[func]=="function"){return fld.form[func](fld,params);}
if(typeof Validation[func]=="function"){return Validation[func](fld,params);}
if(typeof window[func]=="function"){return window[func](fld,params);}
return false;};