var LiveForm = {options:{showMessageClassOnParent:"form-group", controlErrorClass:"error", controlValidClass:"has-success", messageErrorClass:"help-block text-danger", enableHiddenMessageClass:"show-hidden-error", disableLiveValidationClass:"no-live-validation", disableShowValidClass:"no-show-valid", messageTag:"span", messageIdPostfix:"_message", messageErrorPrefix:'&nbsp;<i class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></i>&nbsp;', showAllErrors:!0, showValid:!1, wait:!1}, forms:{}}; LiveForm.isSpecialKey = function(e){return 20 == e || 16 == e || 9 == e || 27 == e || 17 == e || 91 == e || 19 == e || 18 == e || 93 == e || e >= 35 && 40 >= e || 45 == e || e >= 33 && 34 >= e || e >= 112 && 123 >= e || e >= 144 && 145 >= e}, LiveForm.setupHandlers = function(e){if (!this.hasClass(e, this.options.disableLiveValidationClass) && !e.getAttribute("data-lfv-initialized")){e.setAttribute("data-lfv-initialized", "true"); var t = function(e){e = e || window.event, Nette.validateControl(e.target?e.target:e.srcElement)}, r = this; Nette.addEvent(e, "change", t), Nette.addEvent(e, "blur", t), Nette.addEvent(e, "keydown", function(e){if (!r.isSpecialKey(e.which) && (r.options.wait === !1 || r.options.wait >= 200)){r.removeClass(r.getGroupElement(this), r.options.controlErrorClass), r.removeClass(r.getGroupElement(this), r.options.controlValidClass); var t = r.getMessageElement(this); t.innerHTML = "", t.className = "", r.timeout && clearTimeout(r.timeout)}}), Nette.addEvent(e, "keyup", function(e){r.options.wait !== !1 && (e = e || window.event, 9 !== e.keyCode && (r.timeout && clearTimeout(r.timeout), r.timeout = setTimeout(function(){t(e)}, r.options.wait)))})}}, LiveForm.processServerErrors = function(e){for (var t = this.getMessageElement(e), r = this.getMessageParent(e), n = [], a = r.getElementsByClassName(this.options.messageErrorClass), o = a.length - 1; o > - 1; o--)if (a[o] != t){var i = a[o].parentNode; i == r && (n.push(a[o].outerHTML), i.removeChild(a[o]))}n.length > 0 && (t.innerHTML = n.join(""))}, LiveForm.addError = function(e, t){if (!this.hasClass(e, this.options.disableLiveValidationClass)){this.setFormProperty(e.form, "hasError", !0), this.addClass(this.getGroupElement(e), this.options.controlErrorClass), this.options.showValid && this.showValid(e) && this.removeClass(this.getGroupElement(e), this.options.controlValidClass), t = t?this.options.messageErrorPrefix + t:"&nbsp;"; var r = this.getMessageElement(e); r.innerHTML = t, r.className = this.options.messageErrorClass}}, LiveForm.removeError = function(e){if (!this.getFormProperty(e.form, "onLoadValidation")){var t = this.getGroupElement(e); this.removeClass(t, this.options.controlErrorClass); var r = e.getAttribute("data-lfv-message-id"); if (r){var n = this.getMessageElement(e); n.innerHTML = "", n.className = ""}return this.options.showValid && this.showValid(e)?void this.addClass(t, this.options.controlValidClass):void 0}}, LiveForm.showValid = function(e){if (e.type){var t = e.type.toLowerCase(); if ("checkbox" == t || "radio" == t)return!1}var r = Nette.parseJSON(e.getAttribute("data-nette-rules")); return 0 == r.length?!1:this.hasClass(e, this.options.disableShowValidClass)?!1:!0}, LiveForm.getGroupElement = function(e){if (this.options.showMessageClassOnParent === !1)return e; for (var t = e; !this.hasClass(t, this.options.showMessageClassOnParent); )if (t = t.parentNode, null === t)return e; return t}, LiveForm.getMessageElement = function(e){var t = e.getAttribute("data-lfv-message-id"); if (!t){t = e.id + this.options.messageIdPostfix; for (var r = 0; document.getElementById(t); )t = e.id + this.options.messageIdPostfix + "_" + ++r; e.setAttribute("data-lfv-message-id", t)}var n = document.getElementById(t); if (!n){n = document.createElement(this.options.messageTag), n.id = t, "none" != e.style.display || this.hasClass(e, this.options.enableHiddenMessageClass) || (n.style.display = "none"); var a = this.getMessageParent(e); a && a.appendChild(n)}return n}, LiveForm.getMessageParent = function(e){var t = e.parentNode; if (e.type){var r = e.type.toLowerCase(); "checkbox" != r && "radio" != r || "LABEL" != t.tagName || (t = t.parentNode)}return t}, LiveForm.addClass = function(e, t){e.className?this.hasClass(e, t) || (e.className += " " + t):e.className = t}, LiveForm.hasClass = function(e, t){return e.className?e.className.match(new RegExp("(\\s|^)" + t + "(\\s|$)")):!1}, LiveForm.removeClass = function(e, t){if (this.hasClass(e, t)){var r = new RegExp("(\\s|^)" + t + "(\\s|$)"), n = e.className.match(r); e.className = e.className.replace(r, " " == n[1] && " " == n[2]?" ":"")}}, LiveForm.getFormProperty = function(e, t){return null == e || null == this.forms[e.id]?!1:this.forms[e.id][t]}, LiveForm.setFormProperty = function(e, t, r){null != e && (null == this.forms[e.id] && (this.forms[e.id] = {}), this.forms[e.id][t] = r)}, function(e, t){"function" == typeof define && define.amd?define(function(){return t(e)}):"object" == typeof module && "object" == typeof module.exports?module.exports = t(e):(e.Nette = t(e), e.Nette.initOnLoad())}("undefined" != typeof window?window:this, function(window){"use strict"; var Nette = {}; return Nette.addEvent = function(e, t, r){var n = e["on" + t]; e["on" + t] = function(){return"function" == typeof n && n.apply(e, arguments) === !1?!1:r.apply(e, arguments)}}, Nette.getValue = function(e){var t; if (e){if (e.tagName){if ("radio" === e.type){var r = e.form.elements; for (t = 0; t < r.length; t++)if (r[t].name === e.name && r[t].checked)return r[t].value; return null}if ("file" === e.type)return e.files || e.value; if ("select" === e.tagName.toLowerCase()){var n = e.selectedIndex, a = e.options, o = []; if ("select-one" === e.type)return 0 > n?null:a[n].value; for (t = 0; t < a.length; t++)a[t].selected && o.push(a[t].value); return o}if (e.name && e.name.match(/\[\]$/)){var r = e.form.elements[e.name].tagName?[e]:e.form.elements[e.name], o = []; for (t = 0; t < r.length; t++)("checkbox" !== r[t].type || r[t].checked) && o.push(r[t].value); return o}return"checkbox" === e.type?e.checked:"textarea" === e.tagName.toLowerCase()?e.value.replace("\r", ""):e.value.replace("\r", "").replace(/^\s+|\s+$/g, "")}return e[0]?Nette.getValue(e[0]):null}return null}, Nette.getEffectiveValue = function(e){var t = Nette.getValue(e); return e.getAttribute && t === e.getAttribute("data-nette-empty-value") && (t = ""), t}, Nette.validateControl = function(e, t, r, n){e = e.tagName?e:e[0], t = t || Nette.parseJSON(e.getAttribute("data-nette-rules")), n = void 0 === n?{value:Nette.getEffectiveValue(e)}:n; for (var a = 0, o = t.length; o > a; a++){var i = t[a], s = i.op.match(/(~)?([^?]+)/), l = i.control?e.form.elements.namedItem(i.control):e; if (l){i.neg = s[1], i.op = s[2], i.condition = !!i.rules, l = l.tagName?l:l[0]; var u = e === l?n:{value:Nette.getEffectiveValue(l)}, m = Nette.validateRule(l, i.op, i.arg, u); if (null !== m)if (i.neg && (m = !m), i.condition && m){if (!Nette.validateControl(e, i.rules, r, n))return!1} else if (!i.condition && !m){if (Nette.isDisabled(l))continue; if (!r){var d = Nette.isArray(i.arg)?i.arg:[i.arg], f = i.msg.replace(/%(value|\d+)/g, function(t, r){return Nette.getValue("value" === r?l:e.form.elements.namedItem(d[r].control))}); Nette.addError(l, f)}return!1}}}return r || LiveForm.removeError(e), !0}, Nette.validateForm = function(e){var t = e.form || e, r = !1; if (LiveForm.setFormProperty(t, "hasError", !1), t["nette-submittedBy"] && null !== t["nette-submittedBy"].getAttribute("formnovalidate")){var n = Nette.parseJSON(t["nette-submittedBy"].getAttribute("data-nette-validation-scope")); if (!n.length)return!0; r = new RegExp("^(" + n.join("-|") + "-)")}var a, o, i = !0, s = {}; for (a = 0; a < t.elements.length; a++)if (o = t.elements[a], !o.tagName || o.tagName.toLowerCase()in{input:1, select:1, textarea:1, button:1}){if ("radio" === o.type){if (s[o.name])continue; s[o.name] = !0}if (!(r && !o.name.replace(/]\[|\[|]|$/g, "-").match(r) || Nette.isDisabled(o) || Nette.validateControl(o) || (i = !1, LiveForm.options.showAllErrors)))break}return i}, Nette.isDisabled = function(e){if ("radio" === e.type){for (var t = 0, r = e.form.elements; t < r.length; t++)if (r[t].name === e.name && !r[t].disabled)return!1; return!0}return e.disabled}, Nette.addError = function(e, t){var r = LiveForm.hasClass(e, LiveForm.options.disableLiveValidationClass); r && (!t || LiveForm.getFormProperty(e.form, "hasError") || LiveForm.getFormProperty(e.form, "onLoadValidation") || alert(t)), e.focus && !LiveForm.getFormProperty(e.form, "hasError") && (LiveForm.focusing || (LiveForm.focusing = !0, e.focus(), setTimeout(function(){LiveForm.focusing = !1}, 10))), r || LiveForm.addError(e, t)}, Nette.expandRuleArgument = function(e, t){return t && t.control && (t = Nette.getEffectiveValue(e.elements.namedItem(t.control))), t}, Nette.validateRule = function(e, t, r, n){n = void 0 === n?{value:Nette.getEffectiveValue(e)}:n, ":" === t.charAt(0) && (t = t.substr(1)), t = t.replace("::", "_"), t = t.replace(/\\/g, ""); for (var a = Nette.isArray(r)?r.slice(0):[r], o = 0, i = a.length; i > o; o++)a[o] = Nette.expandRuleArgument(e.form, a[o]); return Nette.validators[t]?Nette.validators[t](e, Nette.isArray(r)?a:a[0], n.value, n):null}, Nette.validators = {filled:function(e, t, r){return!("" === r || r === !1 || null === r || Nette.isArray(r) && !r.length || window.FileList && r instanceof window.FileList && !r.length)}, blank:function(e, t, r){return!Nette.validators.filled(e, t, r)}, valid:function(e){return Nette.validateControl(e, null, !0)}, equal:function(e, t, r){if (void 0 === t)return null; r = Nette.isArray(r)?r:[r], t = Nette.isArray(t)?t:[t]; e:for (var n = 0, a = r.length; a > n; n++){for (var o = 0, i = t.length; i > o; o++)if (r[n] == t[o])continue e; return!1}return!0}, notEqual:function(e, t, r){return void 0 === t?null:!Nette.validators.equal(e, t, r)}, minLength:function(e, t, r){return r.length >= t}, maxLength:function(e, t, r){return r.length <= t}, length:function(e, t, r){return t = Nette.isArray(t)?t:[t, t], (null === t[0] || r.length >= t[0]) && (null === t[1] || r.length <= t[1])}, email:function(e, t, r){return/^("([ !\x23-\x5B\x5D-\x7E]*|\\[ -~])+"|[-a-z0-9!#$%&'*+\/=?^_`{|}~]+(\.[-a-z0-9!#$%&'*+\/=?^_`{|}~]+)*)@([0-9a-z\u00C0-\u02FF\u0370-\u1EFF]([-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,61}[0-9a-z\u00C0-\u02FF\u0370-\u1EFF])?\.)+[a-z\u00C0-\u02FF\u0370-\u1EFF][-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,17}[a-z\u00C0-\u02FF\u0370-\u1EFF]$/i.test(r)}, url:function(e, t, r, n){return/^[a-z\d+.-]+:/.test(r) || (r = "http://" + r), /^https?:\/\/([0-9a-z\u00C0-\u02FF\u0370-\u1EFF](([-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,61}[0-9a-z\u00C0-\u02FF\u0370-\u1EFF])?\.)*[a-z\u00C0-\u02FF\u0370-\u1EFF][-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,17}[a-z\u00C0-\u02FF\u0370-\u1EFF]|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[[0-9a-f:]{3,39}\])(:\d{1,5})?(\/\S*)?$/i.test(r)?(n.value = r, !0):!1}, regexp:function(e, t, r){var n = "string" == typeof t?t.match(/^\/(.*)\/([imu]*)$/):!1; try{return n && new RegExp(n[1], n[2].replace("u", "")).test(r)} catch (a){}}, pattern:function(e, t, r){try{return"string" == typeof t?new RegExp("^(" + t + ")$").test(r):null} catch (n){}}, integer:function(e, t, r){return/^-?[0-9]+$/.test(r)}, "float":function(e, t, r, n){return r = r.replace(" ", "").replace(",", "."), /^-?[0-9]*[.,]?[0-9]+$/.test(r)?(n.value = r, !0):!1}, min:function(e, t, r){return Nette.validators.range(e, [t, null], r)}, max:function(e, t, r){return Nette.validators.range(e, [null, t], r)}, range:function(e, t, r){return Nette.isArray(t)?(null === t[0] || parseFloat(r) >= t[0]) && (null === t[1] || parseFloat(r) <= t[1]):null}, submitted:function(e){return e.form["nette-submittedBy"] === e}, fileSize:function(e, t, r){if (window.FileList)for (var n = 0; n < r.length; n++)if (r[n].size > t)return!1; return!0}, image:function(e, t, r){if (window.FileList && r instanceof window.FileList)for (var n = 0; n < r.length; n++){var a = r[n].type; if (a && "image/gif" !== a && "image/png" !== a && "image/jpeg" !== a)return!1}return!0}}, Nette.toggleForm = function(e, t){var r; for (Nette.toggles = {}, r = 0; r < e.elements.length; r++)e.elements[r].tagName.toLowerCase()in{input:1, select:1, textarea:1, button:1} && Nette.toggleControl(e.elements[r], null, null, !t); for (r in Nette.toggles)Nette.toggle(r, Nette.toggles[r], t)}, Nette.toggleControl = function(e, t, r, n, a){t = t || Nette.parseJSON(e.getAttribute("data-nette-rules")), a = void 0 === a?{value:Nette.getEffectiveValue(e)}:a; for (var o, i = !1, s = [], l = function(){Nette.toggleForm(e.form, e)}, u = 0, m = t.length; m > u; u++){var d = t[u], f = d.op.match(/(~)?([^?]+)/), g = d.control?e.form.elements.namedItem(d.control):e; if (g){if (o = r, r !== !1){d.neg = f[1], d.op = f[2]; var c = e === g?a:{value:Nette.getEffectiveValue(g)}; if (o = Nette.validateRule(g, d.op, d.arg, c), null === o)continue; d.neg && (o = !o), d.rules || (r = o)}if (d.rules && Nette.toggleControl(e, d.rules, o, n, a) || d.toggle){if (i = !0, n)for (var v = !document.addEventListener, p = g.tagName?g.name:g[0].name, h = g.tagName?g.form.elements:g, N = 0; N < h.length; N++)h[N].name !== p || Nette.inArray(s, h[N]) || (Nette.addEvent(h[N], v && h[N].type in{checkbox:1, radio:1}?"click":"change", l), s.push(h[N])); for (var F in d.toggle || [])Object.prototype.hasOwnProperty.call(d.toggle, F) && (Nette.toggles[F] = Nette.toggles[F] || (d.toggle[F]?o:!o))}}}return i}, Nette.parseJSON = function(s){return s = s || "[]", "{op" === s.substr(0, 3)?eval("[" + s + "]"):window.JSON && window.JSON.parse?JSON.parse(s):eval(s)}, Nette.toggle = function(e, t){var r = document.getElementById(e); r && (r.style.display = t?"":"none")}, Nette.initForm = function(e){e.noValidate = "novalidate", LiveForm.forms[e.id] = {hasError:!1, onLoadValidation:!1}, Nette.addEvent(e, "submit", function(t){return Nette.validateForm(e)?void 0:(t && t.stopPropagation?t.stopPropagation():window.event && (event.cancelBubble = !0), !1)}), Nette.addEvent(e, "click", function(t){t = t || event; var r = t.target || t.srcElement; e["nette-submittedBy"] = r.type in{submit:1, image:1}?r:null}), Nette.toggleForm(e); for (var t = 0; t < e.elements.length; t++)LiveForm.setupHandlers(e.elements[t]), LiveForm.processServerErrors(e.elements[t])}, Nette.initOnLoad = function(){Nette.addEvent(window, "load", function(){for (var e = 0; e < document.forms.length; e++)for (var t = document.forms[e], r = 0; r < t.elements.length; r++)if (t.elements[r].getAttribute("data-nette-rules")){Nette.initForm(t), LiveForm.hasClass(t, "validate-on-load") && (LiveForm.setFormProperty(t, "onLoadValidation", !0), Nette.validateForm(t), LiveForm.setFormProperty(t, "onLoadValidation", !1)); break}})}, Nette.isArray = function(e){return"[object Array]" === Object.prototype.toString.call(e)}, Nette.inArray = function(e, t){if ([].indexOf)return e.indexOf(t) > - 1; for (var r = 0; r < e.length; r++)if (e[r] === t)return!0; return!1}, Nette.webalize = function(e){e = e.toLowerCase(); var t, r, n = ""; for (t = 0; t < e.length; t++)r = Nette.webalizeTable[e.charAt(t)], n += r?r:e.charAt(t); return n.replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "")}, Nette.webalizeTable = {"á":"a", "ä":"a", "č":"c", "ď":"d", "é":"e", "ě":"e", "í":"i", "ľ":"l", "ň":"n", "ó":"o", "ô":"o", "ř":"r", "š":"s", "ť":"t", "ú":"u", "ů":"u", "ý":"y", "ž":"z"}, Nette});