
var xVal=xVal||{};xVal.Plugins=xVal.Plugins||{};xVal.Messages=xVal.Messages||{};xVal.AttachValidator=function(elementPrefix,rulesConfig,options,pluginName){if(pluginName!=null)
this.Plugins[pluginName].AttachValidator(elementPrefix,rulesConfig,options);else
for(var key in this.Plugins){this.Plugins[key].AttachValidator(elementPrefix,rulesConfig,options);return;}};xVal.CurrentRegex=0;(function($)
{xVal.Plugins["jquery.validate"]={AttachValidator:function(elementPrefix,rulesConfig,options)
{var self=this;self._ensureCustomFunctionsRegistered();$(function()
{self._ensureValidationSummaryContainerExistsIfRequired(options);for(var i=0;i<rulesConfig.Fields.length;i++)
{var fieldName=rulesConfig.Fields[i].FieldName;var fieldRules=rulesConfig.Fields[i].FieldRules;var elemId=self._makeAspNetMvcHtmlHelperID((elementPrefix?elementPrefix+".":"")+fieldName);var elem=$("#"+elemId);if(elem.length==0)
elem=$("*[name='"+fieldName+"']");if(elem.length>0)
self._addRulesToElement(elem,fieldRules,elementPrefix,options);}});},_addRulesToElement:function(elem,fieldRules,elementPrefix,options)
{var self=this;for(var j=0;j<fieldRules.length;j++)
{var rule=fieldRules[j];if(rule!=null)
{var ruleName=rule.RuleName;var ruleParams=rule.RuleParameters;var errorText=(typeof(rule.Message)=='undefined'?null:rule.Message);self._attachRuleToDOMElement(ruleName,ruleParams,errorText,elem,elementPrefix,options);}}},_makeAspNetMvcHtmlHelperID:function(fullyQualifiedModelName)
{return fullyQualifiedModelName.replace(/\./g,"_");},_attachRuleToDOMElement:function(ruleName,ruleParams,errorText,element,elementPrefix,options)
{var parentForm=element.parents("form");if(parentForm.length!=1)
alert("Error: Element "+element.attr("id")+" is not in a form");this._ensureFormIsMarkedForValidation($(parentForm[0]),options);this._associateNearbyValidationMessageSpanWithElement(element);var options={};switch(ruleName)
{case"Required":options.required=true;options.messages={required:errorText||xVal.Messages.Required};break;case"Range":if(ruleParams.Type=="string")
{options.xVal_stringRange=[ruleParams.Min,ruleParams.Max];if(errorText!=null)options.messages={xVal_stringRange:$.format(errorText)};}
else if(ruleParams.Type=="datetime")
{var minDate,maxDate;if(typeof(ruleParams.MinYear)!='undefined')
minDate=new Date(ruleParams.MinYear,ruleParams.MinMonth-1,ruleParams.MinDay,ruleParams.MinHour,ruleParams.MinMinute,ruleParams.MinSecond);if(typeof(ruleParams.MaxYear)!='undefined')
maxDate=new Date(ruleParams.MaxYear,ruleParams.MaxMonth-1,ruleParams.MaxDay,ruleParams.MaxHour,ruleParams.MaxMinute,ruleParams.MaxSecond);options.xVal_dateRange=[minDate,maxDate];if(errorText!=null)options.messages={xVal_dateRange:$.format(errorText)};}
else if(typeof(ruleParams.Min)=='undefined')
{options.max=ruleParams.Max;errorText=errorText||xVal.Messages.Range_Numeric_Max;if(errorText!=null)options.messages={max:$.format(errorText)};}
else if(typeof(ruleParams.Max)=='undefined')
{options.min=ruleParams.Min;errorText=errorText||xVal.Messages.Range_Numeric_Min;if(errorText!=null)options.messages={min:$.format(errorText)};}
else
{options.range=[ruleParams.Min,ruleParams.Max];errorText=errorText||xVal.Messages.Range_Numeric_MinMax;if(errorText!=null)options.messages={range:$.format(errorText)};}
break;case"StringLength":if(typeof(ruleParams.MinLength)=='undefined')
{options.maxlength=ruleParams.MaxLength;errorText=errorText||xVal.Messages.StringLength_Max;if(errorText!=null)options.messages={maxlength:$.format(errorText)};}
else if(typeof(ruleParams.MaxLength)=='undefined')
{options.minlength=ruleParams.MinLength;errorText=errorText||xVal.Messages.StringLength_Min;if(errorText!=null)options.messages={minlength:$.format(errorText)};}
else
{options.rangelength=[ruleParams.MinLength,ruleParams.MaxLength];errorText=errorText||xVal.Messages.StringLength_MinMax;if(errorText!=null)options.messages={rangelength:$.format(errorText)};}
break;case"DataType":switch(ruleParams.Type)
{case"EmailAddress":options.email=true;options.messages={email:errorText||xVal.Messages.DataType_EmailAddress};break;case"Integer":options.xVal_regex=["^\\-?\\d+$",""];options.messages={xVal_regex:errorText||xVal.Messages.DataType_Integer||"Please enter a whole number."};break;case"Decimal":options.number=true;options.messages={number:errorText||xVal.Messages.DataType_Decimal};break;case"Date":options.date=true;options.messages={date:errorText||xVal.Messages.DataType_Date};break;case"DateTime":options.xVal_regex=["^\\d{1,2}/\\d{1,2}/(\\d{2}|\\d{4})\\s+\\d{1,2}\\:\\d{2}(\\:\\d{2})?$",""];options.messages={xVal_regex:errorText||xVal.Messages.DataType_DateTime||"Please enter a valid date and time."};break;case"Currency":options.xVal_regex=["^\\D?\\s?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$",""];options.messages={xVal_regex:errorText||xVal.Messages.DataType_Currency||"Please enter a currency value."};break;case"CreditCardLuhn":options.xVal_creditCardLuhn=true;if(errorText!=null)options.messages={xVal_creditCardLuhn:errorText};break;}
break;case"RegEx":var customFunctionName=this._registerCustomValidationFunction(function(value,element,params)
{var pattern=params[0];var options=params[1];var regex=new RegExp(pattern,options);return regex.test(value);});options[customFunctionName]=[ruleParams.Pattern,ruleParams.Options];options.messages=[];options.messages[customFunctionName]=errorText;break;case"Comparison":var elemToCompareId=this._makeAspNetMvcHtmlHelperID((elementPrefix?elementPrefix+".":"")+ruleParams.PropertyToCompare);var elemToCompare=document.getElementById(elemToCompareId);if(elemToCompare!=null)
{options.xVal_comparison=[ruleParams.PropertyToCompare,elemToCompare,ruleParams.ComparisonOperator];if(errorText!=null)options.messages={xVal_comparison:errorText};}
break;case"Remote":var dataAccessor={};parentForm.find("input[name], textarea[name], select[name]").each(function()
{var input=this;dataAccessor[input.name]=function(){return $(input).val();};});options.remote={url:ruleParams.url,data:dataAccessor,type:'post'};break;case"Custom":var ruleFunction=this._parseAsFunctionWithWarnings(ruleParams.Function);if(ruleFunction!=null)
{var customFunctionName=this._registerCustomValidationFunction(ruleFunction);var evaluatedParams=ruleParams.Parameters=="null"?null:eval("("+ruleParams.Parameters+")");options[customFunctionName]=evaluatedParams||true;options.messages=[];options.messages[customFunctionName]=errorText;}
break;}
element.rules("add",options);},_parseAsFunctionWithWarnings:function(functionString)
{var result;try{result=eval("("+functionString+")")}
catch(ex)
{alert("Custom rule error: Could not find or could not parse the function '"+functionString+"'");return null;}
if(typeof(result)!='function')
{alert("Custom rule error: The JavaScript object '"+functionString+"' is not a function.");return null;}
return result;},_associateNearbyValidationMessageSpanWithElement:function(element)
{var nearbyMessages=element.nextAll("span.field-validation-error");if(nearbyMessages.length>0)
{$(nearbyMessages[0]).attr("generated","true").attr("htmlfor",element.attr("id"));}},_ensureFormIsMarkedForValidation:function(formElement,options)
{if(!formElement.data("isMarkedForValidation"))
{formElement.data("isMarkedForValidation",true);var multipleError;var validationOptions={errorClass:"field-validation-error",errorElement:"span",showErrors:function(errorMap,errorList)
{multipleError=[];for(var i=0;this.errorList[i];i++)
{var error=this.errorList[i];var multiples=$("*[name='"+error.element.name+"']");if(multiples.length>0)
{multipleError.push(error.element.name);}
this.settings.highlight&&this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);this.showLabel(error.element,error.message);}
if(this.errorList.length)
{this.toShow=this.toShow.add(this.containers);}
if(this.settings.success)
{for(var i=0;this.successList[i];i++)
{this.showLabel(this.successList[i]);}}
this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();if(this.settings.unhighlight)
{for(var i=0,elements=this.validElements();elements[i];i++)
{var multiples=$("*[name='"+elements[i].name+"']");if(multiples.length>1)
{if(elements[i].id!=multiples.eq(0).id)
{var shouldProcessUnhighlight=true;for(var j=0;multipleError[j];j++)
{if(multipleError[j]==elements[i].name)
{shouldProcessUnhighlight=false;break;}}
if(shouldProcessUnhighlight)
{this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}}
else
{this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}}
else
{this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}}}},highlight:function(element,errorClass,validClass)
{$(element).addClass("input-validation-error");if($(element).hasClass("NoValidationIcon")||$(element).hasClass("readOnly"))
{$(element).parent().addClass("validation-noicon-failure");$(element).parent().removeClass("validation-noicon-success");}
else
{$(element).parent().addClass("validation-icon-failure");$(element).parent().removeClass("validation-icon-success");}},unhighlight:function(element,errorClass,validClass)
{$(element).removeClass("input-validation-error");if($(element).hasClass("NoValidationIcon")||$(element).hasClass("readOnly"))
{$(element).parent().addClass("validation-noicon-success");$(element).parent().removeClass("validation-noicon-failure");}
else
{$(element).parent().addClass("validation-icon-success");$(element).parent().removeClass("validation-icon-failure");}},onkeyup:false};if(options.ValidationSummary)
{validationOptions.wrapper="li";validationOptions.errorLabelContainer="#"+options.ValidationSummary.ElementID+" ul:first";}
var validator=formElement.validate(validationOptions);if(options.ValidationSummary)
this._modifyJQueryValidationElementHidingBehaviourToSupportValidationSummary(validator,options);}},_registerCustomValidationFunction:function(evalFn)
{jQuery.validator.xValCustomFunctionCount=(jQuery.validator.xValCustomFunctionCount||0)+1;var functionName="xVal_customFunction_"+jQuery.validator.xValCustomFunctionCount;jQuery.validator.addMethod(functionName,function(value,element,params)
{if(this.optional(element))
return true;return evalFn(value,element,params);});return functionName;},_ensureCustomFunctionsRegistered:function()
{if(!jQuery.validator.xValFunctionsRegistered)
{jQuery.validator.xValFunctionsRegistered=true;jQuery.validator.addMethod("xVal_stringRange",function(value,element,params)
{if(this.optional(element))return true;if(params[0]!=null)
if(value<params[0])return false;if(params[1]!=null)
if(value>params[1])return false;return true;},function(params)
{if((params[0]!=null)&&(params[1]!=null))
return $.format(xVal.Messages.Range_String_MinMax||"Please enter a value alphabetically between '{0}' and '{1}'.",params[0],params[1]);else if(params[0]!=null)
return $.format(xVal.Messages.Range_String_Min||"Please enter a value not alphabetically before '{0}'.",params[0]);else
return $.format(xVal.Messages.Range_String_Max||"Please enter a value not alphabetically after '{0}'.",params[1]);});jQuery.validator.addMethod("xVal_dateRange",function(value,element,params)
{if(this.optional(element))return true;var parsedValue=Date.parse(value);if(isNaN(parsedValue))
return false;else
parsedValue=new Date(parsedValue);if(params[0]!=null)
if(parsedValue<params[0])return false;if(params[1]!=null)
if(parsedValue>params[1])return false;return true;},function(params,elem)
{if(isNaN(Date.parse(elem.value)))
return xVal.Messages.DataType_Date||"Please enter a valid date in yyyy/mm/dd format.";var formatDate=function(date)
{var result=date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();if(date.getHours()+date.getMinutes()+date.getSeconds()!=0)
result+=" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();return result.replace(/\b(\d)\b/g,'0$1');};if((params[0]!=null)&&(params[1]!=null))
return $.format(xVal.Messages.Range_DateTime_MinMax||"Please enter a date between {0} and {1}.",formatDate(params[0]),formatDate(params[1]));else if(params[0]!=null)
return $.format(xVal.Messages.Range_DateTime_Min||"Please enter a date no earlier than {0}.",formatDate(params[0]));else
return $.format(xVal.Messages.Range_DateTime_Max||"Please enter a date no later than {0}.",formatDate(params[1]));});jQuery.validator.addMethod("xVal_regex",function(value,element,params)
{if(this.optional(element))return true;var pattern=params[0];var options=params[1];var regex=new RegExp(pattern,options);return regex.test(value);},function(params)
{return xVal.Messages.Regex||"This value is invalid.";});jQuery.validator.addMethod("xVal_creditCardLuhn",function(value,element,params)
{if(this.optional(element))return true;value=value.replace(/\D/g,"");if(value=="")return false;var sum=0;for(var i=value.length-2;i>=0;i-=2)
sum+=Array(0,2,4,6,8,1,3,5,7,9)[parseInt(value.charAt(i),10)];for(var i=value.length-1;i>=0;i-=2)
sum+=parseInt(value.charAt(i),10);return(sum%10)==0;},function(params)
{return xVal.Messages.DataType_CreditCardLuhn||"Please enter a valid credit card number.";});jQuery.validator.addMethod("xVal_comparison",function(value,element,params)
{if(this.optional(element))return true;var elemToCompare=params[1];var comparisonOperator=params[2];switch(comparisonOperator)
{case"Equals":return value==elemToCompare.value;case"DoesNotEqual":return value!=elemToCompare.value;}
return true;},function(params)
{var propertyToCompareName=params[0];var comparisonOperator=params[2];switch(comparisonOperator)
{case"Equals":return $.format(xVal.Messages.Comparison_Equals||"This value must be the same as {0}.",propertyToCompareName);case"DoesNotEqual":return $.format(xVal.Messages.Comparison_DoesNotEqual||"This value must be different from {0}.",propertyToCompareName);}});$.expr[":"].displayableValidationSummaryMessage=function(object)
{var span=$(object).find("span:first");if(span.length==0)
return true;return!(span.css("display")==="none")&&!span.is(":empty");};}},_ensureValidationSummaryContainerExistsIfRequired:function(options)
{if(options.ValidationSummary)
{var validationSummaryContainer=$("#"+options.ValidationSummary.ElementID);if(validationSummaryContainer.length==0)
alert("Cannot find validation summary element \""+options.ValidationSummary.ElementID+"\". Make sure you've put an element with this ID into your HTML document.");if(!validationSummaryContainer.is(":has(ul)"))
{validationSummaryContainer.append($("<span class='validation-summary-errors' />").text(options.ValidationSummary.HeaderMessage)).append($("<ul />")).hide();}}},_modifyJQueryValidationElementHidingBehaviourToSupportValidationSummary:function(validator,options)
{var originalHideErrorsMethod=validator.hideErrors;var originalShowErrorsMethod=validator.showErrors;validator.hideErrors=function()
{this.toHide=this.toHide.not("ul");originalHideErrorsMethod.apply(this,arguments);$("#"+options.ValidationSummary.ElementID+":not(:has(li:displayableValidationSummaryMessage))").hide();};validator.showErrors=function()
{originalShowErrorsMethod.apply(this,arguments);$("#"+options.ValidationSummary.ElementID+":has(li:displayableValidationSummaryMessage)").show();};}};})(jQuery);

function ValidateRegEx(value,element,params)
{return RegExp(params.Pattern).test(value);}
function ValidateStringLength(value,element,params)
{return(value.length>=params.min)&&(value.length<=params.max);};function CompareValues(value,element,params)
{if(params.equalityComparison)
{return value==$('#'+params.propertyToCompare+'').val();}
return value!=$('#'+params.propertyToCompare+'').val();};function EnsureMinimumChecked(value,element,params)
{return $("input[name='"+params.selectionGroupName+"']:checked").length>=params.minChecked;};function CreditCardStringLengthMinMax(value,element,params)
{var xMatches=value.match(/[x]{1,12}/gi)
var xCount=0;if(xMatches!=null)
xCount=xMatches.length;if(xCount>1)
return false;value=value.replace(/\D/g,"")
if(xCount>0)
return value.length==4&&xMatches[0].length>=9&&xMatches[0].length<=12;return(value.length>=params.min)&&(value.length<=params.max);}
function ValidateJapanesePostalCode(value,element,params)
{var cc=$("#CountryCode").val();if(cc!="JPN")
return true;var regEx=RegExp(params.RegEx);return regEx.test(value);}
function ValidateVAT(value,element,params){var isOptedOut=$("#VatOptOut:checked").length;if(!isOptedOut)return ValidateStringLength(value,element,params);return true;}

(function($)
{$.extend($.fn,{validate:function(options)
{if(!this.length)
{options&&options.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return;}
var validator=$.data(this[0],'validator');if(validator)
{return validator;}
validator=new $.validator(options,this[0]);$.data(this[0],'validator',validator);if(validator.settings.onsubmit)
{this.find("input, button").filter(".cancel").click(function()
{validator.cancelSubmit=true;});if(validator.settings.submitHandler)
{this.find("input, button").filter(":submit").click(function()
{validator.submitButton=this;});}
this.submit(function(event)
{if(validator.settings.debug)
event.preventDefault();function handle()
{if(validator.settings.submitHandler)
{if(validator.submitButton)
{var hidden=$("<input type='hidden'/>").attr("name",validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);}
validator.settings.submitHandler.call(validator,validator.currentForm);if(validator.submitButton)
{hidden.remove();}
return false;}
return true;}
if(validator.cancelSubmit)
{validator.cancelSubmit=false;return handle();}
if(validator.form())
{if(validator.pendingRequest)
{validator.formSubmitted=true;return false;}
return handle();}else
{validator.focusInvalid();return false;}});}
return validator;},valid:function()
{if($(this[0]).is('form'))
{return this.validate().form();}else
{var valid=true;var validator=$(this[0].form).validate();this.each(function()
{valid&=validator.element(this);});return valid;}},removeAttrs:function(attributes)
{var result={},$element=this;$.each(attributes.split(/\s/),function(index,value)
{result[value]=$element.attr(value);$element.removeAttr(value);});return result;},rules:function(command,argument)
{var element=this[0];if(command)
{var settings=$.data(element.form,'validator').settings;var staticRules=settings.rules;var existingRules=$.validator.staticRules(element);switch(command)
{case"add":$.extend(existingRules,$.validator.normalizeRule(argument));staticRules[element.name]=existingRules;if(argument.messages)
settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);break;case"remove":if(!argument)
{delete staticRules[element.name];return existingRules;}
var filtered={};$.each(argument.split(/\s/),function(index,method)
{filtered[method]=existingRules[method];delete existingRules[method];});return filtered;case"disable":element.DisabledRules=staticRules[element.name];delete staticRules[element.name];return existingRules;case"enable":if(element.DisabledRules)
staticRules[element.name]=element.DisabledRules;return existingRules}}
var data=$.validator.normalizeRules($.extend({},$.validator.metadataRules(element),$.validator.classRules(element),$.validator.attributeRules(element),$.validator.staticRules(element)),element);if(data.required)
{var param=data.required;delete data.required;data=$.extend({required:param},data);}
return data;}});$.extend($.expr[":"],{blank:function(a){return!$.trim(a.value);},filled:function(a){return!!$.trim(a.value);},unchecked:function(a){return!a.checked;}});$.validator=function(options,form)
{this.settings=$.extend({},$.validator.defaults,options);this.currentForm=form;this.init();};$.validator.format=function(source,params)
{if(arguments.length==1)
return function()
{var args=$.makeArray(arguments);args.unshift(source);return $.validator.format.apply(this,args);};if(arguments.length>2&&params.constructor!=Array)
{params=$.makeArray(arguments).slice(1);}
if(params.constructor!=Array)
{params=[params];}
$.each(params,function(i,n)
{source=source.replace(new RegExp("\\{"+i+"\\}","g"),n);});return source;};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:[],ignoreTitle:false,onfocusin:function(element)
{this.lastActive=element;if(this.settings.focusCleanup&&!this.blockFocusCleanup)
{this.settings.unhighlight&&this.settings.unhighlight.call(this,element,this.settings.errorClass,this.settings.validClass);this.errorsFor(element).hide();}},onfocusout:function(element)
{if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element)))
{this.element(element);}},onkeyup:function(element)
{if(element.name in this.submitted||element==this.lastElement)
{this.element(element);}},onclick:function(element)
{if(element.name in this.submitted)
this.element(element);},highlight:function(element,errorClass,validClass)
{$(element).addClass(errorClass).removeClass(validClass);},unhighlight:function(element,errorClass,validClass)
{$(element).removeClass(errorClass).addClass(validClass);}},setDefaults:function(settings)
{$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",dateDE:"Bitte geben Sie ein gültiges Datum ein.",number:"Please enter a valid number.",numberDE:"Bitte geben Sie eine Nummer ein.",digits:"Please enter only digits",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:$.validator.format("Please enter no more than {0} characters."),minlength:$.validator.format("Please enter at least {0} characters."),rangelength:$.validator.format("Please enter a value between {0} and {1} characters long."),range:$.validator.format("Please enter a value between {0} and {1}."),max:$.validator.format("Please enter a value less than or equal to {0}."),min:$.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function()
{this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={});$.each(this.settings.groups,function(key,value)
{$.each(value.split(/\s/),function(index,name)
{groups[name]=key;});});var rules=this.settings.rules;$.each(rules,function(key,value)
{rules[key]=$.validator.normalizeRule(value);});function delegate(event)
{var validator=$.data(this[0].form,"validator");validator.settings["on"+event.type]&&validator.settings["on"+event.type].call(validator,this[0]);}
$(this.currentForm).delegate("focusin focusout keyup",":text, :password, :file, select, textarea",delegate).delegate("click",":radio, :checkbox",delegate);if(this.settings.invalidHandler)
$(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler);},form:function()
{this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid())
$(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid();},checkForm:function()
{this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++)
{this.check(elements[i]);}
return this.valid();},element:function(element)
{element=this.clean(element);this.lastElement=element;this.prepareElement(element);this.currentElements=$(element);var result=this.check(element);if(result)
{delete this.invalid[element.name];}else
{this.invalid[element.name]=true;}
if(!this.numberOfInvalids())
{this.toHide=this.toHide.add(this.containers);}
this.showErrors();return result;},showErrors:function(errors)
{if(errors)
{$.extend(this.errorMap,errors);this.errorList=[];for(var name in errors)
{this.errorList.push({message:errors[name],element:this.findByName(name)[0]});}
this.successList=$.grep(this.successList,function(element)
{return!(element.name in errors);});}
this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors();},resetForm:function()
{if($.fn.resetForm)
$(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass);},numberOfInvalids:function()
{return this.objectLength(this.invalid);},objectLength:function(obj)
{var count=0;for(var i in obj)
count++;return count;},hideErrors:function()
{this.addWrapper(this.toHide).hide();},valid:function()
{return this.size()==0;},size:function()
{return this.errorList.length;},focusInvalid:function()
{if(this.settings.focusInvalid)
{try
{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus();}catch(e)
{}}},findLastActive:function()
{var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n)
{return n.element.name==lastActive.name;}).length==1&&lastActive;},elements:function()
{var validator=this,rulesCache={};return $([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function()
{!this.name&&validator.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in rulesCache||!validator.objectLength($(this).rules()))
return false;rulesCache[this.name]=true;return true;});},clean:function(selector)
{return $(selector)[0];},errors:function()
{return $(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext);},reset:function()
{this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);this.formSubmitted=false;this.currentElements=$([]);},prepareForm:function()
{this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element)
{this.reset();this.toHide=this.errorsFor(element);},getOrderedRules:function(rules)
{var orderedRules=Array();var unorderedRules={};for(method in rules)
{var rule={method:method,parameters:rules[method]};if(rule.parameters.ExecutionOrder||method=="remote")
{var order=rule.parameters.ExecutionOrder||orderedRules.length+100
orderedRules[order]=method;continue;}
unorderedRules[method]={};}
for(method in orderedRules)
{unorderedRules[orderedRules[method]]={};}
return unorderedRules;},check:function(element)
{element=this.clean(element);if(this.checkable(element))
{element=this.findByName(element.name)[0];}
var rules=$(element).rules();var dependencyMismatch=false;var orderedRules=this.getOrderedRules(rules);for(method in orderedRules)
{var rule={method:method,parameters:rules[method]};try
{var result=$.validator.methods[method].call(this,element.value.replace(/\r/g,""),element,rule.parameters);if(result=="dependency-mismatch")
{dependencyMismatch=true;continue;}
dependencyMismatch=false;if(result=="pending")
{this.toHide=this.toHide.not(this.errorsFor(element));return;}
if(!result)
{this.formatAndAdd(element,rule);return false;}}catch(e)
{this.settings.debug&&window.console&&console.log("exception occured when checking element "+element.id
+", check the '"+rule.method+"' method");throw e;}}
if(dependencyMismatch)
return;if(this.objectLength(rules))
this.successList.push(element);return true;},customMetaMessage:function(element,method)
{if(!$.metadata)
return;var meta=this.settings.meta?$(element).metadata()[this.settings.meta]:$(element).metadata();return meta&&meta.messages&&meta.messages[method];},customMessage:function(name,method)
{var m=this.settings.messages[name];return m&&(m.constructor==String?m:m[method]);},findDefined:function()
{for(var i=0;i<arguments.length;i++)
{if(arguments[i]!==undefined)
return arguments[i];}
return undefined;},defaultMessage:function(element,method)
{return this.findDefined(this.customMessage(element.name,method),this.customMetaMessage(element,method),!this.settings.ignoreTitle&&element.title||undefined,$.validator.messages[method],"<strong>Warning: No message defined for "+element.name+"</strong>");},formatAndAdd:function(element,rule)
{var message=this.defaultMessage(element,rule.method);if(typeof message=="function")
message=message.call(this,rule.parameters,element);this.errorList.push({message:message,element:element});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle)
{if(this.settings.wrapper)
toToggle=toToggle.add(toToggle.parent(this.settings.wrapper));return toToggle;},defaultShowErrors:function()
{for(var i=0;this.errorList[i];i++)
{var error=this.errorList[i];this.settings.highlight&&this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);this.showLabel(error.element,error.message);}
if(this.errorList.length)
{this.toShow=this.toShow.add(this.containers);}
if(this.settings.success)
{for(var i=0;this.successList[i];i++)
{this.showLabel(this.successList[i]);}}
if(this.settings.unhighlight)
{for(var i=0,elements=this.validElements();elements[i];i++)
{this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}}
this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function()
{return this.currentElements.not(this.invalidElements());},invalidElements:function()
{return $(this.errorList).map(function()
{return this.element;});},showLabel:function(element,message)
{var label=this.errorsFor(element);if(label.length)
{label.removeClass().addClass(this.settings.errorClass);label.attr("generated")&&label.html(message);}else
{label=$("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(element),generated:true}).addClass(this.settings.errorClass).html(message||"");if(this.settings.wrapper)
{label=label.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();}
if(!this.labelContainer.append(label).length)
this.settings.errorPlacement?this.settings.errorPlacement(label,$(element)):label.insertAfter(element);}
if(!message&&this.settings.success)
{label.text("");typeof this.settings.success=="string"?label.addClass(this.settings.success):this.settings.success(label);}
this.toShow=this.toShow.add(label);},errorsFor:function(element)
{return this.errors().filter("[for='"+this.idOrName(element)+"']");},idOrName:function(element)
{return this.groups[element.name]||(this.checkable(element)?element.name:element.id||element.name);},checkable:function(element)
{return/radio|checkbox/i.test(element.type);},findByName:function(name)
{var form=this.currentForm;return $(document.getElementsByName(name)).map(function(index,element)
{return element.form==form&&element.name==name&&element||null;});},getLength:function(value,element)
{switch(element.nodeName.toLowerCase())
{case'select':return $("option:selected",element).length;case'input':if(this.checkable(element))
return this.findByName(element.name).filter(':checked').length;}
return value.length;},depend:function(param,element)
{return this.dependTypes[typeof param]?this.dependTypes[typeof param](param,element):true;},dependTypes:{"boolean":function(param,element)
{return param;},"string":function(param,element)
{return!!$(param,element.form).length;},"function":function(param,element)
{return param(element);}},optional:function(element)
{var elementIsEmpty=!$.validator.methods.required.call(this,$.trim(element.value),element);var rules=$(element).rules()
var ruleCount=0;for(rule in rules)
{if(rule=="required")
return false;ruleCount++}
if(!elementIsEmpty&&ruleCount>0)
return false;return true;},startRequest:function(element)
{if(!this.pending[element.name])
{this.pendingRequest++;this.pending[element.name]=true;}},stopRequest:function(element,valid)
{this.pendingRequest--;if(this.pendingRequest<0)
this.pendingRequest=0;delete this.pending[element.name];if(valid&&this.pendingRequest==0&&this.formSubmitted&&this.form())
{$(this.currentForm).submit();}else if(!valid&&this.pendingRequest==0&&this.formSubmitted)
{$(this.currentForm).triggerHandler("invalid-form",[this]);}},previousValue:function(element)
{return $.data(element,"previousValue")||$.data(element,"previousValue",previous={old:null,valid:true,message:this.defaultMessage(element,"remote")});}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(className,rules)
{className.constructor==String?this.classRuleSettings[className]=rules:$.extend(this.classRuleSettings,className);},classRules:function(element)
{var rules={};var classes=$(element).attr('class');classes&&$.each(classes.split(' '),function()
{if(this in $.validator.classRuleSettings)
{$.extend(rules,$.validator.classRuleSettings[this]);}});return rules;},attributeRules:function(element)
{var rules={};var $element=$(element);for(method in $.validator.methods)
{var value=$element.attr(method);if(value)
{rules[method]=value;}}
if(rules.maxlength&&/-1|2147483647|524288/.test(rules.maxlength))
{delete rules.maxlength;}
return rules;},metadataRules:function(element)
{if(!$.metadata)return{};var meta=$.data(element.form,'validator').settings.meta;return meta?$(element).metadata()[meta]:$(element).metadata();},staticRules:function(element)
{var rules={};var validator=$.data(element.form,'validator');if(validator.settings.rules)
{rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};}
return rules;},normalizeRules:function(rules,element)
{$.each(rules,function(prop,val)
{if(val===false)
{delete rules[prop];return;}
if(val.param||val.depends)
{var keepRule=true;switch(typeof val.depends)
{case"string":keepRule=!!$(val.depends,element.form).length;break;case"function":keepRule=val.depends.call(element,element);break;}
if(keepRule)
{rules[prop]=val.param!==undefined?val.param:true;}else
{delete rules[prop];}}});$.each(rules,function(rule,parameter)
{rules[rule]=$.isFunction(parameter)?parameter(element):parameter;});$.each(['minlength','maxlength','min','max'],function()
{if(rules[this])
{rules[this]=Number(rules[this]);}});$.each(['rangelength','range'],function()
{if(rules[this])
{rules[this]=[Number(rules[this][0]),Number(rules[this][1])];}});if($.validator.autoCreateRanges)
{if(rules.min&&rules.max)
{rules.range=[rules.min,rules.max];delete rules.min;delete rules.max;}
if(rules.minlength&&rules.maxlength)
{rules.rangelength=[rules.minlength,rules.maxlength];delete rules.minlength;delete rules.maxlength;}}
if(rules.messages)
{delete rules.messages}
return rules;},normalizeRule:function(data)
{if(typeof data=="string")
{var transformed={};$.each(data.split(/\s/),function()
{transformed[this]=true;});data=transformed;}
return data;},addMethod:function(name,method,message)
{$.validator.methods[name]=method;$.validator.messages[name]=message||$.validator.messages[name];if(method.length<3)
{$.validator.addClassRules(name,$.validator.normalizeRule(name));}},methods:{required:function(value,element,param)
{if(!this.depend(param,element))
return"dependency-mismatch";switch(element.nodeName.toLowerCase())
{case'select':var options=$("option:selected",element);return options.length>0&&(element.type=="select-multiple"||($.browser.msie&&!(options[0].attributes['value'].specified)?options[0].text:options[0].value).length>0);case'input':if(this.checkable(element))
return this.getLength(value,element)>0;default:return $.trim(value).length>0;}},remote:function(value,element,param)
{if(this.optional(element))
return"dependency-mismatch";var previous=this.previousValue(element);if(!this.settings.messages[element.name])
this.settings.messages[element.name]={};this.settings.messages[element.name].remote=typeof previous.message=="function"?previous.message(value):previous.message;param=typeof param=="string"&&{url:param}||param;if(previous.old!==value)
{previous.old=value;var validator=this;this.startRequest(element);var data={};data[element.name]=value;$.ajax($.extend(true,{url:param,mode:"abort",port:"validate"+element.name,dataType:"json",data:data,success:function(response)
{var valid=response===true;if(valid)
{var submitted=validator.formSubmitted;validator.prepareElement(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.showErrors();}else
{var errors={};errors[element.name]=previous.message=response||validator.defaultMessage(element,"remote");validator.showErrors(errors);}
previous.valid=valid;validator.stopRequest(element,valid);}},param));return"pending";}else if(this.pending[element.name])
{return"pending";}
return previous.valid;},minlength:function(value,element,param)
{return this.optional(element)||this.getLength($.trim(value),element)>=param;},maxlength:function(value,element,param)
{return this.optional(element)||this.getLength($.trim(value),element)<=param;},rangelength:function(value,element,param)
{var length=this.getLength($.trim(value),element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param)
{return this.optional(element)||value>=param;},max:function(value,element,param)
{return this.optional(element)||value<=param;},range:function(value,element,param)
{return this.optional(element)||(value>=param[0]&&value<=param[1]);},email:function(value,element)
{return this.optional(element)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);},url:function(value,element)
{return this.optional(element)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);},date:function(value,element)
{return this.optional(element)||!/Invalid|NaN/.test(new Date(value));},dateISO:function(value,element)
{return this.optional(element)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);},dateDE:function(value,element)
{return this.optional(element)||/^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);},number:function(value,element)
{return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);},numberDE:function(value,element)
{return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);},digits:function(value,element)
{return this.optional(element)||/^\d+$/.test(value);},creditcard:function(value,element)
{if(this.optional(element))
return"dependency-mismatch";if(/[^0-9-]+/.test(value))
return false;var nCheck=0,nDigit=0,bEven=false;value=value.replace(/\D/g,"");for(n=value.length-1;n>=0;n--)
{var cDigit=value.charAt(n);var nDigit=parseInt(cDigit,10);if(bEven)
{if((nDigit*=2)>9)
nDigit-=9;}
nCheck+=nDigit;bEven=!bEven;}
return(nCheck%10)==0;},accept:function(value,element,param)
{param=typeof param=="string"?param.replace(/,/g,'|'):"png|jpe?g|gif";return this.optional(element)||value.match(new RegExp(".("+param+")$","i"));},equalTo:function(value,element,param)
{return value==$(param).val();}}});$.format=$.validator.format;})(jQuery);;(function($){var ajax=$.ajax;var pendingRequests={};$.ajax=function(settings){settings=$.extend(settings,$.extend({},$.ajaxSettings,settings));var port=settings.port;if(settings.mode=="abort"){if(pendingRequests[port]){pendingRequests[port].abort();}
return(pendingRequests[port]=ajax.apply(this,arguments));}
return ajax.apply(this,arguments);};})(jQuery);;(function($){$.each({focus:'focusin',blur:'focusout'},function(original,fix){$.event.special[fix]={setup:function(){if($.browser.msie)return false;this.addEventListener(original,$.event.special[fix].handler,true);},teardown:function(){if($.browser.msie)return false;this.removeEventListener(original,$.event.special[fix].handler,true);},handler:function(e){arguments[0]=$.event.fix(e);arguments[0].type=fix;return $.event.handle.apply(this,arguments);}};});$.extend($.fn,{delegate:function(type,delegate,handler){return this.bind(type,function(event){var target=$(event.target);if(target.is(delegate)){return handler.apply(target,arguments);}});},triggerEvent:function(type,target){return this.triggerHandler(type,[$.event.fix({type:type,target:target})]);}})})(jQuery);