(function($){var validate="validate";function squeeze(form){var fields=fieldsToValidate(form);for(var i=0;i<fields.length;i++){bindField(fields[i])}form.submit(function(){var tasty=true;for(var i=0;i<fields.length;i++){if(buildErrorList(extractValidations(fields[i].blur()),fields[i]).length){tasty=false}}if(!tasty){return false}return options.submit()})}function fieldsToValidate(form){var tags="input textarea select".split(" ");var fields=[];for(var i=0;i<tags.length;i++){form.find(tags[i]+"["+options.validationAttribute+"*="+validate+"]").each(function(){fields.push($(this))})}return fields}function bindField(field){var validations=extractValidations(field);if(field.parents("fieldset[rel=appendErrorBox]").length){var errorContainer=field.parent().append(options.errorContainer.clone())}else{var errorContainer=field.after(options.errorContainer.clone()).next()}var contOl=errorContainer.find("ol");var visibleContainer=false;$(window).resize(function(){options.initialPositionContainer(errorContainer,field)}).trigger("resize");field.blur(function(){var errList=buildErrorList(validations,field);if(errList.length){if(!visibleContainer){contOl.html(errList);options.showContainer(errorContainer);visibleContainer=true}else{contOl.html(errList)}options.positionContainer(errorContainer,field)}else{options.hideContainer(errorContainer);visibleContainer=false}});if(field.attr("type")=="checkbox"){field.change(function(){$(this).blur()})}}function extractValidations(field){var valStr=field.attr(options.validationAttribute);valStr=valStr.substr(valStr.indexOf(validate)+validate.length+1);var validations=[];var tempStr="";var openBrackets=0;for(var i=0;i<valStr.length;i++){switch(valStr[i]){case",":if(openBrackets){tempStr+=","}else{validations.push(trim(tempStr));tempStr=""}break;case"(":tempStr+="(";openBrackets++;break;case")":if(openBrackets){tempStr+=")";openBrackets--}else{validations.push(trim(tempStr))}break;default:tempStr+=valStr[i]}}return validations}function trim(str){return str.replace(/^\s+/,"").replace(/\s+$/,"")}function getFunctionName(validation){if(validation.indexOf("(")!=-1){return validation.substr(0,validation.indexOf("("))}else{return validation}}function buildParams(validation){if(validation.indexOf("(")!=-1){var arr=validation.substring(validation.indexOf("(")+1,validation.length-1).split(",");var tempStr="";for(var i=0;i<arr.length;i++){var single=trim(arr[i]);if(parseInt(single)){tempStr+=","+single}else{tempStr+=',"'+single+'"'}}return tempStr}else{return""}}function formatMessage(message,params){var args=message.split("$arg").length-1;if(args){var parArr=params.split(",");for(var i=1;i<parArr.length;i++){message=message.replace("$arg"+i,parArr[i])}}return message}function buildErrorList(validations,field){var list="";for(var i=0;i<validations.length;i++){var funcName=getFunctionName(validations[i]);var params=buildParams(validations[i]);if(!eval('$.fn.ketchup.validations["'+funcName+'"](field, field.val()'+params+")")){list+="<li>"+formatMessage($.fn.ketchup.messages[funcName],params)+"</li>"}}return list}var errorContainer=$("<div>",{"class":"ketchup-error-container",html:"<ol></ol><span></span>"});var initialPositionContainer=function(errorContainer,field){var fOffset=field.offset();errorContainer.css({left:fOffset.left+field.width()-10,top:fOffset.top-errorContainer.height()})};var positionContainer=function(errorContainer,field){errorContainer.animate({top:field.offset().top-errorContainer.height()})};var showContainer=function(errorContainer){errorContainer.fadeIn()};var hideContainer=function(errorContainer){errorContainer.fadeOut()};$.fn.ketchup=function(opt){options=$.extend({},$.fn.ketchup.defaults,opt);return this.each(function(){squeeze($(this))})};$.fn.ketchup.validation=function(name,func){$.fn.ketchup.validations.push(name);$.fn.ketchup.validations[name]=func};$.fn.ketchup.messages={};$.fn.ketchup.validations=[];var options;$.fn.ketchup.defaults={validationAttribute:"class",errorContainer:errorContainer,initialPositionContainer:initialPositionContainer,positionContainer:positionContainer,showContainer:showContainer,hideContainer:hideContainer,submit:function(){return true}}})(jQuery);$.fn.ketchup.messages={required:"This field is required.",minlength:"This field must have a minimal length of $arg1.",maxlength:"This field must have a maximal length of $arg1.",rangelength:"This field must have a length between $arg1 and $arg2.",min:"Must be at least $arg1.",max:"Can not be greater than $arg1.",range:"Must be between $arg1 and $arg2.",number:"Must be a number.",digits:"Must be digits.",email:"Must be a valid E-Mail.",url:"Must be a valid URL.",username:"Must be a valid username.",match:"Must match the field above.",date:"Must be a valid date.",minselect:"Select at least $arg1 checkboxes.",maxselect:"Select not more than $arg1 checkboxes.",rangeselect:"Select between $arg1 and $arg2 checkboxes."};$.fn.ketchup.validation("required",function(a,b){if(a.attr("type")=="checkbox"){if(a.attr("checked")==true){return true}else{return false}}else{if(b.length==0){return false}else{return true}}});$.fn.ketchup.validation("minlength",function(a,c,b){if(c.length<b){return false}else{return true}});$.fn.ketchup.validation("maxlength",function(b,c,a){if(c.length>a){return false}else{return true}});$.fn.ketchup.validation("rangelength",function(b,d,c,a){if(d.length>=c&&d.length<=a){return true}else{return false}});$.fn.ketchup.validation("min",function(b,c,a){if(parseInt(c)<a){return false}else{return true}});$.fn.ketchup.validation("max",function(b,c,a){if(parseInt(c)>a){return false}else{return true}});$.fn.ketchup.validation("range",function(c,d,b,a){if(parseInt(d)>=b&&parseInt(d)<=a){return true}else{return false}});$.fn.ketchup.validation("number",function(a,b){if(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(b)){return true}else{return false}});$.fn.ketchup.validation("digits",function(a,b){if(/^\d+$/.test(b)){return true}else{return false}});$.fn.ketchup.validation("email",function(a,b){if(/^((([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(b)){return true}else{return false}});$.fn.ketchup.validation("url",function(a,b){if(/^(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(b)){return true}else{return false}});$.fn.ketchup.validation("username",function(a,b){if(/^([a-zA-Z])[a-zA-Z_-]*[\w_-]*[\S]$|^([a-zA-Z])[0-9_-]*[\S]$|^[a-zA-Z]*[\S]$/.test(b)){return true}else{return false}});$.fn.ketchup.validation("match",function(b,c,a){if($(a).val()!=c){return false}else{return true}});$.fn.ketchup.validation("date",function(a,b){if(!/Invalid|NaN/.test(new Date(b))){return true}else{return false}});function watchSelect(a){$("input["+$.fn.ketchup.defaults.validationAttribute+'*="'+a+'"]').each(function(){var b=$(this);$('input[name="'+b.attr("name")+'"]').each(function(){var c=$(this);if(c.attr($.fn.ketchup.defaults.validationAttribute).indexOf(a)==-1){c.blur(function(){b.blur()})}})})}$(document).ready(function(){watchSelect("minselect");watchSelect("maxselect");watchSelect("rangeselect")});$.fn.ketchup.validation("minselect",function(b,c,a){if($('input[name="'+b.attr("name")+'"]:checked').length>=a){return true}else{return false}});$.fn.ketchup.validation("maxselect",function(b,c,a){if($('input[name="'+b.attr("name")+'"]:checked').length<=a){return true}else{return false}});$.fn.ketchup.validation("rangeselect",function(c,e,b,a){var d=$('input[name="'+c.attr("name")+'"]:checked');if(d.length>=b&&d.length<=a){return true}else{return false}});
