jQuery.extend(jQuery.fn,{validate:function(B){var C=new jQuery.validator(B,this[0]);if(C.settings.onsubmit){this.find("input.cancel:submit").click(function(){C.cancelSubmit=true});this.submit(function(D){if(C.settings.debug){D.preventDefault()}function E(){if(C.settings.submitHandler){C.settings.submitHandler.call(C,C.currentForm);return false}return true}if(C.cancelSubmit){C.cancelSubmit=false;return E()}if(C.form()){if(this.pendingRequest){this.submitted=true;return false}return E()}else{C.focusInvalid();return false}})}C.settings.onblur&&C.elements.blur(function(){C.settings.onblur.call(C,this)});C.settings.onkeyup&&C.elements.keyup(function(){C.settings.onkeyup.call(C,this)});if(C.settings.onclick){var A=jQuery([]);C.elements.each(function(){if(C.checkable(this)){A.push(C.checkableGroup(this))}});C.settings.onclick&&A.click(function(){C.settings.onclick.call(C,this)})}return C},push:function(A){return this.setArray(jQuery.merge(this.get(),A))}});jQuery.extend(jQuery.expr[":"],{blank:"!jQuery.trim(a.value)",filled:"!!jQuery.trim(a.value)",unchecked:"!a.checked"});String.format=function(A,B){if(arguments.length==1){return function(){var C=jQuery.makeArray(arguments);C.unshift(A);return String.format.apply(this,C)}}if(arguments.length>2&&B.constructor!=Array){B=jQuery.makeArray(arguments).slice(1)}if(B.constructor!=Array){B=[B]}jQuery.each(B,function(C,D){A=A.replace(new RegExp("\\{"+C+"\\}","g"),D)});return A};jQuery.validator=function(A,B){this.settings=jQuery.extend({},jQuery.validator.defaults,A);this.currentForm=B;this.labelContainer=this.settings.errorLabelContainer;this.errorContext=this.labelContainer.length&&this.labelContainer||jQuery(B);this.containers=this.settings.errorContainer.add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.invalid={};this.reset();this.refresh()};jQuery.extend(jQuery.validator,{defaults:{messages:{},errorClass:"error",errorElement:"label",focusInvalid:true,errorContainer:jQuery([]),errorLabelContainer:jQuery([]),onsubmit:true,ignore:[],onblur:function(A){if(!this.checkable(A)&&(A.name in this.submitted||!this.optional(A))){this.element(A)}},onkeyup:function(A){if(A.name in this.submitted||A==this.lastElement){this.element(A)}},onclick:function(A){if(A.name in this.submitted){this.element(A)}}},setDefaults:function(A){jQuery.extend(jQuery.validator.defaults,A)},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.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxLength:String.format("Please enter a value no longer than {0} characters."),minLength:String.format("Please enter a value of at least {0} characters."),rangeLength:String.format("Please enter a value between {0} and {1} characters long."),rangeValue:String.format("Please enter a value between {0} and {1}."),maxValue:String.format("Please enter a value less than or equal to {0}."),minValue:String.format("Please enter a value greater than or equal to {0}.")},prototype:{form:function(){this.prepareForm();for(var A=0;this.elements[A];A++){this.check(this.elements[A])}jQuery.extend(this.submitted,this.errorMap);this.invalid=jQuery.extend({},this.errorMap);this.settings.invalidHandler&&this.settings.invalidHandler.call(this);this.showErrors();return this.valid()},element:function(B){B=this.clean(B);this.lastElement=B;this.prepareElement(B);var A=this.check(B);if(A){delete this.invalid[B.name]}else{this.invalid[B.name]=true}this.showErrors();return A},showErrors:function(A){if(A){jQuery.extend(this.errorMap,A);for(name in A){this.errorList.push({message:A[name],element:jQuery("[@name='"+name+"']:first",this.currentForm)[0]})}this.successList=jQuery.grep(this.successList,function(B){return !(B.name in A)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){if(jQuery.fn.resetForm){jQuery(this.currentForm).resetForm()}this.prepareForm();this.hideErrors();this.elements.removeClass(this.settings.errorClass)},numberOfInvalids:function(){var A=0;for(i in this.invalid){A++}return A},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{jQuery(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus()}catch(A){}}},findLastActive:function(){var A=this.lastActive;return A&&jQuery.grep(this.errorList,function(B){return B.element.name==A.name}).length==1&&A},refresh:function(){var A=this;A.rulesCache={};this.elements=jQuery(this.currentForm).find("input, select, textarea, button").not(":submit, :reset, :button").not("[@disabled]").not(this.settings.ignore).filter(function(){!this.name&&A.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in A.rulesCache||!A.rules(this).length){return false}A.rulesCache[this.name]=A.rules(this);return true});this.elements.focus(function(){A.lastActive=this;if(A.settings.focusCleanup&&!A.blockFocusCleanup){jQuery(this).removeClass(A.settings.errorClass);A.errorsFor(this).hide()}})},clean:function(A){return jQuery(A)[0]},errors:function(){return jQuery(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext)},reset:function(A){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=jQuery([]);this.toHide=jQuery([])},prepareForm:function(){this.reset();this.toHide=this.errors().push(this.containers)},prepareElement:function(A){this.reset();this.toHide=this.errorsFor(this.clean(A))},check:function(C){C=this.clean(C);jQuery(C).removeClass(this.settings.errorClass);var F=this.rulesCache[C.name];for(var B=0;F[B];B++){var E=F[B];try{var A=jQuery.validator.methods[E.method].call(this,jQuery.trim(C.value),C,E.parameters);if(A===-1){break}if(!A){jQuery(C).addClass(this.settings.errorClass);this.formatAndAdd(E,C);return false}}catch(D){this.settings.debug&&window.console&&console.error("exception occured when checking element "+C.id+", check the '"+E.method+"' method");throw D}}if(F.length&&this.settings.success){this.successList.push(C)}return true},configuredMessage:function(C,B){var A=this.settings.messages[C];return A&&(A.constructor==String?A:A[B])},defaultMessage:function(A,B){return this.configuredMessage(A.name,B)||A.title||jQuery.validator.messages[B]||"<strong>Warning: No message defined for "+A.name+"</strong>"},formatAndAdd:function(C,A){var B=this.defaultMessage(A,C.method);if(typeof B=="function"){B=B.call(this,C.parameters,A)}this.errorList.push({message:B,element:A});this.errorMap[A.name]=B;this.submitted[A.name]=B},addWrapper:function(A){if(this.settings.wrapper){A.push(A.parents(this.settings.wrapper))}return A},defaultShowErrors:function(){for(var B=0;this.errorList[B];B++){var A=this.errorList[B];this.showLabel(A.element,A.message)}if(this.errorList.length){this.toShow.push(this.containers)}for(var B=0;this.successList[B];B++){this.showLabel(this.successList[B])}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show()},showLabel:function(B,C){var A=this.errorsFor(B);if(A.length){A.removeClass().addClass(this.settings.errorClass);if(this.settings.overrideErrors||A.attr("generated")){A.html(C)}}else{A=jQuery("<"+this.settings.errorElement+"></"+this.settings.errorElement+">").attr({"for":this.idOrName(B),generated:true}).addClass(this.settings.errorClass).html(C||"");if(this.settings.wrapper){A=A.hide().show().wrap("<"+this.settings.wrapper+">").parent()}if(!this.labelContainer.append(A).length){this.settings.errorPlacement?this.settings.errorPlacement(A,jQuery(B)):A.insertAfter(B)}}if(!C&&this.settings.success){A.text("");typeof this.settings.success=="string"?A.addClass(this.settings.success):this.settings.success(A)}this.toShow.push(A)},errorsFor:function(A){return this.errors().filter("[@for='"+this.idOrName(A)+"']")},idOrName:function(A){return this.checkable(A)?A.name:A.id||A.name},rules:function(B){var C=this.data(B);if(!C){return[]}var D=[];if(typeof C=="string"){var A={};A[C]=true;C=A}jQuery.each(C,function(E,F){D[D.length]={method:E,parameters:F}});return D},data:function(A){return this.settings.rules?this.settings.rules[A.name]:this.settings.meta?jQuery(A).data()[this.settings.meta]:jQuery(A).data()},checkable:function(A){return/radio|checkbox/i.test(A.type)},checkableGroup:function(A){return jQuery(A.form||document).find('[@name="'+A.name+'"]')},getLength:function(B,A){switch(A.nodeName.toLowerCase()){case"select":return jQuery("option:selected",A).length;case"input":if(this.checkable(A)){return this.checkableGroup(A).filter(":checked").length}}return B.length},depend:function(B,A){if(this.settings.subformRequired){if(this.settings.subformRequired(jQuery(A))){return false}}return this.dependTypes[typeof B]?this.dependTypes[typeof B](B,A):true},dependTypes:{"boolean":function(B,A){return B},string:function(B,A){return !!jQuery(B,A.form).length},"function":function(B,A){return B(A)}},optional:function(A){return !jQuery.validator.methods.required.call(this,jQuery.trim(A.value),A)},startRequest:function(){this.pendingRequest++},stopRequest:function(A){this.pendingRequest--;if(A&&this.pendingRequest==0&&this.submitted&&this.form()){jQuery(this.currentForm).submit()}}},methods:{required:function(C,B,D){if(!this.depend(D,B)){return -1}switch(B.nodeName.toLowerCase()){case"select":var A=jQuery("option:selected",B);return A.length>0&&(B.type=="select-multiple"||(jQuery.browser.msie&&!(A[0].attributes.value.specified)?A[0].text:A[0].value).length>0);case"input":if(this.checkable(B)){return this.getLength(C,B)>0}default:return C.length>0}},remote:function(D,B,E){if(this.optional(B)){return true}var C=this.valueCache[B.name];if(!C){this.valueCache[B.name]=C={old:null,valid:true,message:this.defaultMessage(B,"remote")}}this.settings.messages[B.name].remote=typeof C.message=="function"?C.message(D):C.message;if(C.old!==D){C.old=D;var A=this;this.startRequest();jQuery.ajax({url:E,mode:"abort",port:"validate",dataType:"json",data:{value:D},success:function(F){if(!F){var G={};G[B.name]=A.defaultMessage(B,"remote");A.showErrors(G)}C.valid=F;A.stopRequest(F)}});return true}return C.valid},minLength:function(B,A,C){return this.optional(A)||this.getLength(B,A)>=C},maxLength:function(B,A,C){return this.optional(A)||this.getLength(B,A)<=C},rangeLength:function(C,A,D){var B=this.getLength(C,A);return this.optional(A)||(B>=D[0]&&B<=D[1])},minValue:function(B,A,C){return this.optional(A)||B>=C},maxValue:function(B,A,C){return this.optional(A)||B<=C},rangeValue:function(B,A,C){return this.optional(A)||(B>=C[0]&&B<=C[1])},email:function(B,A){return this.optional(A)||/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/i.test(B)},url:function(B,A){return this.optional(A)||/^(https?|ftp):\/\/[A-Z0-9](\.?[A-Z0-9ÄÜÖ][A-Z0-9_\-ÄÜÖ]*)*(\/([A-Z0-9ÄÜÖ][A-Z0-9_\-\.ÄÜÖ]*)?)*(\?([A-Z0-9ÄÜÖ][A-Z0-9_\-\.%\+=&ÄÜÖ]*)?)?$/i.test(B)},date:function(B,A){return this.optional(A)||!/Invalid|NaN/.test(new Date(B))},dateISO:function(B,A){return this.optional(A)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(B)},dateDE:function(B,A){return this.optional(A)||/^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(B)},number:function(B,A){return this.optional(A)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(B)},numberDE:function(B,A){return this.optional(A)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(B)},digits:function(B,A){return this.optional(A)||/^\d+$/.test(B)},creditcard:function(E,B){if(this.optional(B)){return true}var F=0,D=0,A=false;E=E.replace(/\D/g,"");for(n=E.length-1;n>=0;n--){var C=E.charAt(n);var D=parseInt(C,10);if(A){if((D*=2)>9){D-=9}}F+=D;A=!A}return(F%10)==0},accept:function(B,A,C){C=typeof C=="string"?C:"png|jpe?g|gif";return this.optional(A)||B.match(new RegExp(".("+C+")$"))},equalTo:function(B,A,C){return B==jQuery(C).val()}},addMethod:function(A,C,B){jQuery.validator.methods[A]=C;jQuery.validator.messages[A]=B}});
