/**
 * AJAX Nette Framwork plugin for jQuery
 *
 * @copyright   Copyright (c) 2009 Jan Marek
 * @license     MIT
 * @link        http://nettephp.com/cs/extras/jquery-ajax
 * @version     0.2
 */
jQuery.extend({nette:{updateSnippet:function(a,b){$("#"+a).html(b)},success:function(a){if(a.redirect){window.location.href=a.redirect;return}if(a.snippets){for(var b in a.snippets){jQuery.nette.updateSnippet(b,a.snippets[b])}}}}});jQuery.ajaxSetup({success:jQuery.nette.success})

/**
 * NetteForms - simple form validation.
 *
 * This file is part of the Nette Framework.
 * Copyright (c) 2004, 2011 David Grudl (http://davidgrudl.com)
 */

var Nette=Nette||{};Nette.addEvent=function(a,b,c){var d=a["on"+b];a["on"+b]=function(){if(typeof d==="function"&&d.apply(a,arguments)===false){return false}return c.apply(a,arguments)}};Nette.getValue=function(a){var b,c;if(!a){return null}else if(!a.nodeName){for(b=0,c=a.length;b<c;b++){if(a[b].checked){return a[b].value}}return null}else if(a.nodeName.toLowerCase()==="select"){var d=a.selectedIndex,e=a.options;if(d<0){return null}else if(a.type==="select-one"){return e[d].value}for(b=0,values=[],c=e.length;b<c;b++){if(e[b].selected){values.push(e[b].value)}}return values}else if(a.type==="checkbox"){return a.checked}else if(a.type==="radio"){return Nette.getValue(a.form.elements[a.name])}else{return a.value.replace(/^\s+|\s+$/g,"")}};Nette.validateControl=function(elem,rules,onlyCheck){rules=rules||eval("["+(elem.getAttribute("data-nette-rules")||"")+"]");for(var id=0,len=rules.length;id<len;id++){var rule=rules[id],op=rule.op.match(/(~)?([^?]+)/);rule.neg=op[1];rule.op=op[2];rule.condition=!!rule.rules;var el=rule.control?elem.form.elements[rule.control]:elem;Nette.removeError(el);var success=Nette.validateRule(el,rule.op,rule.arg);if(success===null){continue}if(rule.neg){success=!success}if(rule.condition&&success){if(!Nette.validateControl(elem,rule.rules,onlyCheck)){return false}}else if(!rule.condition&&!success){if(el.disabled){continue}if(!onlyCheck){Nette.addError(el,rule.msg.replace("%value",Nette.getValue(el)))}return false}}return true};Nette.validateForm=function(a){var b=a.form||a;if(b["nette-submittedBy"]&&b["nette-submittedBy"].getAttribute("formnovalidate")!==null){return true}for(var c=0;c<b.elements.length;c++){var d=b.elements[c];if(!(d.nodeName.toLowerCase()in{input:1,select:1,textarea:1})||d.type in{hidden:1,submit:1,image:1,reset:1}||d.disabled||d.readonly){continue}if(!Nette.validateControl(d)){return false}}return true};Nette.addError=function(a,b){if(a.focus){a.focus()}if(b){$(a).after($("<span>",{"class":"error",id:a.id+"_error",html:b}))}};Nette.removeError=function(a){$("#"+a.id+"_error").remove()};Nette.validateRule=function(a,b,c){var d=Nette.getValue(a);if(a.getAttribute){if(d===a.getAttribute("data-nette-empty-value")){d=""}}if(b.charAt(0)===":"){b=b.substr(1)}b=b.replace("::","_");return Nette.validators[b]?Nette.validators[b](a,c,d):null};Nette.validators={filled:function(a,b,c){return c!==""&&c!==false&&c!==null},valid:function(a,b,c){return Nette.validateControl(a,null,true)},equal:function(a,b,c){if(b===undefined){return null}b=Nette.isArray(b)?b:[b];for(var d=0,e=b.length;d<e;d++){if(c==(b[d].control?Nette.getValue(a.form.elements[b[d].control]):b[d])){return true}}return false},minLength:function(a,b,c){return c.length>=b},maxLength:function(a,b,c){return c.length<=b},length:function(a,b,c){b=Nette.isArray(b)?b:[b,b];return(b[0]===null||c.length>=b[0])&&(b[1]===null||c.length<=b[1])},email:function(a,b,c){return/^[^@\s]+@[^@\s]+\.[a-z]{2,10}$/i.test(c)},url:function(a,b,c){return/^.+\.[a-z]{2,6}(\/.*)?$/i.test(c)},regexp:function(a,b,c){var d=typeof b==="string"?b.match(/^\/(.*)\/([imu]*)$/):false;if(d){try{return(new RegExp(d[1],d[2].replace("u",""))).test(c)}catch(e){}}},pattern:function(a,b,c){try{return typeof b==="string"?(new RegExp("^("+b+")$")).test(c):null}catch(d){}},integer:function(a,b,c){return/^-?[0-9]+$/.test(c)},"float":function(a,b,c){return/^-?[0-9]*[.,]?[0-9]+$/.test(c)},range:function(a,b,c){return Nette.isArray(b)?(b[0]===null||parseFloat(c)>=b[0])&&(b[1]===null||parseFloat(c)<=b[1]):null},submitted:function(a,b,c){return a.form["nette-submittedBy"]===a}};Nette.toggleForm=function(a){for(var b=0;b<a.elements.length;b++){if(a.elements[b].nodeName.toLowerCase()in{input:1,select:1,textarea:1,button:1}){Nette.toggleControl(a.elements[b])}}};Nette.toggleControl=function(elem,rules,firsttime){rules=rules||eval("["+(elem.getAttribute("data-nette-rules")||"")+"]");var has=false,__hasProp=Object.prototype.hasOwnProperty,handler=function(){Nette.toggleForm(elem.form)};for(var id=0,len=rules.length;id<len;id++){var rule=rules[id],op=rule.op.match(/(~)?([^?]+)/);rule.neg=op[1];rule.op=op[2];rule.condition=!!rule.rules;if(!rule.condition){continue}var el=rule.control?elem.form.elements[rule.control]:elem;var success=Nette.validateRule(el,rule.op,rule.arg);if(success===null){continue}if(rule.neg){success=!success}if(Nette.toggleControl(elem,rule.rules,firsttime)||rule.toggle){has=true;if(firsttime){if(!el.nodeName){for(var i=0;i<el.length;i++){Nette.addEvent(el[i],"click",handler)}}else if(el.nodeName.toLowerCase()==="select"){Nette.addEvent(el,"change",handler)}else{Nette.addEvent(el,"click",handler)}}for(var id2 in rule.toggle||[]){if(__hasProp.call(rule.toggle,id2)){Nette.toggle(id2,success?rule.toggle[id2]:!rule.toggle[id2])}}}}return has};Nette.toggle=function(a,b){var c=document.getElementById(a);if(c){c.style.display=b?"":"none"}};Nette.initForm=function(a){a.noValidate=true;Nette.addEvent(a,"submit",function(){return Nette.validateForm(a)});Nette.addEvent(a,"click",function(b){b=b||event;var c=b.target||b.srcElement;a["nette-submittedBy"]=c.type in{submit:1,image:1}?c:null});for(var b=0;b<a.elements.length;b++){Nette.toggleControl(a.elements[b],null,true)}if(/MSIE/.exec(navigator.userAgent)){var c={},d=function(){return false},e=function(){document.getElementById(this.htmlFor).focus();return false};for(b=0,elms=a.getElementsByTagName("label");b<elms.length;b++){c[elms[b].htmlFor]=elms[b]}for(b=0,elms=a.getElementsByTagName("select");b<elms.length;b++){Nette.addEvent(elms[b],"mousewheel",d);if(c[elms[b].htmlId]){Nette.addEvent(c[elms[b].htmlId],"click",e)}}}};Nette.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"};Nette.addEvent(window,"load",function(){for(var a=0;a<document.forms.length;a++){Nette.initForm(document.forms[a])}})

