var yoda={config:{debug:false,validate:{typeDeclarationAttribute:"class",defaultClasses:{correct:"correct",wrong:"wrong",empty:"empty"},types:{text:"text",number:"nr",plz:"plz",required:"required",email:"email",equal:"equal",maxLength:{type:"maxLength",prefix:"length"}},errorMsg:"formError"},plausi:{plz:5}},selectors:{elements:{form:"form",input:"input",select:"select",textarea:"textarea",button:"button"},inputs:{hidden:":hidden",input:":input",text:":text",password:":password",checkbox:":checkbox",radio:":radio",image:":image",file:":file",button:":button",submit:":submit",reset:":reset"},states:{enabled:":enabled",disabled:":disabled",checked:":checked",selected:":selected"},inputAttr:"type",errMsgTag:"li"},methods:{},cookies:{},validate:{},plausi:{}};yoda.cookies=function(name){this.enabled=navigator.cookieEnabled;var options={key:name,value:undefined,expires:undefined,domain:undefined,path:undefined,secure:undefined};this.readValue=function(){var schluessel=options.key+"=";var pos=document.cookie.indexOf(schluessel);if(pos===-1){return undefined}var end=document.cookie.indexOf(";",pos+schluessel.length);if(end===-1){end=document.cookie.length}return unescape($.trim(document.cookie.substring(pos+schluessel.length,end)))};this.getValue=function(){if(options.value===undefined){var wert=this.readValue();if(wert===""||wert===undefined){return undefined}options.value=wert}else{wert=options.value}var sicher=arguments[0]||true;try{if(sicher){return $.secureEvalJSON(wert)}else{return $.evalJSON(wert)}}catch(e){return wert}};this.setValue=function(value){try{if(isObject(value)){value=$.toJSON(value)}}catch(e){return false}options.value=value;return true};this.setExpires=function(datum){try{var d=datum;if(isNumber(datum)){d=new Date();d.setTime(d.getTime()+(datum*1000))}if(isA(d,Date)){d=d.toGMTString()}options.expires=d;return true}catch(e){return false}};this.setDomain=function(domain){try{options.domain=$.trim(domain);return true}catch(e){return false}};this.setPath=function(pfad){try{options.path=pfad;return true}catch(e){return false}};this.setSecure=function(sicher){try{if(sicher){options.secure="secure"}else{options.secure=undefined}return true}catch(e){return false}};this.del=function(){document.cookie=options.key+"=; expires=Thu, 01-Jan-70 00:00:01 GMT";delete this};this.generateCookieString=function(){var s=options.key+"=";if(!isUndefined(options.value)){s+=unescape(options.value)+";"}if(!isUndefined(options.expires)){s+=" expires="+options.expires+";"}if(!isUndefined(options.domain)){s+=" domain="+options.domain+";"}if(!isUndefined(options.path)){s+=" path="+options.path+";"}if(!isUndefined(options.secure)){s+=" "+options.secure}return s};this.save=function(){try{if(options.value!==undefined){document.cookie=this.generateCookieString()}return true}catch(e){throw new Error("Cookie konnte nicht gespeichert werden")}};this.saveAll=function(constr){if(isString(constr)){this.setValue(constr)}else{if(isObject(constr)){if(isUndefined(constr.value)){throw new TypeError("Es wurde kein Wert übergeben!")}else{this.setValue(constr.value);if(constr.expires!==undefined){this.setExpires(constr.expires)}if(constr.domain!==undefined){this.setDomain(constr.domain)}if(constr.path!==undefined){this.setPath(constr.path)}if(constr.secure!==undefined){this.setSecure(constr.secure)}}}}this.save()};if(arguments[1]!==undefined){this.saveAll(arguments[1])}this.toString=function(){return"key="+options.key+" value="+this.getValue()}};function isFunction(obj){return typeof obj==="function"}function isNumber(obj){return typeof obj==="number"}function isBool(obj){return typeof obj==="boolean"}function isString(obj){return typeof obj==="string"}function isDefined(obj){return obj!==undefined}function isUndefined(obj){return obj===undefined}function isNull(obj){return obj===null}function isObject(obj){return typeof obj==="object"}function isArray(obj){return typeof obj==="object"&&obj instanceof Array}function isInArray(val,arr){return $.inArray(val,arr)!==-1}function isA(obj,cls){return obj instanceof cls};yoda.methods.mergeObjects=function(obj1,obj2){var objNew={};for(var key in obj1){objNew[key]=obj1[key]}for(var key in obj2){objNew[key]=obj2[key]}return objNew};yoda.methods.replaceRegExChars=function(str){return str.replace(/\\/g,"\\\\").replace(/\{/g,"\\{").replace(/\}/g,"\\}").replace(/\./g,"\\.").replace(/\:/g,"\\:").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/\//g,"\\/").replace(/\*/g,"\\*").replace(/\+/g,"\\+")};yoda.plausi.isText=function(wert){var matchResult=wert.match(/^\D*$/g);return matchResult!==null};yoda.plausi.isNumber=function(wert){return !isNaN(Number($.trim(wert)))};yoda.plausi.isGreaterThan0=function(wert){return yoda.plausi.isNumber(wert)&&wert>0};yoda.plausi.isFilled=function(wert){return $.trim(wert).length>0};yoda.plausi.hasLength=function(wert,laenge){var len=wert.length;if(isObject(laenge)||isArray(laenge)){var min=laenge[0]||0;var max=laenge[1]||99999;return(len>=Number(min)&&len<=Number(max))}return len===laenge};yoda.plausi.isPlz=function(wert){return wert.length===yoda.config.plausi.plz&&yoda.plausi.isNumber(wert)};yoda.plausi.isEmail=function(wert){var matchResult=wert.match(/^[a-z0-9]+[a-z0-9_-]*(\.[_a-z0-9-]+)*@([a-z0-9-]{2,})+\.([a-za-z]{2,4})$/i);return matchResult!==null};yoda.plausi.isEqual=function(id,wert){return $("#"+id).val()==wert};yoda.validate=function(formId){var self=this;var _selector={elements:yoda.selectors.elements,inputs:yoda.selectors.inputs,states:yoda.selectors.states,inputAttr:yoda.selectors.inputAttr,errMsgTag:yoda.selectors.errMsgTag,resultClasses:yoda.config.validate.defaultClasses};var _types={yoda:yoda.config.validate.types,declaration:yoda.config.validate.typeDeclarationAttribute,methods:{text:yoda.plausi.isText,required:yoda.plausi.isFilled,number:yoda.plausi.isNumber,plz:yoda.plausi.isPlz,email:yoda.plausi.isEmail,equal:yoda.plausi.isEqual},lengthType:"length(\\d*)",equalType:"equal-(\\S*)",radioType:"radio-(\\S)",checkType:"check-(\\S)",seperator:" "};var _resultStates={success:1,correct:2,notCheckedOrEmpty:0,required:-1,error:-10,maxLengthError:-11,equalError:-12};var _setEvent,_successIterator,_errMsgElement;var _cssChainSeperator=",",_form={};var _selectorChain=function(selectors){if(isObject(selectors)){selectors=_getObjectValuesAsArray(selectors)}var chain=selectors.join(_cssChainSeperator);return chain.substr(0,chain.length-1-_cssChainSeperator.length)};var _getFormSelector=function(){return"#"+(arguments[0]||_form.id)};var _getFormObject=function(){return $(_getFormSelector(arguments[0]||_form.id))};var _getFormFields=function(){var allSelectors=_selector.elements,fieldSelectors=[],formularId=arguments[0]||_form.id;for(var selector in allSelectors){if(!isFunction(allSelectors[selector])){fieldSelectors[selector]=_getFormSelector(formularId)+" "+allSelectors[selector]}}return $(_selectorChain(fieldSelectors))};var _getObjectValuesAsArray=function(obj){var arr=[];for(var i in obj){if(!isFunction(obj[i])){arr.push(obj[i])}}return arr};var _getObjectKeysAsArray=function(obj){var arr=[];for(var key in obj){if(!isFunction(obj[key])){arr.push(key)}}return arr};var _getAllFieldTypes=function(feld){return $(feld).attr(_types.declaration).split(_types.seperator)};var _getAllowedFieldTypes=function(fieldObject){var allTypes=_getAllFieldTypes(fieldObject),allAllowedTypes=_getObjectKeysAsArray(_types.yoda),allowedFieldTypes=[],type;for(var i in allTypes){type=allTypes[i];if(!isFunction(type)&&(isInArray(type,allAllowedTypes)||_isLengthType(type)||_isEqualType(type)||_isRadioType(type)||_isCheckboxType(type))){allowedFieldTypes.push(type)}}return allowedFieldTypes};var _getLengthRegExpObject=function(){return new RegExp(_types.lengthType,"i")};var _getEqualRegExpObject=function(){return new RegExp(_types.equalType,"i")};var _getRadioRegExpObject=function(){return new RegExp(_types.radioType,"i")};var _getCheckRegExpObject=function(){return new RegExp(_types.checkType,"i")};var _getLengthFromType=function(type){return parseInt(_getLengthRegExpObject().exec(type)[1])};var _getIdFromEqualType=function(type){return _getEqualRegExpObject().exec(type)[1]};var _getIdFromRadioType=function(type){return _getRadioRegExpObject().exec(type)[1]};var _getNameFromObject=function(fieldObject){return $(fieldObject).attr("name")};var _isLengthType=function(type){return _getLengthRegExpObject().test(type)};var _isEqualType=function(type){return _getEqualRegExpObject().test(type)};var _isRadioType=function(type){return _getRadioRegExpObject().test(type)};var _isCheckboxType=function(type){return _getCheckRegExpObject().test(type)};var _validateContentOnType=function(fieldType,fieldValue){return _types.methods[fieldType](fieldValue)};var _validateContentOnMaxLength=function(maxLength,fieldValue){return fieldValue.length<=maxLength};var _validateContentOnEqual=function(id,fieldValue){return $("#"+id).val()==fieldValue};var _getFieldSelectorWithName=function(fieldObject){return"input[name="+_getNameFromObject(fieldObject)+"]"};var _validateSelected=function(fieldObject){return $(_getFieldSelectorWithName(fieldObject)+":checked").length>0};var _isRequiredInFieldTypes=function(fieldTypes){return isInArray(_types.yoda.required,fieldTypes)};var _setCorrectIfRequired=function(fieldTypes,resultStatus){if(resultStatus===_resultStates.notCheckedOrEmpty&&_isRequiredInFieldTypes(fieldTypes)){return _resultStates.success}else{return resultStatus}};var _validateContentOnAllAllowedObject=function(fieldObject){var resultStatus=_resultStates.notCheckedOrEmpty,type,field={value:$(fieldObject).val(),types:_getAllowedFieldTypes(fieldObject)};for(var i in field.types){type=field.types[i];if(!isFunction(type)&&resultStatus>=_resultStates.error){if(_isLengthType(type)){if(!_validateContentOnMaxLength(_getLengthFromType(type),field.value)){resultStatus=_resultStates.maxLengthError}}else{if(_isEqualType(type)){if(!_validateContentOnEqual(_getIdFromEqualType(type),field.value)){resultStatus=_resultStates.equalError}}else{if(_isRadioType(type)){if(!_validateSelected(fieldObject)){resultStatus=_resultStates.error}}else{if(_isCheckboxType(type)){if(!_validateSelected(fieldObject)){resultStatus=_resultStates.error}}else{if(!_validateContentOnType(type,field.value)){resultStatus=_resultStates.error}}}}}}}return _setCorrectIfRequired(field.types,resultStatus)};var _validateField=function(fieldObject){return _validateContentOnAllAllowedObject(fieldObject)};var _getResultClass=function(resultStatus){var statusClass="";switch(resultStatus){case _resultStates.success:statusClass=_selector.resultClasses.correct;break;case _resultStates.required:statusClass=_selector.resultClasses.empty;break;case _resultStates.notCheckedOrEmpty:statusClass=_selector.resultClasses.empty;break;case _resultStates.maxLengthError:statusClass=_selector.resultClasses.wrong;break;case _resultStates.equalError:statusClass=_selector.resultClasses.wrong;break;case _resultStates.error:statusClass=_selector.resultClasses.wrong;break}return statusClass};var _showResultStatus=function(fieldObject,showStatus){$(fieldObject).addClass(showStatus)};var _showTitle=function(fieldObject){var title=$(fieldObject).attr("title");var fieldName=$(fieldObject).attr("name");var html="<"+_selector.errMsgTag+" class='"+fieldName+"'>"+title+"</"+_selector.errMsgTag+">";$(_errMsgElement).append(html)};var _removeTitle=function(fieldObject){var fieldObjectId=$(fieldObject).attr("name");if(fieldObjectId!=""){$(_errMsgElement).children("."+fieldObjectId).remove()}};var _getFieldObjectsWithSameName=function(fieldObject){var valOfName=$(fieldObject).attr("name");return $("input[name="+valOfName+"]")};var _showResult=function(fieldObject,resultStatus){_showResultStatus(fieldObject,_getResultClass(resultStatus));if(_showErrorMsg()&&resultStatus<0){_showTitle(fieldObject)}};var _removeShownResults=function(fieldObject){$(fieldObject).removeClass(_getObjectValuesAsArray(_selector.resultClasses).join(" "))};var _showOnlyNewResults=function(fieldObject,resultStatus){_removeShownResults(fieldObject);var fieldObjectsWithSameName=_getFieldObjectsWithSameName(fieldObject);$.each(fieldObjectsWithSameName,function(key,value){_removeShownResults(value)});_removeTitle(fieldObject);_showResult(fieldObject,resultStatus)};var _validateFieldAndShowResult=function(fieldObject){var result=_validateField(fieldObject);_showOnlyNewResults(fieldObject,result);return result};var _getReturnStatusInBool=function(resultStatus){switch(resultStatus){case _resultStates.maxLengthError:case _resultStates.equalError:case _resultStates.required:case _resultStates.error:return false;case _resultStates.correct:case _resultStates.notCheckedOrEmpty:default:return true}};this.validiereFeld=function(feld){return _getReturnStatusInBool(_validateFieldAndShowResult(feld))};var _validateAllFields=function(){self.loescheFehlerMeldungen(_errMsgElement);_successIterator=true;_getFormFields().each(function(index,field){if(!self.validiereFeld(field)){_successIterator=false}});return _successIterator};this.validiereAlleFelder=function(){return _validateAllFields()};var _setValidationOnAllFields=function(event){_setEvent=event;_getFormFields().each(function(index,field){$(field)[_setEvent](function(){return self.validiereFeld(this)})})};var _setValidationOnFieldEvent=function(targetField,event){$(targetField)[event](function(){return self.validiereFeld(this)})};var _setValidationOnFormEvent=function(event){_getFormObject()[event](function(){return self.validiereAlleFelder()})};var _showErrorMsg=function(){return !isUndefined(_errMsgElement)};this.validiereOnSubmit=function(){_setValidationOnFormEvent("submit")};this.validiereOnKeyUp=function(){_setValidationOnAllFields("keyup")};this.validiereOnBlur=function(){_setValidationOnAllFields("blur")};this.validiereOnFocus=function(){_setValidationOnAllFields("focus")};this.addType=function(typeName,typeValue){_types.yoda[typeName]=typeValue};this.setzeFehlerElement=function(errorElement){if(!isUndefined(errorElement)){_errMsgElement=errorElement}else{throw new TypeError(errorElement+" wurde nicht angegeben")}};this.loescheFehlerMeldungen=function(resetElement){$(resetElement).click(function(){$(_errMsgElement).empty()})};var _initForm=function(formularId){_form={id:formularId};_form.object=_getFormObject();_form.inputs=_getFormFields()};_initForm(formId)};
