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