(function($){$.meta={type:"class",name:"metadata",setType:function(type,name){this.type=type;this.name=name},cre:/({.*})/,single:'metadata'};var setArray=$.fn.setArray;$.fn.setArray=function(arr){return setArray.apply(this,arguments).each(function(){if(this.nodeType==9||$.isXMLDoc(this)||this.metaDone)return;var data="{}";if($.meta.type=="class"){var m=$.meta.cre.exec(this.className);if(m)data=m[1]}else if($.meta.type=="elem"){if(!this.getElementsByTagName)return;var e=this.getElementsByTagName($.meta.name);if(e.length)data=$.trim(e[0].innerHTML)}else if(this.getAttribute!=undefined){var attr=this.getAttribute($.meta.name);if(attr)data=attr}if(!/^{/.test(data))data="{"+data+"}";eval("data = "+data);if($.meta.single)this[$.meta.single]=data;else $.extend(this,data);this.metaDone=true})};$.fn.data=function(){return this[0][$.meta.single]}})(jQuery); jQuery.extend(jQuery.fn,{validate:function(d){var b=new jQuery.validator(d,this[0]);if(b.settings.onsubmit){this.find("input.cancel:submit").click(function(){this.form.cancel=true});this.submit(function(a){if(b.settings.debug)a.preventDefault();if(this.cancel||b.form()){this.cancel=false;if(b.settings.submitHandler){b.settings.submitHandler(b.currentForm);return false}return true}else{b.focusInvalid();return false}})}b.settings.onblur&&b.elements.blur(function(){b.settings.onblur.call(b,this)});b.settings.onkeyup&&b.elements.keyup(function(){b.settings.onkeyup.call(b,this)});var c=jQuery([]);b.elements.each(function(){if(b.checkable(this))c.push(b.checkableGroup(this))});b.settings.onchange&&c.click(function(){b.settings.onchange.call(b,this)});return b},push:function(t){return this.setArray(jQuery.merge(this.get(),t))}});jQuery.extend(jQuery.expr[":"],{blank:"!jQuery.trim(a.value)",filled:"!!jQuery.trim(a.value)",unchecked:"!a.checked"});String.format=function(c,b){if(arguments.length==1)return function(a){return String.format(c,a)};if(arguments.length>2)b=jQuery.makeArray(arguments).slice(1);if(b.constructor!=Array)b=[b];jQuery.each(b,function(i,n){c=c.replace(new RegExp("\\{"+i+"\\}"),n)});return c};jQuery.validator=function(b,a){this.settings=jQuery.extend({},jQuery.validator.defaults,b);this.currentForm=a;this.labelContainer=this.settings.errorLabelContainer;this.errorContext=this.labelContainer.length&&this.labelContainer||jQuery(a);this.containers=this.settings.errorContainer.add(this.settings.errorLabelContainer);this.submitted={};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.required(a))){this.element(a)}},onkeyup:function(a){if(a.name in this.submitted||a==this.lastElement){this.element(a)}},onchange: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.",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 i=0,element;element=this.elements[i];i++){this.check(element)}jQuery.extend(this.submitted,this.errorMap);return this.valid()},element:function(a){a=this.clean(a);this.lastElement=a;this.prepareElement(a);var b=this.check(a);this.showErrors();return b},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)},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){this.showErrors();return this.errorList.length==0},focusInvalid:function(){if(this.settings.focusInvalid){try{jQuery(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus()}catch(e){}}},findLastActive:function(){var a=this.lastActive;return a&&jQuery.grep(this.errorList,function(n){return n.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").not(":reset").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){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(b){b=this.clean(b);jQuery(b).removeClass(this.settings.errorClass);var a=this.rulesCache[b.name];for(var i=0,rule;rule=a[i++];){try{var c=jQuery.validator.methods[rule.method].call(this,jQuery.trim(b.value),b,rule.parameters);if(c===-1)break;if(!c){jQuery(b).addClass(this.settings.errorClass);this.formatAndAdd(rule,b);return false}}catch(e){this.settings.debug&&window.console&&console.error("exception occured when checking element "+b.id+", check the '"+rule.method+"' method");throw e;}}if(a.length&&this.settings.success)this.successList.push(b);return true},message:function(a,b){var m=this.settings.messages[a];return m&&(m.constructor==String?m:m[b])},formatAndAdd:function(a,b){var c=this.message(b.name,a.method)||b.title||jQuery.validator.messages[a.method]||"Warning: No message defined for "+b.name+"";if(typeof c=="function")c=c.call(this,a.parameters,b);this.errorList.push({message:c,element:b});this.errorMap[b.name]=c;this.submitted[b.name]=c},addWrapper:function(a){if(this.settings.wrapper)a.push(a.parents(this.settings.wrapper));return a},defaultShowErrors:function(){for(var i=0,error;error=this.errorList[i];i++){this.showLabel(error.element,error.message)}if(this.errorList.length){this.toShow.push(this.containers)}for(var i=0,element;element=this.successList[i];i++){this.showLabel(element)}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show()},showLabel:function(a,b){var c=this.errorsFor(a);if(c.length){c.removeClass().addClass(this.settings.errorClass);if(this.settings.overrideErrors||c.attr("generated")){c.html(b)}}else{c=jQuery("<"+this.settings.errorElement+">").attr({"for":this.idOrName(a),generated:true}).addClass(this.settings.errorClass).html(b||"");if(this.settings.wrapper){c=c.hide().show().wrap("<"+this.settings.wrapper+">").parent()}if(!this.labelContainer.append(c).length)this.settings.errorPlacement?this.settings.errorPlacement(c,jQuery(a)):c.insertAfter(a)}if(!b&&this.settings.success){c.text("");typeof this.settings.success=="string"?c.addClass(this.settings.success):this.settings.success(c)}this.toShow.push(c)},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(e){var d=this.data(e);if(!d)return[];var c=[];if(typeof d=="string"){var f={};f[d]=true;d=f}jQuery.each(d,function(b,a){c[c.length]={method:b,parameters:a}});return c},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(a,b){switch(b.nodeName.toLowerCase()){case'select':return jQuery("option:selected",b).length;case'input':if(this.checkable(b))return this.checkableGroup(b).filter(':checked').length}return a.length},depend:function(b,a){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)}},required:function(a){return!jQuery.validator.methods.required.call(this,jQuery.trim(a.value),a)}},methods:{required:function(b,c,a){if(!this.depend(a,c))return-1;switch(c.nodeName.toLowerCase()){case'select':var d=jQuery("option:selected",c);return d.length>0&&(c.type=="select-multiple"||(jQuery.browser.msie&&!(d[0].attributes['value'].specified)?d[0].text:d[0].value).length>0);case'input':if(this.checkable(c))return this.getLength(b,c)>0;default:return b.length>0}},minLength:function(b,c,a){return this.required(c)||this.getLength(b,c)>=a},maxLength:function(b,c,a){return this.required(c)||this.getLength(b,c)<=a},rangeLength:function(b,d,a){var c=this.getLength(b,d);return this.required(d)||(c>=a[0]&&c<=a[1])},minValue:function(b,c,a){return this.required(c)||b>=a},maxValue:function(b,c,a){return this.required(c)||b<=a},rangeValue:function(b,c,a){return this.required(c)||(b>=a[0]&&b<=a[1])},email:function(a,b){return this.required(b)||/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/i.test(a)},url:function(a,b){return this.required(b)||/^(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(a)},date:function(a,b){return this.required(b)||!/Invalid|NaN/.test(new Date(a))},dateISO:function(a,b){return this.required(b)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)},dateDE:function(a,b){return this.required(b)||/^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(a)},number:function(a,b){return this.required(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)},numberDE:function(a,b){return this.required(b)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(a)},digits:function(a,b){return this.required(b)||/^\d+$/.test(a)},creditcard:function(b,e){if(this.required(e))return true;var a=0,d=0,bEven=false;b=b.replace(/\D/g,"");for(n=b.length-1;n>=0;n--){var c=b.charAt(n);var d=parseInt(c,10);if(bEven){if((d*=2)>9)d-=9}a+=d;bEven=!bEven}return(a%10)==0},accept:function(b,c,a){a=typeof a=="string"?a:"png|jpe?g|gif";return this.required(c)||b.match(new RegExp(".("+a+")$"))},equalTo:function(b,c,a){return b==jQuery(a).val()}},addMethod:function(c,a,b){jQuery.validator.methods[c]=a;jQuery.validator.messages[c]=b}});