/** * Kendo UI v2020.2.617 (http://www.telerik.com/kendo-ui) * Copyright 2020 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved. * * Kendo UI commercial licenses may be obtained at * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete * If you do not own a commercial license, this file shall be governed by the trial license terms. */ !function (e, define) { define("kendo.core.min", ["jquery"], e) }(function () { return function (e, t, n) { function i() { } function o(e, t) { if (t) return "'" + e.split("'").join("\\'").split('\\"').join('\\\\\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t") + "'"; var n = e.charAt(0), i = e.substring(1); return "=" === n ? "+(" + i + ")+" : ":" === n ? "+$kendoHtmlEncode(" + i + ")+" : ";" + e + ";$kendoOutput+=" } function r(e, t, n) { return e += "", t = t || 2, n = t - e.length, n ? j[t].substring(0, n) + e : e } function a(e) { var t = e.css(be.support.transitions.css + "box-shadow") || e.css("box-shadow"), n = t ? t.match(Ie) || [0, 0, 0, 0, 0] : [0, 0, 0, 0, 0], i = Se.max(+n[3], +(n[4] || 0)); return { left: -n[1] + i, right: +n[1] + i, bottom: +n[2] + i } } function s(n, i) { var o, r, a, s, d, c, u = De.browser, h = be._outerWidth, p = be._outerHeight, f = n.parent(), g = h(t); return f.removeClass("k-animation-container-sm"), f.hasClass("k-animation-container") ? l(n, i) : (r = n[0].style.width, a = n[0].style.height, s = Ae.test(r), d = Ae.test(a), c = n.hasClass("k-tooltip") || n.is(".k-menu-horizontal.k-context-menu"), o = s || d, !s && (!i || i && r || c) && (r = i ? h(n) + 1 : h(n)), (!d && (!i || i && a) || n.is(".k-menu-horizontal.k-context-menu")) && (a = p(n)), n.wrap(e("
").addClass("k-animation-container").css({ width: r, height: a })), f = n.parent(), o && n.css({ width: "100%", height: "100%", boxSizing: "border-box", mozBoxSizing: "border-box", webkitBoxSizing: "border-box" })), g < h(f) && (f.addClass("k-animation-container-sm"), l(n, i)), u.msie && Se.floor(u.version) <= 7 && (n.css({ zoom: 1 }), n.children(".k-menu").width(n.width())), f } function l(e, t) { var n, i = be._outerWidth, o = be._outerHeight, r = e.parent(".k-animation-container"), a = r[0].style; r.is(":hidden") && r.css({ display: "", position: "" }), n = Ae.test(a.width) || Ae.test(a.height), n || r.css({ width: t ? i(e) + 1 : i(e), height: o(e), boxSizing: "content-box", mozBoxSizing: "content-box", webkitBoxSizing: "content-box" }) } function d(e) { var t = 1, n = arguments.length; for (t = 1; t < n; t++)c(e, arguments[t]); return e } function c(e, n) { var i, o, r, a, s, l = be.data.ObservableArray, d = be.data.LazyObservableArray, u = be.data.DataSource, h = be.data.HierarchicalDataSource; for (i in n) o = n[i], r = typeof o, a = r === ze && null !== o ? o.constructor : null, !a || a === Array || a === l || a === d || a === u || a === h || a === RegExp || be.isFunction(t.ArrayBuffer) && a === ArrayBuffer ? r !== He && (e[i] = o) : o instanceof Date ? e[i] = new Date(o.getTime()) : P(o.clone) ? e[i] = o.clone() : (s = e[i], e[i] = typeof s === ze ? s || {} : {}, c(e[i], o)); return e } function u(e, t, i) { for (var o in t) if (t.hasOwnProperty(o) && t[o].test(e)) return o; return i !== n ? i : e } function h(e) { return e.replace(/([a-z][A-Z])/g, function (e) { return e.charAt(0) + "-" + e.charAt(1).toLowerCase() }) } function p(e) { return e.replace(/\-(\w)/g, function (e, t) { return t.toUpperCase() }) } function f(t, n) { var i, o = {}; return document.defaultView && document.defaultView.getComputedStyle ? (i = document.defaultView.getComputedStyle(t, ""), n && e.each(n, function (e, t) { o[t] = i.getPropertyValue(t) })) : (i = t.currentStyle, n && e.each(n, function (e, t) { o[t] = i[p(t)] })), be.size(o) || (o = i), o } function g(e) { if (e && e.className && "string" == typeof e.className && e.className.indexOf("k-auto-scrollable") > -1) return !0; var t = f(e, ["overflow"]).overflow; return "auto" == t || "scroll" == t } function m(t, i) { var o, r = De.browser.webkit, a = De.browser.mozilla, s = t instanceof e ? t[0] : t; if (t) return o = De.isRtl(t), i === n ? o && r ? s.scrollWidth - s.clientWidth - s.scrollLeft : Math.abs(s.scrollLeft) : (s.scrollLeft = o && r ? s.scrollWidth - s.clientWidth - i : o && a ? -i : i, n) } function v(e) { var t, n = 0; for (t in e) e.hasOwnProperty(t) && "toJSON" != t && n++; return n } function _(e, n, i) { var o, r, a; return n || (n = "offset"), o = e[n](), r = { top: o.top, right: o.right, bottom: o.bottom, left: o.left }, De.browser.msie && (De.pointers || De.msPointers) && !i && (a = De.isRtl(e) ? 1 : -1, r.top -= t.pageYOffset - document.documentElement.scrollTop, r.left -= t.pageXOffset + a * document.documentElement.scrollLeft), r } function b(e) { var t = {}; return ke("string" == typeof e ? e.split(" ") : e, function (e) { t[e] = this }), t } function w(e) { return new be.effects.Element(e) } function k(e, t, n, i) { return typeof e === Fe && (P(t) && (i = t, t = 400, n = !1), P(n) && (i = n, n = !1), typeof t === Le && (n = t, t = 400), e = { effects: e, duration: t, reverse: n, complete: i }), we({ effects: {}, duration: 400, reverse: !1, init: Ce, teardown: Ce, hide: !1 }, e, { completeCallback: e.complete, complete: Ce }) } function y(t, n, i, o, r) { for (var a, s = 0, l = t.length; s < l; s++)a = e(t[s]), a.queue(function () { G.promise(a, k(n, i, o, r)) }); return t } function x(e, t, n, i) { return t && (t = t.split(" "), ke(t, function (t, n) { e.toggleClass(n, i) })), e } function C(e) { return ("" + e).replace($, "&").replace(K, "<").replace(X, ">").replace(Y, """).replace(Q, "'") } function S(e) { var n; try { n = t.decodeURIComponent(e) } catch (i) { n = e.replace(/%u([\dA-F]{4})|%([\dA-F]{2})/gi, function (e, t, n) { return String.fromCharCode(parseInt("0x" + (t || n), 16)) }) } return n } function T(e, t) { var i; return 0 === t.indexOf("data") && (t = t.substring(4), t = t.charAt(0).toLowerCase() + t.substring(1)), t = t.replace(ae, "-$1"), i = e.getAttribute("data-" + be.ns + t), null === i ? i = n : "null" === i ? i = null : "true" === i ? i = !0 : "false" === i ? i = !1 : Me.test(i) && "mask" != t ? i = parseFloat(i) : oe.test(i) && !re.test(i) && (i = Function("return (" + i + ")")()), i } function D(t, i, o) { var r, a, s = {}, l = t.getAttribute("data-" + be.ns + "role"); for (r in i) a = T(t, r), a !== n && (ie.test(r) && "drawer" != l && ("string" == typeof a ? e("#" + a).length ? a = be.template(e("#" + a).html()) : o && (a = be.template(o[a])) : a = t.getAttribute(r)), s[r] = a); return s } function A(t, n) { return e.contains(t, n) ? -1 : 1 } function E() { var t = e(this); return e.inArray(t.attr("data-" + be.ns + "role"), ["slider", "rangeslider", "breadcrumb"]) > -1 || t.is(":visible") } function I(e, t) { var n = e.nodeName.toLowerCase(); return (/input|select|textarea|button|object/.test(n) ? !e.disabled : "a" === n ? e.href || t : t) && M(e) } function M(t) { return e.expr.pseudos.visible(t) && !e(t).parents().addBack().filter(function () { return "hidden" === e.css(this, "visibility") }).length } function R(e, t) { return new R.fn.init(e, t) } var F, P, z, B, L, H, N, O, V, W, U, j, q, G, $, K, Y, Q, X, J, Z, ee, te, ne, ie, oe, re, ae, se, le, de, ce, ue, he, pe, fe, ge, me, ve, _e, be = t.kendo = t.kendo || { cultures: {} }, we = e.extend, ke = e.each, ye = e.isArray, xe = e.proxy, Ce = e.noop, Se = Math, Te = t.JSON || {}, De = {}, Ae = /%/, Ee = /\{(\d+)(:[^\}]+)?\}/g, Ie = /(\d+(?:\.?)\d*)px\s*(\d+(?:\.?)\d*)px\s*(\d+(?:\.?)\d*)px\s*(\d+)?/i, Me = /^(\+|-?)\d+(\.?)\d*$/, Re = "function", Fe = "string", Pe = "number", ze = "object", Be = "null", Le = "boolean", He = "undefined", Ne = {}, Oe = {}, Ve = [].slice, We = function () { var e, t, i, o, r, a, s = arguments[0] || {}, l = 1, d = arguments.length, c = !1; for ("boolean" == typeof s && (c = s, s = arguments[l] || {}, l++), "object" == typeof s || jQuery.isFunction(s) || (s = {}), l === d && (s = this, l--); l < d; l++)if (null != (r = arguments[l])) for (o in r) "filters" != o && "concat" != o && ":" != o && (e = s[o], i = r[o], s !== i && (c && i && (jQuery.isPlainObject(i) || (t = jQuery.isArray(i))) ? (t ? (t = !1, a = e && jQuery.isArray(e) ? e : []) : a = e && jQuery.isPlainObject(e) ? e : {}, s[o] = We(c, a, i)) : i !== n && (s[o] = i))); return s }; be.version = "2020.2.617".replace(/^\s+|\s+$/g, ""), i.extend = function (e) { var t, n, i = function () { }, o = this, r = e && e.init ? e.init : function () { o.apply(this, arguments) }; i.prototype = o.prototype, n = r.fn = r.prototype = new i; for (t in e) n[t] = null != e[t] && e[t].constructor === Object ? we(!0, {}, i.prototype[t], e[t]) : e[t]; return n.constructor = r, r.extend = o.extend, r }, i.prototype._initOptions = function (e) { this.options = d({}, this.options, e) }, P = be.isFunction = function (e) { return "function" == typeof e }, z = function () { this._defaultPrevented = !0 }, B = function () { return this._defaultPrevented === !0 }, L = i.extend({ init: function () { this._events = {} }, bind: function (e, t, i) { var o, r, a, s, l, d = this, c = typeof e === Fe ? [e] : e, u = typeof t === Re; if (t === n) { for (o in e) d.bind(o, e[o]); return d } for (o = 0, r = c.length; o < r; o++)e = c[o], s = u ? t : t[e], s && (i && (a = s, s = function () { d.unbind(e, s), a.apply(d, arguments) }, s.original = a), l = d._events[e] = d._events[e] || [], l.push(s)); return d }, one: function (e, t) { return this.bind(e, t, !0) }, first: function (e, t) { var n, i, o, r, a = this, s = typeof e === Fe ? [e] : e, l = typeof t === Re; for (n = 0, i = s.length; n < i; n++)e = s[n], o = l ? t : t[e], o && (r = a._events[e] = a._events[e] || [], r.unshift(o)); return a }, trigger: function (e, t) { var n, i, o = this, r = o._events[e]; if (r) { for (t = t || {}, t.sender = o, t._defaultPrevented = !1, t.preventDefault = z, t.isDefaultPrevented = B, r = r.slice(), n = 0, i = r.length; n < i; n++)r[n].call(o, t); return t._defaultPrevented === !0 } return !1 }, unbind: function (e, t) { var i, o = this, r = o._events[e]; if (e === n) o._events = {}; else if (r) if (t) for (i = r.length - 1; i >= 0; i--)r[i] !== t && r[i].original !== t || r.splice(i, 1); else o._events[e] = []; return o } }), H = /^\w+/, N = /\$\{([^}]*)\}/g, O = /\\\}/g, V = /__CURLY__/g, W = /\\#/g, U = /__SHARP__/g, j = ["", "0", "00", "000", "0000"], F = { paramName: "data", useWithBlock: !0, render: function (e, t) { var n, i, o = ""; for (n = 0, i = t.length; n < i; n++)o += e(t[n]); return o }, compile: function (e, t) { var n, i, r, a = we({}, this, t), s = a.paramName, l = s.match(H)[0], d = a.useWithBlock, c = "var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;"; if (P(e)) return e; for (c += d ? "with(" + s + "){" : "", c += "$kendoOutput=", i = e.replace(O, "__CURLY__").replace(N, "#=$kendoHtmlEncode($1)#").replace(V, "}").replace(W, "__SHARP__").split("#"), r = 0; r < i.length; r++)c += o(i[r], r % 2 === 0); c += d ? ";}" : ";", c += "return $kendoOutput;", c = c.replace(U, "#"); try { return n = Function(l, c), n._slotCount = Math.floor(i.length / 2), n } catch (u) { throw Error(be.format("Invalid template:'{0}' Generated code:'{1}'", e, c)) } } }, function () { function e(e) { return a.lastIndex = 0, a.test(e) ? '"' + e.replace(a, function (e) { var t = s[e]; return typeof t === Fe ? t : "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4) }) + '"' : '"' + e + '"' } function t(r, a) { var s, d, c, u, h, p, f = n, g = a[r]; if (g && typeof g === ze && typeof g.toJSON === Re && (g = g.toJSON(r)), typeof o === Re && (g = o.call(a, r, g)), p = typeof g, p === Fe) return e(g); if (p === Pe) return isFinite(g) ? g + "" : Be; if (p === Le || p === Be) return g + ""; if (p === ze) { if (!g) return Be; if (n += i, h = [], "[object Array]" === l.apply(g)) { for (u = g.length, s = 0; s < u; s++)h[s] = t(s, g) || Be; return c = 0 === h.length ? "[]" : n ? "[\n" + n + h.join(",\n" + n) + "\n" + f + "]" : "[" + h.join(",") + "]", n = f, c } if (o && typeof o === ze) for (u = o.length, s = 0; s < u; s++)typeof o[s] === Fe && (d = o[s], c = t(d, g), c && h.push(e(d) + (n ? ": " : ":") + c)); else for (d in g) Object.hasOwnProperty.call(g, d) && (c = t(d, g), c && h.push(e(d) + (n ? ": " : ":") + c)); return c = 0 === h.length ? "{}" : n ? "{\n" + n + h.join(",\n" + n) + "\n" + f + "}" : "{" + h.join(",") + "}", n = f, c } } var n, i, o, a = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, s = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, l = {}.toString; typeof Date.prototype.toJSON !== Re && (Date.prototype.toJSON = function () { var e = this; return isFinite(e.valueOf()) ? r(e.getUTCFullYear(), 4) + "-" + r(e.getUTCMonth() + 1) + "-" + r(e.getUTCDate()) + "T" + r(e.getUTCHours()) + ":" + r(e.getUTCMinutes()) + ":" + r(e.getUTCSeconds()) + "Z" : null }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () { return this.valueOf() }), typeof Te.stringify !== Re && (Te.stringify = function (e, r, a) { var s; if (n = "", i = "", typeof a === Pe) for (s = 0; s < a; s += 1)i += " "; else typeof a === Fe && (i = a); if (o = r, r && typeof r !== Re && (typeof r !== ze || typeof r.length !== Pe)) throw Error("JSON.stringify"); return t("", { "": e }) }) }(), function () { function t(e) { if (e) { if (e.numberFormat) return e; if (typeof e === Fe) { var t = be.cultures; return t[e] || t[e.split("-")[0]] || null } return null } return null } function i(e) { return e && (e = t(e)), e || be.cultures.current } function o(e, t, o) { o = i(o); var a = o.calendars.standard, s = a.days, l = a.months; return t = a.patterns[t] || t, t.replace(c, function (t) { var i, o, d; return "d" === t ? o = e.getDate() : "dd" === t ? o = r(e.getDate()) : "ddd" === t ? o = s.namesAbbr[e.getDay()] : "dddd" === t ? o = s.names[e.getDay()] : "M" === t ? o = e.getMonth() + 1 : "MM" === t ? o = r(e.getMonth() + 1) : "MMM" === t ? o = l.namesAbbr[e.getMonth()] : "MMMM" === t ? o = l.names[e.getMonth()] : "yy" === t ? o = r(e.getFullYear() % 100) : "yyyy" === t ? o = r(e.getFullYear(), 4) : "h" === t ? o = e.getHours() % 12 || 12 : "hh" === t ? o = r(e.getHours() % 12 || 12) : "H" === t ? o = e.getHours() : "HH" === t ? o = r(e.getHours()) : "m" === t ? o = e.getMinutes() : "mm" === t ? o = r(e.getMinutes()) : "s" === t ? o = e.getSeconds() : "ss" === t ? o = r(e.getSeconds()) : "f" === t ? o = Se.floor(e.getMilliseconds() / 100) : "ff" === t ? (o = e.getMilliseconds(), o > 99 && (o = Se.floor(o / 10)), o = r(o)) : "fff" === t ? o = r(e.getMilliseconds(), 3) : "tt" === t ? o = e.getHours() < 12 ? a.AM[0] : a.PM[0] : "zzz" === t ? (i = e.getTimezoneOffset(), d = i < 0, o = ("" + Se.abs(i / 60)).split(".")[0], i = Se.abs(i) - 60 * o, o = (d ? "+" : "-") + r(o), o += ":" + r(i)) : "zz" !== t && "z" !== t || (o = e.getTimezoneOffset() / 60, d = o < 0, o = ("" + Se.abs(o)).split(".")[0], o = (d ? "+" : "-") + ("zz" === t ? r(o) : o)), o !== n ? o : t.slice(1, t.length - 1) }) } function a(e, t, o) { var r, a, d, c, w, k, y, x, C, S, T, D, A, E, I, M, R, F, P, z, B, L, H, N, O, V, W, U, j, q, G, $, K, Y; if (o = i(o), r = o.numberFormat, a = r[g], d = r.decimals, c = r.pattern[0], w = [], T = e < 0, M = f, R = f, G = -1, e === n) return f; if (!isFinite(e)) return e; if (!t) return o.name.length ? e.toLocaleString() : "" + e; if (S = u.exec(t)) { if (t = S[1].toLowerCase(), y = "c" === t, x = "p" === t, (y || x) && (r = y ? r.currency : r.percent, a = r[g], d = r.decimals, k = r.symbol, c = r.pattern[T ? 0 : 1]), C = S[2], C && (d = +C), "e" === t) return K = C ? e.toExponential(d) : e.toExponential(), K.replace(g, r[g]); if (x && (e *= 100), e = l(e, d), T = e < 0, e = e.split(g), D = e[0], A = e[1], T && (D = D.substring(1)), R = s(D, 0, D.length, r), A && (R += a + A), "n" === t && !T) return R; for (e = f, F = 0, P = c.length; F < P; F++)z = c.charAt(F), e += "n" === z ? R : "$" === z || "%" === z ? k : z; return e } if ((t.indexOf("'") > -1 || t.indexOf('"') > -1 || t.indexOf("\\") > -1) && (t = t.replace(h, function (e) { var t = e.charAt(0).replace("\\", ""), n = e.slice(1).replace(t, ""); return w.push(n), b })), t = t.split(";"), T && t[1]) t = t[1], L = !0; else if (0 === e && t[2]) { if (t = t[2], t.indexOf(v) == -1 && t.indexOf(_) == -1) return t } else t = t[0]; if (U = t.indexOf("%"), j = t.indexOf("$"), x = U != -1, y = j != -1, x && (e *= 100), y && "\\" === t[j - 1] && (t = t.split("\\").join(""), y = !1), (y || x) && (r = y ? r.currency : r.percent, a = r[g], d = r.decimals, k = r.symbol), B = t.indexOf(m) > -1, B && (t = t.replace(p, f)), H = t.indexOf(g), P = t.length, H != -1) if (A = ("" + e).split("e"), A = A[1] ? l(e, Math.abs(A[1])) : A[0], A = A.split(g)[1] || f, O = t.lastIndexOf(_) - H, N = t.lastIndexOf(v) - H, V = O > -1, W = N > -1, F = A.length, V || W || (t = t.substring(0, H) + t.substring(H + 1), P = t.length, H = -1, F = 0), V && O > N) F = O; else if (N > O) if (W && F > N) { for (Y = l(e, N, T); Y.charAt(Y.length - 1) === _ && N > 0 && N > O;)N--, Y = l(e, N, T); F = N } else V && F < O && (F = O); if (e = l(e, F, T), N = t.indexOf(v), q = O = t.indexOf(_), G = N == -1 && O != -1 ? O : N != -1 && O == -1 ? N : N > O ? O : N, N = t.lastIndexOf(v), O = t.lastIndexOf(_), $ = N == -1 && O != -1 ? O : N != -1 && O == -1 ? N : N > O ? N : O, G == P && ($ = G), G != -1) { for (R = ("" + e).split(g), D = R[0], A = R[1] || f, E = D.length, I = A.length, T && e * -1 >= 0 && (T = !1), e = t.substring(0, G), T && !L && (e += "-"), F = G; F < P; F++) { if (z = t.charAt(F), H == -1) { if ($ - F < E) { e += D; break } } else if (O != -1 && O < F && (M = f), H - F <= E && H - F > -1 && (e += D, F = H), H === F) { e += (A ? a : f) + A, F += $ - H + 1; continue } z === _ ? (e += z, M = z) : z === v && (e += M) } if (B && (e = s(e, G + (T && !L ? 1 : 0), Math.max($, E + G), r)), $ >= G && (e += t.substring($ + 1)), y || x) { for (R = f, F = 0, P = e.length; F < P; F++)z = e.charAt(F), R += "$" === z || "%" === z ? k : z; e = R } if (P = w.length) for (F = 0; F < P; F++)e = e.replace(b, w[F]) } return e } var s, l, d, c = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|"[^"]*"|'[^']*'/g, u = /^(n|c|p|e)(\d*)$/i, h = /(\\.)|(['][^']*[']?)|(["][^"]*["]?)/g, p = /\,/g, f = "", g = ".", m = ",", v = "#", _ = "0", b = "??", w = "en-US", k = {}.toString; be.cultures["en-US"] = { name: w, numberFormat: { pattern: ["-n"], decimals: 2, ",": ",", ".": ".", groupSize: [3], percent: { pattern: ["-n %", "n %"], decimals: 2, ",": ",", ".": ".", groupSize: [3], symbol: "%" }, currency: { name: "US Dollar", abbr: "USD", pattern: ["($n)", "$n"], decimals: 2, ",": ",", ".": ".", groupSize: [3], symbol: "$" } }, calendars: { standard: { days: { names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], namesAbbr: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], namesShort: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"] }, months: { names: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], namesAbbr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] }, AM: ["AM", "am", "AM"], PM: ["PM", "pm", "PM"], patterns: { d: "M/d/yyyy", D: "dddd, MMMM dd, yyyy", F: "dddd, MMMM dd, yyyy h:mm:ss tt", g: "M/d/yyyy h:mm tt", G: "M/d/yyyy h:mm:ss tt", m: "MMMM dd", M: "MMMM dd", s: "yyyy'-'MM'-'ddTHH':'mm':'ss", t: "h:mm tt", T: "h:mm:ss tt", u: "yyyy'-'MM'-'dd HH':'mm':'ss'Z'", y: "MMMM, yyyy", Y: "MMMM, yyyy" }, "/": "/", ":": ":", firstDay: 0, twoDigitYearMax: 2029 } } }, be.culture = function (e) { var i, o = be.cultures; return e === n ? o.current : (i = t(e) || o[w], i.calendar = i.calendars.standard, o.current = i, n) }, be.findCulture = t, be.getCulture = i, be.culture(w), s = function (e, t, i, o) { var r, a, s, l, d, c, u = e.indexOf(o[g]), h = o.groupSize.slice(), p = h.shift(); if (i = u !== -1 ? u : i + 1, r = e.substring(t, i), a = r.length, a >= p) { for (s = a, l = []; s > -1;)if (d = r.substring(s - p, s), d && l.push(d), s -= p, c = h.shift(), p = c !== n ? c : p, 0 === p) { s > 0 && l.push(r.substring(0, s)); break } r = l.reverse().join(o[m]), e = e.substring(0, t) + r + e.substring(i) } return e }, l = function (e, t, n) { return t = t || 0, e = ("" + e).split("e"), e = Math.round(+(e[0] + "e" + (e[1] ? +e[1] + t : t))), n && (e = -e), e = ("" + e).split("e"), e = +(e[0] + "e" + (e[1] ? +e[1] - t : -t)), e.toFixed(Math.min(t, 20)) }, d = function (e, t, i) { if (t) { if ("[object Date]" === k.call(e)) return o(e, t, i); if (typeof e === Pe) return a(e, t, i) } return e !== n ? e : "" }, be.format = function (e) { var t = arguments; return e.replace(Ee, function (e, n, i) { var o = t[parseInt(n, 10) + 1]; return d(o, i ? i.substring(1) : "") }) }, be._extractFormat = function (e) { return "{0:" === e.slice(0, 3) && (e = e.slice(3, e.length - 1)), e }, be._activeElement = function () { try { return document.activeElement } catch (e) { return document.documentElement.activeElement } }, be._round = l, be._outerWidth = function (t, n) { return e(t).outerWidth(n || !1) || 0 }, be._outerHeight = function (t, n) { return e(t).outerHeight(n || !1) || 0 }, be.toString = d }(), function () { function t(e, t, n) { return !(e >= t && e <= n) } function i(e) { return e.charAt(0) } function o(t) { return e.map(t, i) } function r(e, t) { t || 23 !== e.getHours() || e.setHours(e.getHours() + 2) } function a(e) { for (var t = 0, n = e.length, i = []; t < n; t++)i[t] = (e[t] + "").toLowerCase(); return i } function s(e) { var t, n = {}; for (t in e) n[t] = a(e[t]); return n } function l(e, i, a, l) { if (!e) return null; var d, c, u, h, p, m, v, _, b, k, y, x, C, S = function (e) { for (var t = 0; i[L] === e;)t++, L++; return t > 0 && (L -= 1), t }, T = function (t) { var n = w[t] || RegExp("^\\d{1," + t + "}"), i = e.substr(H, t).match(n); return i ? (i = i[0], H += i.length, parseInt(i, 10)) : null }, D = function (t, n) { for (var i, o, r, a = 0, s = t.length, l = 0, d = 0; a < s; a++)i = t[a], o = i.length, r = e.substr(H, o), n && (r = r.toLowerCase()), r == i && o > l && (l = o, d = a); return l ? (H += l, d + 1) : null }, A = function () { var t = !1; return e.charAt(H) === i[L] && (H++, t = !0), t }, E = a.calendars.standard, I = null, M = null, R = null, F = null, P = null, z = null, B = null, L = 0, H = 0, N = !1, O = new Date, V = E.twoDigitYearMax || 2029, W = O.getFullYear(); for (i || (i = "d"), h = E.patterns[i], h && (i = h), i = i.split(""), u = i.length; L < u; L++)if (d = i[L], N) "'" === d ? N = !1 : A(); else if ("d" === d) { if (c = S("d"), E._lowerDays || (E._lowerDays = s(E.days)), null !== R && c > 2) continue; if (R = c < 3 ? T(2) : D(E._lowerDays[3 == c ? "namesAbbr" : "names"], !0), null === R || t(R, 1, 31)) return null } else if ("M" === d) { if (c = S("M"), E._lowerMonths || (E._lowerMonths = s(E.months)), M = c < 3 ? T(2) : D(E._lowerMonths[3 == c ? "namesAbbr" : "names"], !0), null === M || t(M, 1, 12)) return null; M -= 1 } else if ("y" === d) { if (c = S("y"), I = T(c), null === I) return null; 2 == c && ("string" == typeof V && (V = W + parseInt(V, 10)), I = W - W % 100 + I, I > V && (I -= 100)) } else if ("h" === d) { if (S("h"), F = T(2), 12 == F && (F = 0), null === F || t(F, 0, 11)) return null } else if ("H" === d) { if (S("H"), F = T(2), null === F || t(F, 0, 23)) return null } else if ("m" === d) { if (S("m"), P = T(2), null === P || t(P, 0, 59)) return null } else if ("s" === d) { if (S("s"), z = T(2), null === z || t(z, 0, 59)) return null } else if ("f" === d) { if (c = S("f"), C = e.substr(H, c).match(w[3]), B = T(c), null !== B && (B = parseFloat("0." + C[0], 10), B = be._round(B, 3), B *= 1e3), null === B || t(B, 0, 999)) return null } else if ("t" === d) { if (c = S("t"), _ = E.AM, b = E.PM, 1 === c && (_ = o(_), b = o(b)), p = D(b), !p && !D(_)) return null } else if ("z" === d) { if (m = !0, c = S("z"), "Z" === e.substr(H, 1)) { A(); continue } if (v = e.substr(H, 6).match(c > 2 ? g : f), !v) return null; if (v = v[0].split(":"), k = v[0], y = v[1], !y && k.length > 3 && (H = k.length - 2, y = k.substring(H), k = k.substring(0, H)), k = parseInt(k, 10), t(k, -12, 13)) return null; if (c > 2 && (y = v[0][0] + y, y = parseInt(y, 10), isNaN(y) || t(y, -59, 59))) return null } else if ("'" === d) N = !0, A(); else if (!A()) return null; return l && !/^\s*$/.test(e.substr(H)) ? null : (x = null !== F || null !== P || z || null, null === I && null === M && null === R && x ? (I = W, M = O.getMonth(), R = O.getDate()) : (null === I && (I = W), null === R && (R = 1)), p && F < 12 && (F += 12), m ? (k && (F += -k), y && (P += -y), e = new Date(Date.UTC(I, M, R, F, P, z, B))) : (e = new Date(I, M, R, F, P, z, B), r(e, F)), I < 100 && e.setFullYear(I), e.getDate() !== R && m === n ? null : e) } function d(e) { var t = "-" === e.substr(0, 1) ? -1 : 1; return e = e.substring(1), e = 60 * parseInt(e.substr(0, 2), 10) + parseInt(e.substring(2), 10), t * e } function c(e) { var t, n, i, o = Se.max(_.length, b.length), r = e.calendar || e.calendars.standard, a = r.patterns, s = []; for (i = 0; i < o; i++) { for (t = _[i], n = 0; n < t.length; n++)s.push(a[t[n]]); s = s.concat(b[i]) } return s } function u(e, t, n, i) { var o, r, a, s; if ("[object Date]" === k.call(e)) return e; if (o = 0, r = null, e && 0 === e.indexOf("/D") && (r = m.exec(e))) return r = r[1], s = v.exec(r.substring(1)), r = new Date(parseInt(r, 10)), s && (s = d(s[0]), r = be.timezone.apply(r, 0), r = be.timezone.convert(r, 0, -1 * s)), r; for (n = be.getCulture(n), t || (t = c(n)), t = ye(t) ? t : [t], a = t.length; o < a; o++)if (r = l(e, t[o], n, i)) return r; return r } var h = /\u00A0/g, p = /[eE][\-+]?[0-9]+/, f = /[+|\-]\d{1,2}/, g = /[+|\-]\d{1,2}:?\d{2}/, m = /^\/Date\((.*?)\)\/$/, v = /[+-]\d*/, _ = [[], ["G", "g", "F"], ["D", "d", "y", "m", "T", "t"]], b = [["yyyy-MM-ddTHH:mm:ss.fffffffzzz", "yyyy-MM-ddTHH:mm:ss.fffffff", "yyyy-MM-ddTHH:mm:ss.fffzzz", "yyyy-MM-ddTHH:mm:ss.fff", "ddd MMM dd yyyy HH:mm:ss", "yyyy-MM-ddTHH:mm:sszzz", "yyyy-MM-ddTHH:mmzzz", "yyyy-MM-ddTHH:mmzz", "yyyy-MM-ddTHH:mm:ss", "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss"], ["yyyy-MM-ddTHH:mm", "yyyy-MM-dd HH:mm", "yyyy/MM/dd HH:mm"], ["yyyy/MM/dd", "yyyy-MM-dd", "HH:mm:ss", "HH:mm"]], w = { 2: /^\d{1,2}/, 3: /^\d{1,3}/, 4: /^\d{4}/ }, k = {}.toString; be.parseDate = function (e, t, n) { return u(e, t, n, !1) }, be.parseExactDate = function (e, t, n) { return u(e, t, n, !0) }, be.parseInt = function (e, t) { var n = be.parseFloat(e, t); return n && (n = 0 | n), n }, be.parseFloat = function (e, t, n) { if (!e && 0 !== e) return null; if (typeof e === Pe) return e; e = "" + e, t = be.getCulture(t); var i, o, r = t.numberFormat, a = r.percent, s = r.currency, l = s.symbol, d = a.symbol, c = e.indexOf("-"); return p.test(e) ? (e = parseFloat(e.replace(r["."], ".")), isNaN(e) && (e = null), e) : c > 0 ? null : (c = c > -1, e.indexOf(l) > -1 || n && n.toLowerCase().indexOf("c") > -1 ? (r = s, i = r.pattern[0].replace("$", l).split("n"), e.indexOf(i[0]) > -1 && e.indexOf(i[1]) > -1 && (e = e.replace(i[0], "").replace(i[1], ""), c = !0)) : e.indexOf(d) > -1 && (o = !0, r = a, l = d), e = e.replace("-", "").replace(l, "").replace(h, " ").split(r[","].replace(h, " ")).join("").replace(r["."], "."), e = parseFloat(e), isNaN(e) ? e = null : c && (e *= -1), e && o && (e /= 100), e) } }(), function () { var i, o, r, a, s, l, d, c, h, p, f, g; De._scrollbar = n, De.scrollbar = function (e) { if (isNaN(De._scrollbar) || e) { var t, n = document.createElement("div"); return n.style.cssText = "overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block", n.innerHTML = " ", document.body.appendChild(n), De._scrollbar = t = n.offsetWidth - n.scrollWidth, document.body.removeChild(n), t } return De._scrollbar }, De.isRtl = function (t) { return e(t).closest(".k-rtl").length > 0 }, i = document.createElement("table"); try { i.innerHTML = "", De.tbodyInnerHtml = !0 } catch (m) { De.tbodyInnerHtml = !1 } De.touch = "ontouchstart" in t, o = document.documentElement.style, r = De.transitions = !1, a = De.transforms = !1, s = "HTMLElement" in t ? HTMLElement.prototype : [], De.hasHW3D = "WebKitCSSMatrix" in t && "m11" in new t.WebKitCSSMatrix || "MozPerspective" in o || "msPerspective" in o, De.cssFlexbox = "flexWrap" in o || "WebkitFlexWrap" in o || "msFlexWrap" in o, ke(["Moz", "webkit", "O", "ms"], function () { var e, t = "" + this, n = typeof i.style[t + "Transition"] === Fe; if (n || typeof i.style[t + "Transform"] === Fe) return e = t.toLowerCase(), a = { css: "ms" != e ? "-" + e + "-" : "", prefix: t, event: "o" === e || "webkit" === e ? e : "" }, n && (r = a, r.event = r.event ? r.event + "TransitionEnd" : "transitionend"), !1 }), i = null, De.transforms = a, De.transitions = r, De.devicePixelRatio = t.devicePixelRatio === n ? 1 : t.devicePixelRatio; try { De.screenWidth = t.outerWidth || t.screen ? t.screen.availWidth : t.innerWidth, De.screenHeight = t.outerHeight || t.screen ? t.screen.availHeight : t.innerHeight } catch (m) { De.screenWidth = t.screen.availWidth, De.screenHeight = t.screen.availHeight } De.detectOS = function (e) { var n, i, o = !1, r = [], a = !/mobile safari/i.test(e), s = { wp: /(Windows Phone(?: OS)?)\s(\d+)\.(\d+(\.\d+)?)/, fire: /(Silk)\/(\d+)\.(\d+(\.\d+)?)/, android: /(Android|Android.*(?:Opera|Firefox).*?\/)\s*(\d+)\.?(\d+(\.\d+)?)?/, iphone: /(iPhone|iPod).*OS\s+(\d+)[\._]([\d\._]+)/, ipad: /(iPad).*OS\s+(\d+)[\._]([\d_]+)/, meego: /(MeeGo).+NokiaBrowser\/(\d+)\.([\d\._]+)/, webos: /(webOS)\/(\d+)\.(\d+(\.\d+)?)/, blackberry: /(BlackBerry|BB10).*?Version\/(\d+)\.(\d+(\.\d+)?)/, playbook: /(PlayBook).*?Tablet\s*OS\s*(\d+)\.(\d+(\.\d+)?)/, windows: /(MSIE)\s+(\d+)\.(\d+(\.\d+)?)/, tizen: /(tizen).*?Version\/(\d+)\.(\d+(\.\d+)?)/i, sailfish: /(sailfish).*rv:(\d+)\.(\d+(\.\d+)?).*firefox/i, ffos: /(Mobile).*rv:(\d+)\.(\d+(\.\d+)?).*Firefox/ }, l = { ios: /^i(phone|pad|pod)$/i, android: /^android|fire$/i, blackberry: /^blackberry|playbook/i, windows: /windows/, wp: /wp/, flat: /sailfish|ffos|tizen/i, meego: /meego/ }, d = { tablet: /playbook|ipad|fire/i }, c = { omini: /Opera\sMini/i, omobile: /Opera\sMobi/i, firefox: /Firefox|Fennec/i, mobilesafari: /version\/.*safari/i, ie: /MSIE|Windows\sPhone/i, chrome: /chrome|crios/i, webkit: /webkit/i }; for (i in s) if (s.hasOwnProperty(i) && (r = e.match(s[i]))) { if ("windows" == i && "plugins" in navigator) return !1; o = {}, o.device = i, o.tablet = u(i, d, !1), o.browser = u(e, c, "default"), o.name = u(i, l), o[o.name] = !0, o.majorVersion = r[2], o.minorVersion = (r[3] || "0").replace("_", "."), n = o.minorVersion.replace(".", "").substr(0, 2), o.flatVersion = o.majorVersion + n + Array(3 - (n.length < 3 ? n.length : 2)).join("0"), o.cordova = typeof t.PhoneGap !== He || typeof t.cordova !== He, o.appMode = t.navigator.standalone || /file|local|wmapp/.test(t.location.protocol) || o.cordova, o.android && (De.devicePixelRatio < 1.5 && o.flatVersion < 400 || a) && (De.screenWidth > 800 || De.screenHeight > 800) && (o.tablet = i); break } return o }, l = De.mobileOS = De.detectOS(navigator.userAgent), De.wpDevicePixelRatio = l.wp ? screen.width / 320 : 0, De.hasNativeScrolling = !1, (l.ios || l.android && l.majorVersion > 2 || l.wp) && (De.hasNativeScrolling = l), De.delayedClick = function () { if (De.touch) { if (l.ios) return !0; if (l.android) return !De.browser.chrome || !(De.browser.version < 32) && !(e("meta[name=viewport]").attr("content") || "").match(/user-scalable=no/i) } return !1 }, De.mouseAndTouchPresent = De.touch && !(De.mobileOS.ios || De.mobileOS.android), De.detectBrowser = function (e) { var t, n = !1, i = [], o = { edge: /(edge)[ \/]([\w.]+)/i, webkit: /(chrome|crios)[ \/]([\w.]+)/i, safari: /(webkit)[ \/]([\w.]+)/i, opera: /(opera)(?:.*version|)[ \/]([\w.]+)/i, msie: /(msie\s|trident.*? rv:)([\w.]+)/i, mozilla: /(mozilla)(?:.*? rv:([\w.]+)|)/i }; for (t in o) if (o.hasOwnProperty(t) && (i = e.match(o[t]))) { n = {}, n[t] = !0, n[i[1].toLowerCase().split(" ")[0].split("/")[0]] = !0, n.version = parseInt(document.documentMode || i[2], 10); break } return n }, De.browser = De.detectBrowser(navigator.userAgent), De.detectClipboardAccess = function () { var e = { copy: !!document.queryCommandSupported && document.queryCommandSupported("copy"), cut: !!document.queryCommandSupported && document.queryCommandSupported("cut"), paste: !!document.queryCommandSupported && document.queryCommandSupported("paste") }; return De.browser.chrome && (e.paste = !1, De.browser.version >= 43 && (e.copy = !0, e.cut = !0)), e }, De.clipboard = De.detectClipboardAccess(), De.zoomLevel = function () { var e, n, i; try { return e = De.browser, n = 0, i = document.documentElement, e.msie && 11 == e.version && i.scrollHeight > i.clientHeight && !De.touch && (n = De.scrollbar()), De.touch ? i.clientWidth / t.innerWidth : e.msie && e.version >= 10 ? ((top || t).document.documentElement.offsetWidth + n) / (top || t).innerWidth : 1 } catch (o) { return 1 } }, De.cssBorderSpacing = n !== o.borderSpacing && !(De.browser.msie && De.browser.version < 8), function (t) { var n = "", i = e(document.documentElement), o = parseInt(t.version, 10); t.msie ? n = "ie" : t.mozilla ? n = "ff" : t.safari ? n = "safari" : t.webkit ? n = "webkit" : t.opera ? n = "opera" : t.edge && (n = "edge"), n && (n = "k-" + n + " k-" + n + o), De.mobileOS && (n += " k-mobile"), De.cssFlexbox || (n += " k-no-flexbox"), i.addClass(n) }(De.browser), De.eventCapture = document.documentElement.addEventListener, d = document.createElement("input"), De.placeholder = "placeholder" in d, De.propertyChangeEvent = "onpropertychange" in d, De.input = function () { for (var e, t = ["number", "date", "time", "month", "week", "datetime", "datetime-local"], n = t.length, i = "test", o = {}, r = 0; r < n; r++)e = t[r], d.setAttribute("type", e), d.value = i, o[e.replace("-", "")] = "text" !== d.type && d.value !== i; return o }(), d.style.cssText = "float:left;", De.cssFloat = !!d.style.cssFloat, d = null, De.stableSort = function () { var e, t = 513, n = [{ index: 0, field: "b" }]; for (e = 1; e < t; e++)n.push({ index: e, field: "a" }); return n.sort(function (e, t) { return e.field > t.field ? 1 : e.field < t.field ? -1 : 0 }), 1 === n[0].index }(), De.matchesSelector = s.webkitMatchesSelector || s.mozMatchesSelector || s.msMatchesSelector || s.oMatchesSelector || s.matchesSelector || s.matches || function (t) { for (var n = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(t) || [] : e(t), i = n.length; i--;)if (n[i] == this) return !0; return !1 }, De.matchMedia = "matchMedia" in t, De.pushState = t.history && t.history.pushState, c = document.documentMode, De.hashChange = "onhashchange" in t && !(De.browser.msie && (!c || c <= 8)), De.customElements = "registerElement" in t.document, h = De.browser.chrome, p = De.browser.crios, f = De.browser.mozilla, g = De.browser.safari, De.msPointers = !h && t.MSPointerEvent, De.pointers = !h && !p && !f && !g && t.PointerEvent, De.kineticScrollNeeded = l && (De.touch || De.msPointers || De.pointers) }(), q = { left: { reverse: "right" }, right: { reverse: "left" }, down: { reverse: "up" }, up: { reverse: "down" }, top: { reverse: "bottom" }, bottom: { reverse: "top" }, "in": { reverse: "out" }, out: { reverse: "in" } }, G = {}, e.extend(G, { enabled: !0, Element: function (t) { this.element = e(t) }, promise: function (e, t) { e.is(":visible") || e.css({ display: e.data("olddisplay") || "block" }).css("display"), t.hide && e.data("olddisplay", e.css("display")).hide(), t.init && t.init(), t.completeCallback && t.completeCallback(e), e.dequeue() }, disable: function () { this.enabled = !1, this.promise = this.promiseShim }, enable: function () { this.enabled = !0, this.promise = this.animatedPromise } }), G.promiseShim = G.promise, "kendoAnimate" in e.fn || we(e.fn, { kendoStop: function (e, t) { return this.stop(e, t) }, kendoAnimate: function (e, t, n, i) { return y(this, e, t, n, i) }, kendoAddClass: function (e, t) { return be.toggleClass(this, e, t, !0) }, kendoRemoveClass: function (e, t) { return be.toggleClass(this, e, t, !1) }, kendoToggleClass: function (e, t, n) { return be.toggleClass(this, e, t, n) } }), $ = /&/g, K = //g, J = function (e) { return e.target }, De.touch && (J = function (e) { var t = "originalEvent" in e ? e.originalEvent.changedTouches : "changedTouches" in e ? e.changedTouches : null; return t ? document.elementFromPoint(t[0].clientX, t[0].clientY) : e.target }, ke(["swipe", "swipeLeft", "swipeRight", "swipeUp", "swipeDown", "doubleTap", "tap"], function (t, n) { e.fn[n] = function (e) { return this.bind(n, e) } })), De.touch ? De.mobileOS ? (De.mousedown = "touchstart", De.mouseup = "touchend", De.mousemove = "touchmove", De.mousecancel = "touchcancel", De.click = "touchend", De.resize = "orientationchange") : (De.mousedown = "mousedown touchstart", De.mouseup = "mouseup touchend", De.mousemove = "mousemove touchmove", De.mousecancel = "mouseleave touchcancel", De.click = "click", De.resize = "resize") : De.pointers ? (De.mousemove = "pointermove", De.mousedown = "pointerdown", De.mouseup = "pointerup", De.mousecancel = "pointercancel", De.click = "pointerup", De.resize = "orientationchange resize") : De.msPointers ? (De.mousemove = "MSPointerMove", De.mousedown = "MSPointerDown", De.mouseup = "MSPointerUp", De.mousecancel = "MSPointerCancel", De.click = "MSPointerUp", De.resize = "orientationchange resize") : (De.mousemove = "mousemove", De.mousedown = "mousedown", De.mouseup = "mouseup", De.mousecancel = "mouseleave", De.click = "click", De.resize = "resize"), Z = function (e, t) { var n, i, o, r, a = t || "d", s = 1; for (i = 0, o = e.length; i < o; i++)r = e[i], "" !== r && (n = r.indexOf("["), 0 !== n && (n == -1 ? r = "." + r : (s++, r = "." + r.substring(0, n) + " || {})" + r.substring(n))), s++, a += r + (i < o - 1 ? " || {})" : ")")); return Array(s).join("(") + a }, ee = /^([a-z]+:)?\/\//i, we(be, { widgets: [], _widgetRegisteredCallbacks: [], ui: be.ui || {}, fx: be.fx || w, effects: be.effects || G, mobile: be.mobile || {}, data: be.data || {}, dataviz: be.dataviz || {}, drawing: be.drawing || {}, spreadsheet: { messages: {} }, keys: { INSERT: 45, DELETE: 46, BACKSPACE: 8, TAB: 9, ENTER: 13, ESC: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, END: 35, HOME: 36, SPACEBAR: 32, PAGEUP: 33, PAGEDOWN: 34, F2: 113, F10: 121, F12: 123, NUMPAD_PLUS: 107, NUMPAD_MINUS: 109, NUMPAD_DOT: 110 }, support: be.support || De, animate: be.animate || y, ns: "", attr: function (e) { return "data-" + be.ns + e }, getShadows: a, wrap: s, deepExtend: d, getComputedStyles: f, isScrollable: g, scrollLeft: m, size: v, toCamelCase: p, toHyphens: h, getOffset: be.getOffset || _, parseEffects: be.parseEffects || b, toggleClass: be.toggleClass || x, directions: be.directions || q, Observable: L, Class: i, Template: F, template: xe(F.compile, F), render: xe(F.render, F), stringify: xe(Te.stringify, Te), eventTarget: J, htmlEncode: C, unescape: S, isLocalUrl: function (e) { return e && !ee.test(e) }, expr: function (e, t, n) { return e = e || "", typeof t == Fe && (n = t, t = !1), n = n || "d", e && "[" !== e.charAt(0) && (e = "." + e), t ? (e = e.replace(/"([^.]*)\.([^"]*)"/g, '"$1_$DOT$_$2"'), e = e.replace(/'([^.]*)\.([^']*)'/g, "'$1_$DOT$_$2'"), e = Z(e.split("."), n), e = e.replace(/_\$DOT\$_/g, ".")) : e = n + e, e }, getter: function (e, t) { var n = e + t; return Ne[n] = Ne[n] || Function("d", "return " + be.expr(e, t)) }, setter: function (e) { return Oe[e] = Oe[e] || Function("d,value", be.expr(e) + "=value") }, accessor: function (e) { return { get: be.getter(e), set: be.setter(e) } }, guid: function () { var e, t, n = ""; for (e = 0; e < 32; e++)t = 16 * Se.random() | 0, 8 != e && 12 != e && 16 != e && 20 != e || (n += "-"), n += (12 == e ? 4 : 16 == e ? 3 & t | 8 : t).toString(16); return n }, roleSelector: function (e) { return e.replace(/(\S+)/g, "[" + be.attr("role") + "=$1],").slice(0, -1) }, directiveSelector: function (e) { var t, n = e.split(" "); if (n) for (t = 0; t < n.length; t++)"view" != n[t] && (n[t] = n[t].replace(/(\w*)(view|bar|strip|over)$/, "$1-$2")); return n.join(" ").replace(/(\S+)/g, "kendo-mobile-$1,").slice(0, -1) }, triggeredByInput: function (e) { return /^(label|input|textarea|select)$/i.test(e.target.tagName) }, onWidgetRegistered: function (e) { for (var t = 0, n = be.widgets.length; t < n; t++)e(be.widgets[t]); be._widgetRegisteredCallbacks.push(e) }, logToConsole: function (e, i) { var o = t.console; !be.suppressLog && n !== o && o.log && o[i || "log"](e) } }), te = L.extend({ init: function (e, t) { var n, i, o = this; o.element = be.jQuery(e).handler(o), o.angular("init", t), L.fn.init.call(o), n = t ? t.dataSource : null, t && (i = (o.componentTypes || {})[(t || {}).componentType]), n && (t = we({}, t, { dataSource: {} })), t = o.options = we(!0, {}, o.options, o.defaults, i || {}, t), n && (t.dataSource = n), o.element.attr(be.attr("role")) || o.element.attr(be.attr("role"), (t.name || "").toLowerCase()), o.element.data("kendo" + t.prefix + t.name, o), o.bind(o.events, t) }, events: [], options: { prefix: "" }, _hasBindingTarget: function () { return !!this.element[0].kendoBindingTarget }, _tabindex: function (e) { e = e || this.wrapper; var t = this.element, n = "tabindex", i = e.attr(n) || t.attr(n); t.removeAttr(n), e.attr(n, isNaN(i) ? 0 : i) }, setOptions: function (t) { this._setEvents(t), e.extend(this.options, t) }, _setEvents: function (e) { for (var t, n = this, i = 0, o = n.events.length; i < o; i++)t = n.events[i], n.options[t] && e[t] && (n.unbind(t, n.options[t]), n._events && n._events[t] && delete n._events[t]); n.bind(n.events, e) }, resize: function (e) { var t = this.getSize(), n = this._size; (e || (t.width > 0 || t.height > 0) && (!n || t.width !== n.width || t.height !== n.height)) && (this._size = t, this._resize(t, e), this.trigger("resize", t)) }, getSize: function () { return be.dimensions(this.element) }, size: function (e) { return e ? (this.setSize(e), n) : this.getSize() }, setSize: e.noop, _resize: e.noop, destroy: function () { var e = this; e.element.removeData("kendo" + e.options.prefix + e.options.name), e.element.removeData("handler"), e.unbind() }, _destroy: function () { this.destroy() }, angular: function () { }, _muteAngularRebind: function (e) { this._muteRebind = !0, e.call(this), this._muteRebind = !1 } }), ne = te.extend({ dataItems: function () { return this.dataSource.flatView() }, _angularItems: function (t) { var n = this; n.angular(t, function () { return { elements: n.items(), data: e.map(n.dataItems(), function (e) { return { dataItem: e } }) } }) } }), be.dimensions = function (e, t) { var n = e[0]; return t && e.css(t), { width: n.offsetWidth, height: n.offsetHeight } }, be.notify = Ce, ie = /template$/i, oe = /^\s*(?:\{(?:.|\r\n|\n)*\}|\[(?:.|\r\n|\n)*\])\s*$/, re = /^\{(\d+)(:[^\}]+)?\}|^\[[A-Za-z_]+\]$/, ae = /([A-Z])/g, be.initWidget = function (i, o, r) { var a, s, l, d, c, u, h, p, f, g, m, v, _; if (r ? r.roles && (r = r.roles) : r = be.ui.roles, i = i.nodeType ? i : i[0], u = i.getAttribute("data-" + be.ns + "role")) { f = u.indexOf(".") === -1, l = f ? r[u] : be.getter(u)(t), m = e(i).data(), v = l ? "kendo" + l.fn.options.prefix + l.fn.options.name : "", g = f ? RegExp("^kendo.*" + u + "$", "i") : RegExp("^" + v + "$", "i"); for (_ in m) if (_.match(g)) { if (_ !== v) return m[_]; a = m[_] } if (l) { for (p = T(i, "dataSource"), o = e.extend({}, D(i, e.extend({}, l.fn.options, l.fn.defaults)), o), p && (o.dataSource = typeof p === Fe ? be.getter(p)(t) : p), d = 0, c = l.fn.events.length; d < c; d++)s = l.fn.events[d], h = T(i, s), h !== n && (o[s] = be.getter(h)(t)); return a ? e.isEmptyObject(o) || a.setOptions(o) : a = new l(i, o), a } } }, be.rolesFromNamespaces = function (e) { var t, n, i = []; for (e[0] || (e = [be.ui, be.dataviz.ui]), t = 0, n = e.length; t < n; t++)i[t] = e[t].roles; return we.apply(null, [{}].concat(i.reverse())) }, be.init = function (t) { var n = be.rolesFromNamespaces(Ve.call(arguments, 1)); e(t).find("[data-" + be.ns + "role]").addBack().each(function () { be.initWidget(this, {}, n) }) }, be.destroy = function (t) { e(t).find("[data-" + be.ns + "role]").addBack().each(function () { var t, n = e(this).data(); for (t in n) 0 === t.indexOf("kendo") && typeof n[t].destroy === Re && n[t].destroy() }) }, be.resize = function (t, n) { var i, o = e(t).find("[data-" + be.ns + "role]").addBack().filter(E); o.length && (i = e.makeArray(o), i.sort(A), e.each(i, function () { var t = be.widgetInstance(e(this)); t && t.resize(n) })) }, be.parseOptions = D, we(be.ui, { Widget: te, DataBoundWidget: ne, roles: {}, progress: function (t, n, i) { var o, r, a, s, l, d = t.find(".k-loading-mask"), c = be.support, u = c.browser; i = e.extend({}, { width: "100%", height: "100%", top: t.scrollTop(), opacity: !1 }, i), l = i.opacity ? "k-loading-mask k-opaque" : "k-loading-mask", n ? d.length || (o = c.isRtl(t), r = o ? "right" : "left", s = t.scrollLeft(), a = u.webkit && o ? t[0].scrollWidth - t.width() - 2 * s : 0, d = e(be.format("
{1}
", l, be.ui.progress.messages.loading)).width(i.width).height(i.height).css("top", i.top).css(r, Math.abs(s) + a).prependTo(t)) : d && d.remove() }, plugin: function (t, i, o) { var r, a, s, l, d = t.fn.options.name; for (i = i || be.ui, o = o || "", i[d] = t, i.roles[d.toLowerCase()] = t, r = "getKendo" + o + d, d = "kendo" + o + d, a = { name: d, widget: t, prefix: o || "" }, be.widgets.push(a), s = 0, l = be._widgetRegisteredCallbacks.length; s < l; s++)be._widgetRegisteredCallbacks[s](a); e.fn[d] = function (i) { var o, r = this; return typeof i === Fe ? (o = Ve.call(arguments, 1), this.each(function () { var t, a, s = e.data(this, d); if (!s) throw Error(be.format("Cannot call method '{0}' of {1} before it is initialized", i, d)); if (t = s[i], typeof t !== Re) throw Error(be.format("Cannot find method '{0}' of {1}", i, d)); if (a = t.apply(s, o), a !== n) return r = a, !1 })) : this.each(function () { return new t(this, i) }), r }, e.fn[d].widget = t, e.fn[r] = function () { return this.data(d) } } }), be.ui.progress.messages = { loading: "Loading..." }, se = { bind: function () { return this }, nullObject: !0, options: {} }, le = te.extend({ init: function (e, t) { te.fn.init.call(this, e, t), this.element.autoApplyNS(), this.wrapper = this.element, this.element.addClass("km-widget") }, destroy: function () { te.fn.destroy.call(this), this.element.kendoDestroy() }, options: { prefix: "Mobile" }, events: [], view: function () { var e = this.element.closest(be.roleSelector("view splitview modalview drawer")); return be.widgetInstance(e, be.mobile.ui) || se }, viewHasNativeScrolling: function () { var e = this.view(); return e && e.options.useNativeScrolling }, container: function () { var e = this.element.closest(be.roleSelector("view layout modalview drawer splitview")); return be.widgetInstance(e.eq(0), be.mobile.ui) || se } }), we(be.mobile, { init: function (e) { be.init(e, be.mobile.ui, be.ui, be.dataviz.ui) }, appLevelNativeScrolling: function () { return be.mobile.application && be.mobile.application.options && be.mobile.application.options.useNativeScrolling }, roles: {}, ui: { Widget: le, DataBoundWidget: ne.extend(le.prototype), roles: {}, plugin: function (e) { be.ui.plugin(e, be.mobile.ui, "Mobile") } } }), d(be.dataviz, { init: function (e) { be.init(e, be.dataviz.ui) }, ui: { roles: {}, themes: {}, views: [], plugin: function (e) { be.ui.plugin(e, be.dataviz.ui) } }, roles: {} }), be.touchScroller = function (t, n) { return n || (n = {}), n.useNative = !0, e(t).map(function (t, i) { return i = e(i), !(!De.kineticScrollNeeded || !be.mobile.ui.Scroller || i.data("kendoMobileScroller")) && (i.kendoMobileScroller(n), i.data("kendoMobileScroller")) })[0] }, be.preventDefault = function (e) { e.preventDefault() }, be.widgetInstance = function (e, n) { var i, o, r, a, s, l = e.data(be.ns + "role"), d = [], c = e.data("kendoView"); if (l) { if ("content" === l && (l = "scroller"), "editortoolbar" === l && (r = e.data("kendoEditorToolbar"))) return r; if ("view" === l && c) return c; if (n) if (n[0]) for (i = 0, o = n.length; i < o; i++)d.push(n[i].roles[l]); else d.push(n.roles[l]); else d = [be.ui.roles[l], be.dataviz.ui.roles[l], be.mobile.ui.roles[l]]; for (l.indexOf(".") >= 0 && (d = [be.getter(l)(t)]), i = 0, o = d.length; i < o; i++)if (a = d[i], a && (s = e.data("kendo" + a.fn.options.prefix + a.fn.options.name))) return s } }, be.onResize = function (n) { var i = n; return De.mobileOS.android && (i = function () { setTimeout(n, 600) }), e(t).on(De.resize, i), i }, be.unbindResize = function (n) { e(t).off(De.resize, n) }, be.attrValue = function (e, t) { return e.data(be.ns + t) }, be.days = { Sunday: 0, Monday: 1, Tuesday: 2, Wednesday: 3, Thursday: 4, Friday: 5, Saturday: 6 }, e.extend(e.expr.pseudos, { kendoFocusable: function (t) { var n = e.attr(t, "tabindex"); return I(t, !isNaN(n) && n > -1) } }), de = ["mousedown", "mousemove", "mouseenter", "mouseleave", "mouseover", "mouseout", "mouseup", "click"], ce = "label, input, [data-rel=external]", ue = { setupMouseMute: function () { var t, n = 0, i = de.length, o = document.documentElement; if (!ue.mouseTrap && De.eventCapture) for (ue.mouseTrap = !0, ue.bustClick = !1, ue.captureMouse = !1, t = function (t) { ue.captureMouse && ("click" === t.type ? ue.bustClick && !e(t.target).is(ce) && (t.preventDefault(), t.stopPropagation()) : t.stopPropagation()) }; n < i; n++)o.addEventListener(de[n], t, !0) }, muteMouse: function (e) { ue.captureMouse = !0, e.data.bustClick && (ue.bustClick = !0), clearTimeout(ue.mouseTrapTimeoutID) }, unMuteMouse: function () { clearTimeout(ue.mouseTrapTimeoutID), ue.mouseTrapTimeoutID = setTimeout(function () { ue.captureMouse = !1, ue.bustClick = !1 }, 400) } }, he = { down: "touchstart mousedown", move: "mousemove touchmove", up: "mouseup touchend touchcancel", cancel: "mouseleave touchcancel" }, De.touch && (De.mobileOS.ios || De.mobileOS.android) ? he = { down: "touchstart", move: "touchmove", up: "touchend touchcancel", cancel: "touchcancel" } : De.pointers ? he = { down: "pointerdown", move: "pointermove", up: "pointerup", cancel: "pointercancel pointerleave" } : De.msPointers && (he = { down: "MSPointerDown", move: "MSPointerMove", up: "MSPointerUp", cancel: "MSPointerCancel MSPointerLeave" }), !De.msPointers || "onmspointerenter" in t || e.each({ MSPointerEnter: "MSPointerOver", MSPointerLeave: "MSPointerOut" }, function (t, n) { e.event.special[t] = { delegateType: n, bindType: n, handle: function (t) { var i, o = this, r = t.relatedTarget, a = t.handleObj; return r && (r === o || e.contains(o, r)) || (t.type = a.origType, i = a.handler.apply(this, arguments), t.type = n), i } } }), pe = function (e) { return he[e] || e }, fe = /([^ ]+)/g, be.applyEventMap = function (e, t) { return e = e.replace(fe, pe), t && (e = e.replace(fe, "$1." + t)), e }, be.keyDownHandler = function (e, t) { var n, i, o = t._events.kendoKeydown; if (!o) return !0; for (o = o.slice(), e.sender = t, e.preventKendoKeydown = !1, n = 0, i = o.length; n < i; n++)o[n].call(t, e); return !e.preventKendoKeydown }, ge = e.fn.on, We(!0, R, e), R.fn = R.prototype = new e, R.fn.constructor = R, R.fn.init = function (t, n) { return n && n instanceof e && !(n instanceof R) && (n = R(n)), e.fn.init.call(this, t, n, me) }, R.fn.init.prototype = R.fn, me = R(document), we(R.fn, { handler: function (e) { return this.data("handler", e), this }, autoApplyNS: function (e) { return this.data("kendoNS", e || be.guid()), this }, on: function () { var e, t, n, i, o, r, a, s, l = this, d = l.data("kendoNS"); return 1 === arguments.length ? ge.call(l, arguments[0]) : (e = l, t = Ve.call(arguments), typeof t[t.length - 1] === He && t.pop(), n = t[t.length - 1], i = be.applyEventMap(t[0], d), De.mouseAndTouchPresent && i.search(/mouse|click/) > -1 && this[0] !== document.documentElement && (ue.setupMouseMute(), o = 2 === t.length ? null : t[1], r = i.indexOf("click") > -1 && i.indexOf("touchend") > -1, ge.call(this, { touchstart: ue.muteMouse, touchend: ue.unMuteMouse }, o, { bustClick: r })), arguments[0].indexOf("keydown") !== -1 && t[1] && t[1].options ? (t[0] = i, a = t[1], s = t[t.length - 1], t[t.length - 1] = function (e) { if (be.keyDownHandler(e, a)) return s.apply(this, [e]) }, ge.apply(l, t), l) : (typeof n === Fe && (e = l.data("handler"), n = e[n], t[t.length - 1] = function (t) { n.call(e, t) }), t[0] = i, ge.apply(l, t), l)) }, kendoDestroy: function (e) { return e = e || this.data("kendoNS"), e && this.off("." + e), this } }), be.jQuery = R, be.eventMap = he, be.timezone = function () { function e(e, t) { var n, i, o, r = t[3], a = t[4], s = t[5], l = t[8]; return l || (t[8] = l = {}), l[e] ? l[e] : (isNaN(a) ? 0 === a.indexOf("last") ? (n = new Date(Date.UTC(e, c[r] + 1, 1, s[0] - 24, s[1], s[2], 0)), i = u[a.substr(4, 3)], o = n.getUTCDay(), n.setUTCDate(n.getUTCDate() + i - o - (i > o ? 7 : 0))) : a.indexOf(">=") >= 0 ? (n = new Date(Date.UTC(e, c[r], a.substr(5), s[0], s[1], s[2], 0)), i = u[a.substr(0, 3)], o = n.getUTCDay(), n.setUTCDate(n.getUTCDate() + i - o + (i < o ? 7 : 0))) : a.indexOf("<=") >= 0 && (n = new Date(Date.UTC(e, c[r], a.substr(5), s[0], s[1], s[2], 0)), i = u[a.substr(0, 3)], o = n.getUTCDay(), n.setUTCDate(n.getUTCDate() + i - o - (i > o ? 7 : 0))) : n = new Date(Date.UTC(e, c[r], a, s[0], s[1], s[2], 0)), l[e] = n) } function t(t, n, i) { var o, r, a, s; return (n = n[i]) ? (a = new Date(t).getUTCFullYear(), n = jQuery.grep(n, function (e) { var t = e[0], n = e[1]; return t <= a && (n >= a || t == a && "only" == n || "max" == n) }), n.push(t), n.sort(function (t, n) { return "number" != typeof t && (t = +e(a, t)), "number" != typeof n && (n = +e(a, n)), t - n }), s = n[jQuery.inArray(t, n) - 1] || n[n.length - 1], isNaN(s) ? s : null) : (o = i.split(":"), r = 0, o.length > 1 && (r = 60 * o[0] + +o[1]), [-1e6, "max", "-", "Jan", 1, [0, 0, 0], r, "-"]) } function n(e, t, n) { var i, o, r, a = t[n]; if ("string" == typeof a && (a = t[a]), !a) throw Error('Timezone "' + n + '" is either incorrect, or kendo.timezones.min.js is not included.'); for (i = a.length - 1; i >= 0 && (o = a[i][3], !(o && e > o)); i--); if (r = a[i + 1], !r) throw Error('Timezone "' + n + '" not found on ' + e + "."); return r } function i(e, i, o, r) { typeof e != Pe && (e = Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds())); var a = n(e, i, r); return { zone: a, rule: t(e, o, a[1]) } } function o(e, t) { var n, o, r; return "Etc/UTC" == t || "Etc/GMT" == t ? 0 : (n = i(e, this.zones, this.rules, t), o = n.zone, r = n.rule, be.parseFloat(r ? o[0] - r[6] : o[0])) } function r(e, t) { var n = i(e, this.zones, this.rules, t), o = n.zone, r = n.rule, a = o[2]; return a.indexOf("/") >= 0 ? a.split("/")[r && +r[6] ? 1 : 0] : a.indexOf("%s") >= 0 ? a.replace("%s", r && "-" != r[7] ? r[7] : "") : a } function a(e, t, n) { var i, o, r, a = n; return typeof t == Fe && (t = this.offset(e, t)), typeof n == Fe && (n = this.offset(e, n)), o = e.getTimezoneOffset(), e = new Date(e.getTime() + 6e4 * (t - n)), r = e.getTimezoneOffset(), typeof a == Fe && (a = this.offset(e, a)), i = r - o + (n - a), new Date(e.getTime() + 6e4 * i) } function s(e, t) { return this.convert(e, e.getTimezoneOffset(), t) } function l(e, t) { return this.convert(e, t, e.getTimezoneOffset()) } function d(e) { return this.apply(new Date(e), "Etc/UTC") } var c = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 }, u = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 }; return { zones: {}, rules: {}, offset: o, convert: a, apply: s, remove: l, abbr: r, toLocalDate: d } }(), be.date = function () { function e(e, t) { return 0 === t && 23 === e.getHours() && (e.setHours(e.getHours() + 2), !0) } function t(t, n, i) { var o = t.getHours(); i = i || 1, n = (n - t.getDay() + 7 * i) % 7, t.setDate(t.getDate() + n), e(t, o) } function i(e, n, i) { return e = new Date(e), t(e, n, i), e } function o(e) { return new Date(e.getFullYear(), e.getMonth(), 1) } function r(e) { var t = new Date(e.getFullYear(), e.getMonth() + 1, 0), n = o(e), i = Math.abs(t.getTimezoneOffset() - n.getTimezoneOffset()); return i && t.setHours(n.getHours() + i / 60), t } function a(e, t) { return 1 !== t ? f(i(e, t, -1), 4) : f(e, 4 - (e.getDay() || 7)) } function s(e, t) { var n = new Date(e.getFullYear(), 0, 1, (-6)), i = a(e, t), o = i.getTime() - n.getTime(), r = Math.floor(o / k); return 1 + Math.floor(r / 7) } function l(e, t) { var i, o, r; return t === n && (t = be.culture().calendar.firstDay), i = f(e, -7), o = f(e, 7), r = s(e, t), 0 === r ? s(i, t) + 1 : 53 === r && s(o, t) > 1 ? 1 : r } function d(t) { return t = new Date(t.getFullYear(), t.getMonth(), t.getDate(), 0, 0, 0), e(t, 0), t } function c(e) { return Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()) } function u(e) { return b(e).getTime() - d(b(e)) } function h(e, t, n) { var i, o = u(t), r = u(n); return !e || o == r || (t >= n && (n += k), i = u(e), o > i && (i += k), r < o && (r += k), i >= o && i <= r) } function p(e, t, n) { var i, o = t.getTime(), r = n.getTime(); return o >= r && (r += k), i = e.getTime(), i >= o && i <= r } function f(t, n) { var i = t.getHours(); return t = new Date(t), g(t, n * k), e(t, i), t } function g(e, t, n) { var i, o = e.getTimezoneOffset(); e.setTime(e.getTime() + t), n || (i = e.getTimezoneOffset() - o, e.setTime(e.getTime() + i * w)) } function m(t, n) { return t = new Date(t.getFullYear(), t.getMonth(), t.getDate(), n.getHours(), n.getMinutes(), n.getSeconds(), n.getMilliseconds()), e(t, n.getHours()), t } function v() { return d(new Date) } function _(e) { return d(e).getTime() == v().getTime() } function b(e) { var t = new Date(1980, 1, 1, 0, 0, 0); return e && t.setHours(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()), t } var w = 6e4, k = 864e5; return { adjustDST: e, dayOfWeek: i, setDayOfWeek: t, getDate: d, isInDateRange: p, isInTimeRange: h, isToday: _, nextDay: function (e) { return f(e, 1) }, previousDay: function (e) { return f(e, -1) }, toUtcTime: c, MS_PER_DAY: k, MS_PER_HOUR: 60 * w, MS_PER_MINUTE: w, setTime: g, setHours: m, addDays: f, today: v, toInvariantTime: b, firstDayOfMonth: o, lastDayOfMonth: r, weekInYear: l, getMilliseconds: u } }(), be.stripWhitespace = function (e) { var t, n, i; if (document.createNodeIterator) for (t = document.createNodeIterator(e, NodeFilter.SHOW_TEXT, function (t) { return t.parentNode == e ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT }, !1); t.nextNode();)t.referenceNode && !t.referenceNode.textContent.trim() && t.referenceNode.parentNode.removeChild(t.referenceNode); else for (n = 0; n < e.childNodes.length; n++)i = e.childNodes[n], 3 != i.nodeType || /\S/.test(i.nodeValue) || (e.removeChild(i), n--), 1 == i.nodeType && be.stripWhitespace(i) }, ve = t.requestAnimationFrame || t.webkitRequestAnimationFrame || t.mozRequestAnimationFrame || t.oRequestAnimationFrame || t.msRequestAnimationFrame || function (e) { setTimeout(e, 1e3 / 60) }, be.animationFrame = function (e) { ve.call(t, e) }, _e = [], be.queueAnimation = function (e) { _e[_e.length] = e, 1 === _e.length && be.runNextAnimation() }, be.runNextAnimation = function () { be.animationFrame(function () { _e[0] && (_e.shift()(), _e[0] && be.runNextAnimation()) }) }, be.parseQueryStringParams = function (e) { for (var t = e.split("?")[1] || "", n = {}, i = t.split(/&|=/), o = i.length, r = 0; r < o; r += 2)"" !== i[r] && (n[decodeURIComponent(i[r])] = decodeURIComponent(i[r + 1])); return n }, be.elementUnderCursor = function (e) { if (n !== e.x.client) return document.elementFromPoint(e.x.client, e.y.client) }, be.wheelDeltaY = function (e) { var t, i = e.originalEvent, o = i.wheelDeltaY; return i.wheelDelta ? (o === n || o) && (t = i.wheelDelta) : i.detail && i.axis === i.VERTICAL_AXIS && (t = 10 * -i.detail), t }, be.throttle = function (e, t) { var i, o, r = 0; return !t || t <= 0 ? e : (o = function () { function o() { e.apply(a, l), r = +new Date } var a = this, s = +new Date - r, l = arguments; return r ? (i && clearTimeout(i), s > t ? o() : i = setTimeout(o, t - s), n) : o() }, o.cancel = function () { clearTimeout(i) }, o) }, be.caret = function (t, i, o) { var r, a, s, l, d, c = i !== n; if (o === n && (o = i), t[0] && (t = t[0]), !c || !t.disabled) { try { t.selectionStart !== n ? c ? (t.focus(), a = De.mobileOS, a.wp || a.android ? setTimeout(function () { t.setSelectionRange(i, o) }, 0) : t.setSelectionRange(i, o)) : i = [t.selectionStart, t.selectionEnd] : document.selection && (e(t).is(":visible") && t.focus(), r = t.createTextRange(), c ? (r.collapse(!0), r.moveStart("character", i), r.moveEnd("character", o - i), r.select()) : (s = r.duplicate(), r.moveToBookmark(document.selection.createRange().getBookmark()), s.setEndPoint("EndToStart", r), l = s.text.length, d = l + r.text.length, i = [l, d])) } catch (u) { i = [] } return i } }, be.compileMobileDirective = function (e, n) { var i = t.angular; return e.attr("data-" + be.ns + "role", e[0].tagName.toLowerCase().replace("kendo-mobile-", "").replace("-", "")), i.element(e).injector().invoke(["$compile", function (t) { t(e)(n), /^\$(digest|apply)$/.test(n.$$phase) || n.$digest() }]), be.widgetInstance(e, be.mobile.ui) }, be.antiForgeryTokens = function () { var t = {}, i = e("meta[name=csrf-token],meta[name=_csrf]").attr("content"), o = e("meta[name=csrf-param],meta[name=_csrf_header]").attr("content"); return e("input[name^='__RequestVerificationToken']").each(function () { t[this.name] = this.value }), o !== n && i !== n && (t[o] = i), t }, be.cycleForm = function (e) { function t(e) { var t = be.widgetInstance(e); t && t.focus ? t.focus() : e.focus() } var n = e.find("input, .k-widget").first(), i = e.find("button, .k-button").last(); i.on("keydown", function (e) { e.keyCode != be.keys.TAB || e.shiftKey || (e.preventDefault(), t(n)) }), n.on("keydown", function (e) { e.keyCode == be.keys.TAB && e.shiftKey && (e.preventDefault(), t(i)) }) }, be.focusElement = function (n) { var i = [], o = n.parentsUntil("body").filter(function (e, t) { var n = be.getComputedStyles(t, ["overflow"]); return "visible" !== n.overflow }).add(t); o.each(function (t, n) { i[t] = e(n).scrollTop() }); try { n[0].setActive() } catch (r) { n[0].focus() } o.each(function (t, n) { e(n).scrollTop(i[t]) }) }, be.focusNextElement = function () { var t, n, i; document.activeElement && (t = e(":kendoFocusable"), n = t.index(document.activeElement), n > -1 && (i = t[n + 1] || t[0], i.focus())) }, be.trim = function (e) { return e ? ("" + e).trim() : "" }, be.getWidgetFocusableElement = function (t) { var n, i = t.closest(":kendoFocusable"), o = be.widgetInstance(t); return n = i.length ? i : o ? "Editor" === o.options.name ? e(o.body) : o.wrapper.find(":kendoFocusable").first() : t }, be.addAttribute = function (e, t, n) { var i = e.attr(t) || ""; i.indexOf(n) < 0 && e.attr(t, (i + " " + n).trim()) }, be.removeAttribute = function (e, t, n) { var i = e.attr(t) || ""; e.attr(t, i.replace(n, "").trim()) }, be.toggleAttribute = function (e, t, n) { var i = e.attr(t) || ""; i.indexOf(n) < 0 ? be.addAttribute(e, t, n) : be.removeAttribute(e, t, n) }, be.matchesMedia = function (e) { var n = be._bootstrapToMedia(e) || e; return De.matchMedia && t.matchMedia(n).matches }, be._bootstrapToMedia = function (e) { return { xs: "(max-width: 576px)", sm: "(min-width: 576px)", md: "(min-width: 768px)", lg: "(min-width: 992px)", xl: "(min-width: 1200px)" }[e] }, be.fileGroupMap = { audio: [".aif", ".iff", ".m3u", ".m4a", ".mid", ".mp3", ".mpa", ".wav", ".wma", ".ogg", ".wav", ".wma", ".wpl"], video: [".3g2", ".3gp", ".avi", ".asf", ".flv", ".m4u", ".rm", ".h264", ".m4v", ".mkv", ".mov", ".mp4", ".mpg", ".rm", ".swf", ".vob", ".wmv"], image: [".ai", ".dds", ".heic", ".jpe", "jfif", ".jif", ".jp2", ".jps", ".eps", ".bmp", ".gif", ".jpeg", ".jpg", ".png", ".ps", ".psd", ".svg", ".svgz", ".tif", ".tiff"], txt: [".doc", ".docx", ".log", ".pages", ".tex", ".wpd", ".wps", ".odt", ".rtf", ".text", ".txt", ".wks"], presentation: [".key", ".odp", ".pps", ".ppt", ".pptx"], data: [".xlr", ".xls", ".xlsx"], programming: [".tmp", ".bak", ".msi", ".cab", ".cpl", ".cur", ".dll", ".dmp", ".drv", ".icns", ".ico", ".link", ".sys", ".cfg", ".ini", ".asp", ".aspx", ".cer", ".csr", ".css", ".dcr", ".htm", ".html", ".js", ".php", ".rss", ".xhtml"], pdf: [".pdf"], config: [".apk", ".app", ".bat", ".cgi", ".com", ".exe", ".gadget", ".jar", ".wsf"], zip: [".7z", ".cbr", ".gz", ".sitx", ".arj", ".deb", ".pkg", ".rar", ".rpm", ".tar.gz", ".z", ".zip", ".zipx"], "disc-image": [".dmg", ".iso", ".toast", ".vcd", ".bin", ".cue", ".mdf"] }, be.getFileGroup = function (e, t) { var i, o, r = be.fileGroupMap, a = Object.keys(r), s = "file"; if (e === n || !e.length) return s; for (i = 0; i < a.length; i += 1)if (o = r[a[i]], o.indexOf(e.toLowerCase()) > -1) return t ? "file-" + a[i] : a[i]; return s }, be.getFileSizeMessage = function (e) { var t, n = ["Bytes", "KB", "MB", "GB", "TB"]; return 0 === e ? "0 Byte" : (t = parseInt(Math.floor(Math.log(e) / Math.log(1024)), 10), Math.round(e / Math.pow(1024, t), 2) + " " + n[t]) }, be.selectorFromClasses = function (e) { return "." + e.split(" ").join(".") }, function () { function n(t, n, i, o) { var r, a, s = e("
").attr({ action: i, method: "POST", target: o }), l = be.antiForgeryTokens(); l.fileName = n, r = t.split(";base64,"), l.contentType = r[0].replace("data:", ""), l.base64 = r[1]; for (a in l) l.hasOwnProperty(a) && e("").attr({ value: l[a], name: a, type: "hidden" }).appendTo(s); s.appendTo("body").submit().remove() } function i(e, t) { var n, i, o, r, a, s = e; if ("string" == typeof e) { for (n = e.split(";base64,"), i = n[0], o = atob(n[1]), r = new Uint8Array(o.length), a = 0; a < o.length; a++)r[a] = o.charCodeAt(a); s = new Blob([r.buffer], { type: i }) } navigator.msSaveBlob(s, t) } function o(e, n) { t.Blob && e instanceof Blob && (e = URL.createObjectURL(e)), r.download = n, r.href = e; var i = document.createEvent("MouseEvents"); i.initMouseEvent("click", !0, !1, t, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), r.dispatchEvent(i), setTimeout(function () { URL.revokeObjectURL(e) }) } var r = document.createElement("a"), a = "download" in r && !be.support.browser.edge; be.saveAs = function (e) { var t = n; e.forceProxy || (a ? t = o : navigator.msSaveBlob && (t = i)), t(e.dataURI, e.fileName, e.proxyURL, e.proxyTarget) } }(), be.proxyModelSetters = function (e) { var t = {}; return Object.keys(e || {}).forEach(function (n) { Object.defineProperty(t, n, { get: function () { return e[n] }, set: function (t) { e[n] = t, e.dirty = !0 } }) }), t }, function () { be.defaults = be.defaults || {}, be.setDefaults = function (e, t) { var i = e.split("."), o = be.defaults; e = i.pop(), i.forEach(function (e) { o[e] === n && (o[e] = {}), o = o[e] }), o[e] = t.constructor === Object ? d({}, o[e], t) : t } }() }(jQuery, window), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.router.min", ["kendo.core.min"], e) }(function () { return function (e, t) { function n(e, t) { if (!t) return e; e + "/" === t && (e = t); var n = RegExp("^" + t, "i"); return n.test(e) || (e = t + "/" + e), p.protocol + "//" + (p.host + "/" + e).replace(/\/\/+/g, "/") } function i(e) { return e ? "#!" : "#" } function o(e) { var t = p.href; return "#!" === e && t.indexOf("#") > -1 && t.indexOf("#!") < 0 ? null : t.split(e)[1] || "" } function r(e, t) { return 0 === t.indexOf(e) ? t.substr(e.length).replace(/\/\//g, "/") : t } function a(e) { return e.replace(/^(#)?/, "#") } function s(e) { return e.replace(/^(#(!)?)?/, "#!") } var l = window.kendo, d = "change", c = "back", u = "same", h = l.support, p = window.location, f = window.history, g = 50, m = l.support.browser.msie, v = /^#*/, _ = window.document, b = l.Class.extend({ back: function () { m ? setTimeout(function () { f.back() }) : f.back() }, forward: function () { m ? setTimeout(function () { f.forward() }) : f.forward() }, length: function () { return f.length }, replaceLocation: function (e) { p.replace(e) } }), w = b.extend({ init: function (e) { this.root = e }, navigate: function (e) { f.pushState({}, _.title, n(e, this.root)) }, replace: function (e) { f.replaceState({}, _.title, n(e, this.root)) }, normalize: function (e) { return r(this.root, e) }, current: function () { var e = p.pathname; return p.search && (e += p.search), r(this.root, e) }, change: function (t) { e(window).bind("popstate.kendo", t) }, stop: function () { e(window).unbind("popstate.kendo") }, normalizeCurrent: function (e) { var t, r = e.root, a = p.pathname, s = o(i(e.hashBang)); r === a + "/" && (t = r), r === a && s && (t = n(s.replace(v, ""), r)), t && f.pushState({}, _.title, t) } }), k = b.extend({ init: function (e) { this._id = l.guid(), this.prefix = i(e), this.fix = e ? s : a }, navigate: function (e) { p.hash = this.fix(e) }, replace: function (e) { this.replaceLocation(this.fix(e)) }, normalize: function (e) { return e.indexOf(this.prefix) < 0 ? e : e.split(this.prefix)[1] }, change: function (t) { h.hashChange ? e(window).on("hashchange." + this._id, t) : this._interval = setInterval(t, g) }, stop: function () { e(window).off("hashchange." + this._id), clearInterval(this._interval) }, current: function () { return o(this.prefix) }, normalizeCurrent: function (e) { var t = p.pathname, n = e.root; return !(!e.pushState || n === t) && (this.replaceLocation(n + this.prefix + r(n, t)), !0) } }), y = l.Observable.extend({ start: function (t) { if (t = t || {}, this.bind([d, c, u], t), !this._started) { this._started = !0, t.root = t.root || "/"; var n, i = this.createAdapter(t); i.normalizeCurrent(t) || (n = i.current(), e.extend(this, { adapter: i, root: t.root, historyLength: i.length(), current: n, locations: [n] }), i.change(e.proxy(this, "_checkUrl"))) } }, createAdapter: function (e) { return h.pushState && e.pushState ? new w(e.root) : new k(e.hashBang) }, stop: function () { this._started && (this.adapter.stop(), this.unbind(d), this._started = !1) }, change: function (e) { this.bind(d, e) }, replace: function (e, t) { this._navigate(e, t, function (t) { t.replace(e), this.locations[this.locations.length - 1] = this.current }) }, navigate: function (e, n) { return "#:back" === e ? (this.backCalled = !0, this.adapter.back(), t) : (this._navigate(e, n, function (t) { t.navigate(e), this.locations.push(this.current) }), t) }, _navigate: function (e, n, i) { var o = this.adapter; return e = o.normalize(e), this.current === e || this.current === decodeURIComponent(e) ? (this.trigger(u), t) : (!n && this.trigger(d, { url: e, decode: !1 }) || (this.current = e, i.call(this, o), this.historyLength = o.length()), t) }, _checkUrl: function () { var e = this.adapter, n = e.current(), i = e.length(), o = this.historyLength === i, r = n === this.locations[this.locations.length - 2] && o, a = this.backCalled, s = this.current; return null === n || this.current === n || this.current === decodeURIComponent(n) || (this.historyLength = i, this.backCalled = !1, this.current = n, r && this.trigger("back", { url: s, to: n }) ? (e.forward(), this.current = s, t) : this.trigger(d, { url: n, backButtonPressed: !a }) ? (r ? e.forward() : (e.back(), this.historyLength--), this.current = s, t) : (r ? this.locations.pop() : this.locations.push(n), t)) } }); l.History = y, l.History.HistoryAdapter = b, l.History.HashAdapter = k, l.History.PushStateAdapter = w, l.absoluteURL = n, l.history = new y }(window.kendo.jQuery), function () { function e(e, t) { return t ? e : "([^/]+)" } function t(t, n) { return RegExp("^" + t.replace(f, "\\$&").replace(u, "(?:$1)?").replace(h, e).replace(p, "(.*?)") + "$", n ? "i" : "") } function n(e) { return e.replace(/(\?.*)|(#.*)/g, "") } var i = window.kendo, o = i.history, r = i.Observable, a = "init", s = "routeMissing", l = "change", d = "back", c = "same", u = /\((.*?)\)/g, h = /(\(\?)?:\w+/g, p = /\*\w+/g, f = /[\-{}\[\]+?.,\\\^$|#\s]/g, g = i.Class.extend({ init: function (e, n, i) { e instanceof RegExp || (e = t(e, i)), this.route = e, this._callback = n }, callback: function (e, t, o) { var r, a, s = 0, l = i.parseQueryStringParams(e); if (l._back = t, e = n(e), r = this.route.exec(e).slice(1), a = r.length, o) for (; s < a; s++)void 0 !== r[s] && (r[s] = decodeURIComponent(r[s])); r.push(l), this._callback.apply(null, r) }, worksWith: function (e, t, i) { return !!this.route.test(n(e)) && (this.callback(e, t, i), !0) } }), m = r.extend({ init: function (e) { e || (e = {}), r.fn.init.call(this), this.routes = [], this.pushState = e.pushState, this.hashBang = e.hashBang, this.root = e.root, this.ignoreCase = e.ignoreCase !== !1, this.bind([a, s, l, c, d], e) }, destroy: function () { o.unbind(l, this._urlChangedProxy), o.unbind(c, this._sameProxy), o.unbind(d, this._backProxy), this.unbind() }, start: function () { var e, t = this, n = function () { t._same() }, i = function (e) { t._back(e) }, r = function (e) { t._urlChanged(e) }; o.start({ same: n, change: r, back: i, pushState: t.pushState, hashBang: t.hashBang, root: t.root }), e = { url: o.current || "/", preventDefault: $.noop }, t.trigger(a, e) || t._urlChanged(e), this._urlChangedProxy = r, this._backProxy = i }, route: function (e, t) { this.routes.push(new g(e, t, this.ignoreCase)) }, navigate: function (e, t) { i.history.navigate(e, t) }, replace: function (e, t) { i.history.replace(e, t) }, _back: function (e) { this.trigger(d, { url: e.url, to: e.to }) && e.preventDefault() }, _same: function () { this.trigger(c) }, _urlChanged: function (e) { var t, n, o, r, a = e.url, d = !!e.decode, c = e.backButtonPressed; if (a || (a = "/"), this.trigger(l, { url: e.url, params: i.parseQueryStringParams(e.url), backButtonPressed: c })) return void e.preventDefault(); for (t = 0, n = this.routes, r = n.length; t < r; t++)if (o = n[t], o.worksWith(a, c, d)) return; this.trigger(s, { url: a, params: i.parseQueryStringParams(a), backButtonPressed: c }) && e.preventDefault() } }); i.Router = m }(), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.data.odata.min", ["kendo.core.min"], e) }(function () { return function (e, t) { function n(i, o) { var r, a, s, l, d, c, u, h, p = [], f = i.logic || "and", m = i.filters; for (r = 0, a = m.length; r < a; r++)i = m[r], s = i.field, u = i.value, c = i.operator, i.filters ? i = n(i, o) : (h = i.ignoreCase, s = s.replace(/\./g, "/"), i = w[c], o && (i = k[c]), "isnullorempty" === c ? i = g.format("{0} {1} null or {0} {1} ''", s, i) : "isnotnullorempty" === c ? i = g.format("{0} {1} null and {0} {1} ''", s, i) : "isnull" === c || "isnotnull" === c ? i = g.format("{0} {1} null", s, i) : "isempty" === c || "isnotempty" === c ? i = g.format("{0} {1} ''", s, i) : i && u !== t && (l = e.type(u), "string" === l ? (d = "'{1}'", u = u.replace(/'/g, "''"), h === !0 && (s = "tolower(" + s + ")")) : "date" === l ? o ? (d = "{1:yyyy-MM-ddTHH:mm:ss+00:00}", u = g.timezone.apply(u, "Etc/UTC")) : d = "datetime'{1:yyyy-MM-ddTHH:mm:ss}'" : d = "{1}", i.length > 3 ? "substringof" !== i ? d = "{0}({2}," + d + ")" : (d = "{0}(" + d + ",{2})", "doesnotcontain" === c && (o ? (d = "{0}({2},'{1}') eq -1", i = "indexof") : d += " eq false")) : d = "{2} {0} " + d, i = g.format(d, i, u, s))), p.push(i); return i = p.join(" " + f + " "), p.length > 1 && (i = "(" + i + ")"), i } function i(e) { for (var t in e) 0 === t.indexOf("@odata") && delete e[t] } function o() { return Math.floor(65536 * (1 + Math.random())).toString(16).substr(1) } function r(e) { return e + o() + "-" + o() + "-" + o() } function a(e, t) { var n = v + "--" + e; return t && (n += "--"), n } function s(e, t, n, i) { var o = e.options[i].url, r = g.format("{0} ", n); return b(o) ? r + o(t) : r + o } function l(e, t) { var n = ""; return n += a(e, !1), n += v + "Content-Type: application/http", n += v + "Content-Transfer-Encoding: binary", n += v + "Content-ID: " + t } function d(e) { var t = ""; return t += v + "Content-Type: application/json;odata=minimalmetadata", t += v + "Prefer: return=representation", t += _ + g.stringify(e) } function c(e, t, n, i, o, r) { var a, c = ""; for (a = 0; a < e.length; a++)c += l(t, n), c += _ + s(o, e[a], o.options[i].type, i) + " HTTP/1.1", r || (c += d(e[a])), c += v, n++; return c } function u(e, t, n, i, o, r, s) { var l = ""; return l += h(t, n), l += c(e, n, i, r, o, s), l += a(n, !0), l += v } function h(e, t) { var n = ""; return n += "--" + e + v, n += "Content-Type: multipart/mixed; boundary=" + t + v } function p(e, t) { var n = {}, i = r("sf_batch_"), o = "", s = 0, l = e.options.batch.url, d = r("sf_changeset_"); return n.type = e.options.batch.type, n.url = b(l) ? l() : l, n.headers = { "Content-Type": "multipart/mixed; boundary=" + i }, t.updated.length && (o += u(t.updated, i, d, s, e, "update", !1), s += t.updated.length, d = r("sf_changeset_")), t.destroyed.length && (o += u(t.destroyed, i, d, s, e, "destroy", !0), s += t.destroyed.length, d = r("sf_changeset_")), t.created.length && (o += u(t.created, i, d, s, e, "create", !1)), o += a(i, !0), n.data = o, n } function f(e) { var t, n, i, o, r, a, s = e.match(/--changesetresponse_[a-z0-9-]+$/gm), l = 0, d = []; for (d.push({ models: [], passed: !0 }), a = 0; a < s.length; a++)o = s[a], o.lastIndexOf("--", o.length - 1) ? a < s.length - 1 && d.push({ models: [], passed: !0 }) : (l = l ? e.indexOf(o, l + o.length) : e.indexOf(o), t = e.substring(l, e.indexOf("--", l + 1)), n = t.match(/^HTTP\/1\.\d (\d{3}) (.*)$/gm).pop(), i = g.parseFloat(n.match(/\d{3}/g).pop()), i >= 200 && i <= 299 ? (r = t.match(/\{.*\}/gm), r && d[d.length - 1].models.push(JSON.parse(r[0]))) : d[d.length - 1].passed = !1); return d } var g = window.kendo, m = e.extend, v = "\r\n", _ = "\r\n\r\n", b = g.isFunction, w = { eq: "eq", neq: "ne", gt: "gt", gte: "ge", lt: "lt", lte: "le", contains: "substringof", doesnotcontain: "substringof", endswith: "endswith", startswith: "startswith", isnull: "eq", isnotnull: "ne", isnullorempty: "eq", isnotnullorempty: "ne", isempty: "eq", isnotempty: "ne" }, k = m({}, w, { contains: "contains" }), y = { pageSize: e.noop, page: e.noop, filter: function (e, t, i) { t && (t = n(t, i), t && (e.$filter = t)) }, sort: function (t, n) { var i = e.map(n, function (e) { var t = e.field.replace(/\./g, "/"); return "desc" === e.dir && (t += " desc"), t }).join(","); i && (t.$orderby = i) }, skip: function (e, t) { t && (e.$skip = t) }, take: function (e, t) { t && (e.$top = t) } }, x = { read: { dataType: "jsonp" } }; m(!0, g.data, { schemas: { odata: { type: "json", data: function (e) { return e.d.results || [e.d] }, total: "d.__count" } }, transports: { odata: { read: { cache: !0, dataType: "jsonp", jsonp: "$callback" }, update: { cache: !0, dataType: "json", contentType: "application/json", type: "PUT" }, create: { cache: !0, dataType: "json", contentType: "application/json", type: "POST" }, destroy: { cache: !0, dataType: "json", type: "DELETE" }, parameterMap: function (e, t, n) { var i, o, r, a; if (e = e || {}, t = t || "read", a = (this.options || x)[t], a = a ? a.dataType : "json", "read" === t) { i = { $inlinecount: "allpages" }, "json" != a && (i.$format = "json"); for (r in e) y[r] ? y[r](i, e[r], n) : i[r] = e[r] } else { if ("json" !== a) throw Error("Only json dataType can be used for " + t + " operation."); if ("destroy" !== t) { for (r in e) o = e[r], "number" == typeof o && (e[r] = o + ""); i = g.stringify(e) } } return i } } } }), m(!0, g.data, { schemas: { "odata-v4": { type: "json", data: function (t) { if (e.isArray(t)) { for (var n = 0; n < t.length; n++)i(t[n]); return t } return t = e.extend({}, t), i(t), t.value ? t.value : [t] }, total: function (e) { return e["@odata.count"] } } }, transports: { "odata-v4": { batch: { type: "POST" }, read: { cache: !0, dataType: "json" }, update: { cache: !0, dataType: "json", contentType: "application/json;IEEE754Compatible=true", type: "PUT" }, create: { cache: !0, dataType: "json", contentType: "application/json;IEEE754Compatible=true", type: "POST" }, destroy: { cache: !0, dataType: "json", type: "DELETE" }, parameterMap: function (e, t) { var n = g.data.transports.odata.parameterMap(e, t, !0); return "read" == t && (n.$count = !0, delete n.$inlinecount), n }, submit: function (t) { var n = this, i = p(n, t.data), o = t.data; (o.updated.length || o.destroyed.length || o.created.length) && e.ajax(m(!0, {}, { success: function (e) { var n, i = f(e), r = 0; o.updated.length && (n = i[r], n.passed && t.success(n.models.length ? n.models : [], "update"), r++), o.destroyed.length && (n = i[r], n.passed && t.success([], "destroy"), r++), o.created.length && (n = i[r], n.passed && t.success(n.models, "create")) }, error: function (e, n, i) { t.error(e, n, i) } }, i)) } } } }) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.data.xml.min", ["kendo.core.min"], e) }(function () { return function (e, t) { var n = window.kendo, i = e.isArray, o = e.isPlainObject, r = e.map, a = e.each, s = e.extend, l = n.getter, d = n.Class, c = d.extend({ init: function (t) { var l, d, c, u, h = this, p = t.total, f = t.model, g = t.parse, m = t.errors, v = t.serialize, _ = t.data; f && (o(f) && (l = t.modelBase || n.data.Model, f.fields && a(f.fields, function (t, n) { o(n) && n.field ? e.isFunction(n.field) || (n = s(n, { field: h.getter(n.field) })) : n = { field: h.getter(n) }, f.fields[t] = n }), d = f.id, d && (c = {}, c[h.xpathToMember(d, !0)] = { field: h.getter(d) }, f.fields = s(c, f.fields), f.id = h.xpathToMember(d)), f = l.define(f)), h.model = f), p && ("string" == typeof p ? (p = h.getter(p), h.total = function (e) { return parseInt(p(e), 10) }) : "function" == typeof p && (h.total = p)), m && ("string" == typeof m ? (m = h.getter(m), h.errors = function (e) { return m(e) || null }) : "function" == typeof m && (h.errors = m)), _ && ("string" == typeof _ ? (_ = h.xpathToMember(_), h.data = function (e) { var t, n = h.evaluate(e, _); return n = i(n) ? n : [n], h.model && f.fields ? (t = new h.model, r(n, function (e) { if (e) { var n, i = {}; for (n in f.fields) i[n] = t._parse(n, f.fields[n].field(e)); return i } })) : n }) : "function" == typeof _ && (h.data = _)), "function" == typeof g && (u = h.parse, h.parse = function (e) { var t = g.call(h, e); return u.call(h, t) }), "function" == typeof v && (h.serialize = v) }, total: function (e) { return this.data(e).length }, errors: function (e) { return e ? e.errors : null }, serialize: function (e) { return e }, parseDOM: function (e) { var n, o, r, a, s, l, d, c = {}, u = e.attributes, h = u.length; for (d = 0; d < h; d++)l = u[d], c["@" + l.nodeName] = l.nodeValue; for (o = e.firstChild; o; o = o.nextSibling)r = o.nodeType, 3 === r || 4 === r ? c["#text"] = o.nodeValue : 1 === r && (n = this.parseDOM(o), a = o.nodeName, s = c[a], i(s) ? s.push(n) : s = s !== t ? [s, n] : n, c[a] = s); return c }, evaluate: function (e, t) { for (var n, o, r, a, s, l = t.split("."); n = l.shift();)if (e = e[n], i(e)) { for (o = [], t = l.join("."), s = 0, r = e.length; s < r; s++)a = this.evaluate(e[s], t), a = i(a) ? a : [a], o.push.apply(o, a); return o } return e }, parse: function (t) { var n, i, o = {}; return n = t.documentElement || e.parseXML(t).documentElement, i = this.parseDOM(n), o[n.nodeName] = i, o }, xpathToMember: function (e, t) { return e ? (e = e.replace(/^\//, "").replace(/\//g, "."), e.indexOf("@") >= 0 ? e.replace(/\.?(@.*)/, t ? "$1" : '["$1"]') : e.indexOf("text()") >= 0 ? e.replace(/(\.?text\(\))/, t ? "#text" : '["#text"]') : e) : "" }, getter: function (e) { return l(this.xpathToMember(e), !0) } }); e.extend(!0, n.data, { XmlDataReader: c, readers: { xml: c } }) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.data.min", ["kendo.core.min", "kendo.data.odata.min", "kendo.data.xml.min"], e) }(function () { return function (e, t) { function n(e, t, n, i) { return function (o) { var r, a = {}; for (r in o) a[r] = o[r]; a.field = i ? n + "." + o.field : n, t == ze && e._notifyChange && e._notifyChange(a), e.trigger(t, a) } } function i(t, n) { if (t === n) return !0; var o, r = e.type(t), a = e.type(n); if (r !== a) return !1; if ("date" === r) return t.getTime() === n.getTime(); if ("object" !== r && "array" !== r) return !1; for (o in t) if (!i(t[o], n[o])) return !1; return !0 } function o(e, t) { var n, i; for (i in e) { if (n = e[i], ve(n) && n.field && n.field === t) return n; if (n === t) return n } return null } function r(e) { this.data = e || [] } function a(e, n) { if (e) { var i = typeof e === Ae ? { field: e, dir: n } : e, o = be(i) ? i : i !== t ? [i] : []; return we(o, function (e) { return !!e.dir }) } } function s(e, n) { var i, o, r, a = {}; if (e) for (i = typeof e === Ae ? { field: e, dir: n } : e, o = be(i) ? i : i !== t ? [i] : [], r = 0; r < o.length; r++)a[o[r].field] = { dir: o[r].dir, index: r + 1 }; return a } function l(e) { var t, n, i, o, r = e.filters; if (r) for (t = 0, n = r.length; t < n; t++)i = r[t], o = i.operator, o && typeof o === Ae && (i.operator = ie[o.toLowerCase()] || o), l(i) } function d(e) { if (e && !_e(e)) return !be(e) && e.filters || (e = { logic: "and", filters: be(e) ? e : [e] }), l(e), e } function c(e, t) { return !e.logic && !t.logic && (e.field === t.field && e.value === t.value && e.operator === t.operator) } function u(e) { return e = e || {}, _e(e) ? { logic: "and", filters: [] } : d(e) } function h(e, t) { return t.logic || e.field > t.field ? 1 : e.field < t.field ? -1 : 0 } function p(e, t) { var n, i, o, r, a; if (e = u(e), t = u(t), e.logic !== t.logic) return !1; if (o = (e.filters || []).slice(), r = (t.filters || []).slice(), o.length !== r.length) return !1; for (o = o.sort(h), r = r.sort(h), a = 0; a < o.length; a++)if (n = o[a], i = r[a], n.logic && i.logic) { if (!p(n, i)) return !1 } else if (!c(n, i)) return !1; return !0 } function f(e) { return be(e) ? e : [e] } function g(e, n, i, o) { var r = typeof e === Ae ? { field: e, dir: n, compare: i, skipItemSorting: o } : e, a = be(r) ? r : r !== t ? [r] : []; return K(a, function (e) { return { field: e.field, dir: e.dir || "asc", aggregates: e.aggregates, compare: e.compare, skipItemSorting: e.skipItemSorting } }) } function m(e, t, n) { var i, o = g(e, t, n); for (i = 0; i < o.length; i++)delete o[i].compare; return o } function v(e) { var t, n = be(e) ? e : [e]; for (t = 0; t < n.length; t++)if (n[t] && Se(n[t].compare)) return !0; return !1 } function _(e, t) { return e && e.getTime && t && t.getTime ? e.getTime() === t.getTime() : e === t } function b(e, t, n, i, o, r) { var a, s, l, d, c; for (t = t || [], d = t.length, a = 0; a < d; a++)s = t[a], l = s.aggregate, c = s.field, e[c] = e[c] || {}, r[c] = r[c] || {}, r[c][l] = r[c][l] || {}, e[c][l] = oe[l.toLowerCase()](e[c][l], n, Ce.accessor(c), i, o, r[c][l]) } function w(e) { return "number" == typeof e && !isNaN(e) } function k(e) { return e && e.getTime } function y(e) { var t, n = e.length, i = Array(n); for (t = 0; t < n; t++)i[t] = e[t].toJSON(); return i } function x(e, t, n, i, o) { var r, a, s, l, d, c = {}; for (l = 0, d = e.length; l < d; l++) { r = e[l]; for (a in t) s = o[a], s && s !== a && (c[s] || (c[s] = Ce.setter(s)), c[s](r, t[a](r)), delete r[a]) } } function C(e, t, n, i, o) { var r, a, s, l, d; for (l = 0, d = e.length; l < d; l++) { r = e[l]; for (a in t) r[a] = n._parse(a, t[a](r)), s = o[a], s && s !== a && delete r[s] } } function S(e, t, n, i, o) { var r, a, s, l; for (a = 0, l = e.length; a < l; a++)r = e[a], s = i[r.field], s && s != r.field && (r.field = s), r.value = n._parse(r.field, r.value), r.items && (r.hasSubgroups ? S(r.items, t, n, i, o) : C(r.items, t, n, i, o)) } function T(e, t, n, i, o, r) { return function (a) { return a = e(a), D(t, n, i, o, r)(a) } } function D(e, t, n, i, o) { return function (r) { return r && !_e(n) && ("[object Array]" === et.call(r) || r instanceof it || (r = [r]), t(r, n, new e, i, o)), r || [] } } function A(e, t) { var n, i, o; if (t.items && t.items.length) for (o = 0; o < t.items.length; o++)n = e.items[o], i = t.items[o], n && i ? n.hasSubgroups ? A(n, i) : n.field && n.value == i.value ? n.items.push.apply(n.items, i.items) : e.items.push.apply(e.items, [i]) : i && e.items.push.apply(e.items, [i]) } function E(e, t, n, i) { for (var o, r, a, s = 0; t.length && i && (o = t[s], r = o.items, a = r.length, e && e.field === o.field && e.value === o.value ? (e.hasSubgroups && e.items.length ? E(e.items[e.items.length - 1], o.items, n, i) : (r = r.slice(n, n + i), e.items = e.items.concat(r)), t.splice(s--, 1)) : o.hasSubgroups && r.length ? (E(o, r, n, i), o.items.length || t.splice(s--, 1)) : (r = r.slice(n, n + i), o.items = r, o.items.length || t.splice(s--, 1)), 0 === r.length ? n -= a : (n = 0, i -= r.length), !(++s >= t.length));); s < t.length && t.splice(s, t.length - s) } function I(e, t) { var n, i, o, r, a = [], s = (e || []).length, l = Se(t) ? t : function (e, t) { return e[t] }; for (o = 0; o < s; o++)if (n = l(e, o), n.hasSubgroups) a = a.concat(I(n.items)); else for (i = n.items, r = 0; r < i.length; r++)a.push(l(i, r)); return a } function M(e) { var t, n, i, o, r, a = []; for (t = 0, n = e.length; t < n; t++)if (r = e.at(t), r.items) if (r.hasSubgroups) a = a.concat(M(r.items)); else for (i = r.items, o = 0; o < i.length; o++)a.push(i.at(o)); return a } function R(e, t) { var n, i, o; if (t) for (n = 0, i = e.length; n < i; n++)o = e.at(n), o.items && (o.hasSubgroups ? R(o.items, t) : o.items = new Y(o.items, t, o.items._events)) } function F(e, t) { for (var n = 0; n < e.length; n++)if (e[n].hasSubgroups) { if (F(e[n].items, t)) return !0 } else if (t(e[n].items, e[n])) return !0 } function P(e, t, n, i) { for (var o = 0; o < e.length && e[o].data !== t && !z(e[o].data, n, i); o++); } function z(e, t, n) { for (var i = 0, o = e.length; i < o; i++) { if (e[i] && e[i].hasSubgroups) return z(e[i].items, t, n); if (e[i] === t || e[i] === n) return e[i] = n, !0 } } function B(e, n, i, o, r) { var a, s, l, d; for (a = 0, s = e.length; a < s; a++)if (l = e[a], l && !(l instanceof o)) if (l.hasSubgroups === t || r) { for (d = 0; d < n.length; d++)if (n[d] === l) { e[a] = n.at(d), P(i, n, l, e[a]); break } } else B(l.items, n, i, o, r) } function L(e, t) { var n, i, o; if (e) for (n = e.length, o = 0; o < n; o++)if (i = e[o], i.uid && i.uid == t.uid) return e.splice(o, 1), i } function H(e, t) { return t ? O(e, function (e) { return e.uid && e.uid == t.uid || e[t.idField] === t.id && t.id !== t._defaultId }) : -1 } function N(e, t) { return t ? O(e, function (e) { return e.uid == t.uid }) : -1 } function O(e, t) { var n, i; if (e) { for (n = 0, i = e.length; n < i; n++)if (t(e[n])) return n; return -1 } } function V(e, t) { var n, i; return e && !_e(e) ? (n = e[t], i = ve(n) ? n.from || n.field || t : e[t] || t, Se(i) ? t : i) : t } function W(e, t) { var n, i, o, r = {}; for (o in e) "filters" !== o && (r[o] = e[o]); if (e.filters) for (r.filters = [], n = 0, i = e.filters.length; n < i; n++)r.filters[n] = W(e.filters[n], t); else r.field = V(t.fields, r.field); return r } function U(e, t) { var n, i, o, r, a, s = []; for (n = 0, i = e.length; n < i; n++) { o = {}, r = e[n]; for (a in r) o[a] = r[a]; o.field = V(t.fields, o.field), o.aggregates && be(o.aggregates) && (o.aggregates = U(o.aggregates, t)), s.push(o) } return s } function j(t, n) { var i, o, r, a, s, l, d, c, u, h; for (t = e(t)[0], i = t.options, o = n[0], r = n[1], a = [], s = 0, l = i.length; s < l; s++)u = {}, c = i[s], d = c.parentNode, d === t && (d = null), c.disabled || d && d.disabled || (d && (u.optgroup = d.label), u[o.field] = c.text, h = c.attributes.value, h = h && h.specified ? c.value : c.text, u[r.field] = h, a.push(u)); return a } function q(t, n) { var i, o, r, a, s, l, d, c = e(t)[0].tBodies[0], u = c ? c.rows : [], h = n.length, p = []; for (i = 0, o = u.length; i < o; i++) { for (s = {}, d = !0, a = u[i].cells, r = 0; r < h; r++)l = a[r], "th" !== l.nodeName.toLowerCase() && (d = !1, s[n[r].field] = l.innerHTML); d || p.push(s) } return p } function G(e) { return function () { var t = this._data, n = de.fn[e].apply(this, Je.call(arguments)); return this._data != t && this._attachBubbleHandlers(), n } } function $(t, n) { function i(e, t) { return e.filter(t).add(e.find(t)) } var o, r, a, s, l, d, c, u, h = e(t).children(), p = [], f = n[0].field, g = n[1] && n[1].field, m = n[2] && n[2].field, v = n[3] && n[3].field; for (o = 0, r = h.length; o < r; o++)a = { _loaded: !0 }, s = h.eq(o), d = s[0].firstChild, u = s.children(), t = u.filter("ul"), u = u.filter(":not(ul)"), l = s.attr("data-id"), l && (a.id = l), d && (a[f] = 3 == d.nodeType ? d.nodeValue : u.text()), g && (a[g] = i(u, "a").attr("href")), v && (a[v] = i(u, "img").attr("src")), m && (c = i(u, ".k-sprite").prop("className"), a[m] = c && Ce.trim(c.replace("k-sprite", ""))), t.length && (a.items = $(t.eq(0), n)), "true" == s.attr("data-hasChildren") && (a.hasChildren = !0), p.push(a); return p } var K, Y, Q, X, J, Z, ee, te, ne, ie, oe, re, ae, se, le, de, ce, ue, he, pe, fe, ge = e.extend, me = e.proxy, ve = e.isPlainObject, _e = e.isEmptyObject, be = e.isArray, we = e.grep, ke = e.ajax, ye = e.each, xe = e.noop, Ce = window.kendo, Se = Ce.isFunction, Te = Ce.Observable, De = Ce.Class, Ae = "string", Ee = "function", Ie = "asc", Me = "create", Re = "read", Fe = "update", Pe = "destroy", ze = "change", Be = "sync", Le = "get", He = "error", Ne = "requestStart", Oe = "progress", Ve = "requestEnd", We = [Me, Re, Fe, Pe], Ue = function (e) { return e }, je = Ce.getter, qe = Ce.stringify, Ge = Math, $e = [].push, Ke = [].join, Ye = [].pop, Qe = [].splice, Xe = [].shift, Je = [].slice, Ze = [].unshift, et = {}.toString, tt = Ce.support.stableSort, nt = /^\/Date\((.*?)\)\/$/, it = Te.extend({ init: function (e, t) { var n = this; n.type = t || Q, Te.fn.init.call(n), n.length = e.length, n.wrapAll(e, n) }, at: function (e) { return this[e] }, toJSON: function (e) { var t, n, i = this.length, o = Array(i); for (t = 0; t < i; t++)n = this[t], n instanceof Q && (n = n.toJSON(e)), o[t] = n; return o }, parent: xe, wrapAll: function (e, t) { var n, i, o = this, r = function () { return o }; for (t = t || [], n = 0, i = e.length; n < i; n++)t[n] = o.wrap(e[n], r); return t }, wrap: function (e, t) { var n, i = this; return null !== e && "[object Object]" === et.call(e) && (n = e instanceof i.type || e instanceof Z, n || (e = e instanceof Q ? e.toJSON() : e, e = new i.type(e)), e.parent = t, e.bind(ze, function (e) { i.trigger(ze, { field: e.field, node: e.node, index: e.index, items: e.items || [this], action: e.node ? e.action || "itemloaded" : "itemchange" }) })), e }, push: function () { var e, t = this.length, n = this.wrapAll(arguments); return e = $e.apply(this, n), this.omitChangeEvent || this.trigger(ze, { action: "add", index: t, items: n }), e }, slice: Je, sort: [].sort, join: Ke, pop: function () { var e = this.length, t = Ye.apply(this); return e && this.trigger(ze, { action: "remove", index: e - 1, items: [t] }), t }, splice: function (e, t, n) { var i, o, r, a = this.wrapAll(Je.call(arguments, 2)); if (i = Qe.apply(this, [e, t].concat(a)), i.length) for (this.trigger(ze, { action: "remove", index: e, items: i }), o = 0, r = i.length; o < r; o++)i[o] && i[o].children && i[o].unbind(ze); return n && this.trigger(ze, { action: "add", index: e, items: a }), i }, shift: function () { var e = this.length, t = Xe.apply(this); return e && this.trigger(ze, { action: "remove", index: 0, items: [t] }), t }, unshift: function () { var e, t = this.wrapAll(arguments); return e = Ze.apply(this, t), this.trigger(ze, { action: "add", index: 0, items: t }), e }, indexOf: function (e) { var t, n, i = this; for (t = 0, n = i.length; t < n; t++)if (i[t] === e) return t; return -1 }, forEach: function (e, t) { for (var n = 0, i = this.length, o = t || window; n < i; n++)e.call(o, this[n], n, this) }, map: function (e, t) { for (var n = 0, i = [], o = this.length, r = t || window; n < o; n++)i[n] = e.call(r, this[n], n, this); return i }, reduce: function (e) { var t, n = 0, i = this.length; for (2 == arguments.length ? t = arguments[1] : n < i && (t = this[n++]); n < i; n++)t = e(t, this[n], n, this); return t }, reduceRight: function (e) { var t, n = this.length - 1; for (2 == arguments.length ? t = arguments[1] : n > 0 && (t = this[n--]); n >= 0; n--)t = e(t, this[n], n, this); return t }, filter: function (e, t) { for (var n, i = 0, o = [], r = this.length, a = t || window; i < r; i++)n = this[i], e.call(a, n, i, this) && (o[o.length] = n); return o }, find: function (e, t) { for (var n, i = 0, o = this.length, r = t || window; i < o; i++)if (n = this[i], e.call(r, n, i, this)) return n }, every: function (e, t) { for (var n, i = 0, o = this.length, r = t || window; i < o; i++)if (n = this[i], !e.call(r, n, i, this)) return !1; return !0 }, some: function (e, t) { for (var n, i = 0, o = this.length, r = t || window; i < o; i++)if (n = this[i], e.call(r, n, i, this)) return !0; return !1 }, remove: function (e) { var t = this.indexOf(e); t !== -1 && this.splice(t, 1) }, empty: function () { this.splice(0, this.length) } }); "undefined" != typeof Symbol && Symbol.iterator && !it.prototype[Symbol.iterator] && (it.prototype[Symbol.iterator] = [][Symbol.iterator]), Y = it.extend({ init: function (e, t, n) { Te.fn.init.call(this), this.type = t || Q, n && (this._events = n); for (var i = 0; i < e.length; i++)this[i] = e[i]; this.length = i, this._parent = me(function () { return this }, this) }, at: function (e) { var t = this[e]; return t instanceof this.type ? t.parent = this._parent : t = this[e] = this.wrap(t, this._parent), t } }), Q = Te.extend({ init: function (e) { var t, n, i = this, o = function () { return i }; Te.fn.init.call(this), this._handlers = {}; for (n in e) t = e[n], "object" == typeof t && t && !t.getTime && "_" != n.charAt(0) && (t = i.wrap(t, n, o)), i[n] = t; i.uid = Ce.guid() }, shouldSerialize: function (e, t) { return this.hasOwnProperty(e) && "_handlers" !== e && "_events" !== e && (t && t[e] || typeof this[e] !== Ee) && "uid" !== e }, forEach: function (e) { for (var t in this) this.shouldSerialize(t) && e(this[t], t) }, toJSON: function (e) { var t, n, i = {}; for (n in this) this.shouldSerialize(n, e) && (t = this[n], (t instanceof Q || t instanceof it) && (t = t.toJSON(e)), i[n] = t); return i }, get: function (e) { var t, n = this; return n.trigger(Le, { field: e }), t = "this" === e ? n : Ce.getter(e, !0)(n) }, _set: function (e, t) { var n, i, o, r = this, a = e.indexOf(".") >= 0; if (a) for (n = e.split("."), i = ""; n.length > 1;) { if (i += n.shift(), o = Ce.getter(i, !0)(r), o instanceof Q) return o.set(n.join("."), t), a; i += "." } return Ce.setter(e)(r, t), a }, set: function (e, t) { var n = this, i = !1, o = e.indexOf(".") >= 0, r = Ce.getter(e, !0)(n); return r !== t && (r instanceof Te && this._handlers[e] && (this._handlers[e].get && r.unbind(Le, this._handlers[e].get), r.unbind(ze, this._handlers[e].change)), i = n.trigger("set", { field: e, value: t }), i || (o || (t = n.wrap(t, e, function () { return n })), (!n._set(e, t) || e.indexOf("(") >= 0 || e.indexOf("[") >= 0) && n.trigger(ze, { field: e }))), i }, parent: xe, wrap: function (e, t, i) { var o, r, a, s, l = this, d = et.call(e); return null == e || "[object Object]" !== d && "[object Array]" !== d || (a = e instanceof it, s = e instanceof de, "[object Object]" !== d || s || a ? ("[object Array]" === d || a || s) && (a || s || (e = new it(e)), r = n(l, ze, t, !1), e.bind(ze, r), l._handlers[t] = { change: r }) : (e instanceof Q || (e = new Q(e)), o = n(l, Le, t, !0), e.bind(Le, o), r = n(l, ze, t, !0), e.bind(ze, r), l._handlers[t] = { get: o, change: r }), e.parent = i), e } }), X = { number: function (e) { return typeof e === Ae && "null" === e.toLowerCase() ? null : Ce.parseFloat(e) }, date: function (e) { return typeof e === Ae && "null" === e.toLowerCase() ? null : Ce.parseDate(e) }, "boolean": function (e) { return typeof e === Ae ? "null" === e.toLowerCase() ? null : "true" === e.toLowerCase() : null != e ? !!e : e }, string: function (e) { return typeof e === Ae && "null" === e.toLowerCase() ? null : null != e ? e + "" : e }, "default": function (e) { return e } }, J = { string: "", number: 0, date: new Date, "boolean": !1, "default": "" }, Z = Q.extend({ init: function (n) { var i, o, r = this; if ((!n || e.isEmptyObject(n)) && (n = e.extend({}, r.defaults, n), r._initializers)) for (i = 0; i < r._initializers.length; i++)o = r._initializers[i], n[o] = r.defaults[o](); Q.fn.init.call(r, n), r.dirty = !1, r.dirtyFields = {}, r.idField && (r.id = r.get(r.idField), r.id === t && (r.id = r._defaultId)) }, shouldSerialize: function (e) { return Q.fn.shouldSerialize.call(this, e) && "uid" !== e && !("id" !== this.idField && "id" === e) && "dirty" !== e && "dirtyFields" !== e && "_accessors" !== e }, _parse: function (e, t) { var n, i = this, r = e, a = i.fields || {}; return e = a[e], e || (e = o(a, r)), e && (n = e.parse, !n && e.type && (n = X[e.type.toLowerCase()])), n ? n(t) : t }, _notifyChange: function (e) { var t = e.action; "add" != t && "remove" != t || (this.dirty = !0, this.dirtyFields[e.field] = !0) }, editable: function (e) { return e = (this.fields || {})[e], !e || e.editable !== !1 }, set: function (e, t) { var n = this, o = n.dirty; n.editable(e) && (t = n._parse(e, t), i(t, n.get(e)) ? n.trigger("equalSet", { field: e, value: t }) : (n.dirty = !0, n.dirtyFields[e] = !0, Q.fn.set.call(n, e, t) && !o && (n.dirty = o, n.dirty || (n.dirtyFields[e] = !1)))) }, accept: function (e) { var t, n, i = this, o = function () { return i }; for (t in e) n = e[t], "_" != t.charAt(0) && (n = i.wrap(e[t], t, o)), i._set(t, n); i.idField && (i.id = i.get(i.idField)), i.dirty = !1, i.dirtyFields = {} }, isNew: function () { return this.id === this._defaultId } }), Z.define = function (e, n) { n === t && (n = e, e = Z); var i, o, r, a, s, l, d, c, u = ge({ defaults: {} }, n), h = {}, p = u.id, f = []; if (p && (u.idField = p), u.id && delete u.id, p && (u.defaults[p] = u._defaultId = ""), "[object Array]" === et.call(u.fields)) { for (l = 0, d = u.fields.length; l < d; l++)r = u.fields[l], typeof r === Ae ? h[r] = {} : r.field && (h[r.field] = r); u.fields = h } for (o in u.fields) r = u.fields[o], a = r.type || "default", s = null, c = o, o = typeof r.field === Ae ? r.field : o, r.nullable || (s = u.defaults[c !== o ? c : o] = r.defaultValue !== t ? r.defaultValue : J[a.toLowerCase()], "function" == typeof s && f.push(o)), n.id === o && (u._defaultId = s), u.defaults[c !== o ? c : o] = s, r.parse = r.parse || X[a]; return f.length > 0 && (u._initializers = f), i = e.extend(u), i.define = function (e) { return Z.define(i, e) }, u.fields && (i.fields = u.fields, i.idField = u.idField), i }, ee = { selector: function (e) { return Se(e) ? e : je(e) }, compare: function (e) { var t = this.selector(e); return function (e, n) { return e = t(e), n = t(n), null == e && null == n ? 0 : null == e ? -1 : null == n ? 1 : e.localeCompare ? e.localeCompare(n) : e > n ? 1 : e < n ? -1 : 0 } }, create: function (e) { var t = e.compare || this.compare(e.field); return "desc" == e.dir ? function (e, n) { return t(n, e, !0) } : t }, combine: function (e) { return function (t, n) { var i, o, r = e[0](t, n); for (i = 1, o = e.length; i < o; i++)r = r || e[i](t, n); return r } } }, te = ge({}, ee, { asc: function (e) { var t = this.selector(e); return function (e, n) { var i = t(e), o = t(n); return i && i.getTime && o && o.getTime && (i = i.getTime(), o = o.getTime()), i === o ? e.__position - n.__position : null == i ? -1 : null == o ? 1 : i.localeCompare ? i.localeCompare(o) : i > o ? 1 : -1 } }, desc: function (e) { var t = this.selector(e); return function (e, n) { var i = t(e), o = t(n); return i && i.getTime && o && o.getTime && (i = i.getTime(), o = o.getTime()), i === o ? e.__position - n.__position : null == i ? 1 : null == o ? -1 : o.localeCompare ? o.localeCompare(i) : i < o ? 1 : -1 } }, create: function (e) { return this[e.dir](e.field) } }), K = function (e, t) { var n, i = e.length, o = Array(i); for (n = 0; n < i; n++)o[n] = t(e[n], n, e); return o }, ne = function () { function e(e) { return "string" == typeof e && (e = e.replace(/[\r\n]+/g, "")), JSON.stringify(e) } function t(t) { return function (n, i, o, r) { return i += "", o && (n = "(" + n + " + '').toString()" + (r ? ".toLocaleLowerCase('" + r + "')" : ".toLowerCase()"), i = r ? i.toLocaleLowerCase(r) : i.toLowerCase()), t(n, e(i), o) } } function n(t, n, i, o, r) { if (null != i) { if (typeof i === Ae) { var a = nt.exec(i); a ? i = new Date((+a[1])) : o ? (i = e(r ? i.toLocaleLowerCase(r) : i.toLowerCase()), n = "((" + n + " || '')+'')" + (r ? ".toLocaleLowerCase('" + r + "')" : ".toLowerCase()")) : i = e(i) } i.getTime && (n = "(" + n + "&&" + n + ".getTime?" + n + ".getTime():" + n + ")", i = i.getTime()) } return n + " " + t + " " + i } function i(e) { var t, n, i, o; for (t = "/^", n = !1, i = 0; i < e.length; ++i) { if (o = e.charAt(i), n) t += "\\" + o; else { if ("~" == o) { n = !0; continue } t += "*" == o ? ".*" : "?" == o ? "." : ".+^$()[]{}|\\/\n\r\u2028\u2029Â ".indexOf(o) >= 0 ? "\\" + o : o } n = !1 } return t + "$/" } return { quote: function (t) { return t && t.getTime ? "new Date(" + t.getTime() + ")" : e(t) }, eq: function (e, t, i, o) { return n("==", e, t, i, o) }, neq: function (e, t, i, o) { return n("!=", e, t, i, o) }, gt: function (e, t, i) { return n(">", e, t, i) }, gte: function (e, t, i) { return n(">=", e, t, i) }, lt: function (e, t, i) { return n("<", e, t, i) }, lte: function (e, t, i) { return n("<=", e, t, i) }, startswith: t(function (e, t) { return e + ".lastIndexOf(" + t + ", 0) == 0" }), doesnotstartwith: t(function (e, t) { return e + ".lastIndexOf(" + t + ", 0) == -1" }), endswith: t(function (e, t) { var n = t ? t.length - 2 : 0; return e + ".indexOf(" + t + ", " + e + ".length - " + n + ") >= 0" }), doesnotendwith: t(function (e, t) { var n = t ? t.length - 2 : 0; return e + ".indexOf(" + t + ", " + e + ".length - " + n + ") < 0" }), contains: t(function (e, t) { return e + ".indexOf(" + t + ") >= 0" }), doesnotcontain: t(function (e, t) { return e + ".indexOf(" + t + ") == -1" }), matches: t(function (e, t) { return t = t.substring(1, t.length - 1), i(t) + ".test(" + e + ")" }), doesnotmatch: t(function (e, t) { return t = t.substring(1, t.length - 1), "!" + i(t) + ".test(" + e + ")" }), isempty: function (e) { return e + " === ''" }, isnotempty: function (e) { return e + " !== ''" }, isnull: function (e) { return "(" + e + " == null)" }, isnotnull: function (e) { return "(" + e + " != null)" }, isnullorempty: function (e) { return "(" + e + " === null) || (" + e + " === '')" }, isnotnullorempty: function (e) { return "(" + e + " !== null) && (" + e + " !== '')" } } }(), r.filterExpr = function (e) { var n, i, o, a, s, l, d = [], c = { and: " && ", or: " || " }, u = [], h = [], p = e.filters; for (n = 0, i = p.length; n < i; n++)o = p[n], s = o.field, l = o.operator, o.filters ? (a = r.filterExpr(o), o = a.expression.replace(/__o\[(\d+)\]/g, function (e, t) { return t = +t, "__o[" + (h.length + t) + "]" }).replace(/__f\[(\d+)\]/g, function (e, t) { return t = +t, "__f[" + (u.length + t) + "]" }), h.push.apply(h, a.operators), u.push.apply(u, a.fields)) : (typeof s === Ee ? (a = "__f[" + u.length + "](d)", u.push(s)) : a = Ce.expr(s), typeof l === Ee ? (o = "__o[" + h.length + "](" + a + ", " + ne.quote(o.value) + ")", h.push(l)) : o = ne[(l || "eq").toLowerCase()](a, o.value, o.ignoreCase === t || o.ignoreCase, e.accentFoldingFiltering)), d.push(o); return { expression: "(" + d.join(c[e.logic]) + ")", fields: u, operators: h } }, ie = { "==": "eq", equals: "eq", isequalto: "eq", equalto: "eq", equal: "eq", "!=": "neq", ne: "neq", notequals: "neq", isnotequalto: "neq", notequalto: "neq", notequal: "neq", "<": "lt", islessthan: "lt", lessthan: "lt", less: "lt", "<=": "lte", le: "lte", islessthanorequalto: "lte", lessthanequal: "lte", ">": "gt", isgreaterthan: "gt", greaterthan: "gt", greater: "gt", ">=": "gte", isgreaterthanorequalto: "gte", greaterthanequal: "gte", ge: "gte", notsubstringof: "doesnotcontain", isnull: "isnull", isempty: "isempty", isnotempty: "isnotempty" }, r.normalizeFilter = d, r.compareFilters = p, r.prototype = { toArray: function () { return this.data }, range: function (e, t) { return new r(this.data.slice(e, e + t)) }, skip: function (e) { return new r(this.data.slice(e)) }, take: function (e) { return new r(this.data.slice(0, e)) }, select: function (e) { return new r(K(this.data, e)) }, order: function (e, t, n) { var i = { dir: t }; return e && (e.compare ? i.compare = e.compare : i.field = e), new r(n ? this.data.sort(ee.create(i)) : this.data.slice(0).sort(ee.create(i))) }, orderBy: function (e, t) { return this.order(e, "asc", t) }, orderByDescending: function (e, t) { return this.order(e, "desc", t) }, sort: function (e, t, n, i) { var o, r, s = a(e, t), l = []; if (n = n || ee, s.length) { for (o = 0, r = s.length; o < r; o++)l.push(n.create(s[o])); return this.orderBy({ compare: n.combine(l) }, i) } return this }, filter: function (e) { var t, n, i, o, a, s, l, c, u = this.data, h = []; if (e = d(e), !e || 0 === e.filters.length) return this; for (o = r.filterExpr(e), s = o.fields, l = o.operators, a = c = Function("d, __f, __o", "return " + o.expression), (s.length || l.length) && (c = function (e) { return a(e, s, l) }), t = 0, i = u.length; t < i; t++)n = u[t], c(n) && h.push(n); return new r(h) }, group: function (e, t, n) { e = g(e || []), t = t || this.data; var i, o = this, a = new r(o.data); return e.length > 0 && (i = e[0], a = n && n.groupPaging ? new r(t).groupAllData(i, t).select(function (o) { var a = new r(t).filter([{ field: o.field, operator: "eq", value: o.value, ignoreCase: !1 }]), s = e.length > 1 ? new r(o.items).group(e.slice(1), a.toArray(), n).toArray() : o.items; return { field: o.field, value: o.value, hasSubgroups: e.length > 1, items: s, aggregates: a.aggregate(i.aggregates), uid: Ce.guid(), itemCount: s.length, subgroupCount: s.length } }) : a.groupBy(i).select(function (n) { var o = new r(t).filter([{ field: n.field, operator: "eq", value: n.value, ignoreCase: !1 }]); return { field: n.field, value: n.value, items: e.length > 1 ? new r(n.items).group(e.slice(1), o.toArray()).toArray() : n.items, hasSubgroups: e.length > 1, aggregates: o.aggregate(i.aggregates) } })), a }, groupBy: function (e) { var t, n, i, o, a, s, l, d, c, u, h = this; if (_e(e) || !this.data.length) return new r([]); for (t = e.field, n = e.skipItemSorting ? this.data : this._sortForGrouping(t, e.dir || "asc"), i = Ce.accessor(t), a = i.get(n[0], t), s = { field: t, value: a, items: [] }, u = [s], d = 0, c = n.length; d < c; d++)o = n[d], l = i.get(o, t), _(a, l) || (a = l, s = { field: t, value: a, items: [] }, u.push(s)), s.items.push(o); return u = h._sortGroups(u, e), new r(u) }, groupAllData: function (e, t) { if (_e(e) || this.data && !this.data.length) return new r([]); var n, i, o, a, s = e.field, l = e.skipItemSorting ? t : new r(t).sort(s, e.dir || "asc", te).toArray(), d = Ce.accessor(s), c = d.get(l[0], s), u = { field: s, value: c, items: [] }, h = [u]; for (o = 0, a = l.length; o < a; o++)n = l[o], i = d.get(n, s), _(c, i) || (c = i, u = { field: s, value: c, items: [] }, h.push(u)), u.items.push(n); return h = this._sortGroups(h, e), new r(h) }, _sortForGrouping: function (e, t) { var n, i, o = this.data; if (!tt) { for (n = 0, i = o.length; n < i; n++)o[n].__position = n; for (o = new r(o).sort(e, t, te).toArray(), n = 0, i = o.length; n < i; n++)delete o[n].__position; return o } return this.sort(e, t).toArray() }, _sortGroups: function (e, t) { var n = e; return t && Se(t.compare) && (n = new r(n).order({ compare: t.compare }, t.dir || Ie).toArray()), n }, aggregate: function (e) { var t, n, i = {}, o = {}; if (e && e.length) for (t = 0, n = this.data.length; t < n; t++)b(i, e, this.data[t], t, n, o); return i } }, oe = { sum: function (e, t, n) { var i = n.get(t); return w(e) ? w(i) && (e += i) : e = i, e }, count: function (e) { return (e || 0) + 1 }, average: function (e, n, i, o, r, a) { var s = i.get(n); return a.count === t && (a.count = 0), w(e) ? w(s) && (e += s) : e = s, w(s) && a.count++, o == r - 1 && w(e) && (e /= a.count), e }, max: function (e, t, n) { var i = n.get(t); return w(e) || k(e) || (e = i), e < i && (w(i) || k(i)) && (e = i), e }, min: function (e, t, n) { var i = n.get(t); return w(e) || k(e) || (e = i), e > i && (w(i) || k(i)) && (e = i), e } }, r.normalizeGroup = g, r.normalizeSort = a, r.process = function (e, n, i) { var o, s, l, d, c, u, h, p, f, _, b, w; return n = n || {}, o = n.group, s = v(g(o || [])), l = new r(e), d = m(o || []), c = a(n.sort || []), u = s ? c : d.concat(c), f = n.filterCallback, _ = n.filter, b = n.skip, w = n.take, u && i && (l = l.sort(u, t, t, i)), _ && (l = l.filter(_), f && (l = f(l)), p = l.toArray().length), u && (i || (l = l.sort(u)), o && (e = l.toArray())), s ? (l = l.group(o, e), b !== t && w !== t && (l = new r(I(l.toArray())).range(b, w), h = K(d, function (e) { return ge({}, e, { skipItemSorting: !0 }) }), l = l.group(h, e))) : (b !== t && w !== t && (l = l.range(b, w)), o && (l = l.group(o, e, n))), { total: p, data: l.toArray() } }, re = De.extend({ init: function (e) { this.data = e.data }, read: function (e) { e.success(this.data) }, update: function (e) { e.success(e.data) }, create: function (e) { e.success(e.data) }, destroy: function (e) { e.success(e.data) } }), ae = De.extend({ init: function (e) { var t, n = this; e = n.options = ge({}, n.options, e), ye(We, function (t, n) { typeof e[n] === Ae && (e[n] = { url: e[n] }) }), n.cache = e.cache ? se.create(e.cache) : { find: xe, add: xe }, t = e.parameterMap, e.submit && (n.submit = e.submit), Se(e.push) && (n.push = e.push), n.push || (n.push = Ue), n.parameterMap = Se(t) ? t : function (e) { var n = {}; return ye(e, function (e, i) { e in t && (e = t[e], ve(e) && (i = e.value(i), e = e.key)), n[e] = i }), n } }, options: { parameterMap: Ue }, create: function (e) { return ke(this.setup(e, Me)) }, read: function (n) { var i, o, r, a = this, s = a.cache; n = a.setup(n, Re), i = n.success || xe, o = n.error || xe, r = s.find(n.data), r !== t ? i(r) : (n.success = function (e) { s.add(n.data, e), i(e) }, e.ajax(n)) }, update: function (e) { return ke(this.setup(e, Fe)) }, destroy: function (e) { return ke(this.setup(e, Pe)) }, setup: function (e, t) { e = e || {}; var n, i = this, o = i.options[t], r = Se(o.data) ? o.data(e.data) : o.data; return e = ge(!0, {}, o, e), n = ge(!0, {}, r, e.data), e.data = i.parameterMap(n, t), Se(e.url) && (e.url = e.url(n)), e } }), se = De.extend({ init: function () { this._store = {} }, add: function (e, n) { e !== t && (this._store[qe(e)] = n) }, find: function (e) { return this._store[qe(e)] }, clear: function () { this._store = {} }, remove: function (e) { delete this._store[qe(e)] } }), se.create = function (e) { var t = { inmemory: function () { return new se } }; return ve(e) && Se(e.find) ? e : e === !0 ? new se : t[e]() }, le = De.extend({ init: function (e) { var t, n, i, o, r, a, s, l, d, c, u, h, p, f, g = this; e = e || {}; for (t in e) n = e[t], g[t] = typeof n === Ae ? je(n) : n; o = e.modelBase || Z, ve(g.model) && (g.model = i = o.define(g.model)), r = me(g.data, g), g._dataAccessFunction = r, g.model && (a = me(g.groups, g), s = me(g.serialize, g), l = {}, d = {}, c = {}, u = {}, h = !1, i = g.model, i.fields && (ye(i.fields, function (e, t) { var n; p = e, ve(t) && t.field ? p = t.field : typeof t === Ae && (p = t), ve(t) && t.from && (n = t.from), h = h || n && n !== e || p !== e, f = n || p, d[e] = f.indexOf(".") !== -1 ? je(f, !0) : je(f), c[e] = je(e), l[n || p] = e, u[e] = n || p }), !e.serialize && h && (g.serialize = T(s, i, x, c, l, u))), g._dataAccessFunction = r, g._wrapDataAccessBase = D(i, C, d, l, u), g.data = T(r, i, C, d, l, u), g.groups = T(a, i, S, d, l, u)) }, errors: function (e) { return e ? e.errors : null }, parse: Ue, data: Ue, total: function (e) { return e.length }, groups: Ue, aggregates: function () { return {} }, serialize: function (e) { return e } }), de = Te.extend({ init: function (e) { var n, i, o, r = this; e && (i = e.data), e = r.options = ge({}, r.options, e), r._map = {}, r._prefetch = {}, r._data = [], r._pristineData = [], r._ranges = [], r._view = [], r._pristineTotal = 0, r._destroyed = [], r._pageSize = e.pageSize, r._page = e.page || (e.pageSize ? 1 : t), r._sort = a(e.sort), r._filter = d(e.filter), r._group = g(e.group), r._aggregate = e.aggregate, r._total = e.total, r._groupPaging = e.groupPaging, r._groupPaging && (r._groupsState = {}), r._shouldDetachObservableParents = !0, Te.fn.init.call(r), r.transport = ce.create(e, i, r), Se(r.transport.push) && r.transport.push({ pushCreate: me(r._pushCreate, r), pushUpdate: me(r._pushUpdate, r), pushDestroy: me(r._pushDestroy, r) }), null != e.offlineStorage && ("string" == typeof e.offlineStorage ? (o = e.offlineStorage, r._storage = { getItem: function () { return JSON.parse(localStorage.getItem(o)) }, setItem: function (e) { localStorage.setItem(o, qe(r.reader.serialize(e))) } }) : r._storage = e.offlineStorage), r.reader = new Ce.data.readers[e.schema.type || "json"](e.schema), n = r.reader.model || {}, r._detachObservableParents(), r._data = r._observe(r._data), r._online = !0, r.bind(["push", He, ze, Ne, Be, Ve, Oe], e) }, options: { data: null, schema: { modelBase: Z }, offlineStorage: null, serverSorting: !1, serverPaging: !1, serverFiltering: !1, serverGrouping: !1, serverAggregates: !1, batch: !1, inPlaceSort: !1 }, clone: function () { return this }, online: function (n) { return n !== t ? this._online != n && (this._online = n, n) ? this.sync() : e.Deferred().resolve().promise() : this._online }, offlineData: function (e) { return null == this.options.offlineStorage ? null : e !== t ? this._storage.setItem(e) : this._storage.getItem() || [] }, _isServerGrouped: function () { var e = this.group() || []; return this.options.serverGrouping && e.length }, _isServerGroupPaged: function () { return this._isServerGrouped() && this._groupPaging }, _isGroupPaged: function () { var e = this.group() || []; return this._groupPaging && e.length }, _pushCreate: function (e) { this._push(e, "pushCreate") }, _pushUpdate: function (e) { this._push(e, "pushUpdate") }, _pushDestroy: function (e) { this._push(e, "pushDestroy") }, _push: function (e, t) { var n = this._readData(e); n || (n = e), this[t](n) }, _flatData: function (e, t) { if (e) { if (this._isServerGrouped()) return M(e); if (!t) for (var n = 0; n < e.length; n++)e.at(n) } return e }, parent: xe, get: function (e) { var t, n, i = this._flatData(this._data, this.options.useRanges); for (t = 0, n = i.length; t < n; t++)if (i[t].id == e) return i[t] }, getByUid: function (e) { return this._getByUid(e, this._data) }, _getByUid: function (e, t) { var n, i, o = this._flatData(t, this.options.useRanges); if (o) for (n = 0, i = o.length; n < i; n++)if (o[n].uid == e) return o[n] }, indexOf: function (e) { return N(this._data, e) }, at: function (e) { return this._data.at(e) }, data: function (e) { var n, i = this; if (e === t) { if (i._data) for (n = 0; n < i._data.length; n++)i._data.at(n); return i._data } i._detachObservableParents(), i._data = this._observe(e), i._pristineData = e.slice(0), i._storeData(), i._ranges = [], i.trigger("reset"), i._addRange(i._data), i._total = i._data.length, i._pristineTotal = i._total, i._process(i._data) }, view: function (e) { return e === t ? this._view : (this._view = this._observeView(e), t) }, _observeView: function (e) { var t, n = this; return B(e, n._data, n._ranges, n.reader.model || Q, n._isServerGrouped()), t = new Y(e, n.reader.model), t.parent = function () { return n.parent() }, t }, flatView: function () { var e = this.group() || []; return e.length ? M(this._view) : this._view }, add: function (e) { return this.insert(this._data.length, e) }, _createNewModel: function (e) { return this.reader.model ? new this.reader.model(e) : e instanceof Q ? e : new Q(e) }, insert: function (e, t) { return t || (t = e, e = 0), t instanceof Z || (t = this._createNewModel(t)), this._isServerGrouped() ? this._data.splice(e, 0, this._wrapInEmptyGroup(t)) : this._data.splice(e, 0, t), this._insertModelInRange(e, t), t }, pushInsert: function (t, n) { var i, o, r, a, s, l, d = this, c = d._getCurrentRangeSpan(); n || (n = t, t = 0), be(n) || (n = [n]), i = [], o = this.options.autoSync, this.options.autoSync = !1; try { for (r = 0; r < n.length; r++)a = n[r], s = this.insert(t, a), i.push(s), l = s.toJSON(), this._isServerGrouped() && (l = this._wrapInEmptyGroup(l)), this._pristineData.push(l), c && c.length && e(c).last()[0].pristineData.push(l), t++ } finally { this.options.autoSync = o } i.length && this.trigger("push", { type: "create", items: i }) }, pushCreate: function (e) { this.pushInsert(this._data.length, e) }, pushUpdate: function (e) { var t, n, i, o, r; for (be(e) || (e = [e]), t = [], n = 0; n < e.length; n++)i = e[n], o = this._createNewModel(i), r = this.get(o.id), r ? (t.push(r), r.accept(i), r.trigger(ze), this._updatePristineForModel(r, i)) : this.pushCreate(i); t.length && this.trigger("push", { type: "update", items: t }) }, pushDestroy: function (e) { var t = this._removeItems(e); t.length && this.trigger("push", { type: "destroy", items: t }) }, _removeItems: function (e, n) { var i, o, r, a, s, l, d; be(e) || (e = [e]), i = t === n || n, o = [], r = this.options.autoSync, this.options.autoSync = !1; try { for (a = 0; a < e.length; a++)s = e[a], l = this._createNewModel(s), d = !1, this._eachItem(this._data, function (e) { var t, n; for (t = 0; t < e.length; t++)if (n = e.at(t), n.id === l.id) { o.push(n), e.splice(t, 1), d = !0; break } }), d && i && (this._removePristineForModel(l), this._destroyed.pop()) } finally { this.options.autoSync = r } return o }, remove: function (e) { var t, n = this, i = n._isServerGrouped(); return this._eachItem(n._data, function (o) { if (t = L(o, e), t && i) return t.isNew && t.isNew() || n._destroyed.push(t), !0 }), this._removeModelFromRanges(e), e }, destroyed: function () { return this._destroyed }, created: function () { var e, t, n = [], i = this._flatData(this._data, this.options.useRanges); for (e = 0, t = i.length; e < t; e++)i[e].isNew && i[e].isNew() && n.push(i[e]); return n }, updated: function () { var e, t, n = [], i = this._flatData(this._data, this.options.useRanges); for (e = 0, t = i.length; e < t; e++)i[e].isNew && !i[e].isNew() && i[e].dirty && n.push(i[e]); return n }, sync: function () { var t, n = this, i = [], o = [], r = n._destroyed, a = e.Deferred().resolve().promise(); if (n.online()) { if (!n.reader.model) return a; i = n.created(), o = n.updated(), t = [], n.options.batch && n.transport.submit ? t = n._sendSubmit(i, o, r) : (t.push.apply(t, n._send("create", i)), t.push.apply(t, n._send("update", o)), t.push.apply(t, n._send("destroy", r))), a = e.when.apply(null, t).then(function () { var e, t; for (e = 0, t = arguments.length; e < t; e++)arguments[e] && n._accept(arguments[e]); n._storeData(!0), n._syncEnd(), n._change({ action: "sync" }), n.trigger(Be), n._isServerGroupPaged() && n.read() }) } else n._storeData(!0), n._syncEnd(), n._change({ action: "sync" }); return a }, _syncEnd: xe, cancelChanges: function (e) { var t = this; e instanceof Ce.data.Model ? t._cancelModel(e) : (t._destroyed = [], t._detachObservableParents(), t._data = t._observe(t._pristineData), t.options.serverPaging && (t._total = t._pristineTotal), t._ranges = [], t._addRange(t._data, 0), t._changesCanceled(), t._change(), t._markOfflineUpdatesAsDirty(), t._isServerGrouped() && t.read()) }, _changesCanceled: xe, _markOfflineUpdatesAsDirty: function () { var e = this; null != e.options.offlineStorage && e._eachItem(e._data, function (e) { var t, n; for (t = 0; t < e.length; t++)n = e.at(t), "update" != n.__state__ && "create" != n.__state__ || (n.dirty = !0) }) }, hasChanges: function () { var e, t, n = this._flatData(this._data, this.options.useRanges); if (this._destroyed.length) return !0; for (e = 0, t = n.length; e < t; e++)if (n[e].isNew && n[e].isNew() || n[e].dirty) return !0; return !1 }, _accept: function (t) { var n, i = this, o = t.models, r = t.response, a = 0, s = i._isServerGrouped(), l = i._pristineData, d = t.type; if (i.trigger(Ve, { response: r, type: d }), r && !_e(r)) { if (r = i.reader.parse(r), i._handleCustomErrors(r)) return; r = i.reader.data(r), be(r) || (r = [r]) } else r = e.map(o, function (e) { return e.toJSON() }); for ("destroy" === d && (i._destroyed = []), a = 0, n = o.length; a < n; a++)"destroy" !== d ? (o[a].accept(r[a]), "create" === d ? l.push(s ? i._wrapInEmptyGroup(o[a].toJSON()) : r[a]) : "update" === d && i._updatePristineForModel(o[a], r[a])) : i._removePristineForModel(o[a]) }, _updatePristineForModel: function (e, t) { this._executeOnPristineForModel(e, function (e, n) { Ce.deepExtend(n[e], t) }) }, _executeOnPristineForModel: function (e, t) { this._eachPristineItem(function (n) { var i = H(n, e); if (i > -1) return t(i, n), !0 }) }, _removePristineForModel: function (e) { this._executeOnPristineForModel(e, function (e, t) { t.splice(e, 1) }) }, _readData: function (e) { var t = this._isServerGrouped() ? this.reader.groups : this.reader.data; return t.call(this.reader, e) }, _eachPristineItem: function (e) { var t = this, n = t.options, i = t._getCurrentRangeSpan(); t._eachItem(t._pristineData, e), n.serverPaging && n.useRanges && ye(i, function (n, i) { t._eachItem(i.pristineData, e) }) }, _eachItem: function (e, t) { e && e.length && (this._isServerGrouped() ? F(e, t) : t(e)) }, _pristineForModel: function (e) { var t, n, i = function (i) { if (n = H(i, e), n > -1) return t = i[n], !0 }; return this._eachPristineItem(i), t }, _cancelModel: function (e) { var t = this, n = this._pristineForModel(e); this._eachItem(this._data, function (i) { var o = N(i, e); o >= 0 && (!n || e.isNew() && !n.__state__ ? (t._modelCanceled(e), i.splice(o, 1), t._removeModelFromRanges(e)) : (i[o].accept(n), "update" == n.__state__ && (i[o].dirty = !0))) }) }, _modelCanceled: xe, _submit: function (t, n) { var i = this; i.trigger(Ne, { type: "submit" }), i.trigger(Oe), i.transport.submit(ge({ success: function (n, i) { var o = e.grep(t, function (e) { return e.type == i })[0]; o && o.resolve({ response: n, models: o.models, type: i }) }, error: function (e, n, o) { for (var r = 0; r < t.length; r++)t[r].reject(e); i.error(e, n, o) } }, n)) }, _sendSubmit: function (t, n, i) { var o = this, r = []; return o.options.batch && (t.length && r.push(e.Deferred(function (e) { e.type = "create", e.models = t })), n.length && r.push(e.Deferred(function (e) { e.type = "update", e.models = n })), i.length && r.push(e.Deferred(function (e) { e.type = "destroy", e.models = i })), o._submit(r, { data: { created: o.reader.serialize(y(t)), updated: o.reader.serialize(y(n)), destroyed: o.reader.serialize(y(i)) } })), r }, _promise: function (t, n, i) { var o = this; return e.Deferred(function (e) { o.trigger(Ne, { type: i }), o.trigger(Oe), o.transport[i].call(o.transport, ge({ success: function (t) { e.resolve({ response: t, models: n, type: i }) }, error: function (t, n, i) { e.reject(t), o.error(t, n, i) } }, t)) }).promise() }, _send: function (e, t) { var n, i, o = this, r = [], a = o.reader.serialize(y(t)); if (o.options.batch) t.length && r.push(o._promise({ data: { models: a } }, t, e)); else for (n = 0, i = t.length; n < i; n++)r.push(o._promise({ data: a[n] }, [t[n]], e)); return r }, read: function (t) { var n = this, i = n._params(t), o = e.Deferred(); return n._queueRequest(i, function () { var e = n.trigger(Ne, { type: "read" }); e ? (n._dequeueRequest(), o.resolve(e)) : (n.trigger(Oe), n._ranges = [], n.trigger("reset"), n.online() ? n.transport.read({ data: i, success: function (e) { n._ranges = [], n.success(e, i), o.resolve() }, error: function () { var e = Je.call(arguments); n.error.apply(n, e), o.reject.apply(o, e) } }) : null != n.options.offlineStorage && (n.success(n.offlineData(), i), o.resolve())) }), o.promise() }, _readAggregates: function (e) { return this.reader.aggregates(e) }, success: function (e) { var n, i, o, r, a, s, l, d, c, u, h, p = this, f = p.options; if (p.trigger(Ve, { response: e, type: "read" }), p.online()) { if (e = p.reader.parse(e), p._handleCustomErrors(e)) return p._dequeueRequest(), t; p._total = p.reader.total(e), p._isServerGroupPaged() && (p._serverGroupsTotal = p._total), p._pageSize > p._total && (p._pageSize = p._total, p.options.pageSize && p.options.pageSize > p._pageSize && (p._pageSize = p.options.pageSize)), p._aggregate && f.serverAggregates && (p._aggregateResult = p._readAggregates(e)), e = p._readData(e), p._destroyed = [] } else { for (e = p._readData(e), n = [], o = {}, r = p.reader.model, a = r ? r.idField : "id", s = 0; s < this._destroyed.length; s++)l = this._destroyed[s][a], o[l] = l; for (s = 0; s < e.length; s++)d = e[s], c = d.__state__, "destroy" == c ? o[d[a]] || this._destroyed.push(this._createNewModel(d)) : n.push(d); e = n, p._total = e.length } if (p._pristineTotal = p._total, i = p._skip && p._data.length && p._skip < p._data.length, p.options.endless) for (i && p._pristineData.splice(p._skip, p._pristineData.length), n = e.slice(0), u = 0; u < n.length; u++)p._pristineData.push(n[u]); else p._pristineData = e.slice(0); if (p._detachObservableParents(), p.options.endless) { for (p._data.unbind(ze, p._changeHandler), p._isServerGrouped() && p._data[p._data.length - 1].value === e[0].value && (A(p._data[p._data.length - 1], e[0]), e.shift()), e = p._observe(e), i && p._data.splice(p._skip, p._data.length), h = 0; h < e.length; h++)p._data.push(e[h]); p._data.bind(ze, p._changeHandler) } else p._data = p._observe(e); p._markOfflineUpdatesAsDirty(), p._storeData(), p._addRange(p._data), p._process(p._data), p._dequeueRequest() }, _detachObservableParents: function () { if (this._data && this._shouldDetachObservableParents) for (var e = 0; e < this._data.length; e++)this._data[e].parent && (this._data[e].parent = xe) }, _storeData: function (e) { function t(e) { var n, i, o, r = []; for (n = 0; n < e.length; n++)i = e.at(n), o = i.toJSON(), a && i.items ? o.items = t(i.items) : (o.uid = i.uid, s && (i.isNew() ? o.__state__ = "create" : i.dirty && (o.__state__ = "update"))), r.push(o); return r } var n, i, o, r, a = this._isServerGrouped(), s = this.reader.model; if (null != this.options.offlineStorage) { for (n = t(this._data), i = [], o = 0; o < this._destroyed.length; o++)r = this._destroyed[o].toJSON(), r.__state__ = "destroy", i.push(r); this.offlineData(n.concat(i)), e && (this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(n) : this.reader._wrapDataAccessBase(n)) } }, _addRange: function (e, n) { var i, o = this, r = t !== n ? n : o._skip || 0, a = { data: e, pristineData: e.toJSON(), timestamp: o._timeStamp() }; this._isGroupPaged() ? (i = r + e.length, a.outerStart = r, a.outerEnd = i) : i = r + o._flatData(e, !0).length, a.start = r, a.end = i, o._ranges.push(a), o._sortRanges(), o._isGroupPaged() && (o._groupsFlat || (o._groupsFlat = []), o._appendToGroupsFlat(a.data), o._updateOuterRangesLength()) }, _appendToGroupsFlat: function (e) { var t, n = e.length; for (t = 0; t < n; t++)this._groupsFlat.push(e[t]) }, _getGroupByUid: function (e) { var t, n, i = this._groupsFlat.length; for (n = 0; n < i; n++)if (t = this._groupsFlat[n], t.uid === e) return t }, _sortRanges: function () { this._ranges.sort(function (e, t) { return e.start - t.start }) }, error: function (e, t, n) { this._dequeueRequest(), this.trigger(Ve, {}), this.trigger(He, { xhr: e, status: t, errorThrown: n }) }, _params: function (e) { var t = this, n = ge({ take: t.take(), skip: t.skip(), page: t.page(), pageSize: t.pageSize(), sort: t._sort, filter: t._filter, group: t._group, aggregate: t._aggregate, groupPaging: !!t._groupPaging }, e); return t.options.serverPaging || (delete n.take, delete n.skip, delete n.page, delete n.pageSize), t.options.serverGrouping ? t.reader.model && n.group && (n.group = U(n.group, t.reader.model)) : delete n.group, t.options.serverFiltering ? t.reader.model && n.filter && (n.filter = W(n.filter, t.reader.model)) : delete n.filter, t.options.serverSorting ? t.reader.model && n.sort && (n.sort = U(n.sort, t.reader.model)) : delete n.sort, t.options.serverAggregates ? t.reader.model && n.aggregate && (n.aggregate = U(n.aggregate, t.reader.model)) : delete n.aggregate, t.options.groupPaging || delete n.groupPaging, n }, _queueRequest: function (e, n) { var i = this; i._requestInProgress ? i._pending = { callback: me(n, i), options: e } : (i._requestInProgress = !0, i._pending = t, n()) }, _dequeueRequest: function () { var e = this; e._requestInProgress = !1, e._pending && e._queueRequest(e._pending.options, e._pending.callback) }, _handleCustomErrors: function (e) { if (this.reader.errors) { var t = this.reader.errors(e); if (t) return this.trigger(He, { xhr: null, status: "customerror", errorThrown: "custom error", errors: t }), !0 } return !1 }, _shouldWrap: function (e) { var t = this.reader.model; return !(!t || !e.length) && !(e[0] instanceof t) }, _observe: function (e) { var t, n = this, i = n.reader.model; return n._shouldDetachObservableParents = !0, e instanceof it ? (n._shouldDetachObservableParents = !1, n._shouldWrap(e) && (e.type = n.reader.model, e.wrapAll(e, e))) : (t = n.pageSize() && !n.options.serverPaging ? Y : it, e = new t(e, n.reader.model), e.parent = function () { return n.parent() }), n._isServerGrouped() && R(e, i), !(n._changeHandler && n._data && n._data instanceof it) || n.options.useRanges && n.options.serverPaging ? n._changeHandler = me(n._change, n) : n._data.unbind(ze, n._changeHandler), e.bind(ze, n._changeHandler) }, _updateTotalForAction: function (e, t) { var n = this, i = parseInt(n._total, 10); w(n._total) || (i = parseInt(n._pristineTotal, 10)), "add" === e ? i += t.length : "remove" === e ? i -= t.length : "itemchange" === e || "sync" === e || n.options.serverPaging ? "sync" === e && (i = n._pristineTotal = parseInt(n._total, 10)) : i = n._pristineTotal, n._total = i }, _change: function (e) { var t, n, i, o = this, r = e ? e.action : ""; if ("remove" === r) for (t = 0, n = e.items.length; t < n; t++)e.items[t].isNew && e.items[t].isNew() || o._destroyed.push(e.items[t]); !o.options.autoSync || "add" !== r && "remove" !== r && "itemchange" !== r ? (o._updateTotalForAction(r, e ? e.items : []), o._process(o._data, e)) : (i = function (t) { "sync" === t.action && (o.unbind("change", i), o._updateTotalForAction(r, e.items)) }, o.first("change", i), o.sync()) }, _calculateAggregates: function (e, t) { t = t || {}; var n = new r(e), i = t.aggregate, o = t.filter; return o && (n = n.filter(o)), n.aggregate(i) }, _process: function (e, n) { var i, o = this, r = {}; o.options.serverPaging !== !0 && (r.skip = o._skip, r.take = o._take || o._pageSize, r.skip === t && o._page !== t && o._pageSize !== t && (r.skip = (o._page - 1) * o._pageSize), o.options.useRanges && (r.skip = o.currentRangeStart())), o.options.serverSorting !== !0 && (r.sort = o._sort), o.options.serverFiltering !== !0 && (r.filter = o._filter), o.options.serverGrouping !== !0 && (r.group = o._group), o.options.serverAggregates !== !0 && (r.aggregate = o._aggregate), o.options.serverGrouping && o._clearEmptyGroups(e), r.groupPaging = o._groupPaging, i = o._isGroupPaged() && n && ("page" === n.action || "expandGroup" === n.action || "collapseGroup" === n.action) ? o._queryProcess(e, { aggregate: o._aggregate }) : o._queryProcess(e, r), o.options.serverAggregates !== !0 && (o._aggregateResult = o._calculateAggregates(i.dataToAggregate || e, r)), o._setView(i, r, n), o._setFilterTotal(i.total, !1), n = n || {}, n.items = n.items || o._view, o.trigger(ze, n) }, _setView: function (e, t, n) { var i, o = this; o._isGroupPaged() && !o._isServerGrouped() ? !n || "page" !== n.action && "expandGroup" !== n.action && "collapseGroup" !== n.action ? (o._ranges = [], i = new r(e.data), o._addRange(o._observe(e.data)), t.skip > e.data.length / t.take + 1 && (t.skip = 0), o.view(i.range(t.skip, t.take).toArray())) : (o.view(e.data), o._updateOuterRangesLength()) : o.view(e.data) }, _clearEmptyGroups: function (e) { var t, n; for (t = e.length - 1; t >= 0; t--)n = e[t], n.hasSubgroups ? this._clearEmptyGroups(n.items) : n.items && !n.items.length && Qe.apply(n.parent(), [t, 1]) }, _queryProcess: function (e, t) { return this.options.inPlaceSort ? r.process(e, t, this.options.inPlaceSort) : r.process(e, t) }, _mergeState: function (n) { var i = this; return n !== t && (i._pageSize = n.pageSize, i._page = n.page, i._sort = n.sort, i._filter = n.filter, i._group = n.group, i._aggregate = n.aggregate, i._skip = i._currentRangeStart = n.skip, i._take = n.take, i._skip === t && (i._skip = i._currentRangeStart = i.skip(), n.skip = i.skip()), i._take === t && i._pageSize !== t && (i._take = i._pageSize, n.take = i._take), n.sort && (i._sort = n.sort = a(n.sort), i._sortFields = s(n.sort)), n.filter && (i._filter = n.filter = i.options.accentFoldingFiltering && !e.isEmptyObject(n.filter) ? e.extend({}, d(n.filter), { accentFoldingFiltering: i.options.accentFoldingFiltering }) : d(n.filter)), n.group && (i._group = n.group = g(n.group)), n.aggregate && (i._aggregate = n.aggregate = f(n.aggregate))), n }, query: function (n) { var i, o, r, a = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates; return a || (this._data === t || 0 === this._data.length) && !this._destroyed.length ? (this.options.endless && (o = n.pageSize - this.pageSize(), o > 0 ? (o = this.pageSize(), n.page = n.pageSize / o, n.pageSize = o) : (n.page = 1, this.options.endless = !1)), this.read(this._mergeState(n))) : (r = this.trigger(Ne, { type: "read" }), r || (this.trigger(Oe), n && (n.groupPaging = this._groupPaging), i = this._queryProcess(this._data, this._mergeState(n)), this._setFilterTotal(i.total, !0), this._aggregateResult = this._calculateAggregates(i.dataToAggregate || this._data, n), this._setView(i, n), this.trigger(Ve, { type: "read" }), this.trigger(ze, { items: i.data, action: n ? n.action : "" })), e.Deferred().resolve(r).promise()) }, _hasExpandedSubGroups: function (e) { var t, n = !1, i = e.items ? e.items.length : 0; if (!e.hasSubgroups) return !1; for (t = 0; t < i; t++)if (this._groupsState[e.items[t].uid]) { n = !0; break } return n }, _findGroupedRange: function (e, n, i, o, r) { var a, s, l, d, c, u, h, p, f = this, g = e.length; for (h = 0; h < g && (a = e[h], !(i.taken >= i.take)); h++)if (f._getGroupByUid(a.uid) || f._groupsFlat.push(a), f._groupsState[a.uid]) { if (f._isServerGroupPaged()) { if (a.hasSubgroups && !a.subgroupCount) return f.getGroupSubGroupCount(a, i, o, r), f._fetchingGroupItems = !0, t; if (c = (a.subgroupCount || a.itemCount) + 1, u = i.skip - i.skipped, d = !a.items || a.items.length - u < i.take - i.taken, !f._hasExpandedSubGroups(a) && u > c) { i.skipped += c; continue } if (a.hasSubgroups && (!a.items || d && a.items.length < a.subgroupCount) || !a.hasSubgroups && (!a.items || d && a.items.length < a.itemCount)) return f.getGroupItems(a, i, o, r), f._fetchingGroupItems = !0, t } if (i.includeParents && i.skipped < i.skip ? (i.skipped++, a.excludeHeader = !0) : i.includeParents && i.taken++, a.hasSubgroups && a.items && a.items.length) a.currentItems = [], o || (o = []), o.push(a), f._findGroupedRange(a.items, a.currentItems, i, o, r), o.pop(), a.currentItems.length || i.taken > 0 ? n.push(a) : a.excludeHeader = !1; else { for (s = [], l = a.items.length, p = 0; p < l; p++)if (i.skipped < i.skip) i.skipped++; else { if (i.taken >= i.take) break; s.push(a.items[p]), i.taken++ } s.length || i.taken > 0 ? (a.currentItems = s, n.push(a)) : a.excludeHeader = !1 } } else { if (i.skipped < i.skip) { i.skipped++; continue } n.push(a), i.taken++ } }, getGroupItems: function (e, t, n, i) { var o, r, a, s, l, d = this; e.items || (e.items = []), o = e.items.length, r = d.take(), a = this._composeItemsFilter(e, n), s = { page: Ge.floor((o || 0) / (r || 1)) || 1, pageSize: r, skip: o, take: r, filter: a, aggregate: d._aggregate, sort: d._sort }, l = d.findSubgroups(e), l && l.length && (s.group = l, s.groupPaging = !0), clearTimeout(d._timeout), d._timeout = setTimeout(function () { d._queueRequest(s, function () { d.trigger(Ne, { type: "read" }) ? d._dequeueRequest() : d.transport.read({ data: s, success: d._groupItemsSuccessHandler(e, t.skip, d.take(), i), error: function () { var e = Je.call(arguments); d.error.apply(d, e) } }) }) }, 100) }, getGroupSubGroupCount: function (e, t, n, i) { var o, r, a, s = this; e.items || (e.items = []), o = this._composeItemsFilter(e, n), r = this._group.map(function (e) { return e.field }).indexOf(e.field), a = { filter: o, group: [s._group[r + 1]], groupPaging: !0, includeSubGroupCount: !0 }, clearTimeout(s._timeout), s._timeout = setTimeout(function () { s._queueRequest(a, function () { s.trigger(Ne, { type: "read" }) ? s._dequeueRequest() : s.transport.read({ data: a, success: s._subGroupCountSuccessHandler(e, t.skip, s.take(), i), error: function () { var e = Je.call(arguments); s.error.apply(s, e) } }) }) }, 100) }, _subGroupCountSuccessHandler: function (e, t, n, i) { var o, r = this; return i = Se(i) ? i : xe, o = r.options.schema && r.options.schema.total ? r.options.schema.total : "Total", function (a) { r._dequeueRequest(), r.trigger(Ve, { response: a, type: "read" }), r._fetchingGroupItems = !1, e.subgroupCount = a[o], r.range(t, n, i, "expandGroup") } }, _groupItemsSuccessHandler: function (e, t, n, i) { var o = this, r = o._timeStamp(); return i = Se(i) ? i : xe, function (a) { var s, l, d = Z.define(o.options.schema.model); for (o._dequeueRequest(), o.trigger(Ve, { response: a, type: "read" }), a = o.reader.parse(a), e.hasSubgroups ? s = o.reader.groups(a) : (s = o.reader.data(a), s = s.map(function (e) { return new d(e) })), e.items.omitChangeEvent = !0, l = 0; l < s.length; l++)e.items.push(s[l]); e.items.omitChangeEvent = !1, o._updateRangePristineData(e), o._fetchingGroupItems = !1, o._serverGroupsTotal += s.length, o.range(t, n, i, "expandGroup"), (r >= o._currentRequestTimeStamp || !o._skipRequestsInProgress) && o.trigger(ze, {}) } }, findSubgroups: function (e) { var t = this._group.map(function (e) { return e.field }).indexOf(e.field); return this._group.slice(t + 1, this._group.length) }, _composeItemsFilter: function (e, t) { var n, i = this.filter() || { logic: "and", filters: [] }; if (i = ge(!0, {}, i), i.filters.push({ field: e.field, operator: "eq", value: e.value }), t) for (n = 0; n < t.length; n++)i.filters.push({ field: t[n].field, operator: "eq", value: t[n].value }); return i }, _updateRangePristineData: function (e) { var t, n, i, o, r, a, s, l = this, d = l._ranges, c = d.length; for (a = 0; a < c; a++) { for (i = d[a], o = i.data.length, r = [], s = 0; s < o && (n = i.data[s], r.push(s), !(n.uid === e.uid || n.hasSubgroups && n.items.length && l._containsSubGroup(n, e, r))); s++)r.pop(); if (r.length) { for (t = d[a].pristineData; r.length > 1;)t = t[r.splice(0, 1)[0]].items; t[r[0]] = l._cloneGroup(e); break } } }, _containsSubGroup: function (e, t, n) { var i, o, r = this, a = e.items.length; if (e.hasSubgroups && a) for (o = 0; o < a; o++) { if (i = e.items[o], n.push(o), i.uid === t.uid) return !0; if (i.hasSubgroups && i.items.length) return r._containsSubGroup(i, t, n); n.pop() } }, _cloneGroup: function (e) { var t = this; return e = "function" == typeof e.toJSON ? e.toJSON() : e, e.items && e.items.length && (e.items = e.items.map(function (e) { return t._cloneGroup(e) })), e }, _setFilterTotal: function (e, n) { var i = this; i.options.serverFiltering || (e !== t ? i._total = e : n && (i._total = i._data.length)) }, fetch: function (e) { var t = this, n = function (n) { n !== !0 && Se(e) && e.call(t) }; return this._query().done(n) }, _query: function (e) { var t = this; return t.query(ge({}, { page: t.page(), pageSize: t.pageSize(), sort: t.sort(), filter: t.filter(), group: t.group(), aggregate: t.aggregate() }, e)) }, next: function (e) { var t = this, n = t.page(), i = t.total(); if (e = e || {}, n && !(i && n + 1 > t.totalPages())) return t._skip = t._currentRangeStart = n * t.take(), n += 1, e.page = n, t._query(e), n }, prev: function (e) { var t = this, n = t.page(); if (e = e || {}, n && 1 !== n) return t._skip = t._currentRangeStart = t._skip - t.take(), n -= 1, e.page = n, t._query(e), n }, page: function (e) { var n, i, o = this; return e !== t ? (e = Ge.max(Ge.min(Ge.max(e, 1), o.totalPages()), 1), i = o.take(), o._isGroupPaged() ? (e -= 1, o.range(e * i, i, null, "page"), t) : (o._query(o._pageableQueryOptions({ page: e })), t)) : (n = o.skip(), n !== t ? Ge.round((n || 0) / (o.take() || 1)) + 1 : t) }, pageSize: function (e) { var n = this; return e !== t ? (n._query(n._pageableQueryOptions({ pageSize: e, page: 1 })), t) : n.take() }, sort: function (e) { var n = this; return e !== t ? (n.trigger("sort"), n._query({ sort: e }), t) : n._sort }, filter: function (e) { var n = this; return e === t ? n._filter : (n.trigger("reset"), n._query({ filter: e, page: 1 }), t) }, group: function (e) { var n = this; return e !== t ? (n._query({ group: e }), t) : n._group }, getGroupsFlat: function (e) { var t, n, i, o = []; for (t = 0, n = e.length; t < n; t++)i = e[t], i.hasSubgroups && (o = o.concat(this.getGroupsFlat(i.items))), o.push(i); return o }, total: function () { return parseInt(this._total || 0, 10) }, groupsTotal: function (e) { var t = this; return t._group.length ? t._isServerGrouped() ? t._serverGroupsTotal ? t._serverGroupsTotal : t._serverGroupsTotal = t.total() : t._calculateGroupsTotal(t._ranges.length ? t._ranges[0].data : [], e) : t.total() }, _calculateGroupsTotal: function (e, t, n, i) { var o, r, a, s = this; if (n = n || "items", s._group.length && e) { for (o = 0, r = e.length, a = 0; a < r; a++)o += s.groupCount(e[a], t, n, i); return s._groupsTotal = o, o } return s._groupsTotal = s._data.length }, groupCount: function (e, t, n, i) { var o = this, r = 0; return e.hasSubgroups && o._groupsState[e.uid] ? ((t && !e.excludeHeader || i) && (r += 1), e[n].forEach(function (e) { r += o.groupCount(e, t, n, i) })) : o._groupsState[e.uid] ? ((t && !e.excludeHeader || i) && r++, r += e[n] ? e[n].length : 0) : r++, r }, countGroupRange: function (e) { var t, n = 0, i = e.length; for (t = 0; t < i; t++)n += this.groupCount(e[t], !0); return n }, aggregate: function (e) { var n = this; return e !== t ? (n._query({ aggregate: e }), t) : n._aggregate }, aggregates: function () { var e = this._aggregateResult; return _e(e) && (e = this._emptyAggregates(this.aggregate())), e }, _emptyAggregates: function (e) { var t, n, i = {}; if (!_e(e)) for (t = {}, be(e) || (e = [e]), n = 0; n < e.length; n++)t[e[n].aggregate] = 0, i[e[n].field] = t; return i }, _pageableQueryOptions: function (e) { return e }, _wrapInEmptyGroup: function (e) { var t, n, i, o, r = this.group(); for (i = r.length - 1, o = 0; i >= o; i--)n = r[i], t = { value: e.get ? e.get(n.field) : e[n.field], field: n.field, items: t ? [t] : [e], hasSubgroups: !!t, aggregates: this._emptyAggregates(n.aggregates) }; return t }, totalPages: function () { var e = this, t = e.pageSize() || e.total(), n = e._isGroupPaged() ? e.groupsTotal(!0) : e.total(); return Ge.ceil((n || 0) / t) }, inRange: function (e, t) { var n = this, i = Ge.min(e + t, n.total()); return !n.options.serverPaging && n._data.length > 0 || n._findRange(e, i).length > 0 }, lastRange: function () { var e = this._ranges; return e[e.length - 1] || { start: 0, end: 0, data: [] } }, firstItemUid: function () { var e = this._ranges; return e.length && e[0].data.length && e[0].data[0].uid }, enableRequestsInProgress: function () { this._skipRequestsInProgress = !1 }, _timeStamp: function () { return (new Date).getTime() }, range: function (e, n, i, o) { var r, a, s, l, d; return this._currentRequestTimeStamp = this._timeStamp(), this._skipRequestsInProgress = !0, r = this._isGroupPaged() ? this.groupsTotal(!0) : this.total(), "expandGroup" !== o && "collapseGroup" !== o || this._updateOuterRangesLength(), e = Ge.min(e || 0, r), i = Se(i) ? i : xe, a = this, s = Ge.max(Ge.floor(e / n), 0) * n, l = Ge.min(s + n, r), d = a._findRange(e, Ge.min(e + n, r), i), !d.length && 0 !== r || a._fetchingGroupItems ? (a._isGroupPaged() && (a._originalPageSkip = s, a._originalSize = l, s = Ge.max(Ge.floor(a._adjustPageSkip(e, n) / n), 0) * n, l = Ge.min(s + n, r)), n === t || a._fetchingGroupItems || (a._isGroupPaged() && !a._groupRangeExists(s, n) || !a._rangeExists(s, l) ? a.prefetch(s, n, function () { e > s && l < a.total() && !a._rangeExists(l, Ge.min(l + n, a.total())) ? a.prefetch(l, n, function () { a.range(e, n, i) }) : a.range(e, n, i) }) : s < e && a.prefetch(l, n, function () { a.range(e, n, i) })), t) : (a._processRangeData(d, e, n, a._originalPageSkip || s, a._originalSize || l, { action: o }), a._originalPageSkip = null, a._originalSize = null, i(), t) }, _findRange: function (e, n, i) { var o, r, s, l, d, c, u, h, p, f, g, v, _, b, w = this, k = w._ranges, y = [], x = w.options, C = x.serverSorting || x.serverPaging || x.serverFiltering || x.serverGrouping || x.serverAggregates, S = { take: n - e, skip: e, skipped: 0, taken: 0, includeParents: !0 }, T = w._isGroupPaged(), D = T ? "outerStart" : "start", A = T ? "outerEnd" : "end"; for (r = 0, g = k.length; r < g; r++) { if (o = k[r], T) { if (o.outerStart >= n) return []; if (e > o.outerEnd) { S.skipped += o.outerEnd - (v || 0), v = o.outerEnd; continue } if (t !== v && v != o.outerStart && (S.skipped += o.outerStart - v), S.skipped > S.skip) return []; for (t === v && e > 0 && o.start > 0 && (S.skipped = o.outerStart), s = r; ;) { if (this._findGroupedRange(o.data, y, S, null, i), _ = w._calculateGroupsTotal(y, !0, "currentItems"), _ >= S.take) return y; if (w._fetchingGroupItems) return []; if (s++, !k[s] || k[s].outerStart !== o.outerEnd) break; o = k[s] } } else if (e >= o[D] && e <= o[A]) { for (f = 0, s = r; s < g; s++)if (o = k[s], p = w._flatData(o.data, !0), p.length && e + f >= o.start && (c = o.data, u = o.end, C || (x.inPlaceSort ? h = w._queryProcess(o.data, { filter: w.filter() }) : (b = m(w.group() || []).concat(a(w.sort() || [])), h = w._queryProcess(o.data, { sort: b, filter: w.filter() })), p = c = h.data, h.total !== t && (u = h.total)), l = 0, e + f > o.start && (l = e + f - o.start), d = p.length, u > n && (d -= u - n), f += d - l, y = w._mergeGroups(y, c, l, d), n <= o.end && f == n - e)) return y; break } v = o.outerEnd } return [] }, _getRangesMismatch: function (e) { for (var t, n = this, i = n._ranges, o = 0, r = 0; ;) { if (t = i[r], !t || t.outerStart > e) break; t.outerEnd != t.end && (o = t.outerEnd - t.end), r++ } return o }, _mergeGroups: function (e, t, n, i) { if (this._isServerGrouped()) { var o, r = t.toJSON(); return e.length && (o = e[e.length - 1]), E(o, r, n, i), e.concat(r) } return e.concat(t.slice(n, i)) }, _processRangeData: function (e, n, i, o, r, a) { var s, l, d, c, u = this; u._pending = t, u._skip = n > u.skip() && !u._omitPrefetch ? Ge.min(r, (u.totalPages() - 1) * u.take()) : o, u._currentRangeStart = n, u._take = i, s = u.options.serverPaging, l = u.options.serverSorting, d = u.options.serverFiltering, c = u.options.serverAggregates; try { u.options.serverPaging = !0, u._isServerGrouped() || u.group() && u.group().length || (u.options.serverSorting = !0), u.options.serverFiltering = !0, u.options.serverPaging = !0, u.options.serverAggregates = !0, s && (u._detachObservableParents(), u._data = e = u._observe(e)), u._process(e, a) } finally { u.options.serverPaging = s, u.options.serverSorting = l, u.options.serverFiltering = d, u.options.serverAggregates = c } }, skip: function () { var e = this; return e._skip === t ? e._page !== t ? (e._page - 1) * (e.take() || 1) : t : e._skip }, currentRangeStart: function () { return this._currentRangeStart || 0 }, take: function () { return this._take || this._pageSize }, _prefetchSuccessHandler: function (e, t, n, i) { var o = this, r = o._timeStamp(); return function (a) { var s, l, d, c = !1, u = { start: e, end: t, data: [], timestamp: o._timeStamp() }; if (o._dequeueRequest(), o.trigger(Ve, { response: a, type: "read" }), a = o.reader.parse(a), d = o._readData(a), d.length) { for (s = 0, l = o._ranges.length; s < l; s++)if (o._ranges[s].start === e) { c = !0, u = o._ranges[s], o._isGroupPaged() || (u.pristineData = d, u.data = o._observe(d), u.end = u.start + o._flatData(u.data, !0).length, o._sortRanges()); break } c || o._addRange(o._observe(d), e) } o._total = o.reader.total(a), (i || r >= o._currentRequestTimeStamp || !o._skipRequestsInProgress) && (n && d.length ? n() : o.trigger(ze, {})) } }, prefetch: function (e, n, i) { var o = this, r = Ge.min(e + n, o.total()), a = { take: n, skip: e, page: e / n + 1, pageSize: n, sort: o._sort, filter: o._filter, group: o._group, aggregate: o._aggregate }; return o._isGroupPaged() && !o._isServerGrouped() && o._groupRangeExists(e, r) ? (i && i(), t) : (o._isServerGroupPaged() && !o._groupRangeExists(e, r) || !o._rangeExists(e, r) ? (clearTimeout(o._timeout), o._timeout = setTimeout(function () { o._queueRequest(a, function () { o.trigger(Ne, { type: "read" }) ? o._dequeueRequest() : (o._omitPrefetch && o.trigger(Oe), o.transport.read({ data: o._params(a), success: o._prefetchSuccessHandler(e, r, i), error: function () { var e = Je.call(arguments); o.error.apply(o, e) } })) }) }, 100)) : i && i(), t) }, _multiplePrefetch: function (e, t, n) { var i = this, o = Ge.min(e + t, i.total()), r = { take: t, skip: e, page: e / t + 1, pageSize: t, sort: i._sort, filter: i._filter, group: i._group, aggregate: i._aggregate }; i._rangeExists(e, o) ? n && n() : i.trigger(Ne, { type: "read" }) || i.transport.read({ data: i._params(r), success: i._prefetchSuccessHandler(e, o, n, !0) }) }, _adjustPageSkip: function (e, t) { var n, i, o = this, r = o._getPrevRange(e), a = o.total(); if (r) { if (i = o._getRangesMismatch(e), !i) return e; e -= i } if (n = Ge.max(Ge.floor(e / t), 0) * t, n > a) for (; ;)if (n -= t, n < a) break; return n }, _getNextRange: function (e) { var t, n, i = this, o = i._ranges; for (t = 0, n = o.length; t < n; t++)if (o[t].start <= e && o[t].end >= e) return o[t] }, _getPrevRange: function (e) { var t, n, i = this, o = i._ranges, r = o.length; for (t = r - 1; t >= 0; t--)if (o[t].outerStart <= e) { n = o[t]; break } return n }, _rangeExists: function (e, t) { var n, i, o = this, r = o._ranges; for (n = 0, i = r.length; n < i; n++)if (r[n].start <= e && r[n].end >= t) return !0; return !1 }, _groupRangeExists: function (e, t) { var n, i, o, r = this, a = r._ranges, s = 0, l = r.groupsTotal(!0); for (t > l && !r._isServerGrouped() && (t = l), n = 0, i = a.length; n < i; n++)o = a[n], o.outerStart <= e && o.outerEnd >= e ? s += o.outerEnd - e : o.outerStart <= t && o.outerEnd >= t && (s += t - o.outerStart); return s >= t - e }, _getCurrentRangeSpan: function () { var e, t, n = this, i = n._ranges, o = n.currentRangeStart(), r = o + (n.take() || 0), a = [], s = i.length; for (t = 0; t < s; t++)e = i[t], (e.start <= o && e.end >= o || e.start >= o && e.start <= r) && a.push(e); return a }, _removeModelFromRanges: function (e) { var t, n, i, o = this; for (n = 0, i = this._ranges.length; n < i; n++)t = this._ranges[n], o._removeModelFromRange(t, e); o._updateRangesLength() }, _removeModelFromRange: function (e, t) { this._eachItem(e.data, function (e) { var n, i; if (e) for (n = 0; n < e.length; n++)if (i = e[n], i.uid && i.uid == t.uid) { [].splice.call(e, n, 1); break } }) }, _insertModelInRange: function (e, t) { var n, i, o = this, r = o._ranges || [], a = r.length; for (i = 0; i < a; i++)if (n = r[i], n.start <= e && n.end >= e) { o._getByUid(t.uid, n.data) || (o._isServerGrouped() ? n.data.splice(e, 0, o._wrapInEmptyGroup(t)) : n.data.splice(e, 0, t)); break } o._updateRangesLength() }, _updateRangesLength: function () { var e, t, n, i = this, o = i._ranges || [], r = o.length, a = !1, s = 0, l = 0; for (n = 0; n < r; n++)t = o[n], e = i._isGroupPaged() ? t.data.length : i._flatData(t.data, !0).length, l = e - Ge.abs(t.end - t.start), a || 0 === l ? a && (t.start += s, t.end += s) : (a = !0, s = l, t.end += s) }, _updateOuterRangesLength: function () { var e, t, n, i, o = this, r = o._ranges || [], a = r.length, s = 0; for (t = 0; t < a; t++)e = r[t], i = o._isGroupPaged() ? o._calculateGroupsTotal(e.data, !0, "items", !0) : o._flatData(e.data, !0).length, n ? (n.end != e.start && (s = e.start - n.end), e.outerStart = n.outerEnd + s, s = 0) : e.outerStart = e.start, e.outerEnd = e.outerStart + i, n = e } }), ce = {}, ce.create = function (t, n, i) { var o, r = t.transport ? e.extend({}, t.transport) : null; return r ? (r.read = typeof r.read === Ae ? { url: r.read } : r.read, "jsdo" === t.type && (r.dataSource = i), t.type && (Ce.data.transports = Ce.data.transports || {}, Ce.data.schemas = Ce.data.schemas || {}, Ce.data.transports[t.type] ? ve(Ce.data.transports[t.type]) ? r = ge(!0, {}, Ce.data.transports[t.type], r) : o = new Ce.data.transports[t.type](ge(r, { data: n })) : Ce.logToConsole("Unknown DataSource transport type '" + t.type + "'.\nVerify that registration scripts for this type are included after Kendo UI on the page.", "warn"), t.schema = ge(!0, {}, Ce.data.schemas[t.type], t.schema)), o || (o = Se(r.read) ? r : new ae(r))) : o = new re({ data: t.data || [] }), o }, de.create = function (e) { (be(e) || e instanceof it) && (e = { data: e }); var n, i, o, r = e || {}, a = r.data, s = r.fields, l = r.table, d = r.select, c = {}; if (a || !s || r.transport || (l ? a = q(l, s) : d && (a = j(d, s), r.group === t && a[0] && a[0].optgroup !== t && (r.group = "optgroup"))), Ce.data.Model && s && (!r.schema || !r.schema.model)) { for (n = 0, i = s.length; n < i; n++)o = s[n], o.type && (c[o.field] = o); _e(c) || (r.schema = ge(!0, r.schema, { model: { fields: c } })) } return r.data = a, d = null, r.select = null, l = null, r.table = null, r instanceof de ? r : new de(r) }, ue = Z.define({ idField: "id", init: function (e) { var t, n = this, i = n.hasChildren || e && e.hasChildren, o = "items", r = {}; Ce.data.Model.fn.init.call(n, e), typeof n.children === Ae && (o = n.children), r = { schema: { data: o, model: { hasChildren: i, id: n.idField, fields: n.fields } } }, typeof n.children !== Ae && ge(r, n.children), r.data = e, i || (i = r.schema.data), typeof i === Ae && (i = Ce.getter(i)), Se(i) && (t = i.call(n, n), n.hasChildren = (!t || 0 !== t.length) && !!t), n._childrenOptions = r, n.hasChildren && n._initChildren(), n._loaded = !(!e || !e._loaded) }, _initChildren: function () { var e, t, n, i = this; i.children instanceof he || (e = i.children = new he(i._childrenOptions), t = e.transport, n = t.parameterMap, t.parameterMap = function (e, t) { return e[i.idField || "id"] = i.id, n && (e = n.call(i, e, t)), e }, e.parent = function () { return i }, e.bind(ze, function (e) { e.node = e.node || i, i.trigger(ze, e) }), e.bind(He, function (e) { var t = i.parent(); t && (e.node = e.node || i, t.trigger(He, e)) }), i._updateChildrenField()) }, append: function (e) { this._initChildren(), this.loaded(!0), this.children.add(e) }, hasChildren: !1, level: function () { for (var e = this.parentNode(), t = 0; e && e.parentNode;)t++, e = e.parentNode ? e.parentNode() : null; return t }, _updateChildrenField: function () { var e = this._childrenOptions.schema.data; this[e || "items"] = this.children.data() }, _childrenLoaded: function () { this._loaded = !0, this._updateChildrenField() }, load: function () { var n, i, o = {}, r = "_query"; return this.hasChildren ? (this._initChildren(), n = this.children, o[this.idField || "id"] = this.id, this._loaded || (n._data = t, r = "read"), n.one(ze, me(this._childrenLoaded, this)), this._matchFilter && (o.filter = { field: "_matchFilter", operator: "eq", value: !0 }), i = n[r](o)) : this.loaded(!0), i || e.Deferred().resolve().promise() }, parentNode: function () { var e = this.parent(); return e.parent() }, loaded: function (e) { return e === t ? this._loaded : (this._loaded = e, t) }, shouldSerialize: function (e) { return Z.fn.shouldSerialize.call(this, e) && "children" !== e && "_loaded" !== e && "hasChildren" !== e && "_childrenOptions" !== e } }), he = de.extend({ init: function (e) { var t = ue.define({ children: e }); e.filter && !e.serverFiltering && (this._hierarchicalFilter = e.filter, e.filter = null), de.fn.init.call(this, ge(!0, {}, { schema: { modelBase: t, model: t } }, e)), this._attachBubbleHandlers() }, _attachBubbleHandlers: function () { var e = this; e._data.bind(He, function (t) { e.trigger(He, t) }) }, read: function (e) { var t = de.fn.read.call(this, e); return this._hierarchicalFilter && (this._data && this._data.length > 0 ? this.filter(this._hierarchicalFilter) : (this.options.filter = this._hierarchicalFilter, this._filter = d(this.options.filter), this._hierarchicalFilter = null)), t }, remove: function (e) { var t, n = e.parentNode(), i = this; return n && n._initChildren && (i = n.children), t = de.fn.remove.call(i, e), n && !i.data().length && (n.hasChildren = !1), t }, success: G("success"), data: G("data"), insert: function (e, t) { var n = this.parent(); return n && n._initChildren && (n.hasChildren = !0, n._initChildren()), de.fn.insert.call(this, e, t) }, filter: function (e) { return e === t ? this._filter : (!this.options.serverFiltering && this._markHierarchicalQuery(e) && (e = { logic: "or", filters: [e, { field: "_matchFilter", operator: "equals", value: !0 }] }), this.trigger("reset"), this._query({ filter: e, page: 1 }), t) }, _markHierarchicalQuery: function (t) { var n, i, o, a, s, l = this.options.accentFoldingFiltering; return t = l ? e.extend({}, d(t), { accentFoldingFiltering: l }) : d(t), t && 0 !== t.filters.length ? (n = r.filterExpr(t), o = n.fields, a = n.operators, i = s = Function("d, __f, __o", "return " + n.expression), (o.length || a.length) && (s = function (e) { return i(e, o, a) }), this._updateHierarchicalFilter(s), !0) : (this._updateHierarchicalFilter(function () { return !0 }), !1) }, _updateHierarchicalFilter: function (e) { var t, n, i = this._data, o = !1; for (n = 0; n < i.length; n++)t = i[n], t.hasChildren ? (t._matchFilter = t.children._updateHierarchicalFilter(e), t._matchFilter || (t._matchFilter = e(t))) : t._matchFilter = e(t), t._matchFilter && (o = !0); return o }, _find: function (e, t) { var n, i, o, r, a = this._data; if (a) { if (o = de.fn[e].call(this, t)) return o; for (a = this._flatData(this._data), n = 0, i = a.length; n < i; n++)if (r = a[n].children, r instanceof he && (o = r[e](t))) return o } }, get: function (e) { return this._find("get", e) }, getByUid: function (e) { return this._find("getByUid", e) } }), he.create = function (e) { e = e && e.push ? { data: e } : e; var t = e || {}, n = t.data, i = t.fields, o = t.list; return n && n._dataSource ? n._dataSource : (n || !i || t.transport || o && (n = $(o, i)), t.data = n, t instanceof he ? t : new he(t)) }, pe = Ce.Observable.extend({ init: function (e, t, n) { Ce.Observable.fn.init.call(this), this._prefetching = !1, this.dataSource = e, this.prefetch = !n; var i = this; e.bind("change", function () { i._change() }), e.bind("reset", function () { i._reset() }), this._syncWithDataSource(), this.setViewSize(t) }, setViewSize: function (e) { this.viewSize = e, this._recalculate() }, at: function (e) { var n = this.pageSize, i = !0; return e >= this.total() ? (this.trigger("endreached", { index: e }), null) : this.useRanges ? this.useRanges ? ((e < this.dataOffset || e >= this.skip + n) && (i = this.range(Math.floor(e / n) * n)), e === this.prefetchThreshold && this._prefetch(), e === this.midPageThreshold ? this.range(this.nextMidRange, !0) : e === this.nextPageThreshold ? this.range(this.nextFullRange) : e === this.pullBackThreshold && this.range(this.offset === this.skip ? this.previousMidRange : this.previousFullRange), i ? this.dataSource.at(e - this.dataOffset) : (this.trigger("endreached", { index: e }), null)) : t : this.dataSource.view()[e] }, indexOf: function (e) { return this.dataSource.data().indexOf(e) + this.dataOffset }, total: function () { return parseInt(this.dataSource.total(), 10) }, next: function () { var e = this, t = e.pageSize, n = e.skip - e.viewSize + t, i = Ge.max(Ge.floor(n / t), 0) * t; this.offset = n, this.dataSource.prefetch(i, t, function () { e._goToRange(n, !0) }) }, range: function (e, t) { if (this.offset === e) return !0; var n = this, i = this.pageSize, o = Ge.max(Ge.floor(e / i), 0) * i, r = this.dataSource; return t && (o += i), r.inRange(e, i) ? (this.offset = e, this._recalculate(), this._goToRange(e), !0) : !this.prefetch || (r.prefetch(o, i, function () { n.offset = e, n._recalculate(), n._goToRange(e, !0) }), !1) }, syncDataSource: function () { var e = this.offset; this.offset = null, this.range(e) }, destroy: function () { this.unbind() }, _prefetch: function () { var e = this, t = this.pageSize, n = this.skip + t, i = this.dataSource; i.inRange(n, t) || this._prefetching || !this.prefetch || (this._prefetching = !0, this.trigger("prefetching", { skip: n, take: t }), i.prefetch(n, t, function () { e._prefetching = !1, e.trigger("prefetched", { skip: n, take: t }) })) }, _goToRange: function (e, t) { this.offset === e && (this.dataOffset = e, this._expanding = t, this.dataSource.range(e, this.pageSize), this.dataSource.enableRequestsInProgress()) }, _reset: function () { this._syncPending = !0 }, _change: function () { var e = this.dataSource; this.length = this.useRanges ? e.lastRange().end : e.view().length, this._syncPending && (this._syncWithDataSource(), this._recalculate(), this._syncPending = !1, this.trigger("reset", { offset: this.offset })), this.trigger("resize"), this._expanding && this.trigger("expand"), delete this._expanding }, _syncWithDataSource: function () { var e = this.dataSource; this._firstItemUid = e.firstItemUid(), this.dataOffset = this.offset = e.skip() || 0, this.pageSize = e.pageSize(), this.useRanges = e.options.serverPaging }, _recalculate: function () { var e = this.pageSize, t = this.offset, n = this.viewSize, i = Math.ceil(t / e) * e; this.skip = i, this.midPageThreshold = i + e - 1, this.nextPageThreshold = i + n - 1, this.prefetchThreshold = i + Math.floor(e / 3 * 2), this.pullBackThreshold = this.offset - 1, this.nextMidRange = i + e - n, this.nextFullRange = i, this.previousMidRange = t - n, this.previousFullRange = i - e } }), fe = Ce.Observable.extend({ init: function (e, t) { var n = this; Ce.Observable.fn.init.call(n), this.dataSource = e, this.batchSize = t, this._total = 0, this.buffer = new pe(e, 3 * t), this.buffer.bind({ endreached: function (e) { n.trigger("endreached", { index: e.index }) }, prefetching: function (e) { n.trigger("prefetching", { skip: e.skip, take: e.take }) }, prefetched: function (e) { n.trigger("prefetched", { skip: e.skip, take: e.take }) }, reset: function () { n._total = 0, n.trigger("reset") }, resize: function () { n._total = Math.ceil(this.length / n.batchSize), n.trigger("resize", { total: n.total(), offset: this.offset }) } }) }, syncDataSource: function () { this.buffer.syncDataSource() }, at: function (e) { var t, n, i = this.buffer, o = e * this.batchSize, r = this.batchSize, a = []; for (i.offset > o && i.at(i.offset - 1), n = 0; n < r && (t = i.at(o + n), null !== t); n++)a.push(t); return a }, total: function () { return this._total }, destroy: function () { this.buffer.destroy(), this.unbind() } }), ge(!0, Ce.data, { readers: { json: le }, Query: r, DataSource: de, HierarchicalDataSource: he, Node: ue, ObservableObject: Q, ObservableArray: it, LazyObservableArray: Y, LocalTransport: re, RemoteTransport: ae, Cache: se, DataReader: le, Model: Z, Buffer: pe, BatchBuffer: fe }) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.binder.min", ["kendo.core.min", "kendo.data.min"], e) }(function () { return function (e, t) { function n(t, n, i) { return v.extend({ init: function (e, t, n) { var i = this; v.fn.init.call(i, e.element[0], t, n), i.widget = e, i._dataBinding = M(i.dataBinding, i), i._dataBound = M(i.dataBound, i), i._itemChange = M(i.itemChange, i) }, itemChange: function (e) { a(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[t]._parents())) }, dataBinding: function (e) { var t, n, i = this.widget, o = e.removedItems || i.items(); for (t = 0, n = o.length; t < n; t++)d(o[t], !1) }, _ns: function (t) { t = t || C.ui; var n = [C.ui, C.dataviz.ui, C.mobile.ui]; return n.splice(e.inArray(t, n), 1), n.unshift(t), C.rolesFromNamespaces(n) }, dataBound: function (e) { var i, o, r, s, l = this.widget, d = e.addedItems || l.items(), c = l[n], u = C.data.HierarchicalDataSource; if (!(u && c instanceof u) && d.length) for (r = e.addedDataItems || c.flatView(), s = this.bindings[t]._parents(), i = 0, o = r.length; i < o; i++)d[i] && a(d[i], r[i], this._ns(e.ns), [r[i]].concat(s)) }, refresh: function (e) { var o, r, a, s, l = this, d = l.widget; e = e || {}, e.action || (l.destroy(), d.bind("dataBinding", l._dataBinding), d.bind("dataBound", l._dataBound), d.bind("itemChange", l._itemChange), o = l.bindings[t].get(), d[n] instanceof C.data.DataSource && d[n] != o && (o instanceof C.data.DataSource ? d[i](o) : o && o._dataSource ? d[i](o._dataSource) : (r = C.ui.Select && d instanceof C.ui.Select, a = C.ui.MultiSelect && d instanceof C.ui.MultiSelect, s = C.ui.DropDownTree && d instanceof C.ui.DropDownTree, s ? d.treeview[n].data(o) : d[n].data(o), l.bindings.value && (r || a) && d.value(p(l.bindings.value.get(), d.options.dataValueField))))) }, destroy: function () { var e = this.widget; e.unbind("dataBinding", this._dataBinding), e.unbind("dataBound", this._dataBound), e.unbind("itemChange", this._itemChange) } }) } function i(e, t) { var n = C.initWidget(e, {}, t); if (n) return new k(n) } function o(e) { var t, n, i, r, a, s, l, d = {}; for (l = e.match(y), t = 0, n = l.length; t < n; t++)i = l[t], r = i.indexOf(":"), a = i.substring(0, r), s = i.substring(r + 1), "{" == s.charAt(0) && (s = o(s)), d[a] = s; return d } function r(e, t, n) { var i, o = {}; for (i in e) o[i] = new n(t, e[i]); return o } function a(e, t, n, s) { var d, c, u, h, p, v, _, b, k; if (e && !e.getAttribute("data-" + C.ns + "stop") && (d = e.getAttribute("data-" + C.ns + "role"), u = e.getAttribute("data-" + C.ns + "bind"), h = [], p = !0, _ = {}, s = s || [t], (d || u) && l(e, !1), d && (b = i(e, n)), u && (u = o(u.replace(x, "")), b || (_ = C.parseOptions(e, { textField: "", valueField: "", template: "", valueUpdate: N, valuePrimitive: !1, autoBind: !0 }, t), _.roles = n, b = new w(e, _)), b.source = t, v = r(u, s, f), _.template && (v.template = new m(s, "", _.template)), v.click && (u.events = u.events || {}, u.events.click = u.click, v.click.destroy(), delete v.click), v.source && (p = !1), u.attr && (v.attr = r(u.attr, s, f)), u.style && (v.style = r(u.style, s, f)), u.events && (v.events = r(u.events, s, g)), u.css && (v.css = r(u.css, s, f)), b.bind(v)), b && (e.kendoBindingTarget = b), k = e.children, p && k && !e.getAttribute("data-" + C.ns + "stop"))) { for (c = 0; c < k.length; c++)h[c] = k[c]; for (c = 0; c < h.length; c++)a(h[c], t, n, s) } } function s(t, n) { var i, o, r, s = C.rolesFromNamespaces([].slice.call(arguments, 2)); for (n = C.observable(n), t = e(t), i = 0, o = t.length; i < o; i++)r = t[i], 1 === r.nodeType && a(r, n, s) } function l(t, n) { var i, o = t.kendoBindingTarget; o && (o.destroy(), L ? delete t.kendoBindingTarget : t.removeAttribute ? t.removeAttribute("kendoBindingTarget") : t.kendoBindingTarget = null), n && (i = C.widgetInstance(e(t)), i && typeof i.destroy === H && i.destroy()) } function d(e, t) { l(e, t), c(e, t) } function c(e, t) { var n, i, o = e.children; if (o) for (n = 0, i = o.length; n < i; n++)d(o[n], t) } function u(t) { var n, i; for (t = e(t), n = 0, i = t.length; n < i; n++)d(t[n], !1) } function h(e, t) { var n = e.element, i = n[0].kendoBindingTarget; i && s(n, i.source, t) } function p(e, t) { var n, i, o = [], r = 0; if (!t) return e; if (e instanceof D) { for (n = e.length; r < n; r++)i = e[r], o[r] = i.get ? i.get(t) : i[t]; e = o } else e instanceof T && (e = e.get(t)); return e } var f, g, m, v, _, b, w, k, y, x, C = window.kendo, S = C.Observable, T = C.data.ObservableObject, D = C.data.ObservableArray, A = {}.toString, E = {}, I = C.Class, M = e.proxy, R = "value", F = "source", P = "events", z = "checked", B = "css", L = !0, H = "function", N = "change"; !function () { var e = document.createElement("a"); try { delete e.test } catch (t) { L = !1 } }(), f = S.extend({ init: function (e, t) { var n = this; S.fn.init.call(n), n.source = e[0], n.parents = e, n.path = t, n.dependencies = {}, n.dependencies[t] = !0, n.observable = n.source instanceof S, n._access = function (e) { n.dependencies[e.field] = !0 }, n.observable && (n._change = function (e) { n.change(e) }, n.source.bind(N, n._change)) }, _parents: function () { var t, n = this.parents, i = this.get(); return i && "function" == typeof i.parent && (t = i.parent(), e.inArray(t, n) < 0 && (n = [t].concat(n))), n }, change: function (e) { var t, n, i = e.field, o = this; if ("this" === o.path) o.trigger(N, e); else for (t in o.dependencies) if (0 === t.indexOf(i) && (n = t.charAt(i.length), !n || "." === n || "[" === n)) { o.trigger(N, e); break } }, start: function (e) { e.bind("get", this._access) }, stop: function (e) { e.unbind("get", this._access) }, get: function () { var e = this, n = e.source, i = 0, o = e.path, r = n; if (!e.observable) return r; for (e.start(e.source), r = n.get(o); r === t && n;)n = e.parents[++i], n instanceof T && (r = n.get(o)); if (r === t) for (n = e.source; r === t && n;)n = n.parent(), n instanceof T && (r = n.get(o)); return "function" == typeof r && (i = o.lastIndexOf("."), i > 0 && (n = n.get(o.substring(0, i))), e.start(n), r = n !== e.source ? r.call(n, e.source) : r.call(n), e.stop(n)), n && n !== e.source && (e.currentSource = n, n.unbind(N, e._change).bind(N, e._change)), e.stop(e.source), r }, set: function (e) { var t = this.currentSource || this.source, n = C.getter(this.path)(t); "function" == typeof n ? t !== this.source ? n.call(t, this.source, e) : n.call(t, e) : t.set(this.path, e) }, destroy: function () { this.observable && (this.source.unbind(N, this._change), this.currentSource && this.currentSource.unbind(N, this._change)), this.unbind() } }), g = f.extend({ get: function () { var e, t = this.source, n = this.path, i = 0; for (e = t.get(n); !e && t;)t = this.parents[++i], t instanceof T && (e = t.get(n)); return M(e, t) } }), m = f.extend({ init: function (e, t, n) { var i = this; f.fn.init.call(i, e, t), i.template = n }, render: function (e) { var t; return this.start(this.source), t = C.render(this.template, e), this.stop(this.source), t } }), v = I.extend({ init: function (e, t, n) { this.element = e, this.bindings = t, this.options = n }, bind: function (e, t) { var n = this; e = t ? e[t] : e, e.bind(N, function (e) { n.refresh(t || e) }), n.refresh(t) }, destroy: function () { } }), _ = v.extend({ dataType: function () { var e = this.element.getAttribute("data-type") || this.element.type || "text"; return e.toLowerCase() }, parsedValue: function () { return this._parseValue(this.element.value, this.dataType()) }, _parseValue: function (e, t) { return "date" == t ? e = C.parseDate(e, "yyyy-MM-dd") : "datetime-local" == t ? e = C.parseDate(e, ["yyyy-MM-ddTHH:mm:ss", "yyyy-MM-ddTHH:mm"]) : "number" == t ? e = C.parseFloat(e) : "boolean" == t && (e = e.toLowerCase(), e = null !== C.parseFloat(e) ? !!C.parseFloat(e) : "true" === e.toLowerCase()), e } }), E.attr = v.extend({ refresh: function (e) { this.element.setAttribute(e, this.bindings.attr[e].get()) } }), E.css = v.extend({ init: function (e, t, n) { v.fn.init.call(this, e, t, n), this.classes = {} }, refresh: function (t) { var n = e(this.element), i = this.bindings.css[t], o = this.classes[t] = i.get(); o ? n.addClass(t) : n.removeClass(t) } }), E.style = v.extend({ refresh: function (e) { this.element.style[e] = this.bindings.style[e].get() || "" } }), E.enabled = v.extend({ refresh: function () { this.bindings.enabled.get() ? this.element.removeAttribute("disabled") : this.element.setAttribute("disabled", "disabled") } }), E.readonly = v.extend({ refresh: function () { this.bindings.readonly.get() ? this.element.setAttribute("readonly", "readonly") : this.element.removeAttribute("readonly") } }), E.disabled = v.extend({ refresh: function () { this.bindings.disabled.get() ? this.element.setAttribute("disabled", "disabled") : this.element.removeAttribute("disabled") } }), E.events = v.extend({ init: function (e, t, n) { v.fn.init.call(this, e, t, n), this.handlers = {} }, refresh: function (t) { var n = e(this.element), i = this.bindings.events[t], o = this.handlers[t]; o && n.off(t, o), o = this.handlers[t] = i.get(), n.on(t, i.source, o) }, destroy: function () { var t, n = e(this.element); for (t in this.handlers) n.off(t, this.handlers[t]) } }), E.text = v.extend({ refresh: function () { var t = this.bindings.text.get(), n = this.element.getAttribute("data-format") || ""; null == t && (t = ""), e(this.element).text(C.toString(t, n)) } }), E.visible = v.extend({ refresh: function () { this.element.style.display = this.bindings.visible.get() ? "" : "none" } }), E.invisible = v.extend({ refresh: function () { this.element.style.display = this.bindings.invisible.get() ? "none" : "" } }), E.html = v.extend({ refresh: function () { this.element.innerHTML = this.bindings.html.get() } }), E.value = _.extend({ init: function (t, n, i) { _.fn.init.call(this, t, n, i), this._change = M(this.change, this), this.eventName = i.valueUpdate || N, e(this.element).on(this.eventName, this._change), this._initChange = !1 }, change: function () { this._initChange = this.eventName != N, this.bindings[R].set(this.parsedValue()), this._initChange = !1 }, refresh: function () { var e, t; this._initChange || (e = this.bindings[R].get(), null == e && (e = ""), t = this.dataType(), "date" == t ? e = C.toString(e, "yyyy-MM-dd") : "datetime-local" == t && (e = C.toString(e, "yyyy-MM-ddTHH:mm:ss")), this.element.value = e), this._initChange = !1 }, destroy: function () { e(this.element).off(this.eventName, this._change) } }), E.source = v.extend({ init: function (e, t, n) { v.fn.init.call(this, e, t, n); var i = this.bindings.source.get(); i instanceof C.data.DataSource && n.autoBind !== !1 && i.fetch() }, refresh: function (e) { var t = this, n = t.bindings.source.get(); n instanceof D || n instanceof C.data.DataSource ? (e = e || {}, "add" == e.action ? t.add(e.index, e.items) : "remove" == e.action ? t.remove(e.index, e.items) : "itemchange" != e.action && t.render()) : t.render() }, container: function () { var e = this.element; return "table" == e.nodeName.toLowerCase() && (e.tBodies[0] || e.appendChild(document.createElement("tbody")), e = e.tBodies[0]), e }, template: function () { var e = this.options, t = e.template, n = this.container().nodeName.toLowerCase(); return t || (t = "select" == n ? e.valueField || e.textField ? C.format('', e.valueField || e.textField, e.textField || e.valueField) : "" : "tbody" == n ? "#:data#" : "ul" == n || "ol" == n ? "
  • #:data#
  • " : "#:data#", t = C.template(t)), t }, add: function (t, n) { var i, o, r, s, l = this.container(), d = l.cloneNode(!1), c = l.children[t]; if (e(d).html(C.render(this.template(), n)), d.children.length) for (i = this.bindings.source._parents(), o = 0, r = n.length; o < r; o++)s = d.children[0], l.insertBefore(s, c || null), a(s, n[o], this.options.roles, [n[o]].concat(i)) }, remove: function (e, t) { var n, i, o = this.container(); for (n = 0; n < t.length; n++)i = o.children[e], d(i, !0), i.parentNode == o && o.removeChild(i) }, render: function () { var t, n, i, o = this.bindings.source.get(), r = this.container(), s = this.template(); if (null != o) if (o instanceof C.data.DataSource && (o = o.view()), o instanceof D || "[object Array]" === A.call(o) || (o = [o]), this.bindings.template) { if (c(r, !0), e(r).html(this.bindings.template.render(o)), r.children.length) for (t = this.bindings.source._parents(), n = 0, i = o.length; n < i; n++)a(r.children[n], o[n], this.options.roles, [o[n]].concat(t)) } else e(r).html(C.render(s, o)) } }), E.input = { checked: _.extend({ init: function (t, n, i) { _.fn.init.call(this, t, n, i), this._change = M(this.change, this), e(this.element).change(this._change) }, change: function () { var e, t, n, i = this.element, o = this.value(); if ("radio" == i.type) o = this.parsedValue(), this.bindings[z].set(o); else if ("checkbox" == i.type) if (e = this.bindings[z].get(), e instanceof D) { if (o = this.parsedValue(), o instanceof Date) { for (n = 0; n < e.length; n++)if (e[n] instanceof Date && +e[n] === +o) { t = n; break } } else t = e.indexOf(o); t > -1 ? e.splice(t, 1) : e.push(o) } else this.bindings[z].set(o) }, refresh: function () { var e, n, i = this.bindings[z].get(), o = i, r = this.dataType(), a = this.element; if ("checkbox" == a.type) if (o instanceof D) { if (e = -1, i = this.parsedValue(), i instanceof Date) { for (n = 0; n < o.length; n++)if (o[n] instanceof Date && +o[n] === +i) { e = n; break } } else e = o.indexOf(i); a.checked = e >= 0 } else a.checked = o; else "radio" == a.type && ("date" == r ? i = C.toString(i, "yyyy-MM-dd") : "datetime-local" == r && (i = C.toString(i, "yyyy-MM-ddTHH:mm:ss")), a.checked = null !== i && t !== i && a.value === "" + i) }, value: function () { var e = this.element, t = e.value; return "checkbox" == e.type && (t = e.checked), t }, destroy: function () { e(this.element).off(N, this._change) } }) }, E.select = { source: E.source.extend({ refresh: function (n) { var i, o = this, r = o.bindings.source.get(); r instanceof D || r instanceof C.data.DataSource ? (n = n || {}, "add" == n.action ? o.add(n.index, n.items) : "remove" == n.action ? o.remove(n.index, n.items) : "itemchange" != n.action && n.action !== t || (o.render(), o.bindings.value && o.bindings.value && (i = p(o.bindings.value.get(), e(o.element).data("valueField")), null === i ? o.element.selectedIndex = -1 : o.element.value = i))) : o.render() } }), value: _.extend({ init: function (t, n, i) { _.fn.init.call(this, t, n, i), this._change = M(this.change, this), e(this.element).change(this._change) }, parsedValue: function () { var e, t, n, i, o = this.dataType(), r = []; for (n = 0, i = this.element.options.length; n < i; n++)t = this.element.options[n], t.selected && (e = t.attributes.value, e = e && e.specified ? t.value : t.text, r.push(this._parseValue(e, o))); return r }, change: function () { var e, n, i, o, r, a, s, l, d = [], c = this.element, u = this.options.valueField || this.options.textField, h = this.options.valuePrimitive; for (r = 0, a = c.options.length; r < a; r++)n = c.options[r], n.selected && (o = n.attributes.value, o = o && o.specified ? n.value : n.text, d.push(u ? o : this._parseValue(o, this.dataType()))); if (u) for (e = this.bindings.source.get(), e instanceof C.data.DataSource && (e = e.view()), i = 0; i < d.length; i++)for (r = 0, a = e.length; r < a; r++)if (s = e[r].get(u), l = s + "" === d[i]) { d[i] = e[r]; break } o = this.bindings[R].get(), o instanceof D ? o.splice.apply(o, [0, o.length].concat(d)) : this.bindings[R].set(h || !(o instanceof T || null === o || o === t) && u ? d[0].get(u) : d[0]) }, refresh: function () { var e, t, n, i = this.element, o = i.options, r = this.bindings[R].get(), a = r, s = this.options.valueField || this.options.textField, l = !1, d = this.dataType(); for (a instanceof D || (a = new D([r])), i.selectedIndex = -1, n = 0; n < a.length; n++)for (r = a[n], s && r instanceof T && (r = r.get(s)), "date" == d ? r = C.toString(a[n], "yyyy-MM-dd") : "datetime-local" == d && (r = C.toString(a[n], "yyyy-MM-ddTHH:mm:ss")), e = 0; e < o.length; e++)t = o[e].value, "" === t && "" !== r && (t = o[e].text), null != r && t == "" + r && (o[e].selected = !0, l = !0) }, destroy: function () { e(this.element).off(N, this._change) } }) }, E.widget = { events: v.extend({ init: function (e, t, n) { v.fn.init.call(this, e.element[0], t, n), this.widget = e, this.handlers = {} }, refresh: function (e) { var t = this.bindings.events[e], n = this.handlers[e]; n && this.widget.unbind(e, n), n = t.get(), this.handlers[e] = function (e) { e.data = t.source, n(e), e.data === t.source && delete e.data }, this.widget.bind(e, this.handlers[e]) }, destroy: function () { var e; for (e in this.handlers) this.widget.unbind(e, this.handlers[e]) } }), checked: v.extend({ init: function (e, t, n) { v.fn.init.call(this, e.element[0], t, n), this.widget = e, this._change = M(this.change, this), this.widget.bind(N, this._change) }, change: function () { this.bindings[z].set(this.value()) }, refresh: function () { this.widget.check(this.bindings[z].get() === !0) }, value: function () { var e = this.element, t = e.value; return "on" != t && "off" != t && "checkbox" != this.element.type || (t = e.checked), t }, destroy: function () { this.widget.unbind(N, this._change) } }), start: v.extend({ init: function (e, t, n) { v.fn.init.call(this, e.element[0], t, n), this._change = M(this.change, this), this.widget = e, this.widget.bind(N, this._change) }, change: function () { this.bindings.start.set(this.widget.range().start) }, refresh: function () { var e = this, t = this.bindings.start.get(), n = e.widget._range ? e.widget._range.end : null; this.widget.range({ start: t, end: n }) }, destroy: function () { this.widget.unbind(N, this._change) } }), end: v.extend({ init: function (e, t, n) { v.fn.init.call(this, e.element[0], t, n), this._change = M(this.change, this), this.widget = e, this.widget.bind(N, this._change) }, change: function () { this.bindings.end.set(this.widget.range().end) }, refresh: function () { var e = this, t = this.bindings.end.get(), n = e.widget._range ? e.widget._range.start : null; this.widget.range({ start: n, end: t }) }, destroy: function () { this.widget.unbind(N, this._change) } }), visible: v.extend({ init: function (e, t, n) { v.fn.init.call(this, e.element[0], t, n), this.widget = e }, refresh: function () { var e = this.bindings.visible.get(); this.widget.wrapper[0].style.display = e ? "" : "none" } }), invisible: v.extend({ init: function (e, t, n) { v.fn.init.call(this, e.element[0], t, n), this.widget = e }, refresh: function () { var e = this.bindings.invisible.get(); this.widget.wrapper[0].style.display = e ? "none" : "" } }), enabled: v.extend({ init: function (e, t, n) { v.fn.init.call(this, e.element[0], t, n), this.widget = e }, refresh: function () { this.widget.enable && this.widget.enable(this.bindings.enabled.get()) } }), disabled: v.extend({ init: function (e, t, n) { v.fn.init.call(this, e.element[0], t, n), this.widget = e }, refresh: function () { this.widget.enable && this.widget.enable(!this.bindings.disabled.get()) } }), source: n("source", "dataSource", "setDataSource"), value: v.extend({ init: function (t, n, i) { v.fn.init.call(this, t.element[0], n, i), this.widget = t, this._change = e.proxy(this.change, this), this.widget.first(N, this._change); var o = this.bindings.value.get(); this._valueIsObservableObject = !i.valuePrimitive && (null == o || o instanceof T), this._valueIsObservableArray = o instanceof D, this._initChange = !1 }, _source: function () { var e; return this.widget.dataItem && (e = this.widget.dataItem(), e && e instanceof T) ? [e] : (this.bindings.source && (e = this.bindings.source.get()), (!e || e instanceof C.data.DataSource) && (e = this.widget.dataSource.flatView()), e) }, change: function () { var e, t, n, i, o, r, a, s = this.widget.value(), l = this.options.dataValueField || this.options.dataTextField, d = "[object Array]" === A.call(s), c = this._valueIsObservableObject, u = []; if (this._initChange = !0, l) if ("" === s && (c || this.options.valuePrimitive)) s = null; else { for (a = this._source(), d && (t = s.length, u = s.slice(0)), o = 0, r = a.length; o < r; o++)if (n = a[o], i = n.get(l), d) { for (e = 0; e < t; e++)if (i == u[e]) { u[e] = n; break } } else if (i == s) { s = c ? n : i; break } u[0] && (s = this._valueIsObservableArray ? u : c || !l ? u[0] : u[0].get(l)) } this.bindings.value.set(s), this._initChange = !1 }, refresh: function () { var e, n, i, o, r, a, s, l, d; if (!this._initChange) { if (e = this.widget, n = e.options, i = n.dataTextField, o = n.dataValueField || i, r = this.bindings.value.get(), a = n.text || "", s = 0, d = [], r === t && (r = null), o) if (r instanceof D) { for (l = r.length; s < l; s++)d[s] = r[s].get(o); r = d } else r instanceof T && (a = r.get(i), r = r.get(o)); n.autoBind !== !1 || n.cascadeFrom || !e.listView || e.listView.bound() ? e.value(r) : (i !== o || a || (a = r), a || !r && 0 !== r || !n.valuePrimitive ? e._preselect(r, a) : e.value(r)) } this._initChange = !1 }, destroy: function () { this.widget.unbind(N, this._change) } }), dropdowntree: { value: v.extend({ init: function (t, n, i) { v.fn.init.call(this, t.element[0], n, i), this.widget = t, this._change = e.proxy(this.change, this), this.widget.first(N, this._change), this._initChange = !1 }, change: function () { var e, n, i, o, r, a, s, l, d, c = this, u = c.bindings[R].get(), h = c.options.valuePrimitive, p = c.widget.treeview.select(), f = c.widget._isMultipleSelection() ? c.widget._getAllChecked() : c.widget.treeview.dataItem(p) || c.widget.value(), g = h || c.widget.options.autoBind === !1 ? c.widget.value() : f, m = this.options.dataValueField || this.options.dataTextField; if (g = g.slice ? g.slice(0) : g, c._initChange = !0, u instanceof D) { for (e = [], n = g.length, i = 0, o = 0, r = u[i], a = !1; r !== t;) { for (d = !1, o = 0; o < n; o++)if (h ? a = g[o] == r : (l = g[o], l = l.get ? l.get(m) : l, a = l == (r.get ? r.get(m) : r)), a) { g.splice(o, 1), n -= 1, d = !0; break } d ? i += 1 : (e.push(r), b(u, i, 1), s = i), r = u[i] } b(u, u.length, 0, g), e.length && u.trigger("change", { action: "remove", items: e, index: s }), g.length && u.trigger("change", { action: "add", items: g, index: u.length - 1 }) } else c.bindings[R].set(g); c._initChange = !1 }, refresh: function () { if (!this._initChange) { var e, t, n = this.options, i = this.widget, o = n.dataValueField || n.dataTextField, r = this.bindings.value.get(), a = r, s = 0, l = []; if (o) if (r instanceof D) { for (e = r.length; s < e; s++)t = r[s], l[s] = t.get ? t.get(o) : t; r = l } else r instanceof T && (r = r.get(o)); n.autoBind === !1 && n.valuePrimitive !== !0 ? i._preselect(a, r) : i.value(r) } }, destroy: function () { this.widget.unbind(N, this._change) } }) }, gantt: { dependencies: n("dependencies", "dependencies", "setDependenciesDataSource") }, multiselect: { value: v.extend({ init: function (t, n, i) { v.fn.init.call(this, t.element[0], n, i), this.widget = t, this._change = e.proxy(this.change, this), this.widget.first(N, this._change), this._initChange = !1 }, change: function () { var e, n, i, o, r, a, s, l, d, c = this, u = c.bindings[R].get(), h = c.options.valuePrimitive, p = h ? c.widget.value() : c.widget.dataItems(), f = this.options.dataValueField || this.options.dataTextField; if (p = p.slice(0), c._initChange = !0, u instanceof D) { for (e = [], n = p.length, i = 0, o = 0, r = u[i], a = !1; r !== t;) { for (d = !1, o = 0; o < n; o++)if (h ? a = p[o] == r : (l = p[o], l = l.get ? l.get(f) : l, a = l == (r.get ? r.get(f) : r)), a) { p.splice(o, 1), n -= 1, d = !0; break } d ? i += 1 : (e.push(r), b(u, i, 1), s = i), r = u[i] } b(u, u.length, 0, p), e.length && u.trigger("change", { action: "remove", items: e, index: s }), p.length && u.trigger("change", { action: "add", items: p, index: u.length - 1 }) } else c.bindings[R].set(p); c._initChange = !1 }, refresh: function () { if (!this._initChange) { var e, n, i = this.options, o = this.widget, r = i.dataValueField || i.dataTextField, a = this.bindings.value.get(), s = a, l = 0, d = []; if (a === t && (a = null), r) if (a instanceof D) { for (e = a.length; l < e; l++)n = a[l], d[l] = n.get ? n.get(r) : n; a = d } else a instanceof T && (a = a.get(r)); i.autoBind !== !1 || i.valuePrimitive === !0 || o._isBound() ? o.value(a) : o._preselect(s, a) } }, destroy: function () { this.widget.unbind(N, this._change) } }) }, scheduler: { source: n("source", "dataSource", "setDataSource").extend({ dataBound: function (e) { var t, n, i, o, r = this.widget, s = e.addedItems || r.items(); if (s.length) for (i = e.addedDataItems || r.dataItems(), o = this.bindings.source._parents(), t = 0, n = i.length; t < n; t++)a(s[t], i[t], this._ns(e.ns), [i[t]].concat(o)) } }) }, grid: { source: n("source", "dataSource", "setDataSource").extend({ dataBound: function (e) { var t, n, i, o, r = this.widget, s = e.addedItems || r.items(); if (s.length) for (o = e.addedDataItems || r.dataItems(), i = this.bindings.source._parents(), t = 0, n = o.length; t < n; t++)a(s[t], o[t], this._ns(e.ns), [o[t]].concat(i)) } }) } }, b = function (e, t, n, i) { var o, r, a, s, l; if (i = i || [], n = n || 0, o = i.length, r = e.length, a = [].slice.call(e, t + n), s = a.length, o) { for (o = t + o, l = 0; t < o; t++)e[t] = i[l], l++; e.length = o } else if (n) for (e.length = t, n += t; t < n;)delete e[--n]; if (s) { for (s = t + s, l = 0; t < s; t++)e[t] = a[l], l++; e.length = s } for (t = e.length; t < r;)delete e[t], t++ }, w = I.extend({ init: function (e, t) { this.target = e, this.options = t, this.toDestroy = [] }, bind: function (e) { var t, n, i, o, r, a, s = this instanceof k, l = this.binders(); for (t in e) t == R ? n = !0 : t == F ? i = !0 : t != P || s ? t == z ? r = !0 : t == B ? a = !0 : this.applyBinding(t, e, l) : o = !0; i && this.applyBinding(F, e, l), n && this.applyBinding(R, e, l), r && this.applyBinding(z, e, l), o && !s && this.applyBinding(P, e, l), a && !s && this.applyBinding(B, e, l) }, binders: function () { return E[this.target.nodeName.toLowerCase()] || {} }, applyBinding: function (e, t, n) { var i, o = n[e] || E[e], r = this.toDestroy, a = t[e]; if (o) if (o = new o(this.target, t, this.options), r.push(o), a instanceof f) o.bind(a), r.push(a); else for (i in a) o.bind(a, i), r.push(a[i]); else if ("template" !== e) throw Error("The " + e + " binding is not supported by the " + this.target.nodeName.toLowerCase() + " element") }, destroy: function () { var e, t, n = this.toDestroy; for (e = 0, t = n.length; e < t; e++)n[e].destroy() } }), k = w.extend({ binders: function () { return E.widget[this.target.options.name.toLowerCase()] || {} }, applyBinding: function (e, t, n) { var i, o = n[e] || E.widget[e], r = this.toDestroy, a = t[e]; if (!o) throw Error("The " + e + " binding is not supported by the " + this.target.options.name + " widget"); if (o = new o(this.target, t, this.target.options), r.push(o), a instanceof f) o.bind(a), r.push(a); else for (i in a) o.bind(a, i), r.push(a[i]) } }), y = /[A-Za-z0-9_\-]+:(\{([^}]*)\}|[^,}]+)/g, x = /\s/g, C.unbind = u, C.bind = s, C.data.binders = E, C.data.Binder = v, C.notify = h, C.observable = function (e) { return e instanceof T || (e = new T(e)), e }, C.observableHierarchy = function (e) { function t(e) { var n, i; for (n = 0; n < e.length; n++)e[n]._initChildren(), i = e[n].children, i.fetch(), e[n].items = i.data(), t(e[n].items) } var n = C.data.HierarchicalDataSource.create(e); return n.fetch(), t(n.data()), n._data._dataSource = n, n._data } }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.fx.min", ["kendo.core.min"], e) }(function () { return function (e, t) { function n(e) { return parseInt(e, 10) } function i(e, t) { return n(e.css(t)) } function o(e) { var t, n = []; for (t in e) n.push(t); return n } function r(e) { for (var t in e) W.indexOf(t) != -1 && U.indexOf(t) == -1 && delete e[t]; return e } function a(e, t) { var n, i, o, r, a = [], s = {}; for (i in t) n = i.toLowerCase(), r = M && W.indexOf(n) != -1, !E.hasHW3D && r && U.indexOf(n) == -1 ? delete t[i] : (o = t[i], r ? a.push(i + "(" + o + ")") : s[i] = o); return a.length && (s[se] = a.join(" ")), s } function s(e, t) { var i, o, r; return M ? (i = e.css(se), i == Y ? "scale" == t ? 1 : 0 : (o = i.match(RegExp(t + "\\s*\\(([\\d\\w\\.]+)")), r = 0, o ? r = n(o[1]) : (o = i.match(B) || [0, 0, 0, 0, 0], t = t.toLowerCase(), H.test(t) ? r = parseFloat(o[3] / o[2]) : "translatey" == t ? r = parseFloat(o[4] / o[2]) : "scale" == t ? r = parseFloat(o[2]) : "rotate" == t && (r = parseFloat(Math.atan2(o[2], o[1])))), r)) : parseFloat(e.css(t)) } function l(e) { return e.charAt(0).toUpperCase() + e.substring(1) } function d(e, t) { var n = f.extend(t), i = n.prototype.directions; S[l(e)] = n, S.Element.prototype[e] = function (e, t, i, o) { return new n(this.element, e, t, i, o) }, T(i, function (t, i) { S.Element.prototype[e + l(i)] = function (e, t, o) { return new n(this.element, i, e, t, o) } }) } function c(e, n, i, o) { d(e, { directions: m, startValue: function (e) { return this._startValue = e, this }, endValue: function (e) { return this._endValue = e, this }, shouldHide: function () { return this._shouldHide }, prepare: function (e, r) { var a, s, l = this, d = "out" === this._direction, c = l.element.data(n), u = !(isNaN(c) || c == i); a = u ? c : t !== this._startValue ? this._startValue : d ? i : o, s = t !== this._endValue ? this._endValue : d ? o : i, this._reverse ? (e[n] = s, r[n] = a) : (e[n] = a, r[n] = s), l._shouldHide = r[n] === o } }) } function u(e, t) { var n = C.directions[t].vertical, i = e[n ? J : X]() / 2 + "px"; return _[t].replace("$size", i) } var h, p, f, g, m, v, _, b, w, k, y, x, C = window.kendo, S = C.effects, T = e.each, D = e.extend, A = e.proxy, E = C.support, I = E.browser, M = E.transforms, R = E.transitions, F = { scale: 0, scalex: 0, scaley: 0, scale3d: 0 }, P = { translate: 0, translatex: 0, translatey: 0, translate3d: 0 }, z = t !== document.documentElement.style.zoom && !M, B = /matrix3?d?\s*\(.*,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?/i, L = /^(-?[\d\.\-]+)?[\w\s]*,?\s*(-?[\d\.\-]+)?[\w\s]*/i, H = /translatex?$/i, N = /(zoom|fade|expand)(\w+)/, O = /(zoom|fade|expand)/, V = /[xy]$/i, W = ["perspective", "rotate", "rotatex", "rotatey", "rotatez", "rotate3d", "scale", "scalex", "scaley", "scalez", "scale3d", "skew", "skewx", "skewy", "translate", "translatex", "translatey", "translatez", "translate3d", "matrix", "matrix3d"], U = ["rotate", "scale", "scalex", "scaley", "skew", "skewx", "skewy", "translate", "translatex", "translatey", "matrix"], j = { rotate: "deg", scale: "", skew: "px", translate: "px" }, q = M.css, G = Math.round, $ = "", K = "px", Y = "none", Q = "auto", X = "width", J = "height", Z = "hidden", ee = "origin", te = "abortId", ne = "overflow", ie = "translate", oe = "position", re = "completeCallback", ae = q + "transition", se = q + "transform", le = q + "backface-visibility", de = q + "perspective", ce = "1500px", ue = "perspective(" + ce + ")", he = { left: { reverse: "right", property: "left", transition: "translatex", vertical: !1, modifier: -1 }, right: { reverse: "left", property: "left", transition: "translatex", vertical: !1, modifier: 1 }, down: { reverse: "up", property: "top", transition: "translatey", vertical: !0, modifier: 1 }, up: { reverse: "down", property: "top", transition: "translatey", vertical: !0, modifier: -1 }, top: { reverse: "bottom" }, bottom: { reverse: "top" }, "in": { reverse: "out", modifier: -1 }, out: { reverse: "in", modifier: 1 }, vertical: { reverse: "vertical" }, horizontal: { reverse: "horizontal" } }; C.directions = he, D(e.fn, { kendoStop: function (e, t) { return R ? S.stopQueue(this, e || !1, t || !1) : this.stop(e, t) } }), M && !R && (T(U, function (n, i) { e.fn[i] = function (n) { if (t === n) return s(this, i); var o = e(this)[0], r = i + "(" + n + j[i.replace(V, "")] + ")"; return o.style.cssText.indexOf(se) == -1 ? e(this).css(se, r) : o.style.cssText = o.style.cssText.replace(RegExp(i + "\\(.*?\\)", "i"), r), this }, e.fx.step[i] = function (t) { e(t.elem)[i](t.now) } }), h = e.fx.prototype.cur, e.fx.prototype.cur = function () { return U.indexOf(this.prop) != -1 ? parseFloat(e(this.elem)[this.prop]()) : h.apply(this, arguments) }), C.toggleClass = function (e, t, n, i) { return t && (t = t.split(" "), R && (n = D({ exclusive: "all", duration: 400, ease: "ease-out" }, n), e.css(ae, n.exclusive + " " + n.duration + "ms " + n.ease), setTimeout(function () { e.css(ae, "").css(J) }, n.duration)), T(t, function (t, n) { e.toggleClass(n, i) })), e }, C.parseEffects = function (e, t) { var n = {}; return "string" == typeof e ? T(e.split(" "), function (e, i) { var o = !O.test(i), r = i.replace(N, function (e, t, n) { return t + ":" + n.toLowerCase() }), a = r.split(":"), s = a[1], l = {}; a.length > 1 && (l.direction = t && o ? he[s].reverse : s), n[a[0]] = l }) : T(e, function (e) { var i = this.direction; i && t && !O.test(e) && (this.direction = he[i].reverse), n[e] = this }), n }, R && D(S, { transition: function (t, n, i) { var r, s, l, d, c = 0, u = t.data("keys") || []; i = D({ duration: 200, ease: "ease-out", complete: null, exclusive: "all" }, i), l = !1, d = function () { l || (l = !0, s && (clearTimeout(s), s = null), t.removeData(te).dequeue().css(ae, "").css(ae), i.complete.call(t)) }, i.duration = e.fx ? e.fx.speeds[i.duration] || i.duration : i.duration, r = a(t, n), e.merge(u, o(r)), e.hasOwnProperty("uniqueSort") ? t.data("keys", e.uniqueSort(u)).height() : t.data("keys", e.unique(u)).height(), t.css(ae, i.exclusive + " " + i.duration + "ms " + i.ease).css(ae), t.css(r).css(se), R.event && (t.one(R.event, d), 0 !== i.duration && (c = 500)), s = setTimeout(d, i.duration + c), t.data(te, s), t.data(re, d) }, stopQueue: function (e, t, n) { var i, o = e.data("keys"), r = !n && o, a = e.data(re); return r && (i = C.getComputedStyles(e[0], o)), a && a(), r && e.css(i), e.removeData("keys").stop(t) } }), p = C.Class.extend({ init: function (e, t) { var n = this; n.element = e, n.effects = [], n.options = t, n.restore = [] }, run: function (t) { var n, i, o, s, l, d, c, u = this, h = t.length, p = u.element, f = u.options, g = e.Deferred(), m = {}, v = {}; for (u.effects = t, g.done(e.proxy(u, "complete")), p.data("animating", !0), i = 0; i < h; i++)for (n = t[i], n.setReverse(f.reverse), n.setOptions(f), u.addRestoreProperties(n.restore), n.prepare(m, v), l = n.children(), o = 0, d = l.length; o < d; o++)l[o].duration(f.duration).run(); for (c in f.effects) D(v, f.effects[c].properties); for (p.is(":visible") || D(m, { display: p.data("olddisplay") || "block" }), M && !f.reset && (s = p.data("targetTransform"), s && (m = D(s, m))), m = a(p, m), M && !R && (m = r(m)), p.css(m).css(se), i = 0; i < h; i++)t[i].setup(); return f.init && f.init(), p.data("targetTransform", v), S.animate(p, v, D({}, f, { complete: g.resolve })), g.promise() }, stop: function () { e(this.element).kendoStop(!0, !0) }, addRestoreProperties: function (e) { for (var t, n = this.element, i = 0, o = e.length; i < o; i++)t = e[i], this.restore.push(t), n.data(t) || n.data(t, n.css(t)) }, restoreCallback: function () { var e, t, n, i = this.element; for (e = 0, t = this.restore.length; e < t; e++)n = this.restore[e], i.css(n, i.data(n)) }, complete: function () { var t = this, n = 0, i = t.element, o = t.options, r = t.effects, a = r.length; for (i.removeData("animating").dequeue(), o.hide && i.data("olddisplay", i.css("display")).hide(), this.restoreCallback(), z && !M && setTimeout(e.proxy(this, "restoreCallback"), 0); n < a; n++)r[n].teardown(); o.completeCallback && o.completeCallback(i) } }), S.promise = function (e, t) { var n, i, o, r = [], a = new p(e, t), s = C.parseEffects(t.effects); t.effects = s; for (o in s) n = S[l(o)], n && (i = new n(e, s[o].direction), r.push(i)); r[0] ? a.run(r) : (e.is(":visible") || e.css({ display: e.data("olddisplay") || "block" }).css("display"), t.init && t.init(), e.dequeue(), a.complete()) }, D(S, { animate: function (n, o, a) { var s = a.transition !== !1; delete a.transition, R && "transition" in S && s ? S.transition(n, o, a) : M ? n.animate(r(o), { queue: !1, show: !1, hide: !1, duration: a.duration, complete: a.complete }) : n.each(function () { var n = e(this), r = {}; T(W, function (e, a) { var s, l, d, c, u, h, p, f = o ? o[a] + " " : null; f && (l = o, a in F && o[a] !== t ? (s = f.match(L), M && D(l, { scale: +s[0] })) : a in P && o[a] !== t && (d = n.css(oe), c = "absolute" == d || "fixed" == d, n.data(ie) || (c ? n.data(ie, { top: i(n, "top") || 0, left: i(n, "left") || 0, bottom: i(n, "bottom"), right: i(n, "right") }) : n.data(ie, { top: i(n, "marginTop") || 0, left: i(n, "marginLeft") || 0 })), u = n.data(ie), s = f.match(L), s && (h = a == ie + "y" ? 0 : +s[1], p = a == ie + "y" ? +s[1] : +s[2], c ? (isNaN(u.right) ? isNaN(h) || D(l, { left: u.left + h }) : isNaN(h) || D(l, { right: u.right - h }), isNaN(u.bottom) ? isNaN(p) || D(l, { top: u.top + p }) : isNaN(p) || D(l, { bottom: u.bottom - p })) : (isNaN(h) || D(l, { marginLeft: u.left + h }), isNaN(p) || D(l, { marginTop: u.top + p })))), !M && "scale" != a && a in l && delete l[a], l && D(r, l)) }), I.msie && delete r.scale, n.animate(r, { queue: !1, show: !1, hide: !1, duration: a.duration, complete: a.complete }) }) } }), S.animatedPromise = S.promise, f = C.Class.extend({ init: function (e, t) { var n = this; n.element = e, n._direction = t, n.options = {}, n._additionalEffects = [], n.restore || (n.restore = []) }, reverse: function () { return this._reverse = !0, this.run() }, play: function () { return this._reverse = !1, this.run() }, add: function (e) { return this._additionalEffects.push(e), this }, direction: function (e) { return this._direction = e, this }, duration: function (e) { return this._duration = e, this }, compositeRun: function () { var e = this, t = new p(e.element, { reverse: e._reverse, duration: e._duration }), n = e._additionalEffects.concat([e]); return t.run(n) }, run: function () { if (this._additionalEffects && this._additionalEffects[0]) return this.compositeRun(); var t, n, i = this, o = i.element, s = 0, l = i.restore, d = l.length, c = e.Deferred(), u = {}, h = {}, p = i.children(), f = p.length; for (c.done(e.proxy(i, "_complete")), o.data("animating", !0), s = 0; s < d; s++)t = l[s], o.data(t) || o.data(t, o.css(t)); for (s = 0; s < f; s++)p[s].duration(i._duration).run(); return i.prepare(u, h), o.is(":visible") || D(u, { display: o.data("olddisplay") || "block" }), M && (n = o.data("targetTransform"), n && (u = D(n, u))), u = a(o, u), M && !R && (u = r(u)), o.css(u).css(se), i.setup(), o.data("targetTransform", h), S.animate(o, h, { duration: i._duration, complete: c.resolve }), c.promise() }, stop: function () { var t = 0, n = this.children(), i = n.length; for (t = 0; t < i; t++)n[t].stop(); return e(this.element).kendoStop(!0, !0), this }, restoreCallback: function () { var e, t, n, i = this.element; for (e = 0, t = this.restore.length; e < t; e++)n = this.restore[e], i.css(n, i.data(n)) }, _complete: function () { var t = this, n = t.element; n.removeData("animating").dequeue(), t.restoreCallback(), t.shouldHide() && n.data("olddisplay", n.css("display")).hide(), z && !M && setTimeout(e.proxy(t, "restoreCallback"), 0), t.teardown() }, setOptions: function (e) { D(!0, this.options, e) }, children: function () { return [] }, shouldHide: e.noop, setup: e.noop, prepare: e.noop, teardown: e.noop, directions: [], setReverse: function (e) { return this._reverse = e, this } }), g = ["left", "right", "up", "down"], m = ["in", "out"], d("slideIn", { directions: g, divisor: function (e) { return this.options.divisor = e, this }, prepare: function (e, t) { var n, i = this, o = i.element, r = C._outerWidth, a = C._outerHeight, s = he[i._direction], l = -s.modifier * (s.vertical ? a(o) : r(o)), d = l / (i.options && i.options.divisor || 1) + K, c = "0px"; i._reverse && (n = e, e = t, t = n), M ? (e[s.transition] = d, t[s.transition] = c) : (e[s.property] = d, t[s.property] = c) } }), d("tile", { directions: g, init: function (e, t, n) { f.prototype.init.call(this, e, t), this.options = { previous: n } }, previousDivisor: function (e) { return this.options.previousDivisor = e, this }, children: function () { var e = this, t = e._reverse, n = e.options.previous, i = e.options.previousDivisor || 1, o = e._direction, r = [C.fx(e.element).slideIn(o).setReverse(t)]; return n && r.push(C.fx(n).slideIn(he[o].reverse).divisor(i).setReverse(!t)), r } }), c("fade", "opacity", 1, 0), c("zoom", "scale", 1, .01), d("slideMargin", { prepare: function (e, t) { var n, i = this, o = i.element, r = i.options, a = o.data(ee), s = r.offset, l = i._reverse; l || null !== a || o.data(ee, parseFloat(o.css("margin-" + r.axis))), n = o.data(ee) || 0, t["margin-" + r.axis] = l ? n : n + s } }), d("slideTo", { prepare: function (e, t) { var n = this, i = n.element, o = n.options, r = o.offset.split(","), a = n._reverse; M ? (t.translatex = a ? 0 : r[0], t.translatey = a ? 0 : r[1]) : (t.left = a ? 0 : r[0], t.top = a ? 0 : r[1]), i.css("left") } }), d("expand", { directions: ["horizontal", "vertical"], restore: [ne], prepare: function (e, n) { var i = this, o = i.element, r = i.options, a = i._reverse, s = "vertical" === i._direction ? J : X, l = o[0].style[s], d = o.data(s), c = parseFloat(d || l), u = G(o.css(s, Q)[s]()); e.overflow = Z, c = r && r.reset ? u || c : c || u, n[s] = (a ? 0 : c) + K, e[s] = (a ? c : 0) + K, d === t && o.data(s, l) }, shouldHide: function () { return this._reverse }, teardown: function () { var e = this, t = e.element, n = "vertical" === e._direction ? J : X, i = t.data(n); i != Q && i !== $ || setTimeout(function () { t.css(n, Q).css(n) }, 0) } }), v = { position: "absolute", marginLeft: 0, marginTop: 0, scale: 1 }, d("transfer", { init: function (e, t) { this.element = e, this.options = { target: t }, this.restore = [] }, setup: function () { this.element.appendTo(document.body) }, prepare: function (e, t) { var n = this, i = n.element, o = S.box(i), r = S.box(n.options.target), a = s(i, "scale"), l = S.fillScale(r, o), d = S.transformOrigin(r, o); D(e, v), t.scale = 1, i.css(se, "scale(1)").css(se), i.css(se, "scale(" + a + ")"), e.top = o.top, e.left = o.left, e.transformOrigin = d.x + K + " " + d.y + K, n._reverse ? e.scale = l : t.scale = l } }), _ = { top: "rect(auto auto $size auto)", bottom: "rect($size auto auto auto)", left: "rect(auto $size auto auto)", right: "rect(auto auto auto $size)" }, b = { top: { start: "rotatex(0deg)", end: "rotatex(180deg)" }, bottom: { start: "rotatex(-180deg)", end: "rotatex(0deg)" }, left: { start: "rotatey(0deg)", end: "rotatey(-180deg)" }, right: { start: "rotatey(180deg)", end: "rotatey(0deg)" } }, d("turningPage", { directions: g, init: function (e, t, n) { f.prototype.init.call(this, e, t), this._container = n }, prepare: function (e, t) { var n = this, i = n._reverse, o = i ? he[n._direction].reverse : n._direction, r = b[o]; e.zIndex = 1, n._clipInHalf && (e.clip = u(n._container, C.directions[o].reverse)), e[le] = Z, t[se] = ue + (i ? r.start : r.end), e[se] = ue + (i ? r.end : r.start) }, setup: function () { this._container.append(this.element) }, face: function (e) { return this._face = e, this }, shouldHide: function () { var e = this, t = e._reverse, n = e._face; return t && !n || !t && n }, clipInHalf: function (e) { return this._clipInHalf = e, this }, temporary: function () { return this.element.addClass("temp-page"), this } }), d("staticPage", { directions: g, init: function (e, t, n) { f.prototype.init.call(this, e, t), this._container = n }, restore: ["clip"], prepare: function (e, t) { var n = this, i = n._reverse ? he[n._direction].reverse : n._direction; e.clip = u(n._container, i), e.opacity = .999, t.opacity = 1 }, shouldHide: function () { var e = this, t = e._reverse, n = e._face; return t && !n || !t && n }, face: function (e) { return this._face = e, this } }), d("pageturn", { directions: ["horizontal", "vertical"], init: function (e, t, n, i) { f.prototype.init.call(this, e, t), this.options = {}, this.options.face = n, this.options.back = i }, children: function () { var e, t = this, n = t.options, i = "horizontal" === t._direction ? "left" : "top", o = C.directions[i].reverse, r = t._reverse, a = n.face.clone(!0).removeAttr("id"), s = n.back.clone(!0).removeAttr("id"), l = t.element; return r && (e = i, i = o, o = e), [C.fx(n.face).staticPage(i, l).face(!0).setReverse(r), C.fx(n.back).staticPage(o, l).setReverse(r), C.fx(a).turningPage(i, l).face(!0).clipInHalf(!0).temporary().setReverse(r), C.fx(s).turningPage(o, l).clipInHalf(!0).temporary().setReverse(r)] }, prepare: function (e, t) { e[de] = ce, e.transformStyle = "preserve-3d", e.opacity = .999, t.opacity = 1 }, teardown: function () { this.element.find(".temp-page").remove() } }), d("flip", { directions: ["horizontal", "vertical"], init: function (e, t, n, i) { f.prototype.init.call(this, e, t), this.options = {}, this.options.face = n, this.options.back = i }, children: function () { var e, t = this, n = t.options, i = "horizontal" === t._direction ? "left" : "top", o = C.directions[i].reverse, r = t._reverse, a = t.element; return r && (e = i, i = o, o = e), [C.fx(n.face).turningPage(i, a).face(!0).setReverse(r), C.fx(n.back).turningPage(o, a).setReverse(r)] }, prepare: function (e) { e[de] = ce, e.transformStyle = "preserve-3d" } }), w = !E.mobileOS.android, k = ".km-touch-scrollbar, .km-actionsheet-wrapper", d("replace", { _before: e.noop, _after: e.noop, init: function (t, n, i) { f.prototype.init.call(this, t), this._previous = e(n), this._transitionClass = i }, duration: function () { throw Error("The replace effect does not support duration setting; the effect duration may be customized through the transition class rule") }, beforeTransition: function (e) { return this._before = e, this }, afterTransition: function (e) { return this._after = e, this }, _both: function () { return e().add(this._element).add(this._previous) }, _containerClass: function () { var e = this._direction, t = "k-fx k-fx-start k-fx-" + this._transitionClass; return e && (t += " k-fx-" + e), this._reverse && (t += " k-fx-reverse"), t }, complete: function (t) { if (!(!this.deferred || t && e(t.target).is(k))) { var n = this.container; n.removeClass("k-fx-end").removeClass(this._containerClass()).off(R.event, this.completeProxy), this._previous.hide().removeClass("k-fx-current"), this.element.removeClass("k-fx-next"), w && n.css(ne, ""), this.isAbsolute || this._both().css(oe, ""), this.deferred.resolve(), delete this.deferred } }, run: function () { if (this._additionalEffects && this._additionalEffects[0]) return this.compositeRun(); var t, n = this, i = n.element, o = n._previous, r = i.parents().filter(o.parents()).first(), a = n._both(), s = e.Deferred(), l = i.css(oe); return r.length || (r = i.parent()), this.container = r, this.deferred = s, this.isAbsolute = "absolute" == l, this.isAbsolute || a.css(oe, "absolute"), w && (t = r.css(ne), r.css(ne, "hidden")), R ? (i.addClass("k-fx-hidden"), r.addClass(this._containerClass()), this.completeProxy = e.proxy(this, "complete"), r.on(R.event, this.completeProxy), C.animationFrame(function () { i.removeClass("k-fx-hidden").addClass("k-fx-next"), o.css("display", "").addClass("k-fx-current"), n._before(o, i), C.animationFrame(function () { r.removeClass("k-fx-start").addClass("k-fx-end"), n._after(o, i) }) })) : this.complete(), s.promise() }, stop: function () { this.complete() } }), y = C.Class.extend({ init: function () { var e = this; e._tickProxy = A(e._tick, e), e._started = !1 }, tick: e.noop, done: e.noop, onEnd: e.noop, onCancel: e.noop, start: function () { this.enabled() && (this.done() ? this.onEnd() : (this._started = !0, C.animationFrame(this._tickProxy))) }, enabled: function () { return !0 }, cancel: function () { this._started = !1, this.onCancel() }, _tick: function () { var e = this; e._started && (e.tick(), e.done() ? (e._started = !1, e.onEnd()) : C.animationFrame(e._tickProxy)) } }), x = y.extend({ init: function (e) { var t = this; D(t, e), y.fn.init.call(t) }, done: function () { return this.timePassed() >= this.duration }, timePassed: function () { return Math.min(this.duration, new Date - this.startDate) }, moveTo: function (e) { var t = this, n = t.movable; t.initial = n[t.axis], t.delta = e.location - t.initial, t.duration = "number" == typeof e.duration ? e.duration : 300, t.tick = t._easeProxy(e.ease), t.startDate = new Date, t.start() }, _easeProxy: function (e) { var t = this; return function () { t.movable.moveAxis(t.axis, e(t.timePassed(), t.initial, t.delta, t.duration)) } } }), D(x, { easeOutExpo: function (e, t, n, i) { return e == i ? t + n : n * (-Math.pow(2, -10 * e / i) + 1) + t }, easeOutBack: function (e, t, n, i, o) { return o = 1.70158, n * ((e = e / i - 1) * e * ((o + 1) * e + o) + 1) + t } }), S.Animation = y, S.Transition = x, S.createEffect = d, S.box = function (t) { t = e(t); var n = t.offset(); return n.width = C._outerWidth(t), n.height = C._outerHeight(t), n }, S.transformOrigin = function (e, t) { var n = (e.left - t.left) * t.width / (t.width - e.width), i = (e.top - t.top) * t.height / (t.height - e.height); return { x: isNaN(n) ? 0 : n, y: isNaN(i) ? 0 : i } }, S.fillScale = function (e, t) { return Math.min(e.width / t.width, e.height / t.height) }, S.fitScale = function (e, t) { return Math.max(e.width / t.width, e.height / t.height) } }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.view.min", ["kendo.core.min", "kendo.binder.min", "kendo.fx.min"], e) }(function () { return function (e, t) { function n(e) { if (!e) return {}; var t = e.match(F) || []; return { type: t[1], direction: t[3], reverse: "reverse" === t[5] } } var i = window.kendo, o = i.attr, r = i.ui, a = i.attrValue, s = i.directiveSelector, l = i.Observable, d = i.ui.Widget, c = i.roleSelector, u = "SCRIPT", h = "init", p = "transitionStart", f = "transitionEnd", g = "show", m = "hide", v = "attach", _ = "detach", b = /unrecognized expression/, w = /]*>(([\u000a\u000d\u2028\u2029]|.)*)<\/body>/i, k = "loadStart", y = "loadComplete", x = "showStart", C = "sameViewRequested", S = "viewShow", T = "viewTypeDetermined", D = "after", A = { content: "k-content", view: "k-view", stretchedView: "k-stretched-view", widget: "k-widget", header: "k-header", footer: "k-footer" }, E = i.ui.Widget.extend({ init: function (t, n) { var o = this; n = n || {}, o.id = i.guid(), l.fn.init.call(o), this.options = e.extend({}, this.options, n), o.content = t, o.options.renderOnInit && d.fn.init.call(o, o._createElement(), n), o.options.wrapInSections && o._renderSections(), o.tagName = n.tagName || "div", o.model = n.model, o._wrap = n.wrap !== !1, this._evalTemplate = n.evalTemplate || !1, o._fragments = {}, o.bind([h, g, m, p, f], n) }, options: { name: "View", renderOnInit: !1, wrapInSections: !1, detachOnHide: !0, detachOnDestroy: !0 }, render: function (t) { var n = this, o = !n.element; return o && (n.element = n._createElement()), t && e(t).append(n.element), o && (i.bind(n.element, n.model), n.trigger(h)), t && (n._eachFragment(v), n.trigger(g)), n.element }, clone: function () { return new I(this) }, triggerBeforeShow: function () { return !0 }, triggerBeforeHide: function () { return !0 }, showStart: function () { var e = this, t = e.render(); t && t.css("display", ""), this.trigger(x, { view: this }) }, showEnd: function () { }, hideEnd: function () { this.hide() }, beforeTransition: function (e) { this.trigger(p, { type: e }) }, afterTransition: function (e) { this.trigger(f, { type: e }) }, hide: function () { this.options.detachOnHide && (this._eachFragment(_), e(this.element).detach()), this.trigger(m) }, destroy: function () { var e = this, t = e.element; t && (d.fn.destroy.call(e), i.unbind(t), i.destroy(t), e.options.detachOnDestroy && t.remove()) }, purge: function () { var t = this; t.destroy(), e(t.element).add(t.content).add(t.wrapper).off().remove() }, fragments: function (t) { e.extend(this._fragments, t) }, _eachFragment: function (e) { for (var t in this._fragments) this._fragments[t][e](this, t) }, _createElement: function () { var t, n, o, r = this, a = "<" + r.tagName + ">"; try { n = e(document.getElementById(r.content) || r.content), n[0].tagName === u && (n = n.html()) } catch (s) { b.test(s.message) && (n = r.content) } return "string" == typeof n ? (n = n.replace(/^\s+|\s+$/g, ""), r._evalTemplate && (n = i.template(n)(r.model || {})), t = e(a).append(n), r._wrap || (t = t.contents())) : (t = n, r._evalTemplate && (o = e(i.template(e("
    ").append(t.clone(!0)).html())(r.model || {})), e.contains(document, t[0]) && t.replaceWith(o), t = o), r._wrap && (t = t.wrapAll(a).parent())), t }, _renderSections: function () { var e = this; e.options.wrapInSections && (e._wrapper(), e._createContent(), e._createHeader(), e._createFooter()) }, _wrapper: function () { var e, t = this, n = t.content; t.wrapper = n.is(c("view")) ? t.content : n.wrap("
    ').parent(), e = t.wrapper, e.attr("id", t.id), e.addClass(A.view), e.addClass(A.widget), e.attr("role", "view") }, _createContent: function () { var t, n = this, i = e(n.wrapper), r = c("content"); i.children(r)[0] || (t = i.children().filter(function () { var t = e(this); if (!t.is(c("header")) && !t.is(c("footer"))) return t }), t.wrap("
    ')), this.contentElement = i.children(c("content")), this.contentElement.addClass(A.stretchedView).addClass(A.content) }, _createHeader: function () { var e = this, t = e.wrapper; this.header = t.children(c("header")).addClass(A.header) }, _createFooter: function () { var e = this, t = e.wrapper; this.footer = t.children(c("footer")).addClass(A.footer) } }), I = i.Class.extend({ init: function (t) { e.extend(this, { element: t.element.clone(!0), transition: t.transition, id: t.id }), t.element.parent().append(this.element) }, hideEnd: function () { this.element.remove() }, beforeTransition: e.noop, afterTransition: e.noop }), M = E.extend({ init: function (e, t) { E.fn.init.call(this, e, t), this.containers = {} }, container: function (e) { var t = this.containers[e]; return t || (t = this._createContainer(e), this.containers[e] = t), t }, showIn: function (e, t, n) { this.container(e).show(t, n) }, _createContainer: function (e) { var t, n = this.render(), i = n.find(e); if (!i.length && n.is(e)) { if (!n.is(e)) throw Error("can't find a container with the specified " + e + " selector"); i = n } return t = new P(i), t.bind("accepted", function (e) { e.view.render(i) }), t } }), R = E.extend({ attach: function (e, t) { e.element.find(t).replaceWith(this.render()) }, detach: function () { } }), F = /^(\w+)(:(\w+))?( (\w+))?$/, P = l.extend({ init: function (e) { l.fn.init.call(this), this.container = e, this.history = [], this.view = null, this.running = !1 }, after: function () { this.running = !1, this.trigger("complete", { view: this.view }), this.trigger("after") }, end: function () { this.view.showEnd(), this.previous.hideEnd(), this.after() }, show: function (e, t, o) { if (!e.triggerBeforeShow() || this.view && !this.view.triggerBeforeHide()) return this.trigger("after"), !1; o = o || e.id; var r = this, a = e === r.view ? e.clone() : r.view, s = r.history, l = s[s.length - 2] || {}, d = l.id === o, c = t || (d ? s[s.length - 1].transition : e.transition), u = n(c); return r.running && r.effect.stop(), "none" === c && (c = null), r.trigger("accepted", { view: e }), r.view = e, r.previous = a, r.running = !0, d ? s.pop() : s.push({ id: o, transition: c }), a ? (c && i.effects.enabled ? (e.element.addClass("k-fx-hidden"), e.showStart(), d && !t && (u.reverse = !u.reverse), r.effect = i.fx(e.element).replace(a.element, u.type).beforeTransition(function () { e.beforeTransition("show"), a.beforeTransition("hide") }).afterTransition(function () { e.afterTransition("show"), a.afterTransition("hide") }).direction(u.direction).setReverse(u.reverse), r.effect.run().then(function () { r.end() })) : (e.showStart(), r.end()), !0) : (e.showStart(), e.showEnd(), r.after(), !0) }, destroy: function () { var e = this, t = e.view; t && t.destroy && t.destroy() } }), z = l.extend({ init: function (t) { var n, o, r = this; l.fn.init.call(r), r.options = t, e.extend(r, t), r.sandbox = e("
    "), o = r.container, n = r._hideViews(o), r.rootView = n.first(), r.layouts = {}, r.viewContainer = new i.ViewContainer(r.container), r.viewContainer.bind("accepted", function (e) { e.view.params = r.params }), r.viewContainer.bind("complete", function (e) { r.trigger(S, { view: e.view }) }), r.viewContainer.bind(D, function () { r.trigger(D) }), this.bind(this.events, t) }, events: [x, D, S, k, y, C, T], destroy: function () { var e, t = this, n = t.viewContainer; i.destroy(t.container); for (e in t.layouts) this.layouts[e].destroy(); n && n.destroy() }, view: function () { return this.viewContainer.view }, showView: function (e, t, n) { if (e = e.replace(RegExp("^" + this.remoteViewURLPrefix), ""), "" === e && this.remoteViewURLPrefix && (e = "/"), e.replace(/^#/, "") === this.url) return this.trigger(C), !1; this.trigger(x); var o = this, r = o._findViewElement(e), a = i.widgetInstance(r); return o.url = e.replace(/^#/, ""), o.params = n, a && a.reload && (a.purge(), r = []), this.trigger(T, { remote: 0 === r.length, url: e }), !r[0] || (a || (a = o._createView(r)), o.viewContainer.show(a, t, e)) }, append: function (e, t) { var n, i, r = this.sandbox, a = (t || "").split("?")[0], s = this.container; return w.test(e) && (e = RegExp.$1), r[0].innerHTML = e, s.append(r.children("script, style")), n = this._hideViews(r), i = n.first(), i.length || (n = i = r.wrapInner("
    ").children()), a && i.hide().attr(o("url"), a), s.append(n), this._createView(i) }, _locate: function (e) { return this.$angular ? s(e) : c(e) }, _findViewElement: function (e) { var t, n = e.split("?")[0]; return n ? (t = this.container.children("[" + o("url") + "='" + n + "']"), t[0] || n.indexOf("/") !== -1 || (t = this.container.children("#" === n.charAt(0) ? n : "#" + n)), t[0] || (t = this._findViewElementById(e)), t) : this.rootView }, _findViewElementById: function (e) { var t = this.container.children("[id='" + e + "']"); return t }, _createView: function (e) { return this._createSpaView(e) }, _createMobileView: function (e) { return i.initWidget(e, { defaultTransition: this.transition, loader: this.loader, container: this.container, getLayout: this.getLayoutProxy, modelScope: this.modelScope, reload: a(e, "reload") }, r.roles) }, _createSpaView: function (e) { var t = (this.options || {}).viewOptions || {}; return new i.View(e, { renderOnInit: t.renderOnInit, wrap: t.wrap || !1, wrapInSections: t.wrapInSections, detachOnHide: t.detachOnHide, detachOnDestroy: t.detachOnDestroy }) }, _hideViews: function (e) { return e.children(this._locate("view")).hide() } }); i.ViewEngine = z, i.ViewContainer = P, i.Fragment = R, i.Layout = M, i.View = E, i.ViewClone = I }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.dom.min", ["kendo.core.min"], e) }(function () { return function (e) { function t() { this.node = null } function n() { } function i(e, t, n) { this.nodeName = e, this.attr = t || {}, this.children = n || [] } function o(e) { this.nodeValue = e + "" } function r(e) { this.html = e } function a(e, t) { for (h.innerHTML = t; h.firstChild;)e.appendChild(h.firstChild) } function s(e) { return new r(e) } function l(e, t, n) { return new i(e, t, n) } function d(e) { return new o(e) } function c(e) { this.root = e, this.children = [] } var u, h; t.prototype = { remove: function () { this.node.parentNode && this.node.parentNode.removeChild(this.node), this.attr = {} }, attr: {}, text: function () { return "" } }, n.prototype = { nodeName: "#null", attr: { style: {} }, children: [], remove: function () { } }, u = new n, i.prototype = new t, i.prototype.appendTo = function (e) { var t, n = document.createElement(this.nodeName), i = this.children; for (t = 0; t < i.length; t++)i[t].render(n, u); return e.appendChild(n), n }, i.prototype.render = function (e, t) { var n, i, o, r, a, s; if (t.nodeName !== this.nodeName) t.remove(), n = this.appendTo(e); else { if (n = t.node, o = this.children, r = o.length, a = t.children, s = a.length, Math.abs(s - r) > 2) return void this.render({ appendChild: function (n) { e.replaceChild(n, t.node) } }, u); for (i = 0; i < r; i++)o[i].render(n, a[i] || u); for (i = r; i < s; i++)a[i].remove() } this.node = n, this.syncAttributes(t.attr), this.removeAttributes(t.attr) }, i.prototype.syncAttributes = function (e) { var t, n, i, o = this.attr; for (t in o) n = o[t], i = e[t], "style" === t ? this.setStyle(n, i) : n !== i && this.setAttribute(t, n, i) }, i.prototype.setStyle = function (e, t) { var n, i = this.node; if (t) for (n in e) e[n] !== t[n] && (i.style[n] = e[n]); else for (n in e) i.style[n] = e[n] }, i.prototype.removeStyle = function (e) { var t, n = this.attr.style || {}, i = this.node; for (t in e) void 0 === n[t] && (i.style[t] = "") }, i.prototype.removeAttributes = function (e) { var t, n = this.attr; for (t in e) "style" === t ? this.removeStyle(e.style) : void 0 === n[t] && this.removeAttribute(t) }, i.prototype.removeAttribute = function (e) { var t = this.node; "style" === e ? t.style.cssText = "" : "className" === e ? t.className = "" : t.removeAttribute(e) }, i.prototype.setAttribute = function (e, t) { var n = this.node; void 0 !== n[e] ? n[e] = t : n.setAttribute(e, t) }, i.prototype.text = function () { var e, t = ""; for (e = 0; e < this.children.length; ++e)t += this.children[e].text(); return t }, o.prototype = new t, o.prototype.nodeName = "#text", o.prototype.render = function (e, t) { var n; t.nodeName !== this.nodeName ? (t.remove(), n = document.createTextNode(this.nodeValue), e.appendChild(n)) : (n = t.node, this.nodeValue !== t.nodeValue && n.parentNode && (n.nodeValue = this.nodeValue)), this.node = n }, o.prototype.text = function () { return this.nodeValue }, r.prototype = { nodeName: "#html", attr: {}, remove: function () { var e, t; for (e = 0; e < this.nodes.length; e++)t = this.nodes[e], t.parentNode && t.parentNode.removeChild(t) }, render: function (e, t) { var n, i; if (t.nodeName !== this.nodeName || t.html !== this.html) for (t.remove(), n = e.lastChild, a(e, this.html), this.nodes = [], i = n ? n.nextSibling : e.firstChild; i; i = i.nextSibling)this.nodes.push(i); else this.nodes = t.nodes.slice(0) } }, h = document.createElement("div"), c.prototype = { html: s, element: l, text: d, render: function (e) { var t, n, i, o = this.children; for (t = 0, n = e.length; t < n; t++)i = o[t], i ? i.node && i.node.parentNode || (i.remove(), i = u) : i = u, e[t].render(this.root, i); for (t = n; t < o.length; t++)o[t].remove(); this.children = e } }, e.dom = { html: s, text: d, element: l, Tree: c, Node: t } }(window.kendo), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("ooxml/utils.min", ["kendo.core.min"], e) }(function () { !function () { kendo.ooxml = kendo.ooxml || {}, kendo.ooxml.createZip = function () { if ("undefined" == typeof JSZip) throw Error("JSZip not found. Check http://docs.telerik.com/kendo-ui/framework/excel/introduction#requirements for more details."); return new JSZip } }() }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("ooxml/kendo-ooxml.min", ["kendo.core.min", "ooxml/utils.min"], e) }(function () { !function (e) { function t(e, t, n) { return (1461 * (e + 4800 + ((t - 13) / 12 | 0)) / 4 | 0) + (367 * (t - 1 - 12 * ((t - 13) / 12 | 0)) / 12 | 0) - (3 * ((e + 4900 + ((t - 13) / 12 | 0)) / 100 | 0) / 4 | 0) + n - 32075 } function n(e, n, i) { return t(e, n, i) - W } function i(e, t, n, i) { return (e + (t + (n + i / 1e3) / 60) / 60) / 24 } function o(e) { var t = i(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()), o = n(e.getFullYear(), e.getMonth(), e.getDate()); return o < 0 ? o - 1 + t : o + t } function r(e) { return j + e } function a(e, t) { return t.indexOf(e) } function s(e) { return (e + "").replace(/&/g, "&").replace(//g, ">").replace(/\"/g, """).replace(/\'/g, "'") } function l(e, t) { var n, i = ""; for (n = 0; n < e; ++n)i += t(n); return i } function d(e, t) { var n, i = ""; if (null != e) if (Array.isArray(e)) for (n = 0; n < e.length; ++n)i += t(e[n], n); else "object" == typeof e && Object.keys(e).forEach(function (n, o) { i += t(e[n], n, o) }); return i } function c(e) { return "string" == typeof e ? "" + s(e) + "" : '' + s(e.src) + "" } function u(e) { var t = Math.floor(e / 26) - 1; return (t >= 0 ? u(t) : "") + String.fromCharCode(65 + e % 26) } function h(e, t) { return u(t) + (e + 1) } function p(e, t) { return "$" + u(t) + "$" + (e + 1) } function f(e) { var t = e.frozenRows || (e.freezePane || {}).rowSplit || 1; return t - 1 } function g(e) { var t = 7; return e / t - Math.floor(128 / t) / 256 } function m(e) { return .75 * e } function v(e) { return (e + "").replace(/[\x00-\x09\x0B\x0C\x0E-\x1F]/g, "").replace(/\r?\n/g, "\r\n") } function _(e) { var t = e.length; return e.forEach(function (e) { e.index && e.index >= t && (t = e.index + 1) }), t } function b(e) { var t = e; return t.length < 6 && (t = t.replace(/(\w)/g, function (e, t) { return t + t })), t = t.substring(1).toUpperCase(), t.length < 8 && (t = "FF" + t), t } function w(e) { var t = "thin"; return 2 === e ? t = "medium" : 3 === e && (t = "thick"), t } function k(e, t) { var n = ""; return t && (n += "<" + e + ' style="' + w(t.size) + '">', t.color && (n += ''), n += ""), n } function y(e) { return "" + k("left", e.left) + k("right", e.right) + k("top", e.top) + k("bottom", e.bottom) + "" } function x(e, t) { var n, i, o, r = [], a = []; for (C(e, function (e, t) { var n = { _source: e, index: t, height: e.height, level: e.level, cells: [] }; r.push(n), a[t] = n }), n = S(r).slice(0), i = { rowData: r, rowsByIndex: a, mergedCells: t }, o = 0; o < n.length; o++)I(n[o], i), delete n[o]._source; return S(r) } function C(e, t) { var n, i, o; for (n = 0; n < e.length; n++)i = e[n], i && (o = i.index, "number" != typeof o && (o = n), t(i, o)) } function S(e) { return e.sort(function (e, t) { return e.index - t.index }) } function T(e, t) { e.indexOf(t) < 0 && e.push(t) } function D(e, t) { var n, i, o, r, a; for (n = 0; n < e.length; ++n)if (i = e[n], o = i.split(":"), r = o[0], r === t) return a = o[1], r = A(r), a = A(a), { rowSpan: a.row - r.row + 1, colSpan: a.col - r.col + 1 } } function A(e) { function t(e) { var t, n = e.toUpperCase(), i = 0; for (t = 0; t < n.length; ++t)i = 26 * i + n.charCodeAt(t) - 64; return i - 1 } function n(e) { return parseInt(e, 10) - 1 } var i = /^([a-z]+)(\d+)$/i.exec(e); return { row: n(i[2]), col: t(i[1]) } } function E(e) { return Math.round(9525 * e) } function I(e, t) { var n, i, o, r, a, s, l, d, c, u = e._source, p = e.index, f = u.cells, g = e.cells; if (f) for (n = 0; n < f.length; n++)if (i = f[n] || ge, o = i.rowSpan || 1, r = i.colSpan || 1, a = M(g, i), s = h(p, a), 1 === o && 1 === r && (l = D(t.mergedCells, s), l && (r = l.colSpan, o = l.rowSpan)), P(i, g, a, r), (o > 1 || r > 1) && T(t.mergedCells, s + ":" + h(p + o - 1, a + r - 1)), o > 1) for (d = p + 1; d < p + o; d++)c = t.rowsByIndex[d], c || (c = t.rowsByIndex[d] = { index: d, cells: [] }, t.rowData.push(c)), P(i, c.cells, a - 1, r + 1) } function M(e, t) { var n; return "number" == typeof t.index ? (n = t.index, R(e, t, t.index)) : n = F(e, t), n } function R(e, t, n) { e[n] = t } function F(e, t) { var n, i = e.length; for (n = 0; n < e.length + 1; n++)if (!e[n]) { e[n] = t, i = n; break } return i } function P(e, t, n, i) { var o, r; for (o = 1; o < i; o++)r = { borderTop: e.borderTop, borderRight: e.borderRight, borderBottom: e.borderBottom, borderLeft: e.borderLeft }, R(t, r, n + o) } function z(e) { return me({ ref: e.ref, columns: e.columns, generators: { custom: ve, dynamic: _e, top: be, value: we } }) } function B(e) { return /^\'/.test(e) ? e : /^[a-z_][a-z0-9_]*$/i.test(e) ? e : "'" + e.replace(/\x27/g, "\\'") + "'" } var L, H, N, O, V, W, U, j, q, G, $, K, Y, Q, X, J, Z, ee, te, ne, ie, oe, re, ae, se, le, de, ce, ue, he, pe, fe, ge, me, ve, _e, be, we; window.kendo.ooxml = window.kendo.ooxml || {}, L = kendo.ooxml, H = e.map, N = L.createZip, O = { toString: function (e) { return e } }, V = kendo.Class.extend({}), V.register = function (e) { O = e }, V.toString = function (e, t) { return O.toString(e, t) }, W = t(1900, 0, -1), U = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", j = "data:" + U + ";base64,", q = { compression: "DEFLATE", type: "base64" }, G = { compression: "DEFLATE", type: "blob" }, $ = { compression: "DEFLATE", type: "arraybuffer" }, K = JSON.parse.bind(JSON), Y = '\r', Q = Y + '\n \n \n \n \n ', X = function (e) { var t = e.creator, n = e.lastModifiedBy, i = e.created, o = e.modified; return Y + '\n \n ' + s(t) + "\n " + s(n) + '\n ' + s(i) + '\n ' + s(o) + "\n" }, J = function (e) { var t = e.sheets; return Y + '\n\n Microsoft Excel\n 0\n false\n \n \n \n Worksheets\n \n \n ' + t.length + '\n \n \n \n \n ' + d(t, function (e, t) { return e.options.title ? "" + s(e.options.title) + "" : "Sheet" + (t + 1) + "" }) + "\n \n false\n false\n false\n 14.0300\n" }, Z = function (e) { var t = e.sheetCount, n = e.commentFiles, i = e.drawingFiles; return Y + '\n\n \n \n \n \n \n \n \n \n \n ' + l(t, function (e) { return '' }) + "\n " + d(n, function (e) { return '' }) + "\n " + d(i, function (e) { return '' }) + '\n \n \n' }, ee = function (e) { var t = e.sheets, n = e.filterNames, i = e.userNames; return Y + '\n\n \n \n \n \n \n \n ' + d(t, function (e, t) { var n = e.options, i = n.name || n.title || "Sheet" + (t + 1); return '' }) + "\n \n " + (n.length || i.length ? "\n \n " + d(n, function (e) { return '\n " }) + "\n " + d(i, function (e) { return '\n " }) + "\n " : "") + '\n \n' }, te = function (e) { var t = e.frozenColumns, n = e.frozenRows, i = e.columns, o = e.defaults, r = e.data, a = e.index, l = e.mergeCells, u = e.autoFilter, p = e.filter, f = e.showGridLines, v = e.hyperlinks, _ = e.validations, b = e.defaultCellStyleId, w = e.rtl, k = e.legacyDrawing, y = e.drawing, x = e.lastRow, C = e.lastCol; return Y + '\n\n \n\n \n \n " + (n || t ? '\n ' : "") + '\n \n \n\n \n\n " + (null != b || i && i.length > 0 ? "\n \n " + (i && i.length ? "" : '\n ") + "\n " + d(i, function (e, t) { var n = "number" == typeof e.index ? e.index + 1 : t + 1; return 0 === e.width ? "' : "" }) + "\n " : "") + "\n\n \n " + d(r, function (e, t) { var n = "number" == typeof e.index ? e.index + 1 : t + 1; return '\n \n " + d(e.data, function (e) { return '\n \n " + (null != e.formula ? c(e.formula) : "") + "\n " + (null != e.value ? "" + s(e.value) + "" : "") + "\n " }) + "\n \n " }) + "\n \n\n " + (u ? '' : p ? z(p) : "") + "\n\n " + (l.length ? '\n \n ' + d(l, function (e) { return '' }) + "\n " : "") + "\n\n " + (_.length ? "\n \n " + d(_, function (e) { return '\n \n " + (e.formula1 ? "" + s(e.formula1) + "" : "") + "\n " + (e.formula2 ? "" + s(e.formula2) + "" : "") + "\n " }) + "\n " : "") + "\n\n " + (v.length ? "\n \n " + d(v, function (e) { return '\n ' }) + "\n " : "") + '\n\n \n ' + (y ? '' : "") + "\n " + (k ? '' : "") + "\n" }, ne = function (e) { var t = e.count; return Y + '\n\n ' + l(t, function (e) { return '\n ' }) + '\n \n \n' }, ie = function (e) { var t = e.hyperlinks, n = e.comments, i = e.sheetIndex, o = e.drawings; return Y + '\n\n ' + d(t, function (e) { return '\n ' }) + "\n " + (n.length ? '\n \n ' : "") + "\n " + (o.length ? '\n ' : "") + "\n" }, oe = function (e) { var t = e.comments; return Y + '\n\n \n \n \n \n ' + d(t, function (e) { return '\n \n \n \n \n \n \n \n \n \n ' + s(e.text) + "\n \n \n " }) + "\n \n" }, re = function (e) { var t = e.comments; return '\n \n ' + d(t, function (e) { return '\n \n \n \n \n \n ' + e.anchor + "\n False\n " + e.row + "\n " + e.col + "\n \n " }) + "\n" }, ae = function (e) { return Y + '\n\n ' + d(e, function (e, t) { return '\n \n \n ' + e.col + "\n " + e.colOffset + "\n " + e.row + "\n " + e.rowOffset + '\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ' }) + "\n" }, se = function (e) { return Y + '\n\n ' + d(e, function (e) { return '\n ' }) + "\n" }, le = function (e) { var t = e.count, n = e.uniqueCount, i = e.indexes; return Y + '\n\n ' + d(Object.keys(i), function (e) { return '\n ' + s(e.substring(1)) + "" }) + "\n" }, de = function (e) { var t = e.formats, n = e.fonts, i = e.fills, o = e.borders, r = e.styles; return Y + '\n\n \n ' + d(t, function (e, t) { return '\n ' }) + '\n \n \n \n \n \n \n \n \n \n ' + d(n, function (e) { return "\n \n " + (e.bold ? "" : "") + "\n " + (e.italic ? "" : "") + "\n " + (e.underline ? "" : "") + '\n \n ' + (e.color ? '' : '') + "\n " + (e.fontFamily ? '\n \n \n ' : '\n \n \n \n ') + "\n " }) + '\n \n \n \n \n ' + d(i, function (e) { return "\n " + (e.background ? '\n \n \n \n \n \n ' : "") }) + '\n \n \n \n ' + d(o, y) + '\n \n \n \n \n \n \n ' + d(r, function (e) { return '\n \n " + (e.textAlign || e.verticalAlign || e.wrap ? "\n \n " : "") + "\n \n " }) + '\n \n \n \n \n \n \n' }, ce = kendo.Class.extend({ init: function (t, n, i, o) { this.options = t, this._strings = n, this._styles = i, this._borders = o, this._validations = {}, this._comments = [], this._drawings = t.drawings || [], this._hyperlinks = (this.options.hyperlinks || []).map(function (t, n) { return e.extend({}, t, { rId: "link" + n }) }) }, relsToXML: function () { var e = this._hyperlinks, t = this._comments, n = this._drawings; if (e.length || t.length || n.length) return ie({ hyperlinks: e, comments: t, sheetIndex: this.options.sheetIndex, drawings: n }) }, toXML: function (e) { var t, n, i, o, r, a, s, l, d, c = this, u = this.options.mergedCells || [], p = this.options.rows || [], g = x(p, u); this._readCells(g), t = this.options.filter, t && "number" == typeof t.from && "number" == typeof t.to ? t = { from: h(f(this.options), t.from), to: h(f(this.options), t.to) } : t && t.ref && t.columns && (n = t, t = null), i = []; for (o in this._validations) Object.prototype.hasOwnProperty.call(c._validations, o) && i.push(c._validations[o]); return r = null, this.options.defaultCellStyle && (r = this._lookupStyle(this.options.defaultCellStyle)), a = this.options.freezePane || {}, s = this.options.defaults || {}, l = this.options.rows ? this._getLastRow() : 1, d = this.options.rows ? this._getLastCol() : 1, te({ frozenColumns: this.options.frozenColumns || a.colSplit, frozenRows: this.options.frozenRows || a.rowSplit, columns: this.options.columns, defaults: s, data: g, index: e, mergeCells: u, autoFilter: t, filter: n, showGridLines: this.options.showGridLines, hyperlinks: this._hyperlinks, validations: i, defaultCellStyleId: r, rtl: void 0 !== this.options.rtl ? this.options.rtl : s.rtl, legacyDrawing: this._comments.length ? "vml" + this.options.sheetIndex : null, drawing: this._drawings.length ? "drw" + this.options.sheetIndex : null, lastRow: l, lastCol: d }) }, commentsXML: function () { if (this._comments.length) return oe({ comments: this._comments }) }, drawingsXML: function (e) { var t, n; if (this._drawings.length) return t = {}, n = this._drawings.map(function (n) { var i = A(n.topLeftCell), o = t[n.image]; return o || (o = t[n.image] = { rId: "img" + n.image, target: e[n.image].target }), { col: i.col, colOffset: E(n.offsetX), row: i.row, rowOffset: E(n.offsetY), width: E(n.width), height: E(n.height), imageId: o.rId } }), { main: ae(n), rels: se(t) } }, legacyDrawing: function () { if (this._comments.length) return re({ comments: this._comments }) }, _lookupString: function (e) { var t, n = "$" + e, i = this._strings.indexes[n]; return void 0 !== i ? t = i : (t = this._strings.indexes[n] = this._strings.uniqueCount, this._strings.uniqueCount++), this._strings.count++, t }, _lookupStyle: function (e) { var t, n = JSON.stringify(e); return "{}" === n ? 0 : (t = a(n, this._styles), t < 0 && (t = this._styles.push(n) - 1), t + 1) }, _lookupBorder: function (e) { var t, n = JSON.stringify(e); if ("{}" !== n) return t = a(n, this._borders), t < 0 && (t = this._borders.push(n) - 1), t + 1 }, _readCells: function (e) { var t, n, i, o, r, a = this; for (t = 0; t < e.length; t++)for (n = e[t], i = n.cells, n.data = [], o = 0; o < i.length; o++)r = a._cell(i[o], n.index, o), r && n.data.push(r) }, _cell: function (e, t, n) { var i, r, a, s, l, d, c, u, p, f; return e && e !== ge ? (i = e.value, r = {}, e.borderLeft && (r.left = e.borderLeft), e.borderRight && (r.right = e.borderRight), e.borderTop && (r.top = e.borderTop), e.borderBottom && (r.bottom = e.borderBottom), r = this._lookupBorder(r), a = this.options.defaultCellStyle || {}, s = { borderId: r }, function (e) { e("color"), e("background"), e("bold"), e("italic"), e("underline"), e("fontFamily") || e("fontName", "fontFamily"), e("fontSize"), e("format"), e("textAlign") || e("hAlign", "textAlign"), e("verticalAlign") || e("vAlign", "verticalAlign"), e("wrap"), e("indent") }(function (t, n) { var i = e[t]; if (void 0 === i && (i = a[t]), void 0 !== i) return s[n || t] = i, !0 }), l = this.options.columns || [], d = l[n], c = typeof i, !d || !d.autoWidth || e.colSpan && 1 !== e.colSpan || (u = i, "number" === c && (u = V.toString(i, e.format)), d.width = Math.max(d.width || 0, (u + "").length)), "string" === c ? (i = v(i), i = this._lookupString(i), c = "s") : "number" === c ? c = "n" : "boolean" === c ? (c = "b", i = +i) : i && i.getTime ? (c = null, i = o(i), s.format || (s.format = "mm-dd-yy")) : (c = null, i = null), s = this._lookupStyle(s), p = h(t, n), e.validation && this._addValidation(e.validation, p), e.comment && (f = [n + 1, 15, t, 10, n + 3, 15, t + 3, 4], this._comments.push({ ref: p, text: e.comment, row: t, col: n, anchor: f.join(", ") })), { value: i, formula: e.formula, type: c, style: s, ref: p }) : null }, _addValidation: function (e, t) { var n = { showErrorMessage: "reject" === e.type ? 1 : 0, formula1: e.from, formula2: e.to, type: he[e.dataType] || e.dataType, operator: ue[e.comparerType] || e.comparerType, allowBlank: e.allowNulls ? 1 : 0, showDropDown: e.showButton ? 0 : 1, error: e.messageTemplate, errorTitle: e.titleTemplate }, i = JSON.stringify(n); this._validations[i] || (this._validations[i] = n, n.sqref = []), this._validations[i].sqref.push(t) }, _getLastRow: function () { return _(this.options.rows) }, _getLastCol: function () { var e = 0; return this.options.rows.forEach(function (t) { t.cells && (e = Math.max(e, _(t.cells))) }), e } }), ue = { greaterThanOrEqualTo: "greaterThanOrEqual", lessThanOrEqualTo: "lessThanOrEqual" }, he = { number: "decimal" }, pe = { General: 0, 0: 1, "0.00": 2, "#,##0": 3, "#,##0.00": 4, "0%": 9, "0.00%": 10, "0.00E+00": 11, "# ?/?": 12, "# ??/??": 13, "mm-dd-yy": 14, "d-mmm-yy": 15, "d-mmm": 16, "mmm-yy": 17, "h:mm AM/PM": 18, "h:mm:ss AM/PM": 19, "h:mm": 20, "h:mm:ss": 21, "m/d/yy h:mm": 22, "#,##0 ;(#,##0)": 37, "#,##0 ;[Red](#,##0)": 38, "#,##0.00;(#,##0.00)": 39, "#,##0.00;[Red](#,##0.00)": 40, "mm:ss": 45, "[h]:mm:ss": 46, "mmss.0": 47, "##0.0E+0": 48, "@": 49, "[$-404]e/m/d": 27, "m/d/yy": 30, t0: 59, "t0.00": 60, "t#,##0": 61, "t#,##0.00": 62, "t0%": 67, "t0.00%": 68, "t# ?/?": 69, "t# ??/??": 70 }, fe = kendo.Class.extend({ init: function (e) { var t = this; this.options = e || {}, this._strings = { indexes: {}, count: 0, uniqueCount: 0 }, this._styles = [], this._borders = [], this._images = this.options.images, this._imgId = 0, this._sheets = H(this.options.sheets || [], function (e, n) { return e.defaults = t.options, e.sheetIndex = n + 1, new ce(e, t._strings, t._styles, t._borders) }) }, imageFilename: function (e) { var t = ++this._imgId; switch (e) { case "image/jpg": case "image/jpeg": return "image" + t + ".jpg"; case "image/png": return "image" + t + ".png"; case "image/gif": return "image" + t + ".gif"; default: return "image" + t + ".bin" } }, toZIP: function () { var e, t, n, i, o, r, s, l, d, c, u, h, g, m, v, _, w, k, y, x, C, S, T, D, E, I, M, R, F, P = this, z = N(), B = z.folder("docProps"); for (B.file("core.xml", X({ creator: this.options.creator || "Kendo UI", lastModifiedBy: this.options.creator || "Kendo UI", created: this.options.date || (new Date).toJSON(), modified: this.options.date || (new Date).toJSON() })), e = this._sheets.length, B.file("app.xml", J({ sheets: this._sheets })), t = z.folder("_rels"), t.file(".rels", Q), n = z.folder("xl"), i = n.folder("_rels"), i.file("workbook.xml.rels", ne({ count: e })), this._images && (o = n.folder("media"), Object.keys(this._images).forEach(function (e) { var t = P._images[e], n = P.imageFilename(t.type); o.file(n, t.data), t.target = "../media/" + n })), r = {}, n.file("workbook.xml", ee({ sheets: this._sheets, filterNames: H(this._sheets, function (e, t) { var n, i, o, a, s = e.options, l = s.name || s.title || "Sheet" + (t + 1); if (r[l.toLowerCase()] = t, n = s.filter) { if (n.ref) return i = n.ref.split(":"), o = A(i[0]), a = A(i[1]), { localSheetId: t, name: l, from: p(o.row, o.col), to: p(a.row, a.col) }; if (void 0 !== n.from && void 0 !== n.to) return { localSheetId: t, name: l, from: p(f(s), n.from), to: p(f(s), n.to) } } }), userNames: H(this.options.names || [], function (e) { return { name: e.localName, localSheetId: e.sheet ? r[e.sheet.toLowerCase()] : null, value: e.value, hidden: e.hidden } }) })), s = n.folder("worksheets"), l = n.folder("drawings"), d = l.folder("_rels"), c = s.folder("_rels"), u = [], h = [], g = 0; g < e; g++)m = P._sheets[g], v = "sheet" + (g + 1) + ".xml", _ = m.toXML(g), w = m.relsToXML(), k = m.commentsXML(), y = m.legacyDrawing(), x = m.drawingsXML(P._images), w && c.file(v + ".rels", w), k && (C = "comments" + m.options.sheetIndex + ".xml", n.file(C, k), u.push(C)), y && l.file("vmlDrawing" + m.options.sheetIndex + ".vml", y), x && (S = "drawing" + m.options.sheetIndex + ".xml", l.file(S, x.main), d.file(S + ".rels", x.rels), h.push(S)), s.file(v, _); return T = H(this._borders, K), D = H(this._styles, K), E = function (e) { return e.underline || e.bold || e.italic || e.color || e.fontFamily || e.fontSize }, I = function (e) { var t, n = +e; return n && (t = 3 * n / 4), t }, M = H(D, function (e) { if (e.fontSize && (e.fontSize = I(e.fontSize)), e.color && (e.color = b(e.color)), E(e)) return e }), R = H(D, function (e) { if (e.format && void 0 === pe[e.format]) return e }), F = H(D, function (e) { if (e.background) return e.background = b(e.background), e }), n.file("styles.xml", de({ fonts: M, fills: F, formats: R, borders: T, styles: H(D, function (e) { var t = {}; return E(e) && (t.fontId = a(e, M) + 1), e.background && (t.fillId = a(e, F) + 2), t.textAlign = e.textAlign, t.indent = e.indent, t.verticalAlign = e.verticalAlign, t.wrap = e.wrap, t.borderId = e.borderId, e.format && (t.numFmtId = void 0 !== pe[e.format] ? pe[e.format] : 165 + a(e, R)), t }) })), n.file("sharedStrings.xml", le(this._strings)), z.file("[Content_Types].xml", Z({ sheetCount: e, commentFiles: u, drawingFiles: h })), z }, toDataURL: function () { var e = this.toZIP(); return e.generateAsync ? e.generateAsync(q).then(r) : r(e.generate(q)) }, toBlob: function () { var e = this.toZIP(); return e.generateAsync ? e.generateAsync(G) : new Blob([e.generate($)], { type: U }) } }), ge = {}, me = function (e) { var t = e.ref, n = e.columns, i = e.generators; return '\n\n ' + d(n, function (e) { return '\n \n ' + i[e.filter](e) + "\n \n " }) + "\n" }, ve = function (e) { var t = e.logic, n = e.criteria; return "\n\n" + d(n, function (e) { var t = z.customOperator(e), n = z.customValue(e); return "' }) + "\n" }, _e = function (e) { var t = e.type; return '' }, be = function (e) { var t = e.type, n = e.value; return '' }, we = function (e) { var t = e.blanks, n = e.values; return "\n " + d(n, function (e) { return '\n ' }) + "\n " }, z.customOperator = function (e) { return { eq: "equal", gt: "greaterThan", gte: "greaterThanOrEqual", lt: "lessThan", lte: "lessThanOrEqual", ne: "notEqual", doesnotstartwith: "notEqual", doesnotendwith: "notEqual", doesnotcontain: "notEqual", doesnotmatch: "notEqual" }[e.operator.toLowerCase()] }, z.customValue = function (e) { function t(e) { return e.replace(/([*?])/g, "~$1") } switch (e.operator.toLowerCase()) { case "startswith": case "doesnotstartwith": return t(e.value) + "*"; case "endswith": case "doesnotendwith": return "*" + t(e.value); case "contains": case "doesnotcontain": return "*" + t(e.value) + "*"; default: return e.value } }, z.dynamicFilterType = function (e) { return { quarter1: "Q1", quarter2: "Q2", quarter3: "Q3", quarter4: "Q4", january: "M1", february: "M2", march: "M3", april: "M4", may: "M5", june: "M6", july: "M7", august: "M8", september: "M9", october: "M10", november: "M11", december: "M12" }[e.toLowerCase()] || e }, kendo.deepExtend(kendo.ooxml, { IntlService: V, Workbook: fe, Worksheet: ce }) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("ooxml/main.min", ["kendo.core.min", "ooxml/kendo-ooxml.min"], e) }(function () { !function (e) { var t = kendo.ooxml.Workbook; kendo.ooxml.IntlService.register({ toString: kendo.toString }), kendo.ooxml.Workbook = t.extend({ toDataURL: function () { var e = t.fn.toDataURL.call(this); if ("string" != typeof e) throw Error("The toDataURL method can be used only with jsZip 2. Either include jsZip 2 or use the toDataURLAsync method."); return e }, toDataURLAsync: function () { var n = e.Deferred(), i = t.fn.toDataURL.call(this); return "string" == typeof i ? i = n.resolve(i) : i && i.then && i.then(function (e) { n.resolve(e) }, function () { n.reject() }), n.promise() } }) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.ooxml.min", ["ooxml/main.min"], e) }(function () { }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("excel/kendo-excel.min", ["kendo.core.min"], e) }(function () { !function (e) { function t(e) { return e.title + ": " + e.value } function n(e, t) { var n, i = []; for (n = 0; n < e; n++)i.push(t(n)); return i } var i, o, r, a, s; window.kendo.excel = window.kendo.excel || {}, i = kendo.getter, o = e.map, r = { compile: function (e) { return e } }, a = kendo.Class.extend({}), a.register = function (e) { r = e }, a.compile = function (e) { return r.compile(e) }, s = kendo.Class.extend({ init: function (e) { e.columns = this._trimColumns(e.columns || []), this.allColumns = o(this._leafColumns(e.columns || []), this._prepareColumn), this.columns = this.allColumns.filter(function (e) { return !e.hidden }), this.options = e, this.data = e.data || [], this.aggregates = e.aggregates || {}, this.groups = [].concat(e.groups || []), this.hierarchy = e.hierarchy }, workbook: function () { var e = { sheets: [{ columns: this._columns(), rows: this.hierarchy ? this._hierarchyRows() : this._rows(), freezePane: this._freezePane(), filter: this._filter() }] }; return e }, _trimColumns: function (e) { var t = this; return e.filter(function (e) { var n = !!e.field; return !n && e.columns && (n = t._trimColumns(e.columns).length > 0), n }) }, _leafColumns: function (e) { var t, n = this, i = []; for (t = 0; t < e.length; t++)e[t].columns ? i = i.concat(n._leafColumns(e[t].columns)) : i.push(e[t]); return i }, _prepareColumn: function (n) { var o, r; return n.field ? (o = function (e) { return i(n.field, !0)(e) }, r = null, n.values && (r = {}, n.values.forEach(function (e) { r[e.value] = e.text }), o = function (e) { return r[i(n.field, !0)(e)] }), e.extend({}, n, { value: o, values: r, groupHeaderTemplate: n.groupHeaderTemplate ? a.compile(n.groupHeaderTemplate) : t, groupFooterTemplate: n.groupFooterTemplate ? a.compile(n.groupFooterTemplate) : null, footerTemplate: n.footerTemplate ? a.compile(n.footerTemplate) : null })) : null }, _filter: function () { if (!this.options.filterable) return null; var e = this._depth(); return { from: e, to: e + this.columns.length - 1 } }, _createPaddingCells: function (t) { var i = this; return n(t, function () { return e.extend({ background: "#dfdfdf", color: "#333" }, i.options.paddingCellOptions) }) }, _dataRow: function (t, n, i) { var o, r, a, s, l, d, c, u, h = this, p = this._createPaddingCells(n); if (i && t.items) return o = this.allColumns.filter(function (e) { return e.field === t.field })[0], r = o && o.title ? o.title : t.field, a = o ? o.groupHeaderTemplate : null, s = e.extend({ title: r, field: t.field, value: o && o.values ? o.values[t.value] : t.value, aggregates: t.aggregates, items: t.items }, t.aggregates[t.field]), l = r + ": " + t.value, a && (l = a(s)), p.push(e.extend({ value: l, background: "#dfdfdf", color: "#333", colSpan: this.columns.length + i - n }, (o || {}).groupHeaderCellOptions)), d = this._dataRows(t.items, n + 1), d.unshift({ type: "group-header", cells: p, level: this.options.collapsible ? n : null }), d.concat(this._footer(t, n)); for (c = [], u = 0; u < this.columns.length; u++)c[u] = h._cell(t, h.columns[u]); return this.hierarchy && (c[0].colSpan = i - n + 1), [{ type: "data", cells: p.concat(c), level: this.options.collapsible ? n : null }] }, _dataRows: function (e, t) { var n, i = this, o = this._depth(), r = []; for (n = 0; n < e.length; n++)r.push.apply(r, i._dataRow(e[n], t, o)); return r }, _hierarchyRows: function () { var e, t, n, i, o, r = this, a = this._depth(), s = this.data, l = this.hierarchy.itemLevel, d = this._hasFooterTemplate(), c = [], u = [], h = 0; for (t = 0; t < s.length; t++)n = s[t], i = l(n), d && (i > h ? u.push({ id: e, level: h }) : i < h && c.push.apply(c, r._hierarchyFooterRows(u, i, a)), h = i, e = n.id), c.push.apply(c, r._dataRow(n, i + 1, a)); return d && (c.push.apply(c, this._hierarchyFooterRows(u, 0, a)), o = s.length ? this.aggregates[s[0].parentId] : {}, c.push(this._hierarchyFooter(o, 0, a))), this._prependHeaderRows(c), c }, _hierarchyFooterRows: function (e, t, n) { for (var i, o = this, r = []; e.length && e[e.length - 1].level >= t;)i = e.pop(), r.push(o._hierarchyFooter(o.aggregates[i.id], i.level + 1, n)); return r }, _hasFooterTemplate: function () { var e, t = this.columns; for (e = 0; e < t.length; e++)if (t[e].footerTemplate) return !0 }, _hierarchyFooter: function (t, n, i) { var o = this.columns.map(function (o, r) { var a = r ? 1 : i - n + 1; return o.footerTemplate ? e.extend({ background: "#dfdfdf", color: "#333", colSpan: a, value: o.footerTemplate(e.extend({}, (t || {})[o.field])) }, o.footerCellOptions) : e.extend({ background: "#dfdfdf", color: "#333", colSpan: a }, o.footerCellOptions) }); return { type: "footer", cells: this._createPaddingCells(n).concat(o) } }, _footer: function (t, n) { var i, o, r, a = [], s = this.columns.some(function (e) { return e.groupFooterTemplate }); return s && (o = { group: { items: t.items, field: t.field, value: t.value } }, i = {}, Object.keys(t.aggregates).forEach(function (n) { i[n] = e.extend({}, t.aggregates[n], o) })), r = this.columns.map(function (n) { if (n.groupFooterTemplate) { var r = e.extend({}, i, t.aggregates[n.field], o); return e.extend({ background: "#dfdfdf", color: "#333", value: n.groupFooterTemplate(r) }, n.groupFooterCellOptions) } return e.extend({ background: "#dfdfdf", color: "#333" }, n.groupFooterCellOptions) }), s && a.push({ type: "group-footer", cells: this._createPaddingCells(this.groups.length).concat(r), level: this.options.collapsible ? n : null }), a }, _isColumnVisible: function (e) { return this._visibleColumns([e]).length > 0 && (e.field || e.columns) }, _visibleColumns: function (e) { var t = this; return e.filter(function (e) { var n = !e.hidden; return n && e.columns && (n = t._visibleColumns(e.columns).length > 0), n }) }, _headerRow: function (t, i) { var o = this, r = t.cells.map(function (n) { return e.extend(n, { colSpan: n.colSpan > 1 ? n.colSpan : 1, rowSpan: t.rowSpan > 1 && !n.colSpan ? t.rowSpan : 1 }) }); return this.hierarchy && (r[0].colSpan = this._depth() + 1), { type: "header", cells: n(i.length, function () { return e.extend({ background: "#7a7a7a", color: "#fff" }, o.options.headerPaddingCellOptions) }).concat(r) } }, _prependHeaderRows: function (e) { var t, n = this, i = this.groups, o = [{ rowSpan: 1, cells: [], index: 0 }]; for (this._prepareHeaderRows(o, this.options.columns), t = o.length - 1; t >= 0; t--)e.unshift(n._headerRow(o[t], i)) }, _prepareHeaderRows: function (t, n, i, o) { var r, a, s, l = this, d = o || t[t.length - 1], c = t[d.index + 1], u = 0; for (r = 0; r < n.length; r++)a = n[r], l._isColumnVisible(a) && (s = e.extend({ background: "#7a7a7a", color: "#fff", value: a.title || a.field, colSpan: 0 }, a.headerCellOptions), d.cells.push(s), a.columns && a.columns.length && (c || (c = { rowSpan: 0, cells: [], index: t.length }, t.push(c)), s.colSpan = l._trimColumns(l._visibleColumns(a.columns)).length, l._prepareHeaderRows(t, a.columns, s, c), u += s.colSpan - 1, d.rowSpan = t.length - d.index)); i && (i.colSpan += u) }, _rows: function () { var t, n, i = this, o = this._dataRows(this.data, 0); return this.columns.length && (this._prependHeaderRows(o), t = !1, n = this.columns.map(function (n) { return n.footerTemplate ? (t = !0, e.extend({ background: "#dfdfdf", color: "#333", value: n.footerTemplate(e.extend({}, i.aggregates, i.aggregates[n.field])) }, n.footerCellOptions)) : e.extend({ background: "#dfdfdf", color: "#333" }, n.footerCellOptions) }), t && o.push({ type: "footer", cells: this._createPaddingCells(this.groups.length).concat(n) })), o }, _headerDepth: function (e) { var t, n, i = this, o = 1, r = 0; for (t = 0; t < e.length; t++)e[t].columns && (n = i._headerDepth(e[t].columns), n > r && (r = n)); return o + r }, _freezePane: function () { var e = this._visibleColumns(this.options.columns || []), t = this._visibleColumns(this._trimColumns(this._leafColumns(e.filter(function (e) { return e.locked })))).length; return { rowSplit: this._headerDepth(e), colSplit: t ? t + this.groups.length : 0 } }, _cell: function (t, n) { return e.extend({ value: n.value(t) }, n.cellOptions) }, _depth: function () { var e = 0; return e = this.hierarchy ? this.hierarchy.depth : this.groups.length }, _columns: function () { var e = this._depth(), t = n(e, function () { return { width: 20 } }); return t.concat(this.columns.map(function (e) { return { width: parseInt(e.width, 10), autoWidth: !e.width } })) } }), kendo.deepExtend(kendo.excel, { ExcelExporter: s, TemplateService: a }) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("excel/main.min", ["kendo.core.min", "kendo.data.min", "excel/kendo-excel.min"], e) }(function () { return function (e, t) { var n = t.excel.ExcelExporter, i = e.extend; t.excel.TemplateService.register({ compile: t.template }), t.ExcelExporter = t.Class.extend({ init: function (e) { var n, o, r, a; if (this.options = e, n = e.dataSource, n instanceof t.data.DataSource) { if (n.filter() || (n.options.filter = void 0), this.dataSource = new n.constructor(i({}, n.options, { page: e.allPages ? 0 : n.page(), filter: n.filter(), pageSize: e.allPages ? n.total() : n.pageSize() || n.total(), sort: n.sort(), group: n.group(), aggregate: n.aggregate() })), o = n.data(), o.length > 0) { if (e.hierarchy) for (r = 0; r < o.length; r++)o[r].expanded !== !1 && void 0 !== o[r].expanded || (o[r].expanded = !0); this.dataSource._data = o, a = this.dataSource.transport, n._isServerGrouped() && a.options && a.options.data && (a.options.data = null) } } else this.dataSource = t.data.DataSource.create(n) }, _hierarchy: function () { var e, t, n, i, o = this.options.hierarchy, r = this.dataSource; if (o && r.level) { for (o = { itemLevel: function (e) { return r.level(e) } }, e = r.view(), t = 0, i = 0; i < e.length; i++)n = r.level(e[i]), n > t && (t = n); o.depth = t + 1 } else o = !1; return { hierarchy: o } }, workbook: function () { return e.Deferred(e.proxy(function (t) { this.dataSource.fetch().then(e.proxy(function () { var e = new n(i({}, this.options, this._hierarchy(), { data: this.dataSource.view(), groups: this.dataSource.group(), aggregates: this.dataSource.aggregates() })).workbook(); t.resolve(e, this.dataSource.view()) }, this)) }, this)).promise() } }) }(kendo.jQuery, kendo), kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("excel/mixins.min", ["excel/main.min", "kendo.ooxml.min"], e) }(function () { return function (e, t) { t.ExcelMixin = { extend: function (t) { t.events.push("excelExport"), t.options.excel = e.extend(t.options.excel, this.options), t.saveAsExcel = this.saveAsExcel }, options: { proxyURL: "", allPages: !1, filterable: !1, fileName: "Export.xlsx", collapsible: !1 }, saveAsExcel: function () { var n = this.options.excel || {}, i = new t.ExcelExporter({ columns: this.columns, dataSource: this.dataSource, allPages: n.allPages, filterable: n.filterable, hierarchy: n.hierarchy, collapsible: n.collapsible }); i.workbook().then(e.proxy(function (e, i) { if (!this.trigger("excelExport", { workbook: e, data: i })) { var o = new t.ooxml.Workbook(e); o.options || (o.options = {}), o.options.skipCustomHeight = !0, o.toDataURLAsync().then(function (i) { t.saveAs({ dataURI: i, fileName: e.fileName || n.fileName, proxyURL: n.proxyURL, forceProxy: n.forceProxy }) }) } }, this)) } } }(kendo.jQuery, kendo), kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.excel.min", ["excel/main.min", "excel/mixins.min"], e) }(function () { }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.data.signalr.min", ["kendo.data.min"], e) }(function () { return function (e) { function t(e) { return e && o(e.done) && o(e.fail) } function n(e) { return e && o(e.then) && o(e["catch"]) } var i = window.kendo, o = i.isFunction, r = i.data.RemoteTransport.extend({ init: function (e) { var o, r = e && e.signalr ? e.signalr : {}, a = r.promise; if (!a) throw Error('The "promise" option must be set.'); if (!t(a) && !n(a)) throw Error('The "promise" option must be a Promise.'); if (this.promise = a, o = r.hub, !o) throw Error('The "hub" option must be set.'); if ("function" != typeof o.on || "function" != typeof o.invoke) throw Error('The "hub" option is not a valid SignalR hub proxy.'); this.hub = o, i.data.RemoteTransport.fn.init.call(this, e) }, push: function (e) { var t = this.options.signalr.client || {}; t.create && this.hub.on(t.create, e.pushCreate), t.update && this.hub.on(t.update, e.pushUpdate), t.destroy && this.hub.on(t.destroy, e.pushDestroy) }, _crud: function (o, r) { var a, s, l = this.hub, d = this.promise, c = this.options.signalr.server; if (!c || !c[r]) throw Error(i.format('The "server.{0}" option must be set.', r)); a = [c[r]], s = this.parameterMap(o.data, r), e.isEmptyObject(s) || a.push(s), t(d) ? d.done(function () { l.invoke.apply(l, a).done(o.success).fail(o.error) }) : n(d) && d.then(function () { l.invoke.apply(l, a).then(o.success)["catch"](o.error) }) }, read: function (e) { this._crud(e, "read") }, create: function (e) { this._crud(e, "create") }, update: function (e) { this._crud(e, "update") }, destroy: function (e) { this._crud(e, "destroy") } }); e.extend(!0, i.data, { transports: { signalr: r } }) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("drawing/util.min", ["kendo.core.min"], e) }(function () { return function (e) { function t() { return e.Deferred() } function n(t) { return e.when.apply(e, t) } kendo.drawing.util = kendo.drawing.util || {}, kendo.deepExtend(kendo.drawing.util, { createPromise: t, promiseAll: n }) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.color.min", ["kendo.core.min"], e) }(function () { function e(e, t, n) { void 0 === n && (n = "0"); for (var i = e.toString(16); t > i.length;)i = n + i; return i } function t(e, t, n) { var i = n; return i < 0 && (i += 1), i > 1 && (i -= 1), i < 1 / 6 ? e + 6 * (t - e) * i : i < .5 ? t : i < 2 / 3 ? e + (t - e) * (2 / 3 - i) * 6 : e } function n(e, t) { var i, o, a; if (null == e || "none" === e) return null; if (e instanceof l) return e; if (a = e.toLowerCase(), i = s(a)) return a = "transparent" === i[1] ? new d(1, 1, 1, 0) : n(r[i[1]], t), a.match = [i[1]], a; if ((i = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\b/i.exec(a)) ? o = new c(parseInt(i[1], 16), parseInt(i[2], 16), parseInt(i[3], 16), 1) : (i = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\b/i.exec(a)) ? o = new c(parseInt(i[1] + i[1], 16), parseInt(i[2] + i[2], 16), parseInt(i[3] + i[3], 16), 1) : (i = /^rgb\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/.exec(a)) ? o = new c(parseInt(i[1], 10), parseInt(i[2], 10), parseInt(i[3], 10), 1) : (i = /^rgba\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9.]+)\s*\)/.exec(a)) ? o = new c(parseInt(i[1], 10), parseInt(i[2], 10), parseInt(i[3], 10), parseFloat(i[4])) : (i = /^rgb\(\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9]*\.?[0-9]+)%\s*\)/.exec(a)) ? o = new d(parseFloat(i[1]) / 100, parseFloat(i[2]) / 100, parseFloat(i[3]) / 100, 1) : (i = /^rgba\(\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9.]+)\s*\)/.exec(a)) && (o = new d(parseFloat(i[1]) / 100, parseFloat(i[2]) / 100, parseFloat(i[3]) / 100, parseFloat(i[4]))), o) o.match = i; else if (!t) throw Error("Cannot parse color: " + a); return o } var i, o, r, a, s, l, d, c, u, h, p; window.kendo = window.kendo || {}, i = kendo.Class, o = kendo.support, r = { aliceblue: "f0f8ff", antiquewhite: "faebd7", aqua: "00ffff", aquamarine: "7fffd4", azure: "f0ffff", beige: "f5f5dc", bisque: "ffe4c4", black: "000000", blanchedalmond: "ffebcd", blue: "0000ff", blueviolet: "8a2be2", brown: "a52a2a", burlywood: "deb887", cadetblue: "5f9ea0", chartreuse: "7fff00", chocolate: "d2691e", coral: "ff7f50", cornflowerblue: "6495ed", cornsilk: "fff8dc", crimson: "dc143c", cyan: "00ffff", darkblue: "00008b", darkcyan: "008b8b", darkgoldenrod: "b8860b", darkgray: "a9a9a9", darkgrey: "a9a9a9", darkgreen: "006400", darkkhaki: "bdb76b", darkmagenta: "8b008b", darkolivegreen: "556b2f", darkorange: "ff8c00", darkorchid: "9932cc", darkred: "8b0000", darksalmon: "e9967a", darkseagreen: "8fbc8f", darkslateblue: "483d8b", darkslategray: "2f4f4f", darkslategrey: "2f4f4f", darkturquoise: "00ced1", darkviolet: "9400d3", deeppink: "ff1493", deepskyblue: "00bfff", dimgray: "696969", dimgrey: "696969", dodgerblue: "1e90ff", firebrick: "b22222", floralwhite: "fffaf0", forestgreen: "228b22", fuchsia: "ff00ff", gainsboro: "dcdcdc", ghostwhite: "f8f8ff", gold: "ffd700", goldenrod: "daa520", gray: "808080", grey: "808080", green: "008000", greenyellow: "adff2f", honeydew: "f0fff0", hotpink: "ff69b4", indianred: "cd5c5c", indigo: "4b0082", ivory: "fffff0", khaki: "f0e68c", lavender: "e6e6fa", lavenderblush: "fff0f5", lawngreen: "7cfc00", lemonchiffon: "fffacd", lightblue: "add8e6", lightcoral: "f08080", lightcyan: "e0ffff", lightgoldenrodyellow: "fafad2", lightgray: "d3d3d3", lightgrey: "d3d3d3", lightgreen: "90ee90", lightpink: "ffb6c1", lightsalmon: "ffa07a", lightseagreen: "20b2aa", lightskyblue: "87cefa", lightslategray: "778899", lightslategrey: "778899", lightsteelblue: "b0c4de", lightyellow: "ffffe0", lime: "00ff00", limegreen: "32cd32", linen: "faf0e6", magenta: "ff00ff", maroon: "800000", mediumaquamarine: "66cdaa", mediumblue: "0000cd", mediumorchid: "ba55d3", mediumpurple: "9370d8", mediumseagreen: "3cb371", mediumslateblue: "7b68ee", mediumspringgreen: "00fa9a", mediumturquoise: "48d1cc", mediumvioletred: "c71585", midnightblue: "191970", mintcream: "f5fffa", mistyrose: "ffe4e1", moccasin: "ffe4b5", navajowhite: "ffdead", navy: "000080", oldlace: "fdf5e6", olive: "808000", olivedrab: "6b8e23", orange: "ffa500", orangered: "ff4500", orchid: "da70d6", palegoldenrod: "eee8aa", palegreen: "98fb98", paleturquoise: "afeeee", palevioletred: "d87093", papayawhip: "ffefd5", peachpuff: "ffdab9", peru: "cd853f", pink: "ffc0cb", plum: "dda0dd", powderblue: "b0e0e6", purple: "800080", red: "ff0000", rosybrown: "bc8f8f", royalblue: "4169e1", saddlebrown: "8b4513", salmon: "fa8072", sandybrown: "f4a460", seagreen: "2e8b57", seashell: "fff5ee", sienna: "a0522d", silver: "c0c0c0", skyblue: "87ceeb", slateblue: "6a5acd", slategray: "708090", slategrey: "708090", snow: "fffafa", springgreen: "00ff7f", steelblue: "4682b4", tan: "d2b48c", teal: "008080", thistle: "d8bfd8", tomato: "ff6347", turquoise: "40e0d0", violet: "ee82ee", wheat: "f5deb3", white: "ffffff", whitesmoke: "f5f5f5", yellow: "ffff00", yellowgreen: "9acd32" }, a = o.browser, s = function (e) { var t, n = Object.keys(r); return n.push("transparent"), t = RegExp("^(" + n.join("|") + ")(\\W|$)", "i"), s = function (e) { return t.exec(e) }, t.exec(e) }, l = i.extend({ init: function () { }, toHSV: function () { return this }, toRGB: function () { return this }, toHex: function () { return this.toBytes().toHex() }, toBytes: function () { return this }, toCss: function () { return "#" + this.toHex() }, toCssRgba: function () { var e = this.toBytes(); return "rgba(" + e.r + ", " + e.g + ", " + e.b + ", " + parseFloat((+this.a).toFixed(3)) + ")" }, toDisplay: function () { return a.msie && a.version < 9 ? this.toCss() : this.toCssRgba() }, equals: function (e) { return e === this || null !== e && this.toCssRgba() === n(e).toCssRgba() }, diff: function (e) { var t, n; return null === e ? NaN : (t = this.toBytes(), n = e.toBytes(), Math.sqrt(Math.pow(.3 * (t.r - n.r), 2) + Math.pow(.59 * (t.g - n.g), 2) + Math.pow(.11 * (t.b - n.b), 2))) }, clone: function () { var e = this.toBytes(); return e === this && (e = new c(e.r, e.g, e.b, e.a)), e } }), d = l.extend({ init: function (e, t, n, i) { l.fn.init.call(this), this.r = e, this.g = t, this.b = n, this.a = i }, toHSV: function () { var e, t, n = this, i = n.r, o = n.g, r = n.b, a = Math.min(i, o, r), s = Math.max(i, o, r), l = s - a, d = s; return 0 === l ? new u(0, 0, d, this.a) : (0 !== s ? (t = l / s, e = i === s ? (o - r) / l : o === s ? 2 + (r - i) / l : 4 + (i - o) / l, e *= 60, e < 0 && (e += 360)) : (t = 0, e = -1), new u(e, t, d, this.a)) }, toHSL: function () { var e, t, n, i = this, o = i.r, r = i.g, a = i.b, s = Math.max(o, r, a), l = Math.min(o, r, a), d = (s + l) / 2; if (s === l) e = t = 0; else switch (n = s - l, t = d > .5 ? n / (2 - s - l) : n / (s + l), s) { case o: e = (r - a) / n + (r < a ? 6 : 0); break; case r: e = (a - o) / n + 2; break; case a: e = (o - r) / n + 4 }return new h(60 * e, 100 * t, 100 * d, this.a) }, toBytes: function () { return new c(255 * this.r, 255 * this.g, 255 * this.b, this.a) } }), c = d.extend({ init: function (e, t, n, i) { d.fn.init.call(this, Math.round(e), Math.round(t), Math.round(n), i) }, toRGB: function () { return new d(this.r / 255, this.g / 255, this.b / 255, this.a) }, toHSV: function () { return this.toRGB().toHSV() }, toHSL: function () { return this.toRGB().toHSL() }, toHex: function () { return e(this.r, 2) + e(this.g, 2) + e(this.b, 2) }, toBytes: function () { return this } }), u = l.extend({ init: function (e, t, n, i) { l.fn.init.call(this), this.h = e, this.s = t, this.v = n, this.a = i }, toRGB: function () { var e, t, n, i, o, r, a, s, l = this, c = l.h, u = l.s, h = l.v; if (0 === u) e = t = n = h; else switch (c /= 60, i = Math.floor(c), o = c - i, r = h * (1 - u), a = h * (1 - u * o), s = h * (1 - u * (1 - o)), i) { case 0: e = h, t = s, n = r; break; case 1: e = a, t = h, n = r; break; case 2: e = r, t = h, n = s; break; case 3: e = r, t = a, n = h; break; case 4: e = s, t = r, n = h; break; default: e = h, t = r, n = a }return new d(e, t, n, this.a) }, toHSL: function () { return this.toRGB().toHSL() }, toBytes: function () { return this.toRGB().toBytes() } }), h = l.extend({ init: function (e, t, n, i) { l.fn.init.call(this), this.h = e, this.s = t, this.l = n, this.a = i }, toRGB: function () { var e, n, i, o, r, a = this.h / 360, s = this.s / 100, l = this.l / 100; return 0 === s ? e = n = i = l : (o = l < .5 ? l * (1 + s) : l + s - l * s, r = 2 * l - o, e = t(r, o, a + 1 / 3), n = t(r, o, a), i = t(r, o, a - 1 / 3)), new d(e, n, i, this.a) }, toHSV: function () { return this.toRGB().toHSV() }, toBytes: function () { return this.toRGB().toBytes() } }), p = i.extend({ init: function (e) { var t, n, i, o, r, a, s, l = this; if (1 === arguments.length) for (t = p.formats, n = this.resolveColor(e), i = 0; i < t.length; i++)o = t[i].re, r = t[i].process, a = o.exec(n), a && (s = r(a), l.r = s[0], l.g = s[1], l.b = s[2]); else this.r = arguments[0], this.g = arguments[1], this.b = arguments[2]; this.r = this.normalizeByte(this.r), this.g = this.normalizeByte(this.g), this.b = this.normalizeByte(this.b) }, toHex: function () { var e = this.padDigit, t = this.r.toString(16), n = this.g.toString(16), i = this.b.toString(16); return "#" + e(t) + e(n) + e(i) }, resolveColor: function (e) { var t = e || "black"; return "#" === t.charAt(0) && (t = t.substr(1, 6)), t = t.replace(/ /g, ""), t = t.toLowerCase(), t = p.namedColors[t] || t }, normalizeByte: function (e) { return e < 0 || isNaN(e) ? 0 : e > 255 ? 255 : e }, padDigit: function (e) { return 1 === e.length ? "0" + e : e }, brightness: function (e) { var t = Math.round; return this.r = t(this.normalizeByte(this.r * e)), this.g = t(this.normalizeByte(this.g * e)), this.b = t(this.normalizeByte(this.b * e)), this }, percBrightness: function () { return Math.sqrt(.241 * this.r * this.r + .691 * this.g * this.g + .068 * this.b * this.b) } }), p.fromBytes = function (e, t, n, i) { return new c(e, t, n, null != i ? i : 1) }, p.fromRGB = function (e, t, n, i) { return new d(e, t, n, null != i ? i : 1) }, p.fromHSV = function (e, t, n, i) { return new u(e, t, n, null != i ? i : 1) }, p.fromHSL = function (e, t, n, i) { return new h(e, t, n, null != i ? i : 1) }, p.formats = [{ re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, process: function (e) { return [parseInt(e[1], 10), parseInt(e[2], 10), parseInt(e[3], 10)] } }, { re: /^(\w{2})(\w{2})(\w{2})$/, process: function (e) { return [parseInt(e[1], 16), parseInt(e[2], 16), parseInt(e[3], 16)] } }, { re: /^(\w{1})(\w{1})(\w{1})$/, process: function (e) { return [parseInt(e[1] + e[1], 16), parseInt(e[2] + e[2], 16), parseInt(e[3] + e[3], 16)] } }], p.namedColors = r, kendo.deepExtend(kendo, { parseColor: n, Color: p }) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("util/text-metrics.min", ["kendo.core.min"], e) }(function () { !function (e) { function t(e) { return (e + "").replace(s, l) } function n(e) { var t, n = []; for (t in e) n.push(t + e[t]); return n.sort().join("") } function i(e) { var t, n = 2166136261; for (t = 0; t < e.length; ++t)n += (n << 1) + (n << 4) + (n << 7) + (n << 8) + (n << 24), n ^= e.charCodeAt(t); return n >>> 0 } function o() { return { width: 0, height: 0, baseline: 0 } } function r(e, t, n) { return u.current.measure(e, t, n) } var a, s, l, d, c, u; window.kendo.util = window.kendo.util || {}, a = kendo.Class.extend({ init: function (e) { this._size = e, this._length = 0, this._map = {} }, put: function (e, t) { var n = this._map, i = { key: e, value: t }; n[e] = i, this._head ? (this._tail.newer = i, i.older = this._tail, this._tail = i) : this._head = this._tail = i, this._length >= this._size ? (n[this._head.key] = null, this._head = this._head.newer, this._head.older = null) : this._length++ }, get: function (e) { var t = this._map[e]; if (t) return t === this._head && t !== this._tail && (this._head = t.newer, this._head.older = null), t !== this._tail && (t.older && (t.older.newer = t.newer, t.newer.older = t.older), t.older = this._tail, t.newer = null, this._tail.newer = t, this._tail = t), t.value } }), s = /\r?\n|\r|\t/g, l = " ", d = { baselineMarkerSize: 1 }, "undefined" != typeof document && (c = document.createElement("div"), c.style.cssText = "position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;padding: 0 !important; margin: 0 !important; border: 0 !important;line-height: normal !important; visibility: hidden !important; white-space: pre!important;"), u = kendo.Class.extend({ init: function (t) { this._cache = new a(1e3), this.options = e.extend({}, d, t) }, measure: function (e, r, a) { var s, l, d, u, h, p, f, g, m; if (void 0 === a && (a = {}), !e) return o(); if (s = n(r), l = i(e + s), d = this._cache.get(l)) return d; u = o(), h = a.box || c, p = this._baselineMarker().cloneNode(!1); for (f in r) g = r[f], void 0 !== g && (h.style[f] = g); return m = a.normalizeText !== !1 ? t(e) : e + "", h.textContent = m, h.appendChild(p), document.body.appendChild(h), m.length && (u.width = h.offsetWidth - this.options.baselineMarkerSize, u.height = h.offsetHeight, u.baseline = p.offsetTop + this.options.baselineMarkerSize), u.width > 0 && u.height > 0 && this._cache.put(l, u), h.parentNode.removeChild(h), u }, _baselineMarker: function () { var e = document.createElement("div"); return e.style.cssText = "display: inline-block; vertical-align: baseline;width: " + this.options.baselineMarkerSize + "px; height: " + this.options.baselineMarkerSize + "px;overflow: hidden;", e } }), u.current = new u, kendo.deepExtend(kendo.util, { LRUCache: a, TextMetrics: u, measureText: r, objectKey: n, hashKey: i, normalizeText: t }) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("drawing/kendo-drawing.min", ["drawing/util.min", "kendo.color.min", "util/text-metrics.min"], e) }(function () { !function (e) { function t(e, t) { return e.push.apply(e, t), e } function n(e) { for (var t = [1e3, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], n = ""; e > 0;)e < t[0] ? t.shift() : (n += Qt[t[0]], e -= t[0]); return n } function i(e) { return typeof e !== Xt } function o() { return "kdef" + Jt++ } function r(e) { return e / Zt } function a(e) { var t, n, i = ""; for (t = 0; t < e.length; t++)n = e.charCodeAt(t), n < 128 ? i += on(n) : n < 2048 ? (i += on(192 | n >>> 6), i += on(128 | 63 & n)) : n < 65536 && (i += on(224 | n >>> 12), i += on(128 | n >>> 6 & 63), i += on(128 | 63 & n)); return i } function s(e) { for (var t, n, i, o, r, s, l, d = "", c = 0, u = a(e); c < u.length;)t = u.charCodeAt(c++), n = u.charCodeAt(c++), i = u.charCodeAt(c++), o = t >> 2, r = (3 & t) << 4 | n >> 4, s = (15 & n) << 2 | i >> 6, l = 63 & i, isNaN(n) ? s = l = 64 : isNaN(i) && (l = 64), d = d + nn.charAt(o) + nn.charAt(r) + nn.charAt(s) + nn.charAt(l); return d } function l(e) { return i((e.x || {}).location) ? { x: e.x.location, y: e.y.location } : { x: e.pageX || e.clientX || 0, y: e.pageY || e.clientY || 0 } } function d(e) { return void 0 === e && (e = {}), e.touch ? e.touch.initialTouch : e.target } function c(e) { return "" === e || null === e || "none" === e || "transparent" === e || !i(e) } function u(e) { if (e) return e[e.length - 1] } function h(e, t, n) { return Math.max(Math.min(e, n), t) } function p(e, t) { function n(e, n) { for (var i = [], o = 0, r = 0, a = 0; o < e.length && r < n.length;)t(e[o], n[r]) <= 0 ? i[a++] = e[o++] : i[a++] = n[r++]; return o < e.length && i.push.apply(i, e.slice(o)), r < n.length && i.push.apply(i, n.slice(r)), i } return e.length < 2 ? e.slice() : function i(e) { var t, o, r; return e.length <= 1 ? e : (t = Math.floor(e.length / 2), o = e.slice(0, t), r = e.slice(t), o = i(o), r = i(r), n(o, r)) }(e) } function f(e) { return e * Zt } function g(e) { return e ? Math.pow(10, e) : 1 } function m(e, t) { var n = g(t); return Math.round(e * n) / n } function v(e, t) { return i(e) ? e : t } function _(e, t) { var n, i, o; for (n in t) for (i = n.trim().split(" "), o = 0; o < i.length; o++)e.addEventListener(i[o], t[n], !1) } function b(e) { var t = e.getBoundingClientRect(), n = document.documentElement; return { top: t.top + (window.pageYOffset || n.scrollTop) - (n.clientTop || 0), left: t.left + (window.pageXOffset || n.scrollLeft) - (n.clientLeft || 0) } } function w(e, t) { var n, i, o = {}, r = window.getComputedStyle(e) || {}, a = Array.isArray(t) ? t : [t]; for (n = 0; n < a.length; n++)i = a[n], o[i] = r[i]; return o } function k(e) { return isNaN(e) ? e : e + "px" } function y(e, t) { var n, o, r; return t ? (n = t.width, o = t.height, i(n) && (e.style.width = k(n)), i(o) && (e.style.height = k(o)), void 0) : (r = w(e, ["width", "height"]), { width: parseInt(r.width, 10), height: parseInt(r.height, 10) }) } function x(e, t) { var n, i, o; void 0 === t && (t = {}); for (n in t) for (i = n.trim().split(" "), o = 0; o < i.length; o++)e.removeEventListener(i[o], t[n], !1) } function C(e) { return function (t) { return this[e] !== t && (this[e] = t, this.geometryChange()), this } } function S(e) { return function () { return this[e] } } function T(e, t) { var n, i, o; for (n = 0; n < t.length; n++)i = t[n], o = i.charAt(0).toUpperCase() + i.substring(1, i.length), e["set" + o] = C(i), e["get" + o] = S(i) } function D(e) { return e && "function" == typeof e.matrix ? e.matrix() : e } function A(e) { return null === e ? null : e instanceof hn ? e : new hn(e) } function E(e, t, n, i) { var o = 0, r = 0; return i && (o = Math.atan2(i.c * n, i.a * t), 0 !== i.b && (r = Math.atan2(i.d * n, i.b * t))), { x: o, y: r } } function I(e) { var t = "_" + e; return function (e) { return i(e) ? (this._observerField(t, e), this.geometryChange(), this) : this[t] } } function M(e, t) { for (var n = 0; n < t.length; n++)e[t[n]] = I(t[n]) } function R(e, t, n) { return void 0 === n && (n = yn), 0 === m(Math.abs(e - t), n) } function F(e, t, n) { return e < t || R(e, t, n) } function P(e, t, n, i) { var o = t.x - e.x, r = i.x - n.x, a = t.y - e.y, s = i.y - n.y, l = e.x - n.x, d = e.y - n.y, c = o * s - r * a, u = (o * d - a * l) / c, h = (r * d - s * l) / c; if (u >= 0 && u <= 1 && h >= 0 && h <= 1) return new dn(e.x + h * o, e.y + h * a) } function z(e, t, n, i, o, a) { var s = m((o - e) / n, 3), l = m((a - t) / i, 3); return m(r(Math.atan2(l, s))) } function B(e) { var t, n, i, o, a, s, l, d, c, u, h, p, g, v, _, b, w, k, y, x, C, S, T, D, A, E = e.x1, I = e.y1, M = e.x2, R = e.y2, F = e.rx, P = e.ry, z = e.largeArc, B = e.swipe, L = e.rotation; return void 0 === L && (L = 0), t = f(L), n = Math.cos(t), i = Math.sin(t), o = n * (E - M) / 2 + i * (I - R) / 2, a = -i * (E - M) / 2 + n * (I - R) / 2, s = z !== B ? 1 : -1, l = Math.pow(o, 2), d = Math.pow(a, 2), c = Math.pow(F, 2), u = Math.pow(P, 2), h = l / c + d / u, h > 1 && (h = Math.sqrt(l / c + d / u), F = h * F, c = Math.pow(F, 2), P = h * P, u = Math.pow(P, 2)), p = s * Math.sqrt((c * u - c * d - u * l) / (c * d + u * l)), isNaN(p) && (p = 0), g = p * (F * a) / P, v = -p * (P * o) / F, _ = n * g - i * v + (E + M) / 2, b = i * g + n * v + (I + R) / 2, w = (o - g) / F, k = (a - v) / P, y = -(o + g) / F, x = -(a + v) / P, C = (k >= 0 ? 1 : -1) * r(Math.acos(w / Math.sqrt(w * w + k * k))), S = m((w * y + k * x) / (Math.sqrt(w * w + k * k) * Math.sqrt(y * y + x * x)), 10), T = (w * x - k * y >= 0 ? 1 : -1) * r(Math.acos(S)), !B && T > 0 && (T -= 360), B && T < 0 && (T += 360), D = C + T, A = D >= 0 ? 1 : -1, D = Math.abs(D) % 360 * A, { center: new dn(_, b), startAngle: C, endAngle: D, radiusX: F, radiusY: P, xRotation: L } } function L(e, t) { for (var n = e; n < t;)n += 90; return n } function H(e) { var t = "_" + e; return function (e) { return i(e) ? (this._observerField(t, dn.create(e)), this.geometryChange(), this) : this[t] } } function N(e, t) { for (var n = 0; n < t.length; n++)e[t[n]] = H(t[n]) } function O(e, t, n) { var i = r(Math.atan2(t.y - e.y, t.x - e.x)), o = n.transformCopy(A().rotate(-i, e)); return o.x < e.x } function V(e, t, n) { var i = 1 - e; return Math.pow(i, 3) * n[0][t] + 3 * Math.pow(i, 2) * e * n[1][t] + 3 * Math.pow(e, 2) * i * n[2][t] + Math.pow(e, 3) * n[3][t] } function W(e, t) { return [-e[0][t] + 3 * e[1][t] - 3 * e[2][t] + e[3][t], 3 * (e[0][t] - 2 * e[1][t] + e[2][t]), 3 * (-e[0][t] + e[1][t]), e[0][t]] } function U(e) { return e < 0 ? -1 : 1 } function j(e, t, n) { var i = Math.sqrt(Math.pow(t, 2) - 4 * e * n); return [(-t + i) / (2 * e), (-t - i) / (2 * e)] } function q(e, t, n, i) { var o, r, a, s, l, d, c, u, h, p, f, g, v; return 0 === e ? j(t, n, i) : (o = (3 * e * n - Math.pow(t, 2)) / (3 * Math.pow(e, 2)), r = (2 * Math.pow(t, 3) - 9 * e * t * n + 27 * Math.pow(e, 2) * i) / (27 * Math.pow(e, 3)), a = Math.pow(o / 3, 3) + Math.pow(r / 2, 2), s = new Pn(0, 1), l = -t / (3 * e), a < 0 ? (d = new Pn(-r / 2, Math.sqrt(-a)).nthRoot(3), c = new Pn(-r / 2, (-Math.sqrt(-a))).nthRoot(3)) : (d = -r / 2 + Math.sqrt(a), d = new Pn(U(d) * Math.pow(Math.abs(d), 1 / 3)), c = -r / 2 - Math.sqrt(a), c = new Pn(U(c) * Math.pow(Math.abs(c), 1 / 3))), u = d.add(c), f = d.add(c).multiplyConstant(-.5), g = d.add(c.negate()).multiplyConstant(Math.sqrt(3) / 2), h = f.add(s.multiply(g)), p = f.add(s.negate().multiply(g)), v = [], u.isReal() && v.push(m(u.real + l, yn)), h.isReal() && v.push(m(h.real + l, yn)), p.isReal() && v.push(m(p.real + l, yn)), v) } function G(e, t, n, i, o) { var r, a, s = W(e, i), l = q(s[0], s[1], s[2], s[3] - t[i]); for (a = 0; a < l.length; a++)if (0 <= l[a] && l[a] <= 1 && (r = V(l[a], n, e), Math.abs(r - t[n]) <= o)) return !0 } function $(e, t, n) { var i, o, r, a = W(e, "x"), s = q(a[0], a[1], a[2], a[3] - t.x), l = 0; for (r = 0; r < s.length; r++)i = V(s[r], "y", e), o = R(i, t.y) || i > t.y, o && ((0 === s[r] || 1 === s[r]) && n.bottomRight().x > t.x || 0 < s[r] && s[r] < 1) && l++; return l } function K(e, t, n) { var i, o, r, a, s, l; return e.x !== t.x && (o = Math.min(e.x, t.x), r = Math.max(e.x, t.x), a = Math.min(e.y, t.y), s = Math.max(e.y, t.y), l = o <= n.x && n.x < r, i = a === s ? n.y <= a && l : l && (s - a) * ((e.x - t.x) * (e.y - t.y) > 0 ? n.x - o : r - n.x) / (r - o) + a - n.y >= 0), i ? 1 : 0 } function Y(e) { var t, n = e.length, i = en, o = tn; for (t = 0; t < n; t++)o = Math.max(o, e[t]), i = Math.min(i, e[t]); return { min: i, max: o } } function Q(e, t, n) { var i, o, r, a; for (o = 0; o < e.length; o++)r = e[o], r.visible() && (a = t ? r.bbox(n) : r.rawBBox(), a && (i = i ? un.union(i, a) : a)); return i } function X(e, t) { var n, i, o, r; for (i = 0; i < e.length; i++)o = e[i], o.visible() && (r = o.clippedBBox(t), r && (n = n ? un.union(n, r) : r)); return n } function J(e, t, n) { var i, o = t ? 0 : 1; for (i = 0; i < e.length; i += 2)e.splice(i + o, 0, n) } function Z(e, t) { if (e && t) return t.scaleCopy(2).translate(-e.x, -e.y) } function ee(e, t, n) { var i = t.clone().scale(2 / 3); return { controlOut: i.clone().translateWith(e.scaleCopy(Hn)), controlIn: i.translateWith(n.scaleCopy(Hn)) } } function te(e) { var t = []; return e.replace(On, function (e, n) { t.push(parseFloat(n)) }), t } function ne(e, t, n) { var i = n.transform() || A(), o = i.matrix(); o.e += e.x - t.origin.x, o.f += e.y - t.origin.y, i.matrix(o), n.transform(i) } function ie(e, t, n, i, o) { var r; return r = "start" === n ? t.origin[i] : "end" === n ? t.origin[i] + t.size[o] - e : t.origin[i] + (t.size[o] - e) / 2 } function oe(e, t, n, i, o) { var r; return r = "start" === n ? t.origin[i] + t.size[o] - e : "end" === n ? t.origin[i] : t.origin[i] + (t.size[o] - e) / 2 } function re(e, t, n, i, o) { var r, a, s; for (r = 0; r < e.length; r++)a = e[r].clippedBBox(), a && (s = a.origin.clone(), s[i] = ie(a.size[o], t, n || "start", i, o), ne(s, a, e[r])) } function ae(e, t, n) { re(e, t, n, "x", "width") } function se(e, t, n) { re(e, t, n, "y", "height") } function le(e, t, n, i) { var o, r, a, s, l; if (e.length > 1) for (o = new dn, r = e[0].bbox, a = 1; a < e.length; a++)s = e[a].element, l = e[a].bbox, o[t] = r.origin[t] + r.size[i], o[n] = l.origin[n], ne(o, l, s), l.origin[t] = o[t], r = l } function de(e) { var t, n, i, o = []; for (t = 0; t < e.length; t++)n = e[t], i = n.clippedBBox(), i && o.push({ element: n, bbox: i }); return o } function ce(e) { le(de(e), "x", "y", "width") } function ue(e) { le(de(e), "y", "x", "height") } function he(e, t, n) { var i, o, r, a, s = t.size[n], l = [], d = [], c = 0, u = function () { d.push({ element: i, bbox: o }) }; for (r = 0; r < e.length; r++)i = e[r], o = i.clippedBBox(), o && (a = o.size[n], c + a > s ? d.length ? (l.push(d), d = [], u(), c = a) : (u(), l.push(d), d = [], c = 0) : (u(), c += a)); return d.length && l.push(d), l } function pe(e, t, n, i, o) { var r, a, s, l, d = he(e, t, o), c = t.origin.clone(), u = []; for (r = 0; r < d.length; r++)for (a = d[r], s = a[0], c[i] = s.bbox.origin[i], ne(c, s.bbox, s.element), s.bbox.origin[n] = c[n], le(a, n, i, o), u.push([]), l = 0; l < a.length; l++)u[r].push(a[l].element); return u } function fe(e, t) { return pe(e, t, "x", "y", "width") } function ge(e, t) { return pe(e, t, "y", "x", "height") } function me(e, t) { var n, i, o, r, a = e.clippedBBox(); a && (n = a.size, i = t.size, (i.width < n.width || i.height < n.height) && (o = Math.min(i.width / n.width, i.height / n.height), r = e.transform() || A(), r.scale(o, o), e.transform(r))) } function ve(e) { return function (t) { return i(t) ? (this.options.set(e, t), this) : this.options.get(e) } } function _e(e, t) { for (var n = 0; n < t.length; n++)e[t[n]] = ve(t[n]) } function be(e) { return .5 - Math.cos(e * Math.PI) / 2 } function we(e) { return e } function ke(e, t, n, i) { var o = 1.70158, r = 0, a = i; return 0 === e ? n : 1 === e ? n + i : (r || (r = .5), a < Math.abs(i) ? (a = i, o = r / 4) : o = r / (2 * Math.PI) * Math.asin(i / a), a * Math.pow(2, -10 * e) * Math.sin((+e - o) * (1.1 * Math.PI) / r) + i + n) } function ye(e, t) { return i(t) && null !== t ? " " + e + '="' + t + '" ' : "" } function xe(e) { var t, n = ""; for (t = 0; t < e.length; t++)n += ye(e[t][0], e[t][1]); return n } function Ce(e) { var t, n, o = ""; for (t = 0; t < e.length; t++)n = e[t][1], i(n) && (o += e[t][0] + ":" + n + ";"); if ("" !== o) return o } function Se(e, t) { return "clip" === e || "fill" === e && (!t || "Gradient" === t.nodeType) } function Te() { var e, t = document.getElementsByTagName("base")[0], n = document.location.href, i = ""; return t && !(Gt || {}).msie && (e = n.indexOf("#"), e !== -1 && (n = n.substring(0, e)), i = n), i } function De(e) { var t, n, i, o; try { t = e.getScreenCTM ? e.getScreenCTM() : null } catch (r) { } t && (n = -t.e % 1, i = -t.f % 1, o = e.style, 0 === n && 0 === i || (o.left = n + "px", o.top = i + "px")) } function Ae(e) { if (!e || "string" != typeof e || !Ki.test(e)) return e; var t = Ae._element; return Ki.lastIndex = 0, e.replace(Ki, function (e) { return t.innerHTML = e, t.textContent || t.innerText }) } function Ee(e) { var t, n, i, o = new Pi({ skipBaseHref: !0 }), r = e.clippedBBox(), a = e; return r && (t = r.getOrigin(), n = new Jn, n.transform(A().translate(-t.x, -t.y)), n.children.push(e), a = n), o.load([a]), i = "" + o.render() + "", o.destroy(), i } function Ie(e, t) { var n, i, o, r, a, s, l = t.segments; if (0 !== l.length) { for (n = l[0], i = n.anchor(), e.moveTo(i.x, i.y), o = 1; o < l.length; o++)n = l[o], i = n.anchor(), r = l[o - 1], a = r.controlOut(), s = n.controlIn(), a && s ? e.bezierCurveTo(a.x, a.y, s.x, s.y, i.x, i.y) : e.lineTo(i.x, i.y); t.options.closed && e.closePath() } } function Me(e, t) { return e._zIndex < t._zIndex ? 1 : e._zIndex > t._zIndex ? -1 : 0 } function Re(e, t) { var n, i, o; for (n = 0; n < t.length; n++)i = t[n], o = kendo.parseColor(i.color()), o.a *= i.opacity(), e.addColorStop(i.offset(), o.toCssRgba()) } function Fe(t, n) { var i, o, r, a, s, l, d, c, u = { width: "800px", height: "600px", cors: "Anonymous" }, h = t, p = t.clippedBBox(); return p && (i = p.getOrigin(), h = new Jn, h.transform(A().translate(-i.x, -i.y)), h.children.push(t), o = p.getSize(), u.width = o.width + "px", u.height = o.height + "px"), r = e.extend(u, n), a = document.createElement("div"), s = a.style, s.display = "none", s.width = r.width, s.height = r.height, document.body.appendChild(a), l = new ho(a, r), l.suspendTracking(), l.draw(h), d = l.image(), c = function () { l.destroy(), document.body.removeChild(a) }, d.then(c, c), d } function Pe(e, t) { var n = Ee(e); return t && t.raw || (n = "data:image/svg+xml;base64," + s(n)), $t().resolve(n) } function ze(e) { return Array.prototype.slice.call(e) } function Be(e, t) { e.classList ? e.classList.add(t) : e.className += " " + t } function Le(e, t) { e.classList ? e.classList.remove(t) : e.className = e.className.split(/\s+/).reduce(function (e, n) { return n != t && e.push(n), e }, []).join(" ") } function He(e, t) { Object.keys(t).forEach(function (n) { e.style[n] = t[n] }) } function Ne(e, t) { if (e.closest) return e.closest(t); for (; e && !/^\[object (?:HTML)?Document\]$/.test(e + "");) { if (1 == e.nodeType && Ao(e, t)) return e; e = e.parentNode } } function Oe(e) { return "number" == typeof e ? { x: e, y: e } : Array.isArray(e) ? { x: e[0], y: e[1] } : { x: e.x, y: e.y } } function Ve(e, t) { function n(e) { var n = new Jn, i = e.getBoundingClientRect(); return mt(n, [a.x, 0, 0, a.y, -i.left * a.x, -i.top * a.y]), Co._clipbox = !1, Co._matrix = ln.unit(), Co._stackingContext = { element: e, group: n }, Co._avoidLinks = t.avoidLinks === !0 ? "a" : t.avoidLinks, Be(e, "k-pdf-export"), Nt(e, n), Le(e, "k-pdf-export"), n } function i(e) { if (null != e) return "string" == typeof e && (e = kendo.template(e.replace(/^\s+|\s+$/g, ""))), "function" == typeof e ? function (t) { var n, i = e(t); return i && "string" == typeof i && (n = document.createElement("div"), n.innerHTML = i, i = n.firstElementChild), i } : function () { return e.cloneNode(!0) } } function o(e, t, n, o, r, a, s) { function l() { ("-" != n || r) && c(w); var t = p(); w.parentNode.insertBefore(t, w), t.appendChild(w), v && b.forEach(function (e, t) { var n = v({ element: e, pageNum: t + 1, totalPages: b.length }); n && e.appendChild(n) }), Je(b, function () { Xe(b, function () { e({ pages: b, container: k }) }) }) } function d(e) { if (s.keepTogether && Ao(e, s.keepTogether) && e.offsetHeight <= r - y) return !0; var t = e.tagName; return !(/^h[1-6]$/i.test(t) && e.offsetHeight >= r - y) && (e.getAttribute("data-kendo-chart") || /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(e.tagName)) } function c(e) { var t, i, o, a, s, l, u; if ("TABLE" == e.tagName && He(e, { tableLayout: "fixed" }), !d(e)) { for (t = rt(e), i = parseFloat(at(t, "padding-bottom")), o = parseFloat(at(t, "border-bottom-width")), a = y, y += i + o, s = !0, l = e.firstChild; l; l = l.nextSibling)if (1 == l.nodeType) { if (s = !1, Ao(l, n)) { h(l); continue } if (!r) { c(l); continue } if (!/^(?:static|relative)$/.test(at(rt(l), "position"))) continue; u = f(l), 1 == u ? h(l) : u && d(l) ? h(l) : c(l) } else 3 == l.nodeType && r && (g(l, s), s = !1); y = a } } function u(e) { var t = e.parentNode, n = t.firstChild; if (e === n) return !0; if (e === t.children[0]) { if (7 == n.nodeType || 8 == n.nodeType) return !0; if (3 == n.nodeType) return !/\S/.test(n.data) } return !1 } function h(e) { var t, n, i, o, r, a, l; return 1 == e.nodeType && e !== w && u(e) ? h(e.parentNode) : (t = Ne(e, "table"), n = t && t.querySelector("colgroup"), s.repeatHeaders && (i = t && t.querySelector("thead"), o = Ne(e, ".k-grid.k-widget"), o && o.querySelector(".k-auto-scrollable") && (r = o.querySelector(".k-grid-header"))), a = p(), l = _.createRange(), l.setStartBefore(w), l.setEndBefore(e), a.appendChild(l.extractContents()), w.parentNode.insertBefore(a, w), m(e.parentNode), t && (t = Ne(e, "table"), s.repeatHeaders && i && t.insertBefore(i.cloneNode(!0), t.firstChild), n && t.insertBefore(n.cloneNode(!0), t.firstChild)), void (s.repeatHeaders && r && (o = Ne(e, ".k-grid.k-widget"), o.insertBefore(r.cloneNode(!0), o.firstChild)))) } function p() { var e = _.createElement("KENDO-PDF-PAGE"); return He(e, { display: "block", boxSizing: "content-box", width: o ? o + "px" : "auto", padding: a.top + "px " + a.right + "px " + a.bottom + "px " + a.left + "px", position: "relative", height: r ? r + "px" : "auto", overflow: r || o ? "hidden" : "visible", clear: "both" }), s && s.pageClassName && (e.className = s.pageClassName), b.push(e), e } function f(e) { var t, n, i = e.getBoundingClientRect(); return 0 === i.width || 0 === i.height ? 0 : (t = w.getBoundingClientRect().top, n = r - y, i.height > n ? 3 : i.top - t > n ? 1 : i.bottom - t > n ? 2 : 0) } function g(e, t) { var n, i, o, r, a; /\S/.test(e.data) && (n = e.data.length, i = _.createRange(), i.selectNodeContents(e), o = f(i), o && (r = e, 1 == o ? h(t ? e.parentNode : e) : (!function s(t, n, o) { return i.setEnd(e, n), t == n || n == o ? n : f(i) ? s(t, t + n >> 1, n) : s(n, n + o >> 1, o) }(0, n >> 1, n), !/\S/.test("" + i) && t ? h(e.parentNode) : (r = e.splitText(i.endOffset), a = p(), i.setStartBefore(w), a.appendChild(i.extractContents()), w.parentNode.insertBefore(a, w), m(r.parentNode))), g(r))) } function m(e) { var t = Ne(e, "li"); t && (t.setAttribute("kendo-no-bullet", "1"), m(t.parentNode)) } var v = i(s.template), _ = t.ownerDocument, b = [], w = s._destructive ? t : Eo(t), k = _.createElement("KENDO-PDF-DOCUMENT"), y = 0; ze(w.querySelectorAll("tfoot")).forEach(function (e) { e.parentNode.appendChild(e) }), ze(w.querySelectorAll("ol")).forEach(function (e) { ze(e.children).forEach(function (e, t) { e.setAttribute("kendo-split-index", t) }) }), He(k, { display: "block", position: "absolute", boxSizing: "content-box", left: "-10000px", top: "-10000px" }), o && (He(k, { width: o + "px", paddingLeft: a.left + "px", paddingRight: a.right + "px" }), He(w, { overflow: "hidden" })), t.parentNode.insertBefore(k, t), k.appendChild(w), s.beforePageBreak ? setTimeout(function () { s.beforePageBreak(k, l) }, 15) : setTimeout(l, 15) } var r, a; if (t || (t = {}), r = $t(), !e) return r.reject("No element to export"); if ("function" != typeof window.getComputedStyle) throw Error("window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+."); return kendo.pdf.defineFont(We(e.ownerDocument)), a = Oe(t.scale || 1), Je(e, function () { var i, s = t && t.forcePageBreak, l = t && t.paperSize && "auto" != t.paperSize, d = kendo.pdf.getPaperOptions(function (e, n) { return "paperSize" == e ? l ? t[e] : "A4" : e in t ? t[e] : n }), c = l && d.paperSize[0], u = l && d.paperSize[1], h = t.margin && d.margin, p = !!h; s || u ? (h || (h = { left: 0, top: 0, right: 0, bottom: 0 }), c && (c /= a.x), u && (u /= a.y), h.left /= a.x, h.right /= a.x, h.top /= a.y, h.bottom /= a.y, i = new Jn({ pdf: { multiPage: !0, paperSize: l ? d.paperSize : "auto", _ignoreMargin: p } }), o(function (e) { if (t.progress) { var o = !1, a = 0; !function s() { if (a < e.pages.length) { var l = n(e.pages[a]); i.append(l), t.progress({ page: l, pageNum: ++a, totalPages: e.pages.length, cancel: function () { o = !0 } }), o ? e.container.parentNode.removeChild(e.container) : setTimeout(s) } else e.container.parentNode.removeChild(e.container), r.resolve(i) }() } else e.pages.forEach(function (e) { i.append(n(e)) }), e.container.parentNode.removeChild(e.container), r.resolve(i) }, e, s, c ? c - h.left - h.right : null, u ? u - h.top - h.bottom : null, h, t)) : r.resolve(n(e)) }), r } function We(e) { function t(e) { if (e) { var t = null; try { t = e.cssRules } catch (n) { } t && i(e, t) } } function n(e) { var t, n = at(e.style, "src"); return n ? Mo(n).reduce(function (e, t) { var n = Ro(t); return n && e.push(n), e }, []) : (t = Ro(e.cssText), t ? [t] : []) } function i(e, i) { var r, a, s, l, d, c, u; for (r = 0; r < i.length; ++r)switch (a = i[r], a.type) { case 3: t(a.styleSheet); break; case 5: s = a.style, l = Mo(at(s, "font-family")), d = /^([56789]00|bold)$/i.test(at(s, "font-weight")), c = "italic" == at(s, "font-style"), u = n(a), u.length > 0 && o(e, l, d, c, u[0]) } } function o(e, t, n, i, o) { /^data:/i.test(o) || /^[^\/:]+:\/\//.test(o) || /^\//.test(o) || (o = (e.href + "").replace(/[^\/]*$/, "") + o), t.forEach(function (e) { e = e.replace(/^(['"]?)(.*?)\1$/, "$2"), n && (e += "|bold"), i && (e += "|italic"), r[e] = o }) } var r, a; for (null == e && (e = document), r = {}, a = 0; a < e.styleSheets.length; ++a)t(e.styleSheets[a]); return r } function Ue(e, t) { return Object.prototype.hasOwnProperty.call(e, t) } function je(e) { return e = "_counter_" + e, Co[e] } function qe(e) { var t = [], n = Co; for (e = "_counter_" + e; n;)Ue(n, e) && t.push(n[e]), n = Object.getPrototypeOf(n); return t.reverse() } function Ge(e, t) { var n = Co; for (e = "_counter_" + e; n && !Ue(n, e);)n = Object.getPrototypeOf(n); n || (n = Co._root), n[e] = (n[e] || 0) + (null == t ? 1 : t) } function $e(e, t) { e = "_counter_" + e, Co[e] = null == t ? 0 : t } function Ke(e, t, n) { var i, o, r; for (i = 0; i < e.length;)o = e[i++], r = parseFloat(e[i]), isNaN(r) ? t(o, n) : (t(o, r), ++i) } function Ye(e) { var t, n = at(e, "counter-reset"); n && Ke(Mo(n, /^\s+/), $e, 0), t = at(e, "counter-increment"), t && Ke(Mo(t, /^\s+/), Ge, 1) } function Qe(e, t) { var n = kendo.parseColor(e, !0); return n && (n = n.toRGB(), t ? n = n.toCssRgba() : 0 === n.a && (n = null)), n } function Xe(e, t) { function n() { --i <= 0 && t() } var i = 0; e.forEach(function (e) { var t, o, r = e.querySelectorAll("img"); for (t = 0; t < r.length; ++t)o = r[t], o.complete || (i++, o.onload = o.onerror = n) }), i || n() } function Je(e, t) { function n(e) { xo[e] || (xo[e] = !0, a.push(e)) } function i(e) { /^img$/i.test(e.tagName) && n(e.src), Io(at(rt(e), "background-image")).forEach(function (e) { "url" == e.type && n(e.url) }), e.children && ze(e.children).forEach(i) } function o() { --r <= 0 && t() } var r, a = []; Array.isArray(e) ? e.forEach(i) : i(e), r = a.length, 0 === r && o(), a.forEach(function (e) { var t = xo[e] = new window.Image; /^data:/i.test(e) || (t.crossOrigin = "Anonymous"), t.src = e, t.complete ? o() : (t.onload = o, t.onerror = function () { xo[e] = null, o() }) }) } function Ze(e) { var t, n = ""; do t = e % 26, n = String.fromCharCode(97 + t) + n, e = Math.floor(e / 26); while (e > 0); return n } function et(e, t, n) { var i, o; Co = Object.create(Co), Co[e.tagName.toLowerCase()] = { element: e, style: t }, i = at(t, "text-decoration"), i && "none" != i && (o = at(t, "color"), i.split(/\s+/g).forEach(function (e) { Co[e] || (Co[e] = o) })), ot(t) && (Co._stackingContext = { element: e, group: n }) } function tt() { Co = Object.getPrototypeOf(Co) } function nt(e) { if (null != Co._clipbox) { var t = e.bbox(Co._matrix); Co._clipbox = Co._clipbox ? un.intersect(Co._clipbox, t) : t } } function it() { var e = Co._clipbox; return null == e || (e ? 0 === e.width() || 0 === e.height() : void 0) } function ot(e) { function t(t) { return at(e, t) } if ("none" != t("transform") || "static" != t("position") || "auto" != t("z-index") || t("opacity") < 1) return !0 } function rt(e, t) { return window.getComputedStyle(e, t || null) } function at(e, t, n) { var i = e.getPropertyValue(t); return null != i && "" !== i || (ko.webkit ? i = e.getPropertyValue("-webkit-" + t) : ko.mozilla ? i = e.getPropertyValue("-moz-" + t) : ko.opera ? i = e.getPropertyValue("-o-" + t) : To && (i = e.getPropertyValue("-ms-" + t))), arguments.length > 2 && (null == i || "" === i) ? n : i } function st(e, t, n, i) { e.setProperty(t, n, i), ko.webkit ? e.setProperty("-webkit-" + t, n, i) : ko.mozilla ? e.setProperty("-moz-" + t, n, i) : ko.opera ? e.setProperty("-o-" + t, n, i) : To && (e.setProperty("-ms-" + t, n, i), t = "ms" + t.replace(/(^|-)([a-z])/g, function (e, t, n) { return t + n.toUpperCase() }), e[t] = n) } function lt(e, t) { return t = "border-" + t, { width: parseFloat(at(e, t + "-width")), style: at(e, t + "-style"), color: Qe(at(e, t + "-color"), !0) } } function dt(e, t) { var n = e.style.cssText, i = t(); return e.style.cssText = n, i } function ct(e, t) { var n = at(e, "border-" + t + "-radius").split(/\s+/g).map(parseFloat); return 1 == n.length && n.push(n[0]), bt({ x: n[0], y: n[1] }) } function ut(e) { var t = e.getBoundingClientRect(); return t = ht(t, "border-*-width", e), t = ht(t, "padding-*", e) } function ht(e, t, n) { var i, o, r, a, s; return "string" == typeof t ? (i = rt(n), o = parseFloat(at(i, t.replace("*", "top"))), r = parseFloat(at(i, t.replace("*", "right"))), a = parseFloat(at(i, t.replace("*", "bottom"))), s = parseFloat(at(i, t.replace("*", "left")))) : "number" == typeof t && (o = r = a = s = t), { top: e.top + o, right: e.right - r, bottom: e.bottom - a, left: e.left + s, width: e.right - e.left - r - s, height: e.bottom - e.top - a - o } } function pt(e) { var t, n, i = at(e, "transform"); return "none" == i ? null : (t = /^\s*matrix\(\s*(.*?)\s*\)\s*$/.exec(i), t ? (n = at(e, "transform-origin"), t = t[1].split(/\s*,\s*/g).map(parseFloat), n = n.split(/\s+/g).map(parseFloat), { matrix: t, origin: n }) : void 0) } function ft(e) { return 180 * e / Math.PI % 360 } function gt(e) { var t = parseFloat(e); return /grad$/.test(e) ? Math.PI * t / 200 : /rad$/.test(e) ? t : /turn$/.test(e) ? Math.PI * t * 2 : /deg$/.test(e) ? Math.PI * t / 180 : void 0 } function mt(e, t) { return t = new ln(t[0], t[1], t[2], t[3], t[4], t[5]), e.transform(t), t } function vt(e, t) { e.clip(t) } function _t(e, t, n, i) { for (var o = new Sn([t, n], i).curvePoints(), r = 1; r < o.length;)e.curveTo(o[r++], o[r++], o[r++]) } function bt(e) { return (e.x <= 0 || e.y <= 0) && (e.x = e.y = 0), e } function wt(e, t, n, i, o) { var r = Math.max(0, t.x), a = Math.max(0, t.y), s = Math.max(0, n.x), l = Math.max(0, n.y), d = Math.max(0, i.x), c = Math.max(0, i.y), u = Math.max(0, o.x), h = Math.max(0, o.y), p = Math.min(e.width / (r + s), e.height / (l + c), e.width / (d + u), e.height / (h + a)); return p < 1 && (r *= p, a *= p, s *= p, l *= p, d *= p, c *= p, u *= p, h *= p), { tl: { x: r, y: a }, tr: { x: s, y: l }, br: { x: d, y: c }, bl: { x: u, y: h } } } function kt(e, t, n) { var i, o, r, a, s, l, d, c, u = rt(e), h = ct(u, "top-left"), p = ct(u, "top-right"), f = ct(u, "bottom-left"), g = ct(u, "bottom-right"); return "padding" != n && "content" != n || (i = lt(u, "top"), o = lt(u, "right"), r = lt(u, "bottom"), a = lt(u, "left"), h.x -= a.width, h.y -= i.width, p.x -= o.width, p.y -= i.width, g.x -= o.width, g.y -= r.width, f.x -= a.width, f.y -= r.width, "content" == n && (s = parseFloat(at(u, "padding-top")), l = parseFloat(at(u, "padding-right")), d = parseFloat(at(u, "padding-bottom")), c = parseFloat(at(u, "padding-left")), h.x -= c, h.y -= s, p.x -= l, p.y -= s, g.x -= l, g.y -= d, f.x -= c, f.y -= d)), "number" == typeof n && (h.x -= n, h.y -= n, p.x -= n, p.y -= n, g.x -= n, g.y -= n, f.x -= n, f.y -= n), yt(t, h, p, g, f) } function yt(e, t, n, i, o) { var r = wt(e, t, n, i, o), a = r.tl, s = r.tr, l = r.br, d = r.bl, c = new jn({ fill: null, stroke: null }); return c.moveTo(e.left, e.top + a.y), a.x && _t(c, e.left + a.x, e.top + a.y, { startAngle: -180, endAngle: -90, radiusX: a.x, radiusY: a.y }), c.lineTo(e.right - s.x, e.top), s.x && _t(c, e.right - s.x, e.top + s.y, { startAngle: -90, endAngle: 0, radiusX: s.x, radiusY: s.y }), c.lineTo(e.right, e.bottom - l.y), l.x && _t(c, e.right - l.x, e.bottom - l.y, { startAngle: 0, endAngle: 90, radiusX: l.x, radiusY: l.y }), c.lineTo(e.left + d.x, e.bottom), d.x && _t(c, e.left + d.x, e.bottom - d.y, { startAngle: 90, endAngle: 180, radiusX: d.x, radiusY: d.y }), c.close() } function xt(e, t) { var i = parseFloat(e) + ""; switch (t) { case "decimal-leading-zero": return i.length < 2 && (i = "0" + i), i; case "lower-roman": return n(e).toLowerCase(); case "upper-roman": return n(e).toUpperCase(); case "lower-latin": case "lower-alpha": return Ze(e - 1); case "upper-latin": case "upper-alpha": return Ze(e - 1).toUpperCase(); default: return i } } function Ct(e, t) { function n(e, t, n) { return n ? (n = n.replace(/^\s*(["'])(.*)\1\s*$/, "$2"), qe(e).map(function (e) { return xt(e, t) }).join(n)) : xt(je(e) || 0, t) } var i, o = Mo(t, /^\s+/), r = []; return o.forEach(function (t) { var o; (i = /^\s*(["'])(.*)\1\s*$/.exec(t)) ? r.push(i[2].replace(/\\([0-9a-f]{4})/gi, function (e, t) { return String.fromCharCode(parseInt(t, 16)) })) : (i = /^\s*counter\((.*?)\)\s*$/.exec(t)) ? (o = Mo(i[1]), r.push(n(o[0], o[1]))) : (i = /^\s*counters\((.*?)\)\s*$/.exec(t)) ? (o = Mo(i[1]), r.push(n(o[0], o[2], o[1]))) : r.push((i = /^\s*attr\((.*?)\)\s*$/.exec(t)) ? e.getAttribute(i[1]) || "" : t) }), r.join("") } function St(e) { var t, n; if (e.cssText) return e.cssText; for (t = [], n = 0; n < e.length; ++n)t.push(e[n] + ": " + at(e, e[n])); return t.join(";\n") } function Tt(e, t) { function n(t, n) { var o, r = rt(e, t), a = r.content; Ye(r), a && "normal" != a && "none" != a && "0px" != r.width && (o = e.ownerDocument.createElement(yo), o.style.cssText = St(r), o.textContent = Ct(e, a), e.insertBefore(o, n), i.push(o)) } var i, o; return e.tagName == yo ? void Dt(e, t) : (i = [], n(":before", e.firstChild), n(":after", null), void (i.length > 0 ? (o = e.className, e.className += " kendo-pdf-hide-pseudo-elements", Dt(e, t), e.className = o, i.forEach(function (t) { e.removeChild(t) })) : Dt(e, t))) } function Dt(e, t) { function i(t) { var n, i, o, r, a, s; if (/^td$/i.test(e.tagName) && (n = Co.table, n && "collapse" == at(n.style, "border-collapse"))) { if (i = lt(n.style, "left").width, o = lt(n.style, "top").width, 0 === i && 0 === o) return t; if (r = n.element.getBoundingClientRect(), a = n.element.rows[0].cells[0], s = a.getBoundingClientRect(), s.top == r.top || s.left == r.left) return ze(t).map(function (e) { return { left: e.left + i, top: e.top + o, right: e.right + i, bottom: e.bottom + o, height: e.height, width: e.width } }) } return t } function o(e, n, i, o, r, a, s, l) { function d(t, n, o) { var r = Math.PI / 2 * t / (t + i), a = { x: n.x - t, y: n.y - i }, s = new jn({ fill: { color: e }, stroke: null }).moveTo(0, 0); mt(s, o), _t(s, 0, n.y, { startAngle: -90, endAngle: -ft(r), radiusX: n.x, radiusY: n.y }), a.x > 0 && a.y > 0 ? (s.lineTo(a.x * Math.cos(r), n.y - a.y * Math.sin(r)), _t(s, 0, n.y, { startAngle: -ft(r), endAngle: -90, radiusX: a.x, radiusY: a.y, anticlockwise: !0 })) : a.x > 0 ? s.lineTo(a.x, i).lineTo(0, i) : s.lineTo(a.x, i).lineTo(a.x, 0), u.append(s.close()) } if (!(i <= 0)) { var c, u = new Jn; mt(u, l), t.append(u), bt(a), bt(s), c = new jn({ fill: { color: e }, stroke: null }), u.append(c), c.moveTo(a.x ? Math.max(a.x, o) : 0, 0).lineTo(n - (s.x ? Math.max(s.x, r) : 0), 0).lineTo(n - Math.max(s.x, r), i).lineTo(Math.max(a.x, o), i).close(), a.x && d(o, a, [-1, 0, 0, 1, a.x, 0]), s.x && d(r, s, [1, 0, 0, 1, n - s.x, 0]) } } function r(e) { var n, i, o = new Jn; for (vt(o, yt(e, D, A, I, E)), t.append(o), R && (n = new jn({ fill: { color: R.toCssRgba() }, stroke: null }), n.moveTo(e.left, e.top).lineTo(e.right, e.top).lineTo(e.right, e.bottom).lineTo(e.left, e.bottom).close(), o.append(n)), i = d.length; --i >= 0;)a(o, e, d[i], c[i % c.length], u[i % u.length], h[i % h.length], p[i % p.length]) } function a(t, n, i, o, r, a, s) { function l(t, n, i, l, d) { function c() { for (; m.origin.x > n.left;)m.origin.x -= i } function u() { for (; m.origin.y > n.top;)m.origin.y -= l } function h() { for (; m.origin.x < n.right;)d(t, m.clone()), m.origin.x += i } var p, f, g, m, v, _ = i / l, b = n; switch ("content-box" == a ? (b = ht(b, "border-*-width", e), b = ht(b, "padding-*", e)) : "padding-box" == a && (b = ht(b, "border-*-width", e)), /^\s*auto(\s+auto)?\s*$/.test(s) || ("contain" == s ? (p = Math.min(b.width / i, b.height / l), i *= p, l *= p) : "cover" == s ? (p = Math.max(b.width / i, b.height / l), i *= p, l *= p) : (f = s.split(/\s+/g), i = /%$/.test(f[0]) ? b.width * parseFloat(f[0]) / 100 : parseFloat(f[0]), l = 1 == f.length || "auto" == f[1] ? i / _ : /%$/.test(f[1]) ? b.height * parseFloat(f[1]) / 100 : parseFloat(f[1]))), g = r + "") { case "bottom": g = "50% 100%"; break; case "top": g = "50% 0"; break; case "left": g = "0 50%"; break; case "right": g = "100% 50%"; break; case "center": g = "50% 50%" }if (g = g.split(/\s+/), 1 == g.length && (g[1] = "50%"), g[0] = /%$/.test(g[0]) ? parseFloat(g[0]) / 100 * (b.width - i) : parseFloat(g[0]), g[1] = /%$/.test(g[1]) ? parseFloat(g[1]) / 100 * (b.height - l) : parseFloat(g[1]), m = new un([b.left + g[0], b.top + g[1]], [i, l]), "no-repeat" == o) d(t, m); else if ("repeat-x" == o) c(), h(); else if ("repeat-y" == o) for (u(); m.origin.y < n.bottom;)d(t, m.clone()), m.origin.y += l; else if ("repeat" == o) for (c(), u(), v = m.origin.clone(); m.origin.y < n.bottom;)m.origin.x = v.x, h(), m.origin.y += l } if (i && "none" != i) if ("url" == i.type) { if (/^url\(\"data:image\/svg/i.test(i.url)) return; var d = xo[i.url]; d && d.width > 0 && d.height > 0 && l(t, n, d.width, d.height, function (e, t) { e.append(new Qn(i.url, t)) }) } else { if ("linear" != i.type) return; l(t, n, n.width, n.height, At(i)) } } function s() { function i(n) { dt(e, function () { e.style.position = "relative"; var i = e.ownerDocument.createElement(yo); i.style.position = "absolute", i.style.boxSizing = "border-box", "outside" == r ? (i.style.width = "6em", i.style.left = "-6.8em", i.style.textAlign = "right") : i.style.left = "0px", n(i), e.insertBefore(i, e.firstChild), Nt(i, t), e.removeChild(i) }) } function o(t) { var n, i = e.parentNode.children, o = e.getAttribute("kendo-split-index"); if (null != o) return t(0 | o, i.length); for (n = 0; n < i.length; ++n)if (i[n] === e) return t(n, i.length) } var r, a = at(y, "list-style-type"); if ("none" != a) switch (r = at(y, "list-style-position"), a) { case "circle": case "disc": case "square": i(function (e) { e.style.fontSize = "60%", e.style.lineHeight = "200%", e.style.paddingRight = "0.5em", e.style.fontFamily = "DejaVu Serif", e.innerHTML = { disc: "â??", circle: "â?¯", square: "â? " }[a] }); break; case "decimal": case "decimal-leading-zero": i(function (e) { o(function (t) { ++t, "decimal-leading-zero" == a && t < 10 && (t = "0" + t), e.innerHTML = t + "." }) }); break; case "lower-roman": case "upper-roman": i(function (e) { o(function (t) { t = n(t + 1), "upper-roman" == a && (t = t.toUpperCase()), e.innerHTML = t + "." }) }); break; case "lower-latin": case "lower-alpha": case "upper-latin": case "upper-alpha": i(function (e) { o(function (t) { t = Ze(t), /^upper/i.test(a) && (t = t.toUpperCase()), e.innerHTML = t + "." }) }) } } function l(n, i, a) { function s(e) { return { x: e.y, y: e.x } } var l, d, c, u, h, p, f, g; if (0 !== n.width && 0 !== n.height && (r(n), l = T.width > 0 && (i && "ltr" == M || a && "rtl" == M), d = C.width > 0 && (a && "ltr" == M || i && "rtl" == M), 0 !== x.width || 0 !== T.width || 0 !== C.width || 0 !== S.width)) { if (x.color == C.color && x.color == S.color && x.color == T.color && x.width == C.width && x.width == S.width && x.width == T.width && l && d) return n = ht(n, x.width / 2), c = kt(e, n, x.width / 2), c.options.stroke = { color: x.color, width: x.width }, void t.append(c); if (0 === D.x && 0 === A.x && 0 === I.x && 0 === E.x && x.width < 2 && T.width < 2 && C.width < 2 && S.width < 2) return x.width > 0 && t.append(new jn({ stroke: { width: x.width, color: x.color } }).moveTo(n.left, n.top + x.width / 2).lineTo(n.right, n.top + x.width / 2)), S.width > 0 && t.append(new jn({ stroke: { width: S.width, color: S.color } }).moveTo(n.left, n.bottom - S.width / 2).lineTo(n.right, n.bottom - S.width / 2)), l && t.append(new jn({ stroke: { width: T.width, color: T.color } }).moveTo(n.left + T.width / 2, n.top).lineTo(n.left + T.width / 2, n.bottom)), void (d && t.append(new jn({ stroke: { width: C.width, color: C.color } }).moveTo(n.right - C.width / 2, n.top).lineTo(n.right - C.width / 2, n.bottom))); u = wt(n, D, A, I, E), h = u.tl, p = u.tr, f = u.br, g = u.bl, o(x.color, n.width, x.width, T.width, C.width, h, p, [1, 0, 0, 1, n.left, n.top]), o(S.color, n.width, S.width, C.width, T.width, f, g, [-1, 0, 0, -1, n.right, n.bottom]), o(T.color, n.height, T.width, S.width, x.width, s(g), s(h), [0, -1, 1, 0, n.left, n.bottom]), o(C.color, n.height, C.width, x.width, S.width, s(p), s(f), [0, 1, -1, 0, n.right, n.top]) } } var d, c, u, h, p, f, g, m, v, _, b, w, k, y = rt(e), x = lt(y, "top"), C = lt(y, "right"), S = lt(y, "bottom"), T = lt(y, "left"), D = ct(y, "top-left"), A = ct(y, "top-right"), E = ct(y, "bottom-left"), I = ct(y, "bottom-right"), M = at(y, "direction"), R = at(y, "background-color"); if (R = Qe(R), d = Io(at(y, "background-image")), c = Mo(at(y, "background-repeat")), u = Mo(at(y, "background-position")), h = Mo(at(y, "background-origin")), p = Mo(at(y, "background-size")), To && (f = y.textOverflow, "ellipsis" == f && (g = e.style.textOverflow, e.style.textOverflow = "clip")), ko.msie && ko.version < 10 && (u = Mo(e.currentStyle.backgroundPosition)), m = ht(e.getBoundingClientRect(), "border-*-width", e), function () { var e, n, i, o, r, a, s, l = at(y, "clip"), d = /^\s*rect\((.*)\)\s*$/.exec(l); d && (e = d[1].split(/[ ,]+/g), n = "auto" == e[0] ? m.top : parseFloat(e[0]) + m.top, i = "auto" == e[1] ? m.right : parseFloat(e[1]) + m.left, o = "auto" == e[2] ? m.bottom : parseFloat(e[2]) + m.top, r = "auto" == e[3] ? m.left : parseFloat(e[3]) + m.left, a = new Jn, s = (new jn).moveTo(r, n).lineTo(i, n).lineTo(i, o).lineTo(r, o).close(), vt(a, s), t.append(a), t = a, nt(s)) }(), w = at(y, "display"), "table-row" == w) for (v = [], _ = 0, b = e.children; _ < b.length; ++_)v.push(b[_].getBoundingClientRect()); else v = e.getClientRects(), 1 == v.length && (v = [e.getBoundingClientRect()]); for (v = i(v), _ = 0; _ < v.length; ++_)l(v[_], 0 === _, _ == v.length - 1); return "A" == e.tagName && e.href && !/^#?$/.test(e.getAttribute("href")) && (Co._avoidLinks && Ao(e, Co._avoidLinks) || (k = document.createRange(), k.selectNodeContents(e), ze(k.getClientRects()).forEach(function (n) { var i = new Jn; i._pdfLink = { url: e.href, top: n.top, right: n.right, bottom: n.bottom, left: n.left }, t.append(i) }))), v.length > 0 && "list-item" == w && !e.getAttribute("kendo-no-bullet") && s(v[0]), function () { function n() { var n = kt(e, m, "padding"), i = new Jn; vt(i, n), t.append(i), t = i, nt(n) } Rt(e) ? n() : /^(hidden|auto|scroll)/.test(at(y, "overflow")) ? n() : /^(hidden|auto|scroll)/.test(at(y, "overflow-x")) ? n() : /^(hidden|auto|scroll)/.test(at(y, "overflow-y")) && n() }(), Et(e, t) || Bt(e, t), To && "ellipsis" == f && (e.style.textOverflow = g), t } function At(e) { return function (t, n) { var i, o, r, a, s, l, d, c, u, h, p, f, g, m = n.width(), v = n.height(); switch (e.type) { case "linear": switch (i = null != e.angle ? e.angle : Math.PI, e.to) { case "top": i = 0; break; case "left": i = -Math.PI / 2; break; case "bottom": i = Math.PI; break; case "right": i = Math.PI / 2; break; case "top left": case "left top": i = -Math.atan2(v, m); break; case "top right": case "right top": i = Math.atan2(v, m); break; case "bottom left": case "left bottom": i = Math.PI + Math.atan2(v, m); break; case "bottom right": case "right bottom": i = Math.PI - Math.atan2(v, m) }e.reverse && (i -= Math.PI), i %= 2 * Math.PI, i < 0 && (i += 2 * Math.PI), o = Math.abs(m * Math.sin(i)) + Math.abs(v * Math.cos(i)), r = Math.atan(m * Math.tan(i) / v), a = Math.sin(r), s = Math.cos(r), l = Math.abs(a) + Math.abs(s), d = l / 2 * a, c = l / 2 * s, i > Math.PI / 2 && i <= 3 * Math.PI / 2 && (d = -d, c = -c), u = [], h = 0, p = e.stops.map(function (t, n) { var i, r = t.percent; return r ? r = parseFloat(r) / 100 : t.length ? r = parseFloat(t.length) / o : 0 === n ? r = 0 : n == e.stops.length - 1 && (r = 1), i = { color: t.color.toCssRgba(), offset: r }, null != r ? (h = r, u.forEach(function (e, t) { var n = e.stop; n.offset = e.left + (h - e.left) * (t + 1) / (u.length + 1) }), u = []) : u.push({ left: h, stop: i }), i }), f = [.5 - d, .5 + c], g = [.5 + d, .5 - c], t.append(jn.fromRect(n).stroke(null).fill(new si({ start: f, end: g, stops: p, userSpace: !1 }))); break; case "radial": window.console && window.console.log && window.console.log("Radial gradients are not yet supported in HTML renderer") } } } function Et(e, t) { var n, i, o, r; return e._kendoExportVisual ? n = e._kendoExportVisual() : window.kendo && window.kendo.jQuery && e.getAttribute(window.kendo.attr("role")) && (i = window.kendo.widgetInstance(window.kendo.jQuery(e)), i && (i.exportDOMVisual || i.exportVisual) && (n = i.exportDOMVisual ? i.exportDOMVisual() : i.exportVisual())), !!n && (o = new Jn, o.children.push(n), r = e.getBoundingClientRect(), o.transform(A().translate(r.left, r.top)), t.append(o), !0) } function It(e, t, n) { var i = ut(e), o = new un([i.left, i.top], [i.width, i.height]), r = new Qn(t, o); vt(r, kt(e, i, "content")), n.append(r) } function Mt(e, t) { var n = rt(e), i = rt(t), o = parseFloat(at(n, "z-index")), r = parseFloat(at(i, "z-index")), a = at(n, "position"), s = at(i, "position"); return isNaN(o) && isNaN(r) ? /static|absolute/.test(a) && /static|absolute/.test(s) ? 0 : "static" == a ? -1 : "static" == s ? 1 : 0 : isNaN(o) ? 0 === r ? 0 : r > 0 ? -1 : 1 : isNaN(r) ? 0 === o ? 0 : o > 0 ? 1 : -1 : parseFloat(o) - parseFloat(r) } function Rt(e) { return /^(?:textarea|select|input)$/i.test(e.tagName) } function Ft(e) { return e.selectedOptions && e.selectedOptions.length > 0 ? e.selectedOptions[0] : e.options[e.selectedIndex] } function Pt(e, t) { var n = rt(e), i = at(n, "color"), o = e.getBoundingClientRect(); "checkbox" == e.type ? (t.append(jn.fromRect(new un([o.left + 1, o.top + 1], [o.width - 2, o.height - 2])).stroke(i, 1)), e.checked && t.append((new jn).stroke(i, 1.2).moveTo(o.left + .22 * o.width, o.top + .55 * o.height).lineTo(o.left + .45 * o.width, o.top + .75 * o.height).lineTo(o.left + .78 * o.width, o.top + .22 * o.width))) : (t.append(new kn(new gn([(o.left + o.right) / 2, (o.top + o.bottom) / 2], Math.min(o.width - 2, o.height - 2) / 2)).stroke(i, 1)), e.checked && t.append(new kn(new gn([(o.left + o.right) / 2, (o.top + o.bottom) / 2], Math.min(o.width - 8, o.height - 8) / 2)).fill(i).stroke(null))) } function zt(e, t) { var n, i, o, r, a, s = e.tagName.toLowerCase(); if ("input" == s && ("checkbox" == e.type || "radio" == e.type)) return Pt(e, t); if (n = e.parentNode, i = e.ownerDocument, o = i.createElement(yo), o.style.cssText = St(rt(e)), "input" == s && (o.style.whiteSpace = "pre"), "select" != s && "textarea" != s || (o.style.overflow = "auto"), "select" == s) if (e.multiple) for (a = 0; a < e.options.length; ++a)r = i.createElement(yo), r.style.cssText = St(rt(e.options[a])), r.style.display = "block", r.textContent = e.options[a].textContent, o.appendChild(r); else r = Ft(e), r && (o.textContent = r.textContent); else o.textContent = e.value; n.insertBefore(o, e), o.scrollLeft = e.scrollLeft, o.scrollTop = e.scrollTop, e.style.display = "none", Bt(o, t), e.style.display = "", n.removeChild(o) } function Bt(e, t) { var n, i, o, r, a, s, l; switch (Co._stackingContext.element === e && (Co._stackingContext.group = t), e.tagName.toLowerCase()) { case "img": It(e, e.src, t); break; case "canvas": try { It(e, e.toDataURL("image/png"), t) } catch (d) { } break; case "textarea": case "input": case "select": zt(e, t); break; default: for (n = [], i = [], o = [], r = e.firstChild; r; r = r.nextSibling)switch (r.nodeType) { case 3: /\S/.test(r.data) && Lt(e, r, t); break; case 1: a = rt(r), s = at(a, "float"), l = at(a, "position"), "static" != l ? o.push(r) : "none" != s ? i.push(r) : n.push(r) }p(n, Mt).forEach(function (e) { Nt(e, t) }), p(i, Mt).forEach(function (e) { Nt(e, t) }), p(o, Mt).forEach(function (e) { Nt(e, t) }) } } function Lt(e, t, n) { function i(e) { var t, n, i, o, r; if (To || ko.chrome) { for (t = e.getClientRects(), n = { top: 1 / 0, right: -(1 / 0), bottom: -(1 / 0), left: 1 / 0 }, i = !1, o = 0; o < t.length; ++o)r = t[o], r.width <= 1 || r.bottom === y || (n.left = Math.min(r.left, n.left), n.top = Math.min(r.top, n.top), n.right = Math.max(r.right, n.right), n.bottom = Math.max(r.bottom, n.bottom), i = !0); return i ? (n.width = n.right - n.left, n.height = n.bottom - n.top, n) : e.getBoundingClientRect() } return e.getBoundingClientRect() } function o() { var e, n, o, a, s, u, h, p = d, f = l.substr(d).search(/\S/); if (d += f, f < 0 || d >= c) return !0; if (g.setStart(t, d), g.setEnd(t, d + 1), e = i(g), n = !1, (v || _ > 1) && (f = l.substr(d).search(/\s/), f >= 0 && (g.setEnd(t, d + f), o = i(g), o.bottom == e.bottom && (e = o, n = !0, d += f))), !n) { if (f = function m(n, o, r) { g.setEnd(t, o); var a = i(g); return a.bottom != e.bottom && n < o ? m(n, n + o >> 1, o) : a.right != e.right ? (e = a, o < r ? m(o, o + r >> 1, r) : o) : o }(d, Math.min(c, d + k), c), f == d) return !0; if (d = f, f = ("" + g).search(/\s+$/), 0 === f) return !1; f > 0 && (g.setEnd(t, g.startOffset + f), e = i(g)) } if (To && (e = g.getClientRects()[0]), a = "" + g, /^(?:pre|pre-wrap)$/i.test(b)) { if (/\t/.test(a)) { for (s = 0, f = p; f < g.startOffset; ++f)u = l.charCodeAt(f), 9 == u ? s += 8 - s % 8 : 10 == u || 13 == u ? s = 0 : s++; for (; (f = a.search("\t")) >= 0;)h = " ".substr(0, 8 - (s + f) % 8), a = a.substr(0, f) + h + a.substr(f + 1) } } else a = a.replace(/\s+/g, " "); n || (y = e.bottom), r(a, e) } function r(e, t) { var i, o, r; switch (To && !isNaN(h) && (i = Fo(p), o = (t.top + t.bottom - i) / 2, t = { top: o, right: t.right, bottom: o + i, left: t.left, height: i, width: t.right - t.left }), w) { case "uppercase": e = e.toUpperCase(); break; case "lowercase": e = e.toLowerCase(); break; case "capitalize": e = e.replace(/(?:^|\s)\S/g, function (e) { return e.toUpperCase() }) }r = new Do(e, new un([t.left, t.top], [t.width, t.height]), { font: p, fill: { color: f } }), n.append(r) } function a(e) { function t(t, i) { var o, r; t && (o = u / 12, r = new jn({ stroke: { width: o, color: t } }), i -= o, r.moveTo(e.left, i).lineTo(e.right, i), n.append(r)) } t(x, e.bottom), t(C, e.bottom - e.height / 2.7), t(S, e.top) } var s, l, d, c, u, h, p, f, g, m, v, _, b, w, k, y, x, C, S, T; if (!it() && (s = rt(e), !(parseFloat(at(s, "text-indent")) < -500) && (l = t.data, d = 0, c = l.search(/\S\s*$/) + 1, c && (u = at(s, "font-size"), h = at(s, "line-height"), p = [at(s, "font-style"), at(s, "font-variant"), at(s, "font-weight"), u, at(s, "font-family")].join(" "), u = parseFloat(u), h = parseFloat(h), 0 !== u)))) { for (f = at(s, "color"), g = e.ownerDocument.createRange(), m = at(s, "text-align"), v = "justify" == m, _ = at(s, "column-count", 1), b = at(s, "white-space"), w = at(s, "text-transform"), k = e.getBoundingClientRect().width / u * 5, 0 === k && (k = 500), y = null, x = Co.underline, C = Co["line-through"], S = Co.overline, T = x || C || S; !o();); T && (g.selectNode(t), ze(g.getClientRects()).forEach(a)) } } function Ht(e, t, n) { var i, o, r, a, s, l; for ("auto" != n ? (i = Co._stackingContext.group, n = parseFloat(n)) : (i = t, n = 0), o = i.children, r = 0; r < o.length && !(null != o[r]._dom_zIndex && o[r]._dom_zIndex > n); ++r); return a = new Jn, i.insert(r, a), a._dom_zIndex = n, i !== t && Co._clipbox && (s = Co._matrix.invert(), l = Co._clipbox.transformCopy(s), vt(a, jn.fromRect(l))), a } function Nt(e, t) { var n, i, o, r, a, s, l = rt(e); Ye(l), /^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(e.tagName) || null != Co._clipbox && (n = parseFloat(at(l, "opacity")), i = at(l, "visibility"), o = at(l, "display"), 0 !== n && "hidden" != i && "none" != o && (r = pt(l), s = at(l, "z-index"), (r || n < 1) && "auto" == s && (s = 0), a = Ht(e, t, s), n < 1 && a.opacity(n * a.opacity()), et(e, l, a), r ? dt(e, function () { var t, n, i, o; st(e.style, "transform", "none", "important"), st(e.style, "transition", "none", "important"), "static" == at(l, "position") && st(e.style, "position", "relative", "important"), t = e.getBoundingClientRect(), n = t.left + r.origin[0], i = t.top + r.origin[1], o = [1, 0, 0, 1, -n, -i], o = Ot(o, r.matrix), o = Ot(o, [1, 0, 0, 1, n, i]), o = mt(a, o), Co._matrix = Co._matrix.multiplyCopy(o), Tt(e, a) }) : Tt(e, a), tt())) } function Ot(e, t) { var n = e[0], i = e[1], o = e[2], r = e[3], a = e[4], s = e[5], l = t[0], d = t[1], c = t[2], u = t[3], h = t[4], p = t[5]; return [n * l + i * c, n * d + i * u, o * l + r * c, o * d + r * u, a * l + s * c + h, a * d + s * u + p] } var Vt, Wt, Ut, jt, qt, Gt, $t, Kt, Yt, Qt, Xt, Jt, Zt, en, tn, nn, on, rn, an, sn, ln, dn, cn, un, hn, pn, fn, gn, mn, vn, _n, bn, wn, kn, yn, xn, Cn, Sn, Tn, Dn, An, En, In, Mn, Rn, Fn, Pn, zn, Bn, Ln, Hn, Nn, On, Vn, Wn, Un, jn, qn, Gn, $n, Kn, Yn, Qn, Xn, Jn, Zn, ei, ti, ni, ii, oi, ri, ai, si, li, di, ci, ui, hi, pi, fi, gi, mi, vi, _i, bi, wi, ki, yi, xi, Ci, Si, Ti, Di, Ai, Ei, Ii, Mi, Ri, Fi, Pi, zi, Bi, Li, Hi, Ni, Oi, Vi, Wi, Ui, ji, qi, Gi, $i, Ki, Yi, Qi, Xi, Ji, Zi, eo, to, no, io, oo, ro, ao, so, lo, co, uo, ho, po, fo, go, mo, vo, _o, bo, wo, ko, yo, xo, Co, So, To, Do, Ao, Eo, Io, Mo, Ro, Fo, Po; window.kendo = window.kendo || {}, Vt = kendo.drawing, Wt = Vt.util, Ut = kendo.Class, jt = kendo.util, qt = kendo.support, Gt = qt.browser, $t = Wt.createPromise, Kt = Wt.promiseAll, Yt = { extend: function (e) { var t, n = this; for (t in this) "extend" !== t && (e[t] = n[t]) }, observers: function () { return this._observers = this._observers || [] }, addObserver: function (e) { return this._observers ? this._observers.push(e) : this._observers = [e], this }, removeObserver: function (e) { var t = this.observers(), n = t.indexOf(e); return n !== -1 && t.splice(n, 1), this }, trigger: function (e, t) { var n, i, o = this._observers; if (o && !this._suspended) for (n = 0; n < o.length; n++)i = o[n], i[e] && i[e](t); return this }, optionsChange: function (e) { void 0 === e && (e = {}), e.element = this, this.trigger("optionsChange", e) }, geometryChange: function () { this.trigger("geometryChange", { element: this }) }, suspend: function () { return this._suspended = (this._suspended || 0) + 1, this }, resume: function () { return this._suspended = Math.max((this._suspended || 0) - 1, 0), this }, _observerField: function (e, t) { this[e] && this[e].removeObserver(this), this[e] = t, t.addObserver(this) } }, Qt = { 1: "i", 10: "x", 100: "c", 2: "ii", 20: "xx", 200: "cc", 3: "iii", 30: "xxx", 300: "ccc", 4: "iv", 40: "xl", 400: "cd", 5: "v", 50: "l", 500: "d", 6: "vi", 60: "lx", 600: "dc", 7: "vii", 70: "lxx", 700: "dcc", 8: "viii", 80: "lxxx", 800: "dccc", 9: "ix", 90: "xc", 900: "cm", 1e3: "m" }, Xt = "undefined", Jt = 1, Zt = Math.PI / 180, en = Number.MAX_VALUE, tn = -Number.MAX_VALUE, nn = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", on = String.fromCharCode, rn = { append: t, arabicToRoman: n, createPromise: $t, defined: i, definitionId: o, deg: r, encodeBase64: s, eventCoordinates: l, eventElement: d, isTransparent: c, last: u, limitValue: h, mergeSort: p, promiseAll: Kt, rad: f, round: m, valueOrDefault: v, bindEvents: _, elementOffset: b, elementSize: y, elementStyles: w, unbindEvents: x, DEG_TO_RAD: Zt, MAX_NUM: en, MIN_NUM: tn }, an = {}.toString, sn = Ut.extend({ init: function (e, t) { var n, i, o = this; void 0 === t && (t = ""), this.prefix = t; for (n in e) i = e[n], i = o._wrap(i, n), o[n] = i }, get: function (e) { for (var t, n = e.split("."), i = this; n.length && i;)t = n.shift(), i = i[t]; return i }, set: function (e, t) { var n = this.get(e); n !== t && (this._set(e, this._wrap(t, e)), this.optionsChange({ field: this.prefix + e, value: t })) }, _set: function (e, t) { var n, i, o, r = this, a = e.indexOf(".") >= 0, s = this, l = e; if (a) { for (n = l.split("."), i = this.prefix; n.length > 1;)l = n.shift(), i += l + ".", o = s[l], o || (o = new sn({}, i), o.addObserver(r), s[l] = o), s = o; l = n[0] } s._clear(l), s[l] = t }, _clear: function (e) { var t = this[e]; t && t.removeObserver && t.removeObserver(this) }, _wrap: function (e, t) { var n = an.call(e), o = e; return null !== o && i(o) && "[object Object]" === n && (e instanceof sn || e instanceof Ut || (o = new sn(o, this.prefix + t + ".")), o.addObserver(this)), o } }), Yt.extend(sn.prototype), ln = Ut.extend({ init: function (e, t, n, i, o, r) { void 0 === e && (e = 0), void 0 === t && (t = 0), void 0 === n && (n = 0), void 0 === i && (i = 0), void 0 === o && (o = 0), void 0 === r && (r = 0), this.a = e, this.b = t, this.c = n, this.d = i, this.e = o, this.f = r }, multiplyCopy: function (e) { return new ln(this.a * e.a + this.c * e.b, this.b * e.a + this.d * e.b, this.a * e.c + this.c * e.d, this.b * e.c + this.d * e.d, this.a * e.e + this.c * e.f + this.e, this.b * e.e + this.d * e.f + this.f) }, invert: function () { var e = this, t = e.a, n = e.b, i = e.c, o = e.d, r = e.e, a = e.f, s = t * o - n * i; return 0 === s ? null : new ln(o / s, -n / s, -i / s, t / s, (i * a - o * r) / s, (n * r - t * a) / s) }, clone: function () { return new ln(this.a, this.b, this.c, this.d, this.e, this.f) }, equals: function (e) { return !!e && (this.a === e.a && this.b === e.b && this.c === e.c && this.d === e.d && this.e === e.e && this.f === e.f) }, round: function (e) { return this.a = m(this.a, e), this.b = m(this.b, e), this.c = m(this.c, e), this.d = m(this.d, e), this.e = m(this.e, e), this.f = m(this.f, e), this }, toArray: function (e) { var t, n = [this.a, this.b, this.c, this.d, this.e, this.f]; if (i(e)) for (t = 0; t < n.length; t++)n[t] = m(n[t], e); return n }, toString: function (e, t) { return void 0 === t && (t = ","), this.toArray(e).join(t) } }), ln.translate = function (e, t) { return new ln(1, 0, 0, 1, e, t) }, ln.unit = function () { return new ln(1, 0, 0, 1, 0, 0) }, ln.rotate = function (e, t, n) { var i = new ln; return i.a = Math.cos(f(e)), i.b = Math.sin(f(e)), i.c = -i.b, i.d = i.a, i.e = t - t * i.a + n * i.b || 0, i.f = n - n * i.a - t * i.b || 0, i }, ln.scale = function (e, t) { return new ln(e, 0, 0, t, 0, 0) }, ln.IDENTITY = ln.unit(), dn = Ut.extend({ init: function (e, t) { this.x = e || 0, this.y = t || 0 }, equals: function (e) { return e && e.x === this.x && e.y === this.y }, clone: function () { return new dn(this.x, this.y) }, rotate: function (e, t) { var n = dn.create(t) || dn.ZERO; return this.transform(ln.rotate(e, n.x, n.y)) }, translate: function (e, t) { return this.x += e, this.y += t, this.geometryChange(), this }, translateWith: function (e) { return this.translate(e.x, e.y) }, move: function (e, t) { return this.x = this.y = 0, this.translate(e, t) }, scale: function (e, t) { return void 0 === t && (t = e), this.x *= e, this.y *= t, this.geometryChange(), this }, scaleCopy: function (e, t) { return this.clone().scale(e, t) }, transform: function (e) { var t = D(e), n = this, i = n.x, o = n.y; return this.x = t.a * i + t.c * o + t.e, this.y = t.b * i + t.d * o + t.f, this.geometryChange(), this }, transformCopy: function (e) { var t = this.clone(); return e && t.transform(e), t }, distanceTo: function (e) { var t = this.x - e.x, n = this.y - e.y; return Math.sqrt(t * t + n * n) }, round: function (e) { return this.x = m(this.x, e), this.y = m(this.y, e), this.geometryChange(), this }, toArray: function (e) { var t = i(e), n = t ? m(this.x, e) : this.x, o = t ? m(this.y, e) : this.y; return [n, o] }, toString: function (e, t) { var n, o, r; return void 0 === t && (t = " "), n = this, o = n.x, r = n.y, i(e) && (o = m(o, e), r = m(r, e)), o + t + r } }), dn.create = function (e, t) { if (i(e)) return e instanceof dn ? e : 1 === arguments.length && 2 === e.length ? new dn(e[0], e[1]) : new dn(e, t) }, dn.min = function () { var e, t, n = arguments, i = en, o = en; for (e = 0; e < arguments.length; e++)t = n[e], i = Math.min(t.x, i), o = Math.min(t.y, o); return new dn(i, o) }, dn.max = function () { var e, t, n = arguments, i = tn, o = tn; for (e = 0; e < arguments.length; e++)t = n[e], i = Math.max(t.x, i), o = Math.max(t.y, o); return new dn(i, o) }, dn.minPoint = function () { return new dn(tn, tn) }, dn.maxPoint = function () { return new dn(en, en) }, Object.defineProperties && Object.defineProperties(dn, { ZERO: { get: function () { return new dn(0, 0) } } }), T(dn.prototype, ["x", "y"]), Yt.extend(dn.prototype), cn = Ut.extend({ init: function (e, t) { this.width = e || 0, this.height = t || 0 }, equals: function (e) { return e && e.width === this.width && e.height === this.height }, clone: function () { return new cn(this.width, this.height) }, toArray: function (e) { var t = i(e), n = t ? m(this.width, e) : this.width, o = t ? m(this.height, e) : this.height; return [n, o] } }), cn.create = function (e, t) { if (i(e)) return e instanceof cn ? e : 1 === arguments.length && 2 === e.length ? new cn(e[0], e[1]) : new cn(e, t) }, Object.defineProperties && Object.defineProperties(cn, { ZERO: { get: function () { return new cn(0, 0) } } }), T(cn.prototype, ["width", "height"]), Yt.extend(cn.prototype), un = Ut.extend({ init: function (e, t) { void 0 === e && (e = new dn), void 0 === t && (t = new cn), this.setOrigin(e), this.setSize(t) }, clone: function () { return new un(this.origin.clone(), this.size.clone()) }, equals: function (e) { return e && e.origin.equals(this.origin) && e.size.equals(this.size) }, setOrigin: function (e) { return this._observerField("origin", dn.create(e)), this.geometryChange(), this }, getOrigin: function () { return this.origin }, setSize: function (e) { return this._observerField("size", cn.create(e)), this.geometryChange(), this }, getSize: function () { return this.size }, width: function () { return this.size.width }, height: function () { return this.size.height }, topLeft: function () { return this.origin.clone() }, bottomRight: function () { return this.origin.clone().translate(this.width(), this.height()) }, topRight: function () { return this.origin.clone().translate(this.width(), 0) }, bottomLeft: function () { return this.origin.clone().translate(0, this.height()) }, center: function () { return this.origin.clone().translate(this.width() / 2, this.height() / 2) }, bbox: function (e) { var t = this.topLeft().transformCopy(e), n = this.topRight().transformCopy(e), i = this.bottomRight().transformCopy(e), o = this.bottomLeft().transformCopy(e); return un.fromPoints(t, n, i, o) }, transformCopy: function (e) { return un.fromPoints(this.topLeft().transform(e), this.bottomRight().transform(e)) }, expand: function (e, t) { return void 0 === t && (t = e), this.size.width += 2 * e, this.size.height += 2 * t, this.origin.translate(-e, -t), this }, expandCopy: function (e, t) { return this.clone().expand(e, t) }, containsPoint: function (e) { var t = this.origin, n = this.bottomRight(); return !(e.x < t.x || e.y < t.y || n.x < e.x || n.y < e.y) }, _isOnPath: function (e, t) { var n = this.expandCopy(t, t), i = this.expandCopy(-t, -t); return n.containsPoint(e) && !i.containsPoint(e) } }), un.fromPoints = function () { var e = dn.min.apply(null, arguments), t = dn.max.apply(null, arguments), n = new cn(t.x - e.x, t.y - e.y); return new un(e, n) }, un.union = function (e, t) { return un.fromPoints(dn.min(e.topLeft(), t.topLeft()), dn.max(e.bottomRight(), t.bottomRight())) }, un.intersect = function (e, t) { var n = { left: e.topLeft().x, top: e.topLeft().y, right: e.bottomRight().x, bottom: e.bottomRight().y }, i = { left: t.topLeft().x, top: t.topLeft().y, right: t.bottomRight().x, bottom: t.bottomRight().y }; if (n.left <= i.right && i.left <= n.right && n.top <= i.bottom && i.top <= n.bottom) return un.fromPoints(new dn(Math.max(n.left, i.left), Math.max(n.top, i.top)), new dn(Math.min(n.right, i.right), Math.min(n.bottom, i.bottom))) }, Yt.extend(un.prototype), hn = Ut.extend({ init: function (e) { void 0 === e && (e = ln.unit()), this._matrix = e }, clone: function () { return new hn(this._matrix.clone()) }, equals: function (e) { return e && e._matrix.equals(this._matrix) }, translate: function (e, t) { return this._matrix = this._matrix.multiplyCopy(ln.translate(e, t)), this._optionsChange(), this }, scale: function (e, t, n) { void 0 === t && (t = e), void 0 === n && (n = null); var i = n; return i && (i = dn.create(i), this._matrix = this._matrix.multiplyCopy(ln.translate(i.x, i.y))), this._matrix = this._matrix.multiplyCopy(ln.scale(e, t)), i && (this._matrix = this._matrix.multiplyCopy(ln.translate(-i.x, -i.y))), this._optionsChange(), this }, rotate: function (e, t) { var n = dn.create(t) || dn.ZERO; return this._matrix = this._matrix.multiplyCopy(ln.rotate(e, n.x, n.y)), this._optionsChange(), this }, multiply: function (e) { var t = D(e); return this._matrix = this._matrix.multiplyCopy(t), this._optionsChange(), this }, matrix: function (e) { return e ? (this._matrix = e, this._optionsChange(), this) : this._matrix }, _optionsChange: function () { this.optionsChange({ field: "transform", value: this }) } }), Yt.extend(hn.prototype), pn = Ut.extend({ init: function (e) { this._initOptions(e) }, _initOptions: function (e) { var t, n; void 0 === e && (e = {}), t = e.clip, n = e.transform, n && (e.transform = A(n)), t && !t.id && (t.id = o()), this.options = new sn(e), this.options.addObserver(this) }, transform: function (e) { return i(e) ? void this.options.set("transform", A(e)) : this.options.get("transform") }, parentTransform: function () { for (var e, t, n = this; n.parent;)n = n.parent, t = n.transform(), t && (e = t.matrix().multiplyCopy(e || ln.unit())); if (e) return A(e) }, currentTransform: function (e) { var t, n, i, o; if (void 0 === e && (e = this.parentTransform()), t = this.transform(), n = D(t), i = D(e), o = n && i ? i.multiplyCopy(n) : n || i) return A(o) }, visible: function (e) { return i(e) ? (this.options.set("visible", e), this) : this.options.get("visible") !== !1 }, clip: function (e) { var t = this.options; return i(e) ? (e && !e.id && (e.id = o()), t.set("clip", e), this) : t.get("clip") }, opacity: function (e) { return i(e) ? (this.options.set("opacity", e), this) : v(this.options.get("opacity"), 1) }, clippedBBox: function (e) { var t, n = this._clippedBBox(e); if (n) return t = this.clip(), t ? un.intersect(n, t.bbox(e)) : n }, containsPoint: function (e, t) { var n, i; return !!this.visible() && (n = this.currentTransform(t), i = e, n && (i = e.transformCopy(n.matrix().invert())), this._hasFill() && this._containsPoint(i) || this._isOnPath && this._hasStroke() && this._isOnPath(i)) }, _hasFill: function () { var e = this.options.fill; return e && !c(e.color) }, _hasStroke: function () { var e = this.options.stroke; return e && e.width > 0 && !c(e.color) }, _clippedBBox: function (e) { return this.bbox(e) } }), pn.prototype.nodeType = "Element", Yt.extend(pn.prototype), fn = Math.PI / 2, gn = Ut.extend({ init: function (e, t) { void 0 === e && (e = new dn), void 0 === t && (t = 0), this.setCenter(e), this.setRadius(t) }, setCenter: function (e) { return this._observerField("center", dn.create(e)), this.geometryChange(), this }, getCenter: function () { return this.center }, equals: function (e) { return e && e.center.equals(this.center) && e.radius === this.radius }, clone: function () { return new gn(this.center.clone(), this.radius) }, pointAt: function (e) { return this._pointAt(f(e)) }, bbox: function (e) { var t, n, i, o, r = this, a = E(this.center, this.radius, this.radius, e), s = dn.maxPoint(), l = dn.minPoint(); for (t = 0; t < 4; t++)n = r._pointAt(a.x + t * fn).transformCopy(e), i = r._pointAt(a.y + t * fn).transformCopy(e), o = new dn(n.x, i.y), s = dn.min(s, o), l = dn.max(l, o); return un.fromPoints(s, l) }, _pointAt: function (e) { var t = this, n = t.center, i = t.radius; return new dn(n.x + i * Math.cos(e), n.y + i * Math.sin(e)) }, containsPoint: function (e) { var t = this, n = t.center, i = t.radius, o = Math.pow(e.x - n.x, 2) + Math.pow(e.y - n.y, 2) <= Math.pow(i, 2); return o }, _isOnPath: function (e, t) { var n = this, i = n.center, o = n.radius, r = i.distanceTo(e); return o - t <= r && r <= o + t } }), T(gn.prototype, ["radius"]), Yt.extend(gn.prototype), mn = "Gradient", vn = { extend: function (e) { e.fill = this.fill, e.stroke = this.stroke }, fill: function (e, t) { var n, o = this.options; return i(e) ? (e && e.nodeType !== mn ? (n = { color: e }, i(t) && (n.opacity = t), o.set("fill", n)) : o.set("fill", e), this) : o.get("fill") }, stroke: function (e, t, n) { return i(e) ? (this.options.set("stroke.color", e), i(t) && this.options.set("stroke.width", t), i(n) && this.options.set("stroke.opacity", n), this) : this.options.get("stroke") } }, _n = "" + ln.IDENTITY, bn = { extend: function (e) { e.bbox = this.bbox, e.geometryChange = this.geometryChange }, bbox: function (e) { var t, n, i = D(this.currentTransform(e)), o = i ? "" + i : _n; return this._bboxCache && this._matrixHash === o ? t = this._bboxCache.clone() : (t = this._bbox(i), this._bboxCache = t ? t.clone() : null, this._matrixHash = o), n = this.options.get("stroke.width"), n && t && t.expand(n / 2), t }, geometryChange: function () { delete this._bboxCache, this.trigger("geometryChange", { element: this }) } }, wn = "#000", kn = pn.extend({ init: function (e, t) { void 0 === e && (e = new gn), void 0 === t && (t = {}), pn.fn.init.call(this, t), this.geometry(e), i(this.options.stroke) || this.stroke(wn) }, rawBBox: function () { return this._geometry.bbox() }, _bbox: function (e) { return this._geometry.bbox(e) }, _containsPoint: function (e) { return this.geometry().containsPoint(e) }, _isOnPath: function (e) { return this.geometry()._isOnPath(e, this.options.stroke.width / 2) } }), kn.prototype.nodeType = "Circle", vn.extend(kn.prototype), bn.extend(kn.prototype), M(kn.prototype, ["geometry"]), yn = 10, xn = 45, Cn = Math.pow, Sn = Ut.extend({ init: function (e, t) { void 0 === e && (e = new dn), void 0 === t && (t = {}), this.setCenter(e), this.radiusX = t.radiusX, this.radiusY = t.radiusY || t.radiusX, this.startAngle = t.startAngle, this.endAngle = t.endAngle, this.anticlockwise = t.anticlockwise || !1, this.xRotation = t.xRotation }, clone: function () { return new Sn(this.center, { radiusX: this.radiusX, radiusY: this.radiusY, startAngle: this.startAngle, endAngle: this.endAngle, anticlockwise: this.anticlockwise }) }, setCenter: function (e) { return this._observerField("center", dn.create(e)), this.geometryChange(), this }, getCenter: function () { return this.center }, pointAt: function (e) { var t = this.center, n = f(e); return new dn(t.x + this.radiusX * Math.cos(n), t.y + this.radiusY * Math.sin(n)) }, curvePoints: function () { var e, t, n, i, o = this, r = this.startAngle, a = this.anticlockwise ? -1 : 1, s = [this.pointAt(r)], l = this._arcInterval(), d = l.endAngle - l.startAngle, c = Math.ceil(d / xn), u = d / c, h = r; for (this.xRotation && (e = A().rotate(this.xRotation, this.center)), t = 1; t <= c; t++)n = h + a * u, i = o._intervalCurvePoints(h, n, e), s.push(i.cp1, i.cp2, i.p2), h = n; return s }, bbox: function (e) { for (var t, n, i = this, o = this._arcInterval(), a = o.startAngle, s = o.endAngle, l = E(this.center, this.radiusX, this.radiusY, e), d = r(l.x), c = r(l.y), u = this.pointAt(s).transformCopy(e), h = L(d, a), p = L(c, a), f = this.pointAt(a).transformCopy(e), g = dn.min(f, u), m = dn.max(f, u); h < s || p < s;)t = void 0, h < s && (t = i.pointAt(h).transformCopy(e), h += 90), n = void 0, p < s && (n = i.pointAt(p).transformCopy(e), p += 90), f = new dn(t.x, n.y), g = dn.min(g, f), m = dn.max(m, f); return un.fromPoints(g, m) }, _arcInterval: function () { var e, t = this, n = t.startAngle, i = t.endAngle, o = t.anticlockwise; return o && (e = n, n = i, i = e), (n > i || o && n === i) && (i += 360), { startAngle: n, endAngle: i } }, _intervalCurvePoints: function (e, t, n) { var i = this.pointAt(e), o = this.pointAt(t), r = this._derivativeAt(e), a = this._derivativeAt(t), s = (f(t) - f(e)) / 3, l = new dn(i.x + s * r.x, i.y + s * r.y), d = new dn(o.x - s * a.x, o.y - s * a.y); return n && (i.transform(n), o.transform(n), l.transform(n), d.transform(n)), { p1: i, cp1: l, cp2: d, p2: o } }, _derivativeAt: function (e) { var t = f(e); return new dn(-this.radiusX * Math.sin(t), this.radiusY * Math.cos(t)) }, containsPoint: function (e) { var t, n, i, o = this._arcInterval(), r = o.endAngle - o.startAngle, a = this, s = a.center, l = a.radiusX, d = a.radiusY, c = s.distanceTo(e), u = Math.atan2(e.y - s.y, e.x - s.x), h = l * d / Math.sqrt(Cn(l, 2) * Cn(Math.sin(u), 2) + Cn(d, 2) * Cn(Math.cos(u), 2)), p = this.pointAt(this.startAngle).round(yn), f = this.pointAt(this.endAngle).round(yn), g = P(s, e.round(yn), p, f); return r < 180 ? t = g && F(s.distanceTo(g), c) && F(c, h) : (n = z(s.x, s.y, l, d, e.x, e.y), 360 !== n && (n = (360 + n) % 360), i = o.startAngle <= n && n <= o.endAngle, t = i && F(c, h) || !i && (!g || g.equals(e))), t }, _isOnPath: function (e, t) { var n, i = this._arcInterval(), o = this.center, r = z(o.x, o.y, this.radiusX, this.radiusY, e.x, e.y); return 360 !== r && (r = (360 + r) % 360), n = i.startAngle <= r && r <= i.endAngle, n && this.pointAt(r).distanceTo(e) <= t } }), Sn.fromPoints = function (e, t, n, i, o, r, a) { var s = B({ x1: e.x, y1: e.y, x2: t.x, y2: t.y, rx: n, ry: i, largeArc: o, swipe: r, rotation: a }); return new Sn(s.center, { startAngle: s.startAngle, endAngle: s.endAngle, radiusX: s.radiusX, radiusY: s.radiusY, xRotation: s.xRotation, anticlockwise: 0 === r }) }, T(Sn.prototype, ["radiusX", "radiusY", "startAngle", "endAngle", "anticlockwise"]), Yt.extend(Sn.prototype), Tn = [].push, Dn = [].pop, An = [].splice, En = [].shift, In = [].slice, Mn = [].unshift, Rn = Ut.extend({ init: function (e) { void 0 === e && (e = []), this.length = 0, this._splice(0, e.length, e) }, elements: function (e) { return e ? (this._splice(0, this.length, e), this._change(), this) : this.slice(0) }, push: function () { var e = arguments, t = Tn.apply(this, e); return this._add(e), t }, slice: function () { return In.call(this) }, pop: function () { var e = this.length, t = Dn.apply(this); return e && this._remove([t]), t }, splice: function (e, t) { var n = In.call(arguments, 2), i = this._splice(e, t, n); return this._change(), i }, shift: function () { var e = this.length, t = En.apply(this); return e && this._remove([t]), t }, unshift: function () { var e = arguments, t = Mn.apply(this, e); return this._add(e), t }, indexOf: function (e) { var t, n = this, i = this.length; for (t = 0; t < i; t++)if (n[t] === e) return t; return -1 }, _splice: function (e, t, n) { var i = An.apply(this, [e, t].concat(n)); return this._clearObserver(i), this._setObserver(n), i }, _add: function (e) { this._setObserver(e), this._change() }, _remove: function (e) { this._clearObserver(e), this._change() }, _setObserver: function (e) { var t, n = this; for (t = 0; t < e.length; t++)e[t].addObserver(n) }, _clearObserver: function (e) { var t, n = this; for (t = 0; t < e.length; t++)e[t].removeObserver(n) }, _change: function () { } }), Yt.extend(Rn.prototype), Fn = Rn.extend({ _change: function () { this.geometryChange() } }), Pn = Ut.extend({ init: function (e, t) { void 0 === e && (e = 0), void 0 === t && (t = 0), this.real = e, this.img = t }, add: function (e) { return new Pn(m(this.real + e.real, yn), m(this.img + e.img, yn)) }, addConstant: function (e) { return new Pn(this.real + e, this.img) }, negate: function () { return new Pn((-this.real), (-this.img)) }, multiply: function (e) { return new Pn(this.real * e.real - this.img * e.img, this.real * e.img + this.img * e.real) }, multiplyConstant: function (e) { return new Pn(this.real * e, this.img * e) }, nthRoot: function (e) { var t = Math.atan2(this.img, this.real), n = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2)), i = Math.pow(n, 1 / e); return new Pn(i * Math.cos(t / e), i * Math.sin(t / e)) }, equals: function (e) { return this.real === e.real && this.img === e.img }, isReal: function () { return 0 === this.img } }), zn = Ut.extend({ init: function (e, t, n) { this.anchor(e || new dn), this.controlIn(t), this.controlOut(n) }, bboxTo: function (e, t) { var n, i = this.anchor().transformCopy(t), o = e.anchor().transformCopy(t); return n = this.controlOut() && e.controlIn() ? this._curveBoundingBox(i, this.controlOut().transformCopy(t), e.controlIn().transformCopy(t), o) : this._lineBoundingBox(i, o) }, _lineBoundingBox: function (e, t) { return un.fromPoints(e, t) }, _curveBoundingBox: function (e, t, n, i) { var o = [e, t, n, i], r = this._curveExtremesFor(o, "x"), a = this._curveExtremesFor(o, "y"), s = Y([r.min, r.max, e.x, i.x]), l = Y([a.min, a.max, e.y, i.y]); return un.fromPoints(new dn(s.min, l.min), new dn(s.max, l.max)) }, _curveExtremesFor: function (e, t) { var n = this._curveExtremes(e[0][t], e[1][t], e[2][t], e[3][t]); return { min: V(n.min, t, e), max: V(n.max, t, e) } }, _curveExtremes: function (e, t, n, i) { var o, r, a = e - 3 * t + 3 * n - i, s = -2 * (e - 2 * t + n), l = e - t, d = Math.sqrt(s * s - 4 * a * l), c = 0, u = 1; return 0 === a ? 0 !== s && (c = u = -l / s) : isNaN(d) || (c = (-s + d) / (2 * a), u = (-s - d) / (2 * a)), o = Math.max(Math.min(c, u), 0), (o < 0 || o > 1) && (o = 0), r = Math.min(Math.max(c, u), 1), (r > 1 || r < 0) && (r = 1), { min: o, max: r } }, _intersectionsTo: function (e, t) { var n; return n = this.controlOut() && e.controlIn() ? $([this.anchor(), this.controlOut(), e.controlIn(), e.anchor()], t, this.bboxTo(e)) : K(this.anchor(), e.anchor(), t) }, _isOnCurveTo: function (e, t, n, i) { var o, r, a, s, l, d, c, u = this.bboxTo(e).expand(n, n); if (u.containsPoint(t)) return o = this.anchor(), r = this.controlOut(), a = e.controlIn(), s = e.anchor(), "start" === i && o.distanceTo(t) <= n ? !O(o, r, t) : "end" === i && s.distanceTo(t) <= n ? !O(s, a, t) : (l = [o, r, a, s], !(!G(l, t, "x", "y", n) && !G(l, t, "y", "x", n)) || (d = A().rotate(45, t), c = [o.transformCopy(d), r.transformCopy(d), a.transformCopy(d), s.transformCopy(d)], G(c, t, "x", "y", n) || G(c, t, "y", "x", n))) }, _isOnLineTo: function (e, t, n) { var i = this.anchor(), o = e.anchor(), a = r(Math.atan2(o.y - i.y, o.x - i.x)), s = new un([i.x, i.y - n / 2], [i.distanceTo(o), n]); return s.containsPoint(t.transformCopy(A().rotate(-a, i))) }, _isOnPathTo: function (e, t, n, i) { var o; return o = this.controlOut() && e.controlIn() ? this._isOnCurveTo(e, t, n / 2, i) : this._isOnLineTo(e, t, n) } }), N(zn.prototype, ["anchor", "controlIn", "controlOut"]), Yt.extend(zn.prototype), Bn = pn.extend({ init: function (e) { pn.fn.init.call(this, e), this.paths = new Fn, this.paths.addObserver(this), i(this.options.stroke) || this.stroke("#000") }, moveTo: function (e, t) { var n = new jn; return n.moveTo(e, t), this.paths.push(n), this }, lineTo: function (e, t) { return this.paths.length > 0 && u(this.paths).lineTo(e, t), this }, curveTo: function (e, t, n) { return this.paths.length > 0 && u(this.paths).curveTo(e, t, n), this }, arc: function (e, t, n, i, o) { return this.paths.length > 0 && u(this.paths).arc(e, t, n, i, o), this }, arcTo: function (e, t, n, i, o, r) { return this.paths.length > 0 && u(this.paths).arcTo(e, t, n, i, o, r), this }, close: function () { return this.paths.length > 0 && u(this.paths).close(), this }, _bbox: function (e) { return Q(this.paths, !0, e) }, rawBBox: function () { return Q(this.paths, !1) }, _containsPoint: function (e) { var t, n = this.paths; for (t = 0; t < n.length; t++)if (n[t]._containsPoint(e)) return !0; return !1 }, _isOnPath: function (e) { var t, n = this.paths, i = this.options.stroke.width; for (t = 0; t < n.length; t++)if (n[t]._isOnPath(e, i)) return !0; return !1 }, _clippedBBox: function (e) { return X(this.paths, this.currentTransform(e)) } }), Bn.prototype.nodeType = "MultiPath", vn.extend(Bn.prototype), bn.extend(Bn.prototype), Ln = { l: function (e, t) { var n, i, o = t.parameters, r = t.position; for (n = 0; n < o.length; n += 2)i = new dn(o[n], o[n + 1]), t.isRelative && i.translateWith(r), e.lineTo(i.x, i.y), r.x = i.x, r.y = i.y }, c: function (e, t) { var n, i, o, r, a = t.parameters, s = t.position; for (n = 0; n < a.length; n += 6)i = new dn(a[n], a[n + 1]), o = new dn(a[n + 2], a[n + 3]), r = new dn(a[n + 4], a[n + 5]), t.isRelative && (o.translateWith(s), i.translateWith(s), r.translateWith(s)), e.curveTo(i, o, r), s.x = r.x, s.y = r.y }, v: function (e, t) { var n = t.isRelative ? 0 : t.position.x; J(t.parameters, !0, n), this.l(e, t) }, h: function (e, t) { var n = t.isRelative ? 0 : t.position.y; J(t.parameters, !1, n), this.l(e, t) }, a: function (e, t) { var n, i, o, r, a, s, l, d = t.parameters, c = t.position; for (n = 0; n < d.length; n += 7)i = d[n], o = d[n + 1], r = d[n + 2], a = d[n + 3], s = d[n + 4], l = new dn(d[n + 5], d[n + 6]), t.isRelative && l.translateWith(c), c.x === l.x && c.y === l.y || (e.arcTo(l, i, o, a, s, r), c.x = l.x, c.y = l.y) }, s: function (e, t) { var n, i, o, r, a, s = t.parameters, l = t.position, d = t.previousCommand; for ("s" !== d && "c" !== d || (n = u(u(e.paths).segments).controlIn()), i = 0; i < s.length; i += 4)o = new dn(s[i], s[i + 1]), r = new dn(s[i + 2], s[i + 3]), a = void 0, t.isRelative && (o.translateWith(l), r.translateWith(l)), a = n ? Z(n, l) : l.clone(), n = o, e.curveTo(a, o, r), l.x = r.x, l.y = r.y }, q: function (e, t) { var n, i, o, r, a = t.parameters, s = t.position; for (n = 0; n < a.length; n += 4)i = new dn(a[n], a[n + 1]), o = new dn(a[n + 2], a[n + 3]), t.isRelative && (i.translateWith(s), o.translateWith(s)), r = ee(s, i, o), e.curveTo(r.controlOut, r.controlIn, o), s.x = o.x, s.y = o.y }, t: function (e, t) { var n, i, o, r, a, s = t.parameters, l = t.position, d = t.previousCommand; for ("q" !== d && "t" !== d || (i = u(u(e.paths).segments), n = i.controlIn().clone().translateWith(l.scaleCopy(-1 / 3)).scale(1.5)), o = 0; o < s.length; o += 2)r = new dn(s[o], s[o + 1]), t.isRelative && r.translateWith(l), n = n ? Z(n, l) : l.clone(), a = ee(l, n, r), e.curveTo(a.controlOut, a.controlIn, r), l.x = r.x, l.y = r.y } }, Hn = 1 / 3, Nn = /([a-df-z]{1})([^a-df-z]*)(z)?/gi, On = /[,\s]?([+\-]?(?:\d*\.\d+|\d+)(?:[eE][+\-]?\d+)?)/g, Vn = "m", Wn = "z", Un = Ut.extend({ parse: function (e, t) { var n, i = new Bn(t), o = new dn; return e.replace(Nn, function (e, t, r, a) { var s = t.toLowerCase(), l = s === t, d = te(r.trim()); if (s === Vn && (l ? (o.x += d[0], o.y += d[1]) : (o.x = d[0], o.y = d[1]), i.moveTo(o.x, o.y), d.length > 2 && (s = "l", d.splice(0, 2))), Ln[s]) Ln[s](i, { parameters: d, position: o, isRelative: l, previousCommand: n }), a && a.toLowerCase() === Wn && i.close(); else if (s !== Vn) throw Error("Error while parsing SVG path. Unsupported command: " + s); n = s }), i } }), Un.current = new Un, jn = pn.extend({ init: function (e) { pn.fn.init.call(this, e), this.segments = new Fn, this.segments.addObserver(this), i(this.options.stroke) || (this.stroke("#000"), i(this.options.stroke.lineJoin) || this.options.set("stroke.lineJoin", "miter")) }, moveTo: function (e, t) { return this.suspend(), this.segments.elements([]), this.resume(), this.lineTo(e, t), this }, lineTo: function (e, t) { var n = i(t) ? new dn(e, t) : e, o = new zn(n); return this.segments.push(o), this }, curveTo: function (e, t, n) { var i, o; return this.segments.length > 0 && (i = u(this.segments), o = new zn(n, t), this.suspend(), i.controlOut(e), this.resume(), this.segments.push(o)), this; }, arc: function (e, t, n, i, o) { var r, a, s, l, d; return this.segments.length > 0 && (r = u(this.segments), a = r.anchor(), s = f(e), l = new dn(a.x - n * Math.cos(s), a.y - i * Math.sin(s)), d = new Sn(l, { startAngle: e, endAngle: t, radiusX: n, radiusY: i, anticlockwise: o }), this._addArcSegments(d)), this }, arcTo: function (e, t, n, i, o, r) { var a, s, l; return this.segments.length > 0 && (a = u(this.segments), s = a.anchor(), l = Sn.fromPoints(s, e, t, n, i, o, r), this._addArcSegments(l)), this }, _addArcSegments: function (e) { var t, n, i = this; for (this.suspend(), t = e.curvePoints(), n = 1; n < t.length; n += 3)i.curveTo(t[n], t[n + 1], t[n + 2]); this.resume(), this.geometryChange() }, close: function () { return this.options.closed = !0, this.geometryChange(), this }, rawBBox: function () { return this._bbox() }, _containsPoint: function (e) { var t, n, i, o = this.segments, r = o.length, a = 0; for (i = 1; i < r; i++)t = o[i - 1], n = o[i], a += t._intersectionsTo(n, e); return !this.options.closed && o[0].anchor().equals(o[r - 1].anchor()) || (a += K(o[0].anchor(), o[r - 1].anchor(), e)), a % 2 !== 0 }, _isOnPath: function (e, t) { var n, i = this.segments, o = i.length, r = t || this.options.stroke.width; if (o > 1) { if (i[0]._isOnPathTo(i[1], e, r, "start")) return !0; for (n = 2; n <= o - 2; n++)if (i[n - 1]._isOnPathTo(i[n], e, r)) return !0; if (i[o - 2]._isOnPathTo(i[o - 1], e, r, "end")) return !0 } return !1 }, _bbox: function (e) { var t, n, i, o, r = this.segments, a = r.length; if (1 === a) n = r[0].anchor().transformCopy(e), t = new un(n, cn.ZERO); else if (a > 0) for (i = 1; i < a; i++)o = r[i - 1].bboxTo(r[i], e), t = t ? un.union(t, o) : o; return t } }), jn.fromRect = function (e, t) { return new jn(t).moveTo(e.topLeft()).lineTo(e.topRight()).lineTo(e.bottomRight()).lineTo(e.bottomLeft()).close() }, jn.fromPoints = function (e, t) { var n, i, o; if (e) { for (n = new jn(t), i = 0; i < e.length; i++)o = dn.create(e[i]), o && (0 === i ? n.moveTo(o) : n.lineTo(o)); return n } }, jn.fromArc = function (e, t) { var n = new jn(t), i = e.startAngle, o = e.pointAt(i); return n.moveTo(o.x, o.y), n.arc(i, e.endAngle, e.radiusX, e.radiusY, e.anticlockwise), n }, jn.prototype.nodeType = "Path", vn.extend(jn.prototype), bn.extend(jn.prototype), jn.parse = function (e, t) { return Un.current.parse(e, t) }, qn = "#000", Gn = pn.extend({ init: function (e, t) { void 0 === e && (e = new Sn), void 0 === t && (t = {}), pn.fn.init.call(this, t), this.geometry(e), i(this.options.stroke) || this.stroke(qn) }, _bbox: function (e) { return this._geometry.bbox(e) }, rawBBox: function () { return this.geometry().bbox() }, toPath: function () { var e, t = new jn, n = this.geometry().curvePoints(); if (n.length > 0) for (t.moveTo(n[0].x, n[0].y), e = 1; e < n.length; e += 3)t.curveTo(n[e], n[e + 1], n[e + 2]); return t }, _containsPoint: function (e) { return this.geometry().containsPoint(e) }, _isOnPath: function (e) { return this.geometry()._isOnPath(e, this.options.stroke.width / 2) } }), Gn.prototype.nodeType = "Arc", vn.extend(Gn.prototype), bn.extend(Gn.prototype), M(Gn.prototype, ["geometry"]), $n = "12px sans-serif", Kn = "#000", Yn = pn.extend({ init: function (e, t, n) { void 0 === t && (t = new dn), void 0 === n && (n = {}), pn.fn.init.call(this, n), this.content(e), this.position(t), this.options.font || (this.options.font = $n), i(this.options.fill) || this.fill(Kn) }, content: function (e) { return i(e) ? (this.options.set("content", e), this) : this.options.get("content") }, measure: function () { var e = jt.measureText(this.content(), { font: this.options.get("font") }); return e }, rect: function () { var e = this.measure(), t = this.position().clone(); return new un(t, [e.width, e.height]) }, bbox: function (e) { var t = D(this.currentTransform(e)); return this.rect().bbox(t) }, rawBBox: function () { return this.rect().bbox() }, _containsPoint: function (e) { return this.rect().containsPoint(e) } }), Yn.prototype.nodeType = "Text", vn.extend(Yn.prototype), N(Yn.prototype, ["position"]), Qn = pn.extend({ init: function (e, t, n) { void 0 === t && (t = new un), void 0 === n && (n = {}), pn.fn.init.call(this, n), this.src(e), this.rect(t) }, src: function (e) { return i(e) ? (this.options.set("src", e), this) : this.options.get("src") }, bbox: function (e) { var t = D(this.currentTransform(e)); return this._rect.bbox(t) }, rawBBox: function () { return this._rect.bbox() }, _containsPoint: function (e) { return this._rect.containsPoint(e) }, _hasFill: function () { return this.src() } }), Qn.prototype.nodeType = "Image", M(Qn.prototype, ["rect"]), Xn = { extend: function (e, t) { e.traverse = function (e) { var n, i, o = this[t]; for (n = 0; n < o.length; n++)i = o[n], i.traverse ? i.traverse(e) : e(i); return this } } }, Jn = pn.extend({ init: function (e) { pn.fn.init.call(this, e), this.children = [] }, childrenChange: function (e, t, n) { this.trigger("childrenChange", { action: e, items: t, index: n }) }, append: function () { return t(this.children, arguments), this._reparent(arguments, this), this.childrenChange("add", arguments), this }, insert: function (e, t) { return this.children.splice(e, 0, t), t.parent = this, this.childrenChange("add", [t], e), this }, insertAt: function (e, t) { return this.insert(t, e) }, remove: function (e) { var t = this.children.indexOf(e); return t >= 0 && (this.children.splice(t, 1), e.parent = null, this.childrenChange("remove", [e], t)), this }, removeAt: function (e) { if (0 <= e && e < this.children.length) { var t = this.children[e]; this.children.splice(e, 1), t.parent = null, this.childrenChange("remove", [t], e) } return this }, clear: function () { var e = this.children; return this.children = [], this._reparent(e, null), this.childrenChange("remove", e, 0), this }, bbox: function (e) { return Q(this.children, !0, this.currentTransform(e)) }, rawBBox: function () { return Q(this.children, !1) }, _clippedBBox: function (e) { return X(this.children, this.currentTransform(e)) }, currentTransform: function (e) { return pn.prototype.currentTransform.call(this, e) || null }, containsPoint: function (e, t) { var n, i, o; if (this.visible()) for (n = this.children, i = this.currentTransform(t), o = 0; o < n.length; o++)if (n[o].containsPoint(e, i)) return !0; return !1 }, _reparent: function (e, t) { var n, i, o, r = this; for (n = 0; n < e.length; n++)i = e[n], o = i.parent, o && o !== r && o.remove && o.remove(i), i.parent = t } }), Jn.prototype.nodeType = "Group", Xn.extend(Jn.prototype, "children"), Zn = { alignContent: "start", justifyContent: "start", alignItems: "start", spacing: 0, orientation: "horizontal", lineSpacing: 0, wrap: !0, revers: !1 }, ei = function (e, t) { e.forEach(t) }, ti = function (e, t) { var n, i = e.length; for (n = i - 1; n >= 0; n--)t(e[n], n) }, ni = Jn.extend({ init: function (t, n) { Jn.fn.init.call(this, e.extend({}, Zn, n)), this._rect = t, this._fieldMap = {} }, rect: function (e) { return e ? (this._rect = e, this) : this._rect }, _initMap: function () { var e = this.options, t = this._fieldMap; "horizontal" === e.orientation ? (t.sizeField = "width", t.groupsSizeField = "height", t.groupAxis = "x", t.groupsAxis = "y") : (t.sizeField = "height", t.groupsSizeField = "width", t.groupAxis = "y", t.groupsAxis = "x"), e.reverse ? (this.forEach = ti, this.justifyAlign = oe) : (this.forEach = ei, this.justifyAlign = ie) }, reflow: function () { var e, t, n, i, o, r, a, s, l, d, c, u, h, p, f, g, m, v, _, b, w, k, y, x, C = this; if (this._rect && 0 !== this.children.length) { for (this._initMap(), this.options.transform && this.transform(null), e = this.options, t = this._rect, n = this._initGroups(), i = n.groups, o = n.groupsSize, r = this._fieldMap, a = r.sizeField, s = r.groupsSizeField, l = r.groupAxis, d = r.groupsAxis, c = new dn, u = new dn, h = new cn, p = ie(o, t, e.alignContent, d, s), v = function (t, n) { var i = g.elements[n]; u[l] = f, u[d] = ie(t.size[s], m, e.alignItems, d, s), ne(u, t, i), f += t.size[a] + e.spacing }, _ = 0; _ < i.length; _++)g = i[_], c[l] = f = C.justifyAlign(g.size, t, e.justifyContent, l, a), c[d] = p, h[a] = g.size, h[s] = g.lineSize, m = new un(c, h), C.forEach(g.bboxes, v), p += g.lineSize + e.lineSpacing; !e.wrap && g.size > t.size[a] && (b = t.size[a] / m.size[a], w = m.topLeft().scale(b, b), k = m.size[s] * b, y = ie(k, t, e.alignContent, d, s), x = A(), "x" === l ? x.translate(t.origin.x - w.x, y - w.y) : x.translate(y - w.x, t.origin.y - w.y), x.scale(b, b), this.transform(x)) } }, _initGroups: function () { var e, t, n, i = this, o = this, r = o.options, a = o.children, s = r.lineSpacing, l = r.wrap, d = r.spacing, c = this._fieldMap.sizeField, u = this._newGroup(), h = [], p = function () { h.push(u), f += u.lineSize + s }, f = -s; for (e = 0; e < a.length; e++)t = a[e], n = a[e].clippedBBox(), t.visible() && n && (l && u.size + n.size[c] + d > i._rect.size[c] ? 0 === u.bboxes.length ? (i._addToGroup(u, n, t), p(), u = i._newGroup()) : (p(), u = i._newGroup(), i._addToGroup(u, n, t)) : i._addToGroup(u, n, t)); return u.bboxes.length && p(), { groups: h, groupsSize: f } }, _addToGroup: function (e, t, n) { e.size += t.size[this._fieldMap.sizeField] + this.options.spacing, e.lineSize = Math.max(t.size[this._fieldMap.groupsSizeField], e.lineSize), e.bboxes.push(t), e.elements.push(n) }, _newGroup: function () { return { lineSize: 0, size: -this.options.spacing, bboxes: [], elements: [] } } }), ii = pn.extend({ init: function (e, t) { void 0 === e && (e = new un), void 0 === t && (t = {}), pn.fn.init.call(this, t), this.geometry(e), i(this.options.stroke) || this.stroke("#000") }, _bbox: function (e) { return this._geometry.bbox(e) }, rawBBox: function () { return this._geometry.bbox() }, _containsPoint: function (e) { return this._geometry.containsPoint(e) }, _isOnPath: function (e) { return this.geometry()._isOnPath(e, this.options.stroke.width / 2) } }), ii.prototype.nodeType = "Rect", vn.extend(ii.prototype), bn.extend(ii.prototype), M(ii.prototype, ["geometry"]), oi = Rn.extend({ _change: function () { this.optionsChange({ field: "stops" }) } }), ri = Ut.extend({ init: function (e, t, n) { this.options = new sn({ offset: e, color: t, opacity: i(n) ? n : 1 }), this.options.addObserver(this) } }), ri.create = function (e) { if (i(e)) { var t; return t = e instanceof ri ? e : e.length > 1 ? new ri(e[0], e[1], e[2]) : new ri(e.offset, e.color, e.opacity) } }, _e(ri.prototype, ["offset", "color", "opacity"]), Yt.extend(ri.prototype), ai = Ut.extend({ init: function (e) { void 0 === e && (e = {}), this.stops = new oi(this._createStops(e.stops)), this.stops.addObserver(this), this._userSpace = e.userSpace, this.id = o() }, userSpace: function (e) { return i(e) ? (this._userSpace = e, this.optionsChange(), this) : this._userSpace }, _createStops: function (e) { var t, n; for (void 0 === e && (e = []), t = [], n = 0; n < e.length; n++)t.push(ri.create(e[n])); return t }, addStop: function (e, t, n) { this.stops.push(new ri(e, t, n)) }, removeStop: function (e) { var t = this.stops.indexOf(e); t >= 0 && this.stops.splice(t, 1) } }), ai.prototype.nodeType = "Gradient", Yt.extend(ai.prototype), e.extend(ai.prototype, { optionsChange: function (e) { this.trigger("optionsChange", { field: "gradient" + (e ? "." + e.field : ""), value: this }) }, geometryChange: function () { this.optionsChange() } }), si = ai.extend({ init: function (e) { void 0 === e && (e = {}), ai.fn.init.call(this, e), this.start(e.start || new dn), this.end(e.end || new dn(1, 0)) } }), N(si.prototype, ["start", "end"]), li = ai.extend({ init: function (e) { void 0 === e && (e = {}), ai.fn.init.call(this, e), this.center(e.center || new dn), this._radius = i(e.radius) ? e.radius : 1, this._fallbackFill = e.fallbackFill }, radius: function (e) { return i(e) ? (this._radius = e, this.geometryChange(), this) : this._radius }, fallbackFill: function (e) { return i(e) ? (this._fallbackFill = e, this.optionsChange(), this) : this._fallbackFill } }), N(li.prototype, ["center"]), di = { swing: be, linear: we, easeOutElastic: ke }, ci = Ut.extend({ init: function () { this._items = [] }, register: function (e, t) { this._items.push({ name: e, type: t }) }, create: function (e, t) { var n, i, o, r = this._items; if (t && t.type) for (i = t.type.toLowerCase(), o = 0; o < r.length; o++)if (r[o].name.toLowerCase() === i) { n = r[o]; break } if (n) return new n.type(e, t) } }), ci.current = new ci, ui = Date.now || function () { return (new Date).getTime() }, hi = Ut.extend({ init: function (t, n) { this.options = e.extend({}, this.options, n), this.element = t }, setup: function () { }, step: function () { }, play: function () { var e, t, n, i = this, o = this.options, r = o.duration, a = o.delay; void 0 === a && (a = 0), e = di[o.easing], t = ui() + a, n = t + r, 0 === r ? (this.step(1), this.abort()) : setTimeout(function () { var o = function () { var a, s, l, d; i._stopped || (a = ui(), s = h(a - t, 0, r), l = s / r, d = e(l, s, 0, 1, r), i.step(d), a < n ? kendo.animationFrame(o) : i.abort()) }; o() }, a) }, abort: function () { this._stopped = !0 }, destroy: function () { this.abort() } }), hi.prototype.options = { duration: 500, easing: "swing" }, hi.create = function (e, t, n) { return ci.current.create(e, t, n) }, pi = Ut.extend({ init: function () { this._items = [] }, register: function (e, t, n) { var i = this._items, o = i[0], r = { name: e, type: t, order: n }; !o || n < o.order ? i.unshift(r) : i.push(r) }, create: function (e, t) { var n, i, o = this._items, r = o[0]; if (t && t.type) for (n = t.type.toLowerCase(), i = 0; i < o.length; i++)if (o[i].name === n) { r = o[i]; break } return r ? new r.type(e, t) : void kendo.logToConsole("Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\n- The browser does not support SVG and Canvas. User agent: " + navigator.userAgent) } }), pi.current = new pi, fi = ["click", "mouseenter", "mouseleave", "mousemove", "resize"], gi = kendo.Observable.extend({ init: function (t, n) { kendo.Observable.fn.init.call(this), this.options = e.extend({}, n), this.element = t, this.element._kendoExportVisual = this.exportVisual.bind(this), this._click = this._handler("click"), this._mouseenter = this._handler("mouseenter"), this._mouseleave = this._handler("mouseleave"), this._mousemove = this._handler("mousemove"), this._visual = new Jn, y(t, this.options), this.bind(fi, this.options), this._enableTracking() }, draw: function (e) { this._visual.children.push(e) }, clear: function () { this._visual.children = [] }, destroy: function () { this._visual = null, this.element._kendoExportVisual = null, this.unbind() }, eventTarget: function (e) { for (var t, n = this, i = d(e); !t && i && (t = i._kendoNode, i !== n.element);)i = i.parentElement; if (t) return t.srcElement }, exportVisual: function () { return this._visual }, getSize: function () { return y(this.element) }, currentSize: function (e) { return e ? void (this._size = e) : this._size }, setSize: function (e) { y(this.element, e), this.currentSize(e), this._resize() }, resize: function (e) { var t = this.getSize(), n = this.currentSize(); (e || (t.width > 0 || t.height > 0) && (!n || t.width !== n.width || t.height !== n.height)) && (this.currentSize(t), this._resize(t, e), this.trigger("resize", t)) }, size: function (e) { return e ? void this.setSize(e) : this.getSize() }, suspendTracking: function () { this._suspendedTracking = !0 }, resumeTracking: function () { this._suspendedTracking = !1 }, _enableTracking: function () { }, _resize: function () { }, _handler: function (e) { var t = this; return function (n) { var i = t.eventTarget(n); i && !t._suspendedTracking && t.trigger(e, { element: i, originalEvent: n, type: e }) } }, _elementOffset: function () { var e = this.element, t = w(e, ["paddingLeft", "paddingTop"]), n = t.paddingLeft, i = t.paddingTop, o = b(e), r = o.left, a = o.top; return { left: r + parseInt(n, 10), top: a + parseInt(i, 10) } }, _surfacePoint: function (e) { var t = this._elementOffset(), n = l(e), i = n.x - t.left, o = n.y - t.top; return new dn(i, o) } }), gi.create = function (e, t) { return pi.current.create(e, t) }, gi.support = {}, mi = Ut.extend({ init: function (e) { this.childNodes = [], this.parent = null, e && (this.srcElement = e, this.observe()) }, destroy: function () { var e, t, n = this; for (this.srcElement && this.srcElement.removeObserver(this), e = this.childNodes, t = 0; t < e.length; t++)n.childNodes[t].destroy(); this.parent = null }, load: function () { }, observe: function () { this.srcElement && this.srcElement.addObserver(this) }, append: function (e) { this.childNodes.push(e), e.parent = this }, insertAt: function (e, t) { this.childNodes.splice(t, 0, e), e.parent = this }, remove: function (e, t) { var n, i = this, o = e + t; for (n = e; n < o; n++)i.childNodes[n].removeSelf(); this.childNodes.splice(e, t) }, removeSelf: function () { this.clear(), this.destroy() }, clear: function () { this.remove(0, this.childNodes.length) }, invalidate: function () { this.parent && this.parent.invalidate() }, geometryChange: function () { this.invalidate() }, optionsChange: function () { this.invalidate() }, childrenChange: function (e) { "add" === e.action ? this.load(e.items, e.index) : "remove" === e.action && this.remove(e.index, e.items.length), this.invalidate() } }), vi = {}, _i = "http://www.w3.org/2000/svg", bi = "none", wi = function (e, t) { e.innerHTML = t }, "undefined" != typeof document && (ki = "", yi = document.createElement("div"), xi = "undefined" != typeof DOMParser, yi.innerHTML = ki, xi && yi.firstChild.namespaceURI !== _i && (wi = function (e, t) { var n = new DOMParser, i = n.parseFromString(t, "text/xml"), o = document.adoptNode(i.documentElement); e.innerHTML = "", e.appendChild(o) })), Ci = wi, Si = "transform", Ti = { clip: "clip-path", fill: "fill" }, Di = mi.extend({ init: function (e, t) { mi.fn.init.call(this, e), this.definitions = {}, this.options = t }, destroy: function () { this.element && (this.element._kendoNode = null, this.element = null), this.clearDefinitions(), mi.fn.destroy.call(this) }, load: function (e, t) { var n, o, r, a, s, l = this; for (n = 0; n < e.length; n++)o = e[n], r = o.children, a = new vi[o.nodeType](o, l.options), i(t) ? l.insertAt(a, t) : l.append(a), a.createDefinitions(), r && r.length > 0 && a.load(r), s = l.element, s && a.attachTo(s, t) }, root: function () { for (var e = this; e.parent;)e = e.parent; return e }, attachTo: function (e, t) { var n, o = document.createElement("div"); Ci(o, "" + this.render() + ""), n = o.firstChild.firstChild, n && (i(t) ? e.insertBefore(n, e.childNodes[t] || null) : e.appendChild(n), this.setElement(n)) }, setElement: function (e) { var t, n, i; for (this.element && (this.element._kendoNode = null), this.element = e, this.element._kendoNode = this, t = this.childNodes, n = 0; n < t.length; n++)i = e.childNodes[n], t[n].setElement(i) }, clear: function () { var e, t; for (this.clearDefinitions(), this.element && (this.element.innerHTML = ""), e = this.childNodes, t = 0; t < e.length; t++)e[t].destroy(); this.childNodes = [] }, removeSelf: function () { if (this.element) { var e = this.element.parentNode; e && e.removeChild(this.element), this.element = null } mi.fn.removeSelf.call(this) }, template: function () { return this.renderChildren() }, render: function () { return this.template() }, renderChildren: function () { var e, t = this.childNodes, n = ""; for (e = 0; e < t.length; e++)n += t[e].render(); return n }, optionsChange: function (e) { var t = e.field, n = e.value; "visible" === t ? this.css("display", n ? "" : bi) : Ti[t] && Se(t, n) ? this.updateDefinition(t, n) : "opacity" === t ? this.attr("opacity", n) : "cursor" === t ? this.css("cursor", n) : "id" === t && (n ? this.attr("id", n) : this.removeAttr("id")), mi.fn.optionsChange.call(this, e) }, attr: function (e, t) { this.element && this.element.setAttribute(e, t) }, allAttr: function (e) { var t, n = this; for (t = 0; t < e.length; t++)n.attr(e[t][0], e[t][1]) }, css: function (e, t) { this.element && (this.element.style[e] = t) }, allCss: function (e) { var t, n = this; for (t = 0; t < e.length; t++)n.css(e[t][0], e[t][1]) }, removeAttr: function (e) { this.element && this.element.removeAttribute(e) }, mapTransform: function (e) { var t = []; return e && t.push([Si, "matrix(" + e.matrix().toString(6) + ")"]), t }, renderTransform: function () { return xe(this.mapTransform(this.srcElement.transform())) }, transformChange: function (e) { e ? this.allAttr(this.mapTransform(e)) : this.removeAttr(Si) }, mapStyle: function () { var e = this.srcElement.options, t = [["cursor", e.cursor]]; return e.visible === !1 && t.push(["display", bi]), t }, renderStyle: function () { return ye("style", Ce(this.mapStyle(!0))) }, renderOpacity: function () { return ye("opacity", this.srcElement.options.opacity) }, renderId: function () { return ye("id", this.srcElement.options.id) }, createDefinitions: function () { var e, t, n, i, o = this.srcElement, r = this.definitions; if (o) { e = o.options; for (n in Ti) i = e.get(n), i && Se(n, i) && (r[n] = i, t = !0); t && this.definitionChange({ action: "add", definitions: r }) } }, definitionChange: function (e) { this.parent && this.parent.definitionChange(e) }, updateDefinition: function (e, t) { var n = this.definitions, i = n[e], o = Ti[e], r = {}; i && (r[e] = i, this.definitionChange({ action: "remove", definitions: r }), delete n[e]), t ? (r[e] = t, this.definitionChange({ action: "add", definitions: r }), n[e] = t, this.attr(o, this.refUrl(t.id))) : i && this.removeAttr(o) }, clearDefinitions: function () { var e = this.definitions; this.definitionChange({ action: "remove", definitions: e }), this.definitions = {} }, renderDefinitions: function () { return xe(this.mapDefinitions()) }, mapDefinitions: function () { var e, t = this, n = this.definitions, i = []; for (e in n) i.push([Ti[e], t.refUrl(n[e].id)]); return i }, refUrl: function (e) { var t = (this.options || {}).skipBaseHref, n = this.baseUrl().replace(/'/g, "\\'"), i = t ? "" : n; return "url(" + i + "#" + e + ")" }, baseUrl: function () { return Te() } }), Ai = Di.extend({ template: function () { return "" }, renderOffset: function () { return ye("offset", this.srcElement.offset()) }, mapStyle: function () { var e = this.srcElement; return [["stop-color", e.color()], ["stop-opacity", e.opacity()]] }, optionsChange: function (e) { "offset" === e.field ? this.attr(e.field, e.value) : "color" !== e.field && "opacity" !== e.field || this.css("stop-" + e.field, e.value) } }), Ei = Di.extend({ init: function (e) { Di.fn.init.call(this, e), this.id = e.id, this.loadStops() }, loadStops: function () { var e, t, n = this, i = this.srcElement.stops, o = this.element; for (e = 0; e < i.length; e++)t = new Ai(i[e]), n.append(t), o && t.attachTo(o) }, optionsChange: function (e) { "gradient.stops" === e.field ? (mi.prototype.clear.call(this), this.loadStops()) : "gradient" === e.field && this.allAttr(this.mapCoordinates()) }, renderCoordinates: function () { return xe(this.mapCoordinates()) }, mapSpace: function () { return ["gradientUnits", this.srcElement.userSpace() ? "userSpaceOnUse" : "objectBoundingBox"] } }), Ii = Ei.extend({ template: function () { return "" + this.renderChildren() + "" }, mapCoordinates: function () { var e = this.srcElement, t = e.start(), n = e.end(), i = [["x1", t.x], ["y1", t.y], ["x2", n.x], ["y2", n.y], this.mapSpace()]; return i } }), Mi = Ei.extend({ template: function () { return "" + this.renderChildren() + "" }, mapCoordinates: function () { var e = this.srcElement, t = e.center(), n = e.radius(), i = [["cx", t.x], ["cy", t.y], ["r", n], this.mapSpace()]; return i } }), Ri = Di.extend({ init: function (e) { Di.fn.init.call(this), this.srcElement = e, this.id = e.id, this.load([e]) }, template: function () { return "" + this.renderChildren() + "" } }), Fi = Di.extend({ init: function () { Di.fn.init.call(this), this.definitionMap = {} }, attachTo: function (e) { this.element = e }, template: function () { return "" + this.renderChildren() + "" }, definitionChange: function (e) { var t = e.definitions, n = e.action; "add" === n ? this.addDefinitions(t) : "remove" === n && this.removeDefinitions(t) }, createDefinition: function (e, t) { var n; return "clip" === e ? n = Ri : "fill" === e && (t instanceof si ? n = Ii : t instanceof li && (n = Mi)), new n(t) }, addDefinitions: function (e) { var t, n = this; for (t in e) n.addDefinition(t, e[t]) }, addDefinition: function (e, t) { var n, i = this, o = i.element, r = i.definitionMap, a = t.id, s = r[a]; s ? s.count++ : (n = this.createDefinition(e, t), r[a] = { element: n, count: 1 }, this.append(n), o && n.attachTo(this.element)) }, removeDefinitions: function (e) { var t, n = this; for (t in e) n.removeDefinition(e[t]) }, removeDefinition: function (e) { var t = this.definitionMap, n = e.id, i = t[n]; i && (i.count--, 0 === i.count && (this.remove(this.childNodes.indexOf(i.element), 1), delete t[n])) } }), Pi = Di.extend({ init: function (e) { Di.fn.init.call(this), this.options = e, this.defs = new Fi }, attachTo: function (e) { this.element = e, this.defs.attachTo(e.firstElementChild) }, clear: function () { mi.prototype.clear.call(this) }, template: function () { return this.defs.render() + this.renderChildren() }, definitionChange: function (e) { this.defs.definitionChange(e) } }), zi = "rtl", Bi = gi.extend({ init: function (t, n) { gi.fn.init.call(this, t, n), this._root = new Pi(e.extend({ rtl: w(t, "direction").direction === zi }, this.options)), Ci(this.element, this._template()), this._rootElement = this.element.firstElementChild, De(this._rootElement), this._root.attachTo(this._rootElement), _(this.element, { click: this._click, mouseover: this._mouseenter, mouseout: this._mouseleave, mousemove: this._mousemove }), this.resize() }, destroy: function () { this._root && (this._root.destroy(), this._root = null, this._rootElement = null, x(this.element, { click: this._click, mouseover: this._mouseenter, mouseout: this._mouseleave, mousemove: this._mousemove })), gi.fn.destroy.call(this) }, translate: function (e) { var t = Math.round(e.x) + " " + Math.round(e.y) + " " + this._size.width + " " + this._size.height; this._offset = e, this._rootElement.setAttribute("viewBox", t) }, draw: function (e) { gi.fn.draw.call(this, e), this._root.load([e]) }, clear: function () { gi.fn.clear.call(this), this._root.clear() }, svg: function () { return "" + this._template() }, exportVisual: function () { var e, t = this, n = t._visual, i = t._offset; return i && (e = new Jn, e.children.push(n), e.transform(A().translate(-i.x, -i.y)), n = e), n }, _resize: function () { this._offset && this.translate(this._offset) }, _template: function () { return "" + this._root.render() + "" } }), Bi.prototype.type = "svg", "undefined" != typeof document && document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") && (gi.support.svg = !0, pi.current.register("svg", Bi, 10)), Li = Di.extend({ template: function () { return "" + this.renderChildren() + "" }, optionsChange: function (e) { "transform" === e.field && this.transformChange(e.value), Di.fn.optionsChange.call(this, e) } }), vi.Group = Li, Hi = { dot: [1.5, 3.5], dash: [4, 3.5], longdash: [8, 3.5], dashdot: [3.5, 3.5, 1.5, 3.5], longdashdot: [8, 3.5, 1.5, 3.5], longdashdotdot: [8, 3.5, 1.5, 3.5, 1.5, 3.5] }, Ni = "solid", Oi = "butt", Vi = { "fill.opacity": "fill-opacity", "stroke.color": "stroke", "stroke.width": "stroke-width", "stroke.opacity": "stroke-opacity" }, Wi = " ", Ui = Di.extend({ geometryChange: function () { this.attr("d", this.renderData()), this.invalidate() }, optionsChange: function (e) { switch (e.field) { case "fill": e.value ? this.allAttr(this.mapFill(e.value)) : this.removeAttr("fill"); break; case "fill.color": this.allAttr(this.mapFill({ color: e.value })); break; case "stroke": e.value ? this.allAttr(this.mapStroke(e.value)) : this.removeAttr("stroke"); break; case "transform": this.transformChange(e.value); break; default: var t = Vi[e.field]; t && this.attr(t, e.value) }Di.fn.optionsChange.call(this, e) }, content: function () { this.element && (this.element.textContent = this.srcElement.content()) }, renderData: function () { return this.printPath(this.srcElement) }, printPath: function (e) { var t, n, i, o, r, a = this, s = e.segments, l = s.length; if (l > 0) { for (t = [], o = 1; o < l; o++)r = a.segmentType(s[o - 1], s[o]), r !== i && (i = r, t.push(r)), t.push("L" === r ? a.printPoints(s[o].anchor()) : a.printPoints(s[o - 1].controlOut(), s[o].controlIn(), s[o].anchor())); return n = "M" + this.printPoints(s[0].anchor()) + Wi + t.join(Wi), e.options.closed && (n += "Z"), n } }, printPoints: function () { var e, t = arguments, n = t.length, i = []; for (e = 0; e < n; e++)i.push(t[e].toString(3)); return i.join(" ") }, segmentType: function (e, t) { return e.controlOut() && t.controlIn() ? "C" : "L" }, mapStroke: function (e) { var t = []; return e && !c(e.color) ? (t.push(["stroke", e.color]), t.push(["stroke-width", e.width]), t.push(["stroke-linecap", this.renderLinecap(e)]), t.push(["stroke-linejoin", e.lineJoin]), i(e.opacity) && t.push(["stroke-opacity", e.opacity]), i(e.dashType) && t.push(["stroke-dasharray", this.renderDashType(e)])) : t.push(["stroke", bi]), t }, renderStroke: function () { return xe(this.mapStroke(this.srcElement.options.stroke)) }, renderDashType: function (e) { var t, n, i, o = e.dashType, r = e.width; if (void 0 === r && (r = 1), o && o !== Ni) { for (t = Hi[o.toLowerCase()], n = [], i = 0; i < t.length; i++)n.push(t[i] * r); return n.join(" ") } }, renderLinecap: function (e) { var t = e.dashType, n = e.lineCap; return t && "solid" !== t ? Oi : n }, mapFill: function (e) { var t = []; return e && "Gradient" === e.nodeType || (e && !c(e.color) ? (t.push(["fill", e.color]), i(e.opacity) && t.push(["fill-opacity", e.opacity])) : t.push(["fill", bi])), t }, renderFill: function () { return xe(this.mapFill(this.srcElement.options.fill)) }, template: function () { return "" } }), vi.Path = Ui, ji = Ui.extend({ renderData: function () { return this.printPath(this.srcElement.toPath()) } }), vi.Arc = ji, qi = Ui.extend({ geometryChange: function () { var e = this.center(); this.attr("cx", e.x), this.attr("cy", e.y), this.attr("r", this.radius()), this.invalidate() }, center: function () { return this.srcElement.geometry().center }, radius: function () { return this.srcElement.geometry().radius }, template: function () { return "" } }), vi.Circle = qi, Gi = Ui.extend({ geometryChange: function () { var e = this.srcElement.geometry(); this.attr("x", e.origin.x), this.attr("y", e.origin.y), this.attr("width", e.size.width), this.attr("height", e.size.height), this.invalidate() }, size: function () { return this.srcElement.geometry().size }, origin: function () { return this.srcElement.geometry().origin }, template: function () { return "" } }), vi.Rect = Gi, $i = Ui.extend({ geometryChange: function () { this.allAttr(this.mapPosition()), this.invalidate() }, optionsChange: function (e) { "src" === e.field && this.allAttr(this.mapSource()), Ui.fn.optionsChange.call(this, e) }, mapPosition: function () { var e = this.srcElement.rect(), t = e.topLeft(); return [["x", t.x], ["y", t.y], ["width", e.width() + "px"], ["height", e.height() + "px"]] }, renderPosition: function () { return xe(this.mapPosition()) }, mapSource: function (e) { var t = this.srcElement.src(); return e && (t = kendo.htmlEncode(t)), [["xlink:href", t]] }, renderSource: function () { return xe(this.mapSource(!0)) }, template: function () { return "" } }), vi.Image = $i, Ki = /&(?:[a-zA-Z]+|#\d+);/g, "undefined" != typeof document && (Ae._element = document.createElement("span")), Yi = Ui.extend({ geometryChange: function () { var e = this.pos(); this.attr("x", e.x), this.attr("y", e.y), this.invalidate() }, optionsChange: function (e) { "font" === e.field ? (this.attr("style", Ce(this.mapStyle())), this.geometryChange()) : "content" === e.field && Ui.fn.content.call(this, this.srcElement.content()), Ui.fn.optionsChange.call(this, e) }, mapStyle: function (e) { var t = Ui.fn.mapStyle.call(this, e), n = this.srcElement.options.font; return e && (n = kendo.htmlEncode(n)), t.push(["font", n], ["white-space", "pre"]), t }, pos: function () { var e = this.srcElement.position(), t = this.srcElement.measure(); return e.clone().setY(e.y + t.baseline) }, renderContent: function () { var e = this.srcElement.content(); return e = Ae(e), e = kendo.htmlEncode(e), jt.normalizeText(e) }, renderTextAnchor: function () { var e; return !(this.options || {}).rtl || Gt.msie || Gt.edge || (e = "end"), ye("text-anchor", e) }, template: function () { return "" + this.renderContent() + "" } }), vi.Text = Yi, Qi = Ui.extend({ renderData: function () { var e, t, n = this, i = this.srcElement.paths; if (i.length > 0) { for (e = [], t = 0; t < i.length; t++)e.push(n.printPath(i[t])); return e.join(" ") } } }), vi.MultiPath = Qi, Xi = { Circle: gn, Arc: Sn, Rect: un, Point: dn, Segment: zn, Matrix: ln, Size: cn, toMatrix: D, Transformation: hn, transform: A }, Ji = { Surface: Bi, RootNode: Pi, Node: Di, GroupNode: Li, ArcNode: ji, CircleNode: qi, RectNode: Gi, ImageNode: $i, TextNode: Yi, PathNode: Ui, MultiPathNode: Qi, DefinitionNode: Fi, ClipNode: Ri, GradientStopNode: Ai, LinearGradientNode: Ii, RadialGradientNode: Mi, exportGroup: Ee }, Zi = {}, eo = mi.extend({ init: function (e) { mi.fn.init.call(this, e), e && this.initClip() }, initClip: function () { var e = this.srcElement.clip(); e && (this.clip = e, e.addObserver(this)) }, clear: function () { this.srcElement && this.srcElement.removeObserver(this), this.clearClip(), mi.fn.clear.call(this) }, clearClip: function () { this.clip && (this.clip.removeObserver(this), delete this.clip) }, setClip: function (e) { this.clip && (e.beginPath(), Ie(e, this.clip), e.clip()) }, optionsChange: function (e) { "clip" === e.field && (this.clearClip(), this.initClip()), mi.fn.optionsChange.call(this, e) }, setTransform: function (e) { if (this.srcElement) { var t = this.srcElement.transform(); t && e.transform.apply(e, t.matrix().toArray(6)) } }, loadElements: function (e, t, n) { var o, r, a, s, l = this; for (o = 0; o < e.length; o++)r = e[o], a = r.children, s = new Zi[r.nodeType](r, n), a && a.length > 0 && s.load(a, t, n), i(t) ? l.insertAt(s, t) : l.append(s) }, load: function (e, t, n) { this.loadElements(e, t, n), this.invalidate() }, setOpacity: function (e) { if (this.srcElement) { var t = this.srcElement.opacity(); i(t) && this.globalAlpha(e, t) } }, globalAlpha: function (e, t) { var n = t; n && e.globalAlpha && (n *= e.globalAlpha), e.globalAlpha = n }, visible: function () { var e = this.srcElement; return !e || e && e.options.visible !== !1 } }), to = eo.extend({ renderTo: function (e) { var t, n, i; if (this.visible()) { for (e.save(), this.setTransform(e), this.setClip(e), this.setOpacity(e), t = this.childNodes, n = 0; n < t.length; n++)i = t[n], i.visible() && i.renderTo(e); e.restore() } } }), Xn.extend(to.prototype, "childNodes"), Zi.Group = to, no = 1e3 / 60, io = to.extend({ init: function (e, t) { to.fn.init.call(this), this.canvas = e, this.size = t, this.ctx = e.getContext("2d"); var n = this._invalidate.bind(this); this.invalidate = kendo.throttle(function () { kendo.animationFrame(n) }, no) }, destroy: function () { to.fn.destroy.call(this), this.canvas = null, this.ctx = null }, load: function (e, t, n) { this.loadElements(e, t, n), this._invalidate() }, _rescale: function () { var e = this, t = e.canvas, n = e.size, i = 1; "number" == typeof window.devicePixelRatio && (i = window.devicePixelRatio), t.width = n.width * i, t.height = n.height * i, this.ctx.scale(i, i) }, _invalidate: function () { this.ctx && (this._rescale(), this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height), this.renderTo(this.ctx)) } }), Xn.extend(io.prototype, "childNodes"), oo = Ut.extend({ init: function () { this.shapes = [] }, _add: function (e, t) { this.shapes.push({ bbox: t, shape: e }), e._quadNode = this }, pointShapes: function (e) { var t, n = this.shapes, i = n.length, o = []; for (t = 0; t < i; t++)n[t].bbox.containsPoint(e) && o.push(n[t].shape); return o }, insert: function (e, t) { this._add(e, t) }, remove: function (e) { var t, n = this.shapes, i = n.length; for (t = 0; t < i; t++)if (n[t].shape === e) { n.splice(t, 1); break } } }), ro = oo.extend({ init: function (e) { oo.fn.init.call(this), this.children = [], this.rect = e }, inBounds: function (e) { var t = this.rect, n = t.bottomRight(), i = e.bottomRight(), o = t.origin.x <= e.origin.x && t.origin.y <= e.origin.y && i.x <= n.x && i.y <= n.y; return o }, pointShapes: function (e) { var n, i = this.children, o = i.length, r = oo.fn.pointShapes.call(this, e); for (n = 0; n < o; n++)t(r, i[n].pointShapes(e)); return r }, insert: function (e, t) { var n, i = this.children, o = !1; if (this.inBounds(t)) { if (this.shapes.length < 4) this._add(e, t); else { for (i.length || this._initChildren(), n = 0; n < i.length; n++)if (i[n].insert(e, t)) { o = !0; break } o || this._add(e, t) } o = !0 } return o }, _initChildren: function () { var e = this, t = e.rect, n = e.children, i = t.center(), o = t.width() / 2, r = t.height() / 2; n.push(new ro(new un([t.origin.x, t.origin.y], [o, r])), new ro(new un([i.x, t.origin.y], [o, r])), new ro(new un([t.origin.x, i.y], [o, r])), new ro(new un([i.x, i.y], [o, r]))) } }), ao = 3e3, so = 1e4, lo = 75, co = Ut.extend({ init: function () { this.initRoots() }, initRoots: function () { this.rootMap = {}, this.root = new oo, this.rootElements = [] }, clear: function () { var e, t = this, n = this.rootElements; for (e = 0; e < n.length; e++)t.remove(n[e]); this.initRoots() }, pointShape: function (e) { var t, n = (this.rootMap[Math.floor(e.x / ao)] || {})[Math.floor(e.y / ao)], i = this.root.pointShapes(e); for (n && (i = i.concat(n.pointShapes(e))), this.assignZindex(i), i.sort(Me), t = 0; t < i.length; t++)if (i[t].containsPoint(e)) return i[t] }, assignZindex: function (e) { var t, n, i, o, r, a = this; for (t = 0; t < e.length; t++) { for (n = e[t], i = 0, o = Math.pow(so, lo), r = []; n;)r.push(n), n = n.parent; for (; r.length;)n = r.pop(), i += ((n.parent ? n.parent.children : a.rootElements).indexOf(n) + 1) * o, o /= so; e[t]._zIndex = i } }, optionsChange: function (e) { "transform" !== e.field && "stroke.width" !== e.field || this.bboxChange(e.element) }, geometryChange: function (e) { this.bboxChange(e.element) }, bboxChange: function (e) { var t, n = this; if ("Group" === e.nodeType) for (t = 0; t < e.children.length; t++)n.bboxChange(e.children[t]); else e._quadNode && e._quadNode.remove(e), this._insertShape(e) }, add: function (e) { var n = Array.isArray(e) ? e.slice(0) : [e]; t(this.rootElements, n), this._insert(n) }, childrenChange: function (e) { var t, n = this; if ("remove" === e.action) for (t = 0; t < e.items.length; t++)n.remove(e.items[t]); else this._insert(Array.prototype.slice.call(e.items, 0)) }, _insert: function (e) { for (var n, i = this; e.length > 0;)n = e.pop(), n.addObserver(i), "Group" === n.nodeType ? t(e, n.children) : i._insertShape(n) }, _insertShape: function (e) { var t, n, i, o, r = e.bbox(); r && (t = this.getSectors(r), n = t[0][0], i = t[1][0], this.inRoot(t) ? this.root.insert(e, r) : (o = this.rootMap, o[n] || (o[n] = {}), o[n][i] || (o[n][i] = new ro(new un([n * ao, i * ao], [ao, ao]))), o[n][i].insert(e, r))) }, remove: function (e) { var t, n, i = this; if (e.removeObserver(this), "Group" === e.nodeType) for (t = e.children, n = 0; n < t.length; n++)i.remove(t[n]); else e._quadNode && (e._quadNode.remove(e), delete e._quadNode) }, inRoot: function (e) { return e[0].length > 1 || e[1].length > 1 }, getSectors: function (e) { var t, n, i = e.bottomRight(), o = Math.floor(i.x / ao), r = Math.floor(i.y / ao), a = [[], []]; for (t = Math.floor(e.origin.x / ao); t <= o; t++)a[0].push(t); for (n = Math.floor(e.origin.y / ao); n <= r; n++)a[1].push(n); return a } }), uo = Ut.extend({ init: function (e) { e.bind("mouseenter", this._mouseenter.bind(this)), e.bind("mouseleave", this._mouseleave.bind(this)), this.element = e.element }, clear: function () { this._resetCursor() }, destroy: function () { this._resetCursor(), delete this.element }, _mouseenter: function (e) { var t = this._shapeCursor(e); t ? (this._current || (this._defaultCursor = this._getCursor()), this._setCursor(t)) : this._resetCursor() }, _mouseleave: function () { this._resetCursor() }, _shapeCursor: function (e) { for (var t = e.element; t && !i(t.options.cursor);)t = t.parent; if (t) return t.options.cursor }, _getCursor: function () { if (this.element) return this.element.style.cursor }, _setCursor: function (e) { this.element && (this.element.style.cursor = e, this._current = e) }, _resetCursor: function () { this._current && (this._setCursor(this._defaultCursor || ""), delete this._current) } }), ho = gi.extend({ init: function (e, t) { var n, i; gi.fn.init.call(this, e, t), this.element.innerHTML = this._template(this), n = this.element.firstElementChild, i = y(e), n.width = i.width, n.height = i.height, this._rootElement = n, this._root = new io(n, i), this._mouseTrackHandler = this._trackMouse.bind(this), _(this.element, { click: this._mouseTrackHandler, mousemove: this._mouseTrackHandler }) }, destroy: function () { gi.fn.destroy.call(this), this._root && (this._root.destroy(), this._root = null), this._searchTree && (this._searchTree.clear(), delete this._searchTree), this._cursor && (this._cursor.destroy(), delete this._cursor), x(this.element, { click: this._mouseTrackHandler, mousemove: this._mouseTrackHandler }) }, draw: function (e) { gi.fn.draw.call(this, e), this._root.load([e], void 0, this.options.cors), this._searchTree && this._searchTree.add([e]) }, clear: function () { gi.fn.clear.call(this), this._root.clear(), this._searchTree && this._searchTree.clear(), this._cursor && this._cursor.clear() }, eventTarget: function (e) { var t, n; if (this._searchTree) return t = this._surfacePoint(e), n = this._searchTree.pointShape(t) }, image: function () { var e, t, n = this, i = n._root, o = n._rootElement, r = []; return i.traverse(function (e) { e.loading && r.push(e.loading) }), e = $t(), t = function () { i._invalidate(); try { var t = o.toDataURL(); e.resolve(t) } catch (n) { e.reject(n) } }, Kt(r).then(t, t), e }, suspendTracking: function () { gi.fn.suspendTracking.call(this), this._searchTree && (this._searchTree.clear(), delete this._searchTree) }, resumeTracking: function () { var e, t, n; if (gi.fn.resumeTracking.call(this), !this._searchTree) { for (this._searchTree = new co, e = this._root.childNodes, t = [], n = 0; n < e.length; n++)t.push(e[n].srcElement); this._searchTree.add(t) } }, _resize: function () { this._rootElement.width = this._size.width, this._rootElement.height = this._size.height, this._root.size = this._size, this._root.invalidate() }, _template: function () { return "" }, _enableTracking: function () { this._searchTree = new co, this._cursor = new uo(this), gi.fn._enableTracking.call(this) }, _trackMouse: function (e) { var t, n; this._suspendedTracking || (t = this.eventTarget(e), "click" !== e.type ? (n = this._currentShape, n && n !== t && this.trigger("mouseleave", { element: n, originalEvent: e, type: "mouseleave" }), t && n !== t && this.trigger("mouseenter", { element: t, originalEvent: e, type: "mouseenter" }), this.trigger("mousemove", { element: t, originalEvent: e, type: "mousemove" }), this._currentShape = t) : t && this.trigger("click", { element: t, originalEvent: e, type: "click" })) } }), ho.prototype.type = "canvas", "undefined" != typeof document && document.createElement("canvas").getContext && (gi.support.canvas = !0, pi.current.register("canvas", ho, 20)), po = eo.extend({ renderTo: function (e) { e.save(), this.setTransform(e), this.setClip(e), this.setOpacity(e), e.beginPath(), this.renderPoints(e, this.srcElement), this.setLineDash(e), this.setLineCap(e), this.setLineJoin(e), this.setFill(e), this.setStroke(e), e.restore() }, setFill: function (e) { var t = this.srcElement.options.fill, n = !1; return t && ("Gradient" === t.nodeType ? (this.setGradientFill(e, t), n = !0) : c(t.color) || (e.fillStyle = t.color, e.save(), this.globalAlpha(e, t.opacity), e.fill(), e.restore(), n = !0)), n }, setGradientFill: function (e, t) { var n, i, o, r, a = this.srcElement.rawBBox(); t instanceof si ? (i = t.start(), o = t.end(), n = e.createLinearGradient(i.x, i.y, o.x, o.y)) : t instanceof li && (r = t.center(), n = e.createRadialGradient(r.x, r.y, 0, r.x, r.y, t.radius())), Re(n, t.stops), e.save(), t.userSpace() || e.transform(a.width(), 0, 0, a.height(), a.origin.x, a.origin.y), e.fillStyle = n, e.fill(), e.restore() }, setStroke: function (e) { var t = this.srcElement.options.stroke; if (t && !c(t.color) && t.width > 0) return e.strokeStyle = t.color, e.lineWidth = v(t.width, 1), e.save(), this.globalAlpha(e, t.opacity), e.stroke(), e.restore(), !0 }, dashType: function () { var e = this.srcElement.options.stroke; if (e && e.dashType) return e.dashType.toLowerCase() }, setLineDash: function (e) { var t, n = this.dashType(); n && n !== Ni && (t = Hi[n], e.setLineDash ? e.setLineDash(t) : (e.mozDash = t, e.webkitLineDash = t)) }, setLineCap: function (e) { var t = this.dashType(), n = this.srcElement.options.stroke; t && t !== Ni ? e.lineCap = Oi : n && n.lineCap && (e.lineCap = n.lineCap) }, setLineJoin: function (e) { var t = this.srcElement.options.stroke; t && t.lineJoin && (e.lineJoin = t.lineJoin) }, renderPoints: function (e, t) { Ie(e, t) } }), Zi.Path = po, fo = po.extend({ renderPoints: function (e) { var t = this.srcElement.toPath(); Ie(e, t) } }), Zi.Arc = fo, go = po.extend({ renderPoints: function (e) { var t = this.srcElement.geometry(), n = t.center, i = t.radius; e.arc(n.x, n.y, i, 0, 2 * Math.PI) } }), Zi.Circle = go, mo = po.extend({ renderPoints: function (e) { var t = this.srcElement.geometry(), n = t.origin, i = t.size; e.rect(n.x, n.y, i.width, i.height) } }), Zi.Rect = mo, vo = po.extend({ init: function (e, t) { po.fn.init.call(this, e), this.onLoad = this.onLoad.bind(this), this.onError = this.onError.bind(this), this.loading = $t(); var n = this.img = new Image; t && !/^data:/i.test(e.src()) && (n.crossOrigin = t), n.src = e.src(), n.complete ? this.onLoad() : (n.onload = this.onLoad, n.onerror = this.onError) }, renderTo: function (e) { "resolved" === this.loading.state() && (e.save(), this.setTransform(e), this.setClip(e), this.drawImage(e), e.restore()) }, optionsChange: function (e) { "src" === e.field ? (this.loading = $t(), this.img.src = this.srcElement.src()) : po.fn.optionsChange.call(this, e) }, onLoad: function () { this.loading.resolve(), this.invalidate() }, onError: function () { this.loading.reject(Error("Unable to load image '" + this.img.src + "'. Check for connectivity and verify CORS headers.")) }, drawImage: function (e) { var t = this.srcElement.rect(), n = t.topLeft(); e.drawImage(this.img, n.x, n.y, t.width(), t.height()) } }), Zi.Image = vo, _o = po.extend({ renderTo: function (e) { var t = this.srcElement, n = t.position(), i = t.measure(); e.save(), this.setTransform(e), this.setClip(e), this.setOpacity(e), e.beginPath(), e.font = t.options.font, e.textAlign = "left", this.setFill(e) && e.fillText(t.content(), n.x, n.y + i.baseline), this.setStroke(e) && (this.setLineDash(e), e.strokeText(t.content(), n.x, n.y + i.baseline)), e.restore() } }), Zi.Text = _o, bo = po.extend({ renderPoints: function (e) { var t, n = this.srcElement.paths; for (t = 0; t < n.length; t++)Ie(e, n[t]) } }), Zi.MultiPath = bo, wo = { Surface: ho, RootNode: io, Node: eo, GroupNode: to, ArcNode: fo, CircleNode: go, RectNode: mo, ImageNode: vo, TextNode: _o, PathNode: po, MultiPathNode: bo }, ko = Gt || {}, yo = "KENDO-PSEUDO-ELEMENT", xo = {}, Co = {}, Co._root = Co, So = "undefined" != typeof window, To = !!So && (ko.msie || ko.edge), Do = Yn.extend({ init: function (e, t, n) { Yn.fn.init.call(this, e, t.getOrigin(), n), this._pdfRect = t }, rect: function () { return this._pdfRect }, rawBBox: function () { return this._pdfRect } }), Ao = "undefined" != typeof Element && Element.prototype && function (e) { return e.matches ? function (e, t) { return e.matches(t) } : e.webkitMatchesSelector ? function (e, t) { return e.webkitMatchesSelector(t) } : e.mozMatchesSelector ? function (e, t) { return e.mozMatchesSelector(t) } : e.msMatchesSelector ? function (e, t) { return e.msMatchesSelector(t) } : function (e) { return [].indexOf.call(document.querySelectorAll(e), this) !== -1 } }(Element.prototype), Eo = function (e) { return e ? function t(n) { var i, o, r, a, s = n.cloneNode(!1); if (1 == n.nodeType) { i = e(n), o = e(s), a = i.data(); for (r in a) o.data(r, a[r]); for (/^canvas$/i.test(n.tagName) ? s.getContext("2d").drawImage(n, 0, 0) : /^(?:input|select|textarea|option)$/i.test(n.tagName) && (s.removeAttribute("id"), s.removeAttribute("name"), /^textarea$/i.test(n.tagName) || (s.value = n.value), s.checked = n.checked, s.selected = n.selected), r = n.firstChild; r; r = r.nextSibling)s.appendChild(t(r)) } return s } : function (e) { var t, n = function o(e) { var t, n = e.cloneNode(!1); for (e._kendoExportVisual && (n._kendoExportVisual = e._kendoExportVisual), t = e.firstChild; t; t = t.nextSibling)n.appendChild(o(t)); return n }(e), i = e.querySelectorAll("canvas"); return i.length && ze(n.querySelectorAll("canvas")).forEach(function (e, t) { e.getContext("2d").drawImage(i[t], 0, 0) }), t = e.querySelectorAll("input, select, textarea, option"), ze(n.querySelectorAll("input, select, textarea, option")).forEach(function (e, n) { e.removeAttribute("id"), e.removeAttribute("name"), /^textarea$/i.test(e.tagName) || (e.value = t[n].value), e.checked = t[n].checked, e.selected = t[n].selected }), n } }("undefined" != typeof window && window.kendo && window.kendo.jQuery), Ve.getFontFaces = We, Ve.drawText = function (e) { var t = new Jn; return Co._clipbox = !1, Co._matrix = ln.unit(), Co._stackingContext = { element: e, group: t }, et(e, rt(e), t), 3 == e.firstChild.nodeType ? Lt(e, e.firstChild, t) : Dt(e, t), tt(), t }, Io = function () { function e(e) { function p() { var t = a.exec(e); t && (e = e.substr(t[1].length)) } function f(t) { p(); var n = t.exec(e); if (n) return e = e.substr(n[1].length), n[1] } function g() { var t, o, r, a = kendo.parseColor(e, !0); if (a) return r = /^#[0-9a-f]+/i.exec(e) || /^rgba?\(.*?\)/i.exec(e) || /^..*?\b/.exec(e), e = e.substr(r[0].length), a = a.toRGB(), (t = f(i)) || (o = f(n)), { color: a, length: t, percent: o } } function m(t) { var i, a, c, u, h, p, m = [], v = !1; if (f(s)) { for (i = f(r), "0" == i && (i = "0deg"), i ? (i = gt(i), f(d)) : (a = f(o), "to" == a ? a = f(o) : a && /^-/.test(t) && (v = !0), c = f(o), f(d)), /-moz-/.test(t) && null == i && null == a && (u = f(n), h = f(n), v = !0, "0%" == u ? a = "left" : "100%" == u && (a = "right"), "0%" == h ? c = "top" : "100%" == h && (c = "bottom"), f(d)); e && !f(l) && (p = g());)m.push(p), f(d); return { type: "linear", angle: i, to: a && c ? a + " " + c : a ? a : c ? c : null, stops: m, reverse: v } } } function v() { if (f(s)) { var e = f(u); return e = e.replace(/^['"]+|["']+$/g, ""), f(l), { type: "url", url: e } } } var _, b = e; return Ue(h, b) ? h[b] : ((_ = f(t)) ? _ = m(_) : (_ = f(c)) && (_ = v()), h[b] = _ || { type: "none" }) } var t = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\s*)\(/, n = /^([-0-9.]+%)/, i = /^([-0-9.]+px)/, o = /^(left|right|top|bottom|to|center)\W/, r = /^([-0-9.]+(deg|grad|rad|turn)|0)/, a = /^(\s+)/, s = /^(\()/, l = /^(\))/, d = /^(,)/, c = /^(url)\(/, u = /^(.*?)\)/, h = {}, p = {}; return function (t) { return Ue(p, t) ? p[t] : p[t] = Mo(t).map(e) } }(), Mo = function () { var e = {}; return function (t, n) { function i(e) { return u = e.exec(t.substr(l)) } function o(e) { return e.replace(/^\s+|\s+$/g, "") } var r, a, s, l, d, c, u; if (n || (n = /^\s*,\s*/), r = t + n, Ue(e, r)) return e[r]; for (a = [], s = 0, l = 0, d = 0, c = !1; l < t.length;)!c && i(/^[\(\[\{]/) ? (d++, l++) : !c && i(/^[\)\]\}]/) ? (d--, l++) : !c && i(/^[\"\']/) ? (c = u[0], l++) : "'" == c && i(/^\\\'/) ? l += 2 : '"' == c && i(/^\\\"/) ? l += 2 : "'" == c && i(/^\'/) ? (c = !1, l++) : '"' == c && i(/^\"/) ? (c = !1, l++) : i(n) ? (!c && !d && l > s && (a.push(o(t.substring(s, l))), s = l + u[0].length), l += u[0].length) : l++; return s < l && a.push(o(t.substring(s, l))), e[r] = a } }(), Ro = function (e) { return function (t) { var n, i = e[t]; return i || ((n = /url\((['"]?)([^'")]*?)\1\)\s+format\((['"]?)truetype\3\)/.exec(t)) ? i = e[t] = n[2] : (n = /url\((['"]?)([^'")]*?\.ttf)\1\)/.exec(t)) && (i = e[t] = n[2])), i } }(Object.create ? Object.create(null) : {}), Fo = function (e) { return function (t) { var n = e[t]; return null == n && (n = e[t] = jt.measureText("Mapq", { font: t }).height), n } }(Object.create ? Object.create(null) : {}), Po = { svg: Ji, canvas: wo, util: rn, PathParser: Un, Surface: gi, BaseNode: mi, SurfaceFactory: pi, OptionsStore: sn, exportImage: Fe, exportSVG: Pe, QuadNode: ro, ShapesQuadTree: co, ObserversMixin: Yt, Element: pn, Circle: kn, Arc: Gn, Path: jn, MultiPath: Bn, Text: Yn, Image: Qn, Group: Jn, Layout: ni, Rect: ii, align: ae, vAlign: se, stack: ce, vStack: ue, wrap: fe, vWrap: ge, fit: me, LinearGradient: si, RadialGradient: li, GradientStop: ri, Gradient: ai, Animation: hi, AnimationFactory: ci, drawDOM: Ve }, kendo.deepExtend(kendo, { drawing: Po, geometry: Xi }), kendo.drawing.Segment = kendo.geometry.Segment, kendo.dataviz.drawing = kendo.drawing, kendo.dataviz.geometry = kendo.geometry, kendo.drawing.util.measureText = kendo.util.measureText, kendo.drawing.util.objectKey = kendo.util.objectKey, kendo.drawing.Color = kendo.Color, kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64 }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.popup.min", ["kendo.core.min"], e) }(function () { return function (e, t) { function n(t, n) { return !(!t || !n) && (t === n || e.contains(t, n)) } var i, o, r, a, s = window.kendo, l = s.ui, d = l.Widget, c = s.Class, u = s.support, h = s.getOffset, p = s._outerWidth, f = s._outerHeight, g = "open", m = "close", v = "deactivate", _ = "activate", b = "center", w = "left", k = "right", y = "top", x = "bottom", C = "absolute", S = "hidden", T = "body", D = "location", A = "position", E = "visible", I = "effects", M = "k-state-active", R = "k-state-border", F = /k-state-border-(\w+)/, P = ".k-picker-wrap, .k-dropdown-wrap, .k-link", z = "down", B = e(document.documentElement), L = e.proxy, H = e(window), N = "scroll", O = u.transitions.css, V = O + "transform", W = e.extend, U = ".kendoPopup", j = ["font-size", "font-family", "font-stretch", "font-style", "font-weight", "line-height"], q = d.extend({ init: function (t, n) { var i, o = this; n = n || {}, n.isRtl && (n.origin = n.origin || x + " " + k, n.position = n.position || y + " " + k), d.fn.init.call(o, t, n), t = o.element, n = o.options, o.collisions = n.collision ? n.collision.split(" ") : [], o.downEvent = s.applyEventMap(z, s.guid()), 1 === o.collisions.length && o.collisions.push(o.collisions[0]), i = e(o.options.anchor).closest(".k-popup,.k-group").filter(":not([class^=km-])"), n.appendTo = e(e(n.appendTo)[0] || i[0] || document.body), o.element.hide().addClass("k-popup k-group k-reset").toggleClass("k-rtl", !!n.isRtl).css({ position: C }).appendTo(n.appendTo).attr("aria-hidden", !0).on("mouseenter" + U, function () { o._hovered = !0 }).on("wheel" + U, function (t) { var n = e(t.target).find(".k-list"), i = n.parent(); n.length && n.is(":visible") && (0 === i.scrollTop() && t.originalEvent.deltaY < 0 || i.scrollTop() === i.prop("scrollHeight") - i.prop("offsetHeight") && t.originalEvent.deltaY > 0) && t.preventDefault() }).on("mouseleave" + U, function () { o._hovered = !1 }), o.wrapper = e(), n.animation === !1 && (n.animation = { open: { effects: {} }, close: { hide: !0, effects: {} } }), W(n.animation.open, { complete: function () { o.wrapper.css({ overflow: E }), o._activated = !0, o._trigger(_) } }), W(n.animation.close, { complete: function () { o._animationClose() } }), o._mousedownProxy = function (e) { o._mousedown(e) }, o._resizeProxy = u.mobileOS.android ? function (e) { setTimeout(function () { o._resize(e) }, 600) } : function (e) { o._resize(e) }, n.toggleTarget && e(n.toggleTarget).on(n.toggleEvent + U, e.proxy(o.toggle, o)) }, events: [g, _, m, v], options: { name: "Popup", toggleEvent: "click", origin: x + " " + w, position: y + " " + w, anchor: T, appendTo: null, collision: "flip fit", viewport: window, copyAnchorStyles: !0, autosize: !1, modal: !1, adjustSize: { width: 0, height: 0 }, animation: { open: { effects: "slideIn:down", transition: !0, duration: 200 }, close: { duration: 100, hide: !0 } } }, _animationClose: function () { var e = this, t = e.wrapper.data(D); e.wrapper.hide(), t && e.wrapper.css(t), e.options.anchor != T && e._hideDirClass(), e._closing = !1, e._trigger(v) }, destroy: function () { var t, n = this, i = n.options, o = n.element.off(U); d.fn.destroy.call(n), i.toggleTarget && e(i.toggleTarget).off(U), i.modal || (B.off(n.downEvent, n._mousedownProxy), n._toggleResize(!1)), s.destroy(n.element.children()), o.removeData(), i.appendTo[0] === document.body && (t = o.parent(".k-animation-container"), t[0] ? t.remove() : o.remove()) }, open: function (n, i) { var o, r, a = this, l = { isFixed: !isNaN(parseInt(i, 10)), x: n, y: i }, d = a.element, c = a.options, h = e(c.anchor), p = d[0] && d.hasClass("km-widget"); if (!a.visible()) { if (c.copyAnchorStyles && (p && "font-size" == j[0] && j.shift(), d.css(s.getComputedStyles(h[0], j))), d.data("animating") || a._trigger(g)) return; a._activated = !1, c.modal || (B.off(a.downEvent, a._mousedownProxy).on(a.downEvent, a._mousedownProxy), a._toggleResize(!1), a._toggleResize(!0)), a.wrapper = r = s.wrap(d, c.autosize).css({ overflow: S, display: "block", position: C }).attr("aria-hidden", !1), u.mobileOS.android && r.css(V, "translatez(0)"), r.css(A), e(c.appendTo)[0] == document.body && r.css(y, "-10000px"), a.flipped = a._position(l), o = a._openAnimation(), c.anchor != T && a._showDirClass(o), d.is(":visible") || d.data("olddisplay") !== t || (d.show(), d.data("olddisplay", d.css("display")), d.hide()), d.data(I, o.effects).kendoStop(!0).kendoAnimate(o).attr("aria-hidden", !1) } }, _location: function (t) { var n, i, o = this, r = o.element, a = o.options, l = e(a.anchor), d = r[0] && r.hasClass("km-widget"); return a.copyAnchorStyles && (d && "font-size" == j[0] && j.shift(), r.css(s.getComputedStyles(l[0], j))), o.wrapper = n = s.wrap(r, a.autosize).css({ overflow: S, display: "block", position: C }), u.mobileOS.android && n.css(V, "translatez(0)"), n.css(A), e(a.appendTo)[0] == document.body && n.css(y, "-10000px"), o._position(t || {}), i = n.offset(), { width: s._outerWidth(n), height: s._outerHeight(n), left: i.left, top: i.top } }, _openAnimation: function () { var e = W(!0, {}, this.options.animation.open); return e.effects = s.parseEffects(e.effects, this.flipped), e }, _hideDirClass: function () { var t = e(this.options.anchor), n = ((t.attr("class") || "").match(F) || ["", "down"])[1], i = R + "-" + n; t.removeClass(i).children(P).removeClass(M).removeClass(i), this.element.removeClass(R + "-" + s.directions[n].reverse) }, _showDirClass: function (t) { var n = t.effects.slideIn ? t.effects.slideIn.direction : "down", i = R + "-" + n; e(this.options.anchor).addClass(i).children(P).addClass(M).addClass(i), this.element.addClass(R + "-" + s.directions[n].reverse) }, position: function () { this.visible() && (this.flipped = this._position()) }, toggle: function () { var e = this; e[e.visible() ? m : g]() }, visible: function () { return this.element.is(":" + E) }, close: function (n) { var i, o, r, a, l = this, d = l.options; if (l.visible()) { if (i = l.wrapper[0] ? l.wrapper : s.wrap(l.element).hide(), l._toggleResize(!1), l._closing || l._trigger(m)) return l._toggleResize(!0), t; l.element.find(".k-popup").each(function () { var t = e(this), i = t.data("kendoPopup"); i && i.close(n) }), B.off(l.downEvent, l._mousedownProxy), n ? o = { hide: !0, effects: {} } : (o = W(!0, {}, d.animation.close), r = l.element.data(I), a = o.effects, !a && !s.size(a) && r && s.size(r) && (o.effects = r, o.reverse = !0), l._closing = !0), l.element.kendoStop(!0).attr("aria-hidden", !0), i.css({ overflow: S }).attr("aria-hidden", !0), l.element.kendoAnimate(o), n && l._animationClose() } }, _trigger: function (e) { return this.trigger(e, { type: e }) }, _resize: function (e) { var t = this; u.resize.indexOf(e.type) !== -1 ? (clearTimeout(t._resizeTimeout), t._resizeTimeout = setTimeout(function () { t._position(), t._resizeTimeout = null }, 50)) : (!t._hovered || t._activated && t.element.hasClass("k-list-container")) && t.close() }, _toggleResize: function (e) { var t = e ? "on" : "off", n = u.resize; u.mobileOS.ios || u.mobileOS.android || u.browser.safari || (n += " " + N), e && !this.scrollableParents && (this.scrollableParents = this._scrollableParents()), this.scrollableParents && this.scrollableParents.length && this.scrollableParents[t](N, this._resizeProxy), H[t](n, this._resizeProxy) }, _mousedown: function (t) { var i = this, o = i.element[0], r = i.options, a = e(r.anchor)[0], l = r.toggleTarget, d = s.eventTarget(t), c = e(d).closest(".k-popup"), u = c.parent().parent(".km-shim").length; c = c[0], !u && c && c !== i.element[0] || "popover" !== e(t.target).closest("a").data("rel") && (n(o, d) || n(a, d) || l && n(e(l)[0], d) || i.close()) }, _fit: function (e, t, n) { var i = 0; return e + t > n && (i = n - (e + t)), e < 0 && (i = -e), i }, _flip: function (e, t, n, i, o, r, a) { var s = 0; return a = a || t, r !== o && r !== b && o !== b && (e + a > i && (s += -(n + t)), e + s < 0 && (s += n + t)), s }, _scrollableParents: function () { return e(this.options.anchor).parentsUntil("body").filter(function (e, t) { return s.isScrollable(t) }) }, _position: function (t) { var n, i, o, r, a, l, d, c, g, m, v, _, b, w, k, y, x, S = this, T = S.element, E = S.wrapper, I = S.options, M = e(I.viewport), R = u.zoomLevel(), F = !!(M[0] == window && window.innerWidth && R <= 1.02), P = e(I.anchor), z = I.origin.toLowerCase().split(" "), B = I.position.toLowerCase().split(" "), L = S.collisions, H = 10002, N = 0, O = document.documentElement; if (a = I.viewport === window ? { top: window.pageYOffset || document.documentElement.scrollTop || 0, left: window.pageXOffset || document.documentElement.scrollLeft || 0 } : M.offset(), F ? (l = window.innerWidth, d = window.innerHeight) : (l = M.width(), d = M.height()), F && O.scrollHeight - O.clientHeight > 0 && (c = I.isRtl ? -1 : 1, l -= c * s.support.scrollbar()), n = P.parents().filter(E.siblings()), n[0]) if (o = Math.max(+n.css("zIndex"), 0)) H = o + 10; else for (i = P.parentsUntil(n), r = i.length; N < r; N++)o = +e(i[N]).css("zIndex"), o && H < o && (H = o + 10); return E.css("zIndex", H), E.css(t && t.isFixed ? { left: t.x, top: t.y } : S._align(z, B)), g = h(E, A, P[0] === E.offsetParent()[0]), m = h(E), v = P.offsetParent().parent(".k-animation-container,.k-popup,.k-group"), v.length && (g = h(E, A, !0), m = h(E)), m.top -= a.top, m.left -= a.left, S.wrapper.data(D) || E.data(D, W({}, g)), _ = W({}, m), b = W({}, g), w = I.adjustSize, "fit" === L[0] && (b.top += S._fit(_.top, f(E) + w.height, d / R)), "fit" === L[1] && (b.left += S._fit(_.left, p(E) + w.width, l / R)), k = W({}, b), y = f(T), x = f(E), !E.height() && y && (x += y), "flip" === L[0] && (b.top += S._flip(_.top, y, f(P), d / R, z[0], B[0], x)), "flip" === L[1] && (b.left += S._flip(_.left, p(T), p(P), l / R, z[1], B[1], p(E))), T.css(A, C), E.css(b), b.left != k.left || b.top != k.top }, _align: function (t, n) { var i, o = this, r = o.wrapper, a = e(o.options.anchor), s = t[0], l = t[1], d = n[0], c = n[1], u = h(a), g = e(o.options.appendTo), m = p(r), v = f(r) || f(r.children().first()), _ = p(a), w = f(a), y = u.top, C = u.left, S = Math.round; return g[0] != document.body && (i = h(g), y -= i.top, C -= i.left), s === x && (y += w), s === b && (y += S(w / 2)), d === x && (y -= v), d === b && (y -= S(v / 2)), l === k && (C += _), l === b && (C += S(_ / 2)), c === k && (C -= m), c === b && (C -= S(m / 2)), { top: y, left: C } } }); l.plugin(q), i = s.support.stableSort, o = "kendoTabKeyTrap", r = "a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]", a = c.extend({ init: function (t) { this.element = e(t), this.element.autoApplyNS(o) }, trap: function () { this.element.on("keydown", L(this._keepInTrap, this)) }, removeTrap: function () { this.element.kendoDestroy(o) }, destroy: function () { this.element.kendoDestroy(o), this.element = t }, shouldTrap: function () { return !0 }, _keepInTrap: function (e) { var t, n, i; 9 === e.which && this.shouldTrap() && !e.isDefaultPrevented() && (t = this._focusableElements(), n = this._sortFocusableElements(t), i = this._nextFocusable(e, n), this._focus(i), e.preventDefault()) }, _focusableElements: function () { var t = this.element.find(r).filter(function (t, n) { return n.tabIndex >= 0 && e(n).is(":visible") && !e(n).is("[disabled]") }); return this.element.is("[tabindex]") && t.push(this.element[0]), t }, _sortFocusableElements: function (e) { var t, n; return i ? t = e.sort(function (e, t) { return e.tabIndex - t.tabIndex }) : (n = "__k_index", e.each(function (e, t) { t.setAttribute(n, e) }), t = e.sort(function (e, t) { return e.tabIndex === t.tabIndex ? parseInt(e.getAttribute(n), 10) - parseInt(t.getAttribute(n), 10) : e.tabIndex - t.tabIndex }), e.removeAttr(n)), t }, _nextFocusable: function (e, t) { var n = t.length, i = t.index(e.target); return t.get((i + (e.shiftKey ? -1 : 1)) % n) }, _focus: function (e) { return "IFRAME" == e.nodeName ? (e.contentWindow.document.body.focus(), t) : (e.focus(), "INPUT" == e.nodeName && e.setSelectionRange && this._haveSelectionRange(e) && e.setSelectionRange(0, e.value.length), t) }, _haveSelectionRange: function (e) { var t = e.type.toLowerCase(); return "text" === t || "search" === t || "url" === t || "tel" === t || "password" === t } }), l.Popup.TabKeyTrap = a }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("drawing/surface-tooltip.min", ["kendo.popup.min", "drawing/kendo-drawing.min"], e) }(function () { !function (e) { var t = ".kendo", n = window.kendo, i = n.deepExtend, o = n.drawing.util, r = o.defined, a = o.limitValue, s = o.eventCoordinates, l = n._outerWidth, d = n._outerHeight, c = e.proxy, u = '
    ', h = '', p = n.Class.extend({ init: function (t, n) { this.element = e(u), this.content = this.element.children(".k-tooltip-content"), n = n || {}, this.options = i({}, this.options, this._tooltipOptions(n)), this.popupOptions = { appendTo: n.appendTo, animation: n.animation, copyAnchorStyles: !1, collision: "fit fit" }, this._openPopupHandler = e.proxy(this._openPopup, this), this.surface = t, this._bindEvents() }, options: { position: "top", showOn: "mouseenter", offset: 7, autoHide: !0, hideDelay: 0, showAfter: 100 }, _bindEvents: function () { this._showHandler = c(this._showEvent, this), this._surfaceLeaveHandler = c(this._surfaceLeave, this), this._mouseleaveHandler = c(this._mouseleave, this), this._mousemoveHandler = c(this._mousemove, this), this.surface.bind("click", this._showHandler), this.surface.bind("mouseenter", this._showHandler), this.surface.bind("mouseleave", this._mouseleaveHandler), this.surface.bind("mousemove", this._mousemoveHandler), this.surface.element.on("mouseleave" + t, this._surfaceLeaveHandler), this.element.on("click" + t, ".k-tooltip-button", c(this._hideClick, this)), this.element.on("mouseleave" + t, c(this._tooltipLeave, this)) }, getPopup: function () { return this.popup || (this.popup = new n.ui.Popup(this.element, this.popupOptions)), this.popup }, destroy: function () { var e = this.popup; this.surface.unbind("click", this._showHandler), this.surface.unbind("mouseenter", this._showHandler), this.surface.unbind("mouseleave", this._mouseleaveHandler), this.surface.unbind("mousemove", this._mousemoveHandler), this.surface.element.off("mouseleave" + t, this._surfaceLeaveHandler), this.element.off("click" + t), this.element.off("mouseleave" + t), e && (e.destroy(), delete this.popup), delete this.popupOptions, clearTimeout(this._timeout), delete this.element, delete this.content, delete this.surface }, _tooltipOptions: function (e) { return e = e || {}, { position: e.position, showOn: e.showOn, offset: e.offset, autoHide: e.autoHide, width: e.width, height: e.height, content: e.content, shared: e.shared, hideDelay: e.hideDelay, showAfter: e.showAfter } }, _tooltipShape: function (e) { for (; e && !e.options.tooltip;)e = e.parent; return e }, _updateContent: function (e, t, i) { var o = i.content; if (n.isFunction(o) && (o = o({ element: t, target: e })), o) return this.content.html(o), !0 }, _position: function (e, t, n, i) { var o, r = t.position, l = t.offset || 0, d = this.surface, c = d._instance._elementOffset(), u = d.getSize(), h = d._instance._offset, p = e.bbox(), f = n.width, g = n.height, m = 0, v = 0; return p.origin.translate(c.left, c.top), h && p.origin.translate(-h.x, -h.y), "cursor" == r && i ? (o = s(i), m = o.x - f / 2, v = o.y - g - l) : "left" == r ? (m = p.origin.x - f - l, v = p.center().y - g / 2) : "right" == r ? (m = p.bottomRight().x + l, v = p.center().y - g / 2) : "bottom" == r ? (m = p.center().x - f / 2, v = p.bottomRight().y + l) : (m = p.center().x - f / 2, v = p.origin.y - g - l), { left: a(m, c.left, c.left + u.width), top: a(v, c.top, c.top + u.height) } }, show: function (e, t) { this._show(e, e, i({}, this.options, this._tooltipOptions(e.options.tooltip), t)) }, hide: function () { var e = this.popup, t = this._current; delete this._current, clearTimeout(this._showTimeout), e && e.visible() && t && !this.surface.trigger("tooltipClose", { element: t.shape, target: t.target, popup: e }) && e.close() }, _hideClick: function (e) { e.preventDefault(), this.hide() }, _show: function (e, t, n, i, o) { var r, a, s = this._current; clearTimeout(this._timeout), s && (s.shape === t && n.shared || s.target === e) || (clearTimeout(this._showTimeout), r = this.getPopup(), !this.surface.trigger("tooltipOpen", { element: t, target: e, popup: r }) && this._updateContent(e, t, n) && (this._autoHide(n), a = this._measure(n), r.visible() && r.close(!0), this._current = { options: n, elementSize: a, shape: t, target: e, position: this._position(n.shared ? t : e, n, a, i) }, o ? this._showTimeout = setTimeout(this._openPopupHandler, n.showAfter || 0) : this._openPopup())) }, _openPopup: function () { var e = this._current, t = e.position; this.getPopup().open(t.left, t.top) }, _autoHide: function (t) { t.autoHide && this._closeButton && (this.element.removeClass("k-tooltip-closable"), this._closeButton.remove(), delete this._closeButton), t.autoHide || this._closeButton || (this.element.addClass("k-tooltip-closable"), this._closeButton = e(h).appendTo(this.element)) }, _showEvent: function (e) { var t, n = this._tooltipShape(e.element); n && (t = i({}, this.options, this._tooltipOptions(n.options.tooltip)), t && t.showOn == e.type && this._show(e.element, n, t, e.originalEvent, !0)) }, _measure: function (e) { var t, n, i, o = this.getPopup(); return this.element.css({ width: "auto", height: "auto" }), i = o.visible(), i || o.wrapper.show(), this.element.css({ width: r(e.width) ? e.width : "auto", height: r(e.height) ? e.height : "auto" }), t = l(this.element), n = d(this.element), i || o.wrapper.hide(), { width: t, height: n } }, _mouseleave: function (e) { var t, n; this.popup && !this._popupRelatedTarget(e.originalEvent) && (t = this, n = t._current, n && n.options.autoHide && (t._timeout = setTimeout(function () { clearTimeout(t._showTimeout), t.hide() }, n.options.hideDelay || 0))) }, _mousemove: function (e) { var t, n, i = this._current; i && e.element && (t = i.options, "cursor" == t.position && (n = this._position(e.element, t, i.elementSize, e.originalEvent), i.position = n, this.getPopup().wrapper.css({ left: n.left, top: n.top }))) }, _surfaceLeave: function (e) { this.popup && !this._popupRelatedTarget(e) && (clearTimeout(this._showTimeout), this.hide()) }, _popupRelatedTarget: function (t) { return t.relatedTarget && e(t.relatedTarget).closest(this.popup.wrapper).length }, _tooltipLeave: function () { var e = this, t = e._current; t && t.options.autoHide && (e._timeout = setTimeout(function () { e.hide() }, t.options.hideDelay || 0)) } }); n.drawing.SurfaceTooltip = p }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("drawing/surface.min", ["drawing/kendo-drawing.min", "drawing/surface-tooltip.min"], e) }(function () { !function (e) { function t(e) { this._instance.translate(e) } var n, i = window.kendo, o = i.drawing, r = o.Surface, a = i.ui.Widget, s = i.deepExtend, l = e.proxy; i.support.svg = r.support.svg, i.support.canvas = r.support.canvas, n = a.extend({ init: function (e, n) { a.fn.init.call(this, e, {}), this.options = s({}, this.options, n), this._instance = r.create(this.element[0], n), this._instance.translate && (this.translate = t), this._triggerInstanceHandler = l(this._triggerInstanceEvent, this), this._bindHandler("click"), this._bindHandler("mouseenter"), this._bindHandler("mouseleave"), this._bindHandler("mousemove"), this._enableTracking() }, options: { name: "Surface", tooltip: {} }, events: ["click", "mouseenter", "mouseleave", "mousemove", "resize", "tooltipOpen", "tooltipClose"], _triggerInstanceEvent: function (e) { this.trigger(e.type, e) }, _bindHandler: function (e) { this._instance.bind(e, this._triggerInstanceHandler) }, draw: function (e) { this._instance.draw(e) }, clear: function () { this._instance && this._instance.clear(), this.hideTooltip() }, destroy: function () { this._instance && (this._instance.destroy(), delete this._instance), this._tooltip && (this._tooltip.destroy(), delete this._tooltip), a.fn.destroy.call(this) }, exportVisual: function () { return this._instance.exportVisual() }, eventTarget: function (e) { return this._instance.eventTarget(e) }, showTooltip: function (e, t) { this._tooltip && this._tooltip.show(e, t) }, hideTooltip: function () { this._tooltip && this._tooltip.hide() }, suspendTracking: function () { this._instance.suspendTracking(), this.hideTooltip() }, resumeTracking: function () { this._instance.resumeTracking() }, getSize: function () { return { width: this.element.width(), height: this.element.height() } }, setSize: function (e) { this.element.css({ width: e.width, height: e.height }), this._size = e, this._instance.currentSize(e), this._resize() }, _resize: function () { this._instance.currentSize(this._size), this._instance._resize() }, _enableTracking: function () { i.ui.Popup && (this._tooltip = new o.SurfaceTooltip(this, this.options.tooltip || {})) } }), i.ui.plugin(n), n.create = function (e, t) { return new n(e, t) }, i.drawing.Surface = n }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("drawing/html.min", ["drawing/kendo-drawing.min"], e) }(function () { !function (e) { var t = window.kendo, n = t.drawing, i = n.drawDOM; n.drawDOM = function (t, n) { return i(e(t)[0], n) }, n.drawDOM.drawText = i.drawText, n.drawDOM.getFontFaces = i.getFontFaces }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.drawing.min", ["drawing/util.min", "drawing/kendo-drawing.min", "drawing/surface-tooltip.min", "drawing/surface.min", "drawing/html.min"], e) }(function () { }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.validator.min", ["kendo.core.min"], e) }(function () { return function (e, t) { function n(t) { var n, i = d.ui.validator.ruleResolvers || {}, o = {}; for (n in i) e.extend(!0, o, i[n].resolve(t)); return o } function i(e) { return e.replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">") } function o(e) { return e = (e + "").split("."), e.length > 1 ? e[1].length : 0 } function r(t) { return e(e.parseHTML ? e.parseHTML(t) : t) } function a(t, n) { var i, o, r, a, s = e(); for (r = 0, a = t.length; r < a; r++)i = t[r], p.test(i.className) && (o = i.getAttribute(d.attr("for")), o === n && (s = s.add(i))); return s } var s, l, d = window.kendo, c = d.ui.Widget, u = ".kendoValidator", h = "k-invalid-msg", p = RegExp(h, "i"), f = "k-invalid", g = "k-valid", m = "k-validation-summary", v = "k-text-error", _ = "k-messagebox k-messagebox-error", b = "aria-invalid", w = "aria-describedby", k = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, y = /^(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, x = ":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])", C = ":checkbox:not([disabled],[readonly])", S = "[type=number],[type=range]", T = "blur", D = "name", A = "form", E = "novalidate", I = "validate", M = "change", R = "validateInput", F = e.proxy, P = function (e, t) { return "string" == typeof t && (t = RegExp("^(?:" + t + ")$")), t.test(e) }, z = function (e, t, n) { var i = e.val(); return !e.filter(t).length || "" === i || P(i, n) }, B = function (e, t) { return !!e.length && null != e[0].attributes[t] }; d.ui.validator || (d.ui.validator = { rules: {}, messages: {}, allowSubmit: e.noop, validateOnInit: e.noop }), s = '', l = c.extend({ init: function (t, i) { var o = this, r = n(t), a = "[" + d.attr("validate") + "!=false]"; i = i || {}, i.rules = e.extend({}, d.ui.validator.rules, r.rules, i.rules), i.messages = e.extend({}, d.ui.validator.messages, r.messages, i.messages), c.fn.init.call(o, t, i), o._errorTemplate = d.template(o.options.errorTemplate), o._summaryTemplate = d.template(o.options.validationSummary.template || s), o.element.is(A) && o.element.attr(E, E), o._inputSelector = x + a, o._checkboxSelector = C + a, o._errors = {}, o._attachEvents(), o._isValidated = !1, o._validateOnInit() && o.validate() }, events: [I, M, R], options: { name: "Validator", errorTemplate: '#= message #', messages: { required: "{0} is required", pattern: "{0} is not valid", min: "{0} should be greater than or equal to {1}", max: "{0} should be smaller than or equal to {1}", step: "{0} is not valid", email: "{0} is not valid email", url: "{0} is not valid URL", date: "{0} is not valid date", dateCompare: "End date should be greater than or equal to the start date" }, rules: { required: function (e) { var t = e.filter("[type=checkbox]").length && !e.is(":checked"), n = e.val(); return !(B(e, "required") && (!n || "" === n || 0 === n.length || t)) }, pattern: function (e) { return !e.filter("[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]").filter("[pattern]").length || "" === e.val() || P(e.val(), e.attr("pattern")) }, min: function (e) { if (e.filter(S + ",[" + d.attr("type") + "=number]").filter("[min]").length && "" !== e.val()) { var t = parseFloat(e.attr("min")) || 0, n = d.parseFloat(e.val()); return t <= n } return !0 }, max: function (e) { if (e.filter(S + ",[" + d.attr("type") + "=number]").filter("[max]").length && "" !== e.val()) { var t = parseFloat(e.attr("max")) || 0, n = d.parseFloat(e.val()); return t >= n } return !0 }, step: function (e) { if (e.filter(S + ",[" + d.attr("type") + "=number]").filter("[step]").length && "" !== e.val()) { var t, n = parseFloat(e.attr("min")) || 0, i = parseFloat(e.attr("step")) || 1, r = parseFloat(e.val()), a = o(i); return a ? (t = Math.pow(10, a), Math.floor((r - n) * t) % (i * t) / Math.pow(100, a) === 0) : (r - n) % i === 0 } return !0 }, email: function (e) { return z(e, "[type=email],[" + d.attr("type") + "=email]", k) }, url: function (e) { return z(e, "[type=url],[" + d.attr("type") + "=url]", y) }, date: function (e) { return !e.filter("[type^=date],[" + d.attr("type") + "=date]").length || "" === e.val() || null !== d.parseDate(e.val(), e.attr(d.attr("format"))) } }, validateOnBlur: !0, validationSummary: !1 }, _allowSubmit: function () { return d.ui.validator.allowSubmit(this.element, this.errors()) }, _validateOnInit: function () { return d.ui.validator.validateOnInit(this.element) }, destroy: function () { c.fn.destroy.call(this), this.element.off(u), this.validationSummary && (this.validationSummary.off(u), this.validationSummary = null) }, value: function () { return !!this._isValidated && 0 === this.errors().length }, _submit: function (e) { return !(!this.validate() && !this._allowSubmit()) || (e.stopPropagation(), e.stopImmediatePropagation(), e.preventDefault(), !1) }, _checkElement: function (e) { var t = this.value(); this.validateInput(e), this.value() !== t && this.trigger(M) }, _attachEvents: function () { var t = this; t.element.is(A) && t.element.on("submit" + u, F(t._submit, t)), t.options.validateOnBlur && (t.element.is(x) ? (t.element.on(T + u, function () { t._checkElement(t.element) }), t.element.is(C) && t.element.on("click" + u, function () { t._checkElement(t.element) })) : (t.element.on(T + u, t._inputSelector, function () { t._checkElement(e(this)) }), t.element.on("click" + u, t._checkboxSelector, function () { t._checkElement(e(this)) }))) }, validate: function () { var e, t, n, i, o = !1, r = this.value(); if (this._errors = {}, this.element.is(x)) o = this.validateInput(this.element); else { for (i = !1, e = this.element.find(this._inputSelector), t = 0, n = e.length; t < n; t++)this.validateInput(e.eq(t)) || (i = !0); o = !i } return this.options.validationSummary && !r && this.showValidationSummary(), this.trigger(I, { valid: o, errors: this.errors() }), r !== o && this.trigger(M), o }, validateInput: function (t) { var n, o, a, s, l, c, u, p, m, _, w, k, y, x, C, S, T; return t = e(t), this._isValidated = !0, n = this, o = n._errorTemplate, a = n._checkValidity(t), s = a.valid, l = "." + h, c = t.attr(D) || "", u = n._findMessageContainer(c).add(t.next(l).filter(function () { var t = e(this); return !t.filter("[" + d.attr("for") + "]").length || t.attr(d.attr("for")) === c })).addClass("k-hidden"), p = s ? "" : n._extractMessage(t, a.key), m = s ? "" : r(o({ message: i(p), field: c })), _ = !t.attr(b), t.removeAttr(b), s ? delete n._errors[c] : (n._errors[c] = p, w = u.attr("id"), n._decorateMessageContainer(m, c), w && m.attr("id", w), 0 !== u.length ? u.replaceWith(m) : (k = d.widgetInstance(t), y = t.parent().get(0), x = t.next().get(0), m.insertAfter(y && "LABEL" === y.nodeName ? y : x && "LABEL" === x.nodeName ? x : k && k.wrapper ? k.wrapper : t)), m.removeClass("k-hidden"), t.attr(b, !0)), _ !== s && this.trigger(R, { valid: s, input: t, error: p, field: c }), t.toggleClass(f, !s), t.toggleClass(g, s), d.widgetInstance(t) && (C = d.widgetInstance(t)._inputWrapper, S = d.widgetInstance(t)._inputLabel, C && (C.toggleClass(f, !s), C.toggleClass(g, s)), S && S.toggleClass(v, !s)), _ !== s && (T = m ? m.attr("id") : u.attr("id"), n._associateMessageContainer(t, T), this.options.validationSummary && this.options.validateOnBlur && this.showValidationSummary()), s }, hideMessages: function () { var e = this, t = "." + h, n = e.element; e._disassociateMessageContainers(), n.is(x) ? n.next(t).addClass("k-hidden") : n.find(t).addClass("k-hidden") }, reset: function () { var e = this, t = e.element.find("." + f); e._errors = [], e.hideMessages(), e.hideValidationSummary(), t.removeAttr(b), t.removeClass(f) }, _findMessageContainer: function (t) { var n, i, o, r = d.ui.validator.messageLocators, s = e(); for (i = 0, o = this.element.length; i < o; i++)s = s.add(a(this.element[i].getElementsByTagName("*"), t)); for (n in r) s = s.add(r[n].locate(this.element, t)); return s }, _decorateMessageContainer: function (e, t) { var n, i = d.ui.validator.messageLocators; e.addClass(h).attr(d.attr("for"), t || ""), e.attr("id") || e.attr("id", t + "-error"); for (n in i) i[n].decorate(e, t) }, _extractMessage: function (e, t) { var n, i = this, o = i.options.messages[t], r = e.attr(D); return d.ui.Validator.prototype.options.messages[t] || (n = d.isFunction(o) ? o(e) : o), o = d.isFunction(o) ? o(e) : o, d.format(e.attr(d.attr(t + "-msg")) || e.attr("validationMessage") || n || o || e.attr("title") || "", r, e.attr(t) || e.attr(d.attr(t))) }, _checkValidity: function (e) { var t, n = this.options.rules; for (t in n) if (!n[t].call(this, e)) return { valid: !1, key: t }; return { valid: !0 } }, errors: function () { var e, t = [], n = this._errors; for (e in n) t.push(n[e]); return t }, setOptions: function (e) { e.validationSummary && this.hideValidationSummary(), d.deepExtend(this.options, e), this.destroy(), this.init(this.element, this.options), this._setEvents(this.options) }, _getInputNames: function () { var t, n, i, o = this, r = o.element.find(o._inputSelector), a = []; for (t = 0, n = r.length; t < n; t++)i = e(r[t]), B(i, D) && a.push(i.attr(D)); return a }, _associateMessageContainer: function (e, t) { var n = d.getWidgetFocusableElement(e); n && t && d.toggleAttribute(n, w, t) }, _disassociateMessageContainers: function () { var t, n, i, o = this, r = o.element.find("." + f).addBack(); for (i = 0; i < r.length; i += 1)t = e(r[i]), t.is("input") && (n = o._findMessageContainer(t.attr(D)).add(t.next("." + h)).attr("id"), o._associateMessageContainer(t, n)) }, _errorsByName: function () { var e, t, n = this, i = n._getInputNames(), o = []; for (e = 0; e < i.length; e += 1)t = i[e], n._errors[t] && o.push({ field: t, message: n._errors[t] }); return o }, _renderSummary: function () { var t, n = this, i = this.options.validationSummary, o = this.element, r = o.prev(); return t = i.container ? e(i.container) : r && r.hasClass(m) ? r : e("
    ").insertBefore(n.element), t.addClass([m, _].join(" ")), t.attr("role", "alert"), t.on("click" + u, F(n._summaryClick, n)), t }, _summaryClick: function (t) { t.preventDefault(); var n, i = this, o = e(t.target), r = i.element.find("[name='" + o.data("field") + "']"); r.length && (n = d.getWidgetFocusableElement(r), n && n.focus()) }, showValidationSummary: function () { var e, t = this, n = t.validationSummary, i = t._errorsByName(); n || (n = t.validationSummary = t._renderSummary()), e = r(t._summaryTemplate({ errors: i })), n.html(e), n.toggleClass("k-hidden", !i.length) }, hideValidationSummary: function () { var e = this, t = e.validationSummary; t && t.addClass("k-hidden") } }), d.ui.plugin(l) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.userevents.min", ["kendo.core.min"], e) }(function () { return function (e, t) { function n(e, t) { var n = e.x.location, i = e.y.location, o = t.x.location, r = t.y.location, a = n - o, s = i - r; return { center: { x: (n + o) / 2, y: (i + r) / 2 }, distance: Math.sqrt(a * a + s * s) } } function i(e) { var t, n, i, o = [], r = e.originalEvent, s = e.currentTarget, l = 0; if (e.api) o.push({ id: 2, event: e, target: e.target, currentTarget: e.target, location: e, type: "api" }); else if (e.type.match(/touch/)) for (n = r ? r.changedTouches : [], t = n.length; l < t; l++)i = n[l], o.push({ location: i, event: e, target: i.target, currentTarget: s, id: i.identifier, type: "touch" }); else o.push(a.pointers || a.msPointers ? { location: r, event: e, target: e.target, currentTarget: s, id: r.pointerId, type: "pointer" } : { id: 1, event: e, target: e.target, currentTarget: s, location: e, type: "mouse" }); return o } function o(e) { for (var t = r.eventMap.up.split(" "), n = 0, i = t.length; n < i; n++)e(t[n]) } var r = window.kendo, a = r.support, s = r.Class, l = r.Observable, d = e.now, c = e.extend, u = a.mobileOS, h = u && u.android, p = 800, f = 300, g = a.browser.msie ? 5 : 0, m = "press", v = "hold", _ = "select", b = "start", w = "move", k = "end", y = "cancel", x = "tap", C = "doubleTap", S = "release", T = "gesturestart", D = "gesturechange", A = "gestureend", E = "gesturetap", I = { api: 0, touch: 0, mouse: 9, pointer: 9 }, M = !a.touch || a.mouseAndTouchPresent, R = s.extend({ init: function (e, t) { var n = this; n.axis = e, n._updateLocationData(t), n.startLocation = n.location, n.velocity = n.delta = 0, n.timeStamp = d() }, move: function (e) { var t = this, n = e["page" + t.axis], i = d(), o = i - t.timeStamp || 1; !n && h || (t.delta = n - t.location, t._updateLocationData(e), t.initialDelta = n - t.startLocation, t.velocity = t.delta / o, t.timeStamp = i) }, _updateLocationData: function (e) { var t = this, n = t.axis; t.location = e["page" + n], t.client = e["client" + n], t.screen = e["screen" + n] } }), F = s.extend({ init: function (e, t, n) { c(this, { x: new R("X", n.location), y: new R("Y", n.location), type: n.type, useClickAsTap: e.useClickAsTap, threshold: e.threshold || I[n.type], userEvents: e, target: t, currentTarget: n.currentTarget, initialTouch: n.target, id: n.id, pressEvent: n, _clicks: e._clicks, supportDoubleTap: e.supportDoubleTap, _moved: !1, _finished: !1 }) }, press: function () { this._holdTimeout = setTimeout(e.proxy(this, "_hold"), this.userEvents.minHold), this._trigger(m, this.pressEvent) }, _tap: function (e) { var t = this; t.userEvents._clicks++, 1 == t.userEvents._clicks && (t._clickTimeout = setTimeout(function () { 1 == t.userEvents._clicks ? t._trigger(x, e) : t._trigger(C, e), t.userEvents._clicks = 0 }, f)) }, _hold: function () { this._trigger(v, this.pressEvent) }, move: function (e) { var t = this, n = "api" !== e.type && t.userEvents._shouldNotMove; if (!t._finished && !n) { if (t.x.move(e.location), t.y.move(e.location), !t._moved) { if (t._withinIgnoreThreshold()) return; if (P.current && P.current !== t.userEvents) return t.dispose(); t._start(e) } t._finished || t._trigger(w, e) } }, end: function (e) { this.endTime = d(), this._finished || (this._finished = !0, this._trigger(S, e), this._moved ? this._trigger(k, e) : this.useClickAsTap || (this.supportDoubleTap ? this._tap(e) : this._trigger(x, e)), clearTimeout(this._holdTimeout), this.dispose()) }, dispose: function () { var t = this.userEvents, n = t.touches; this._finished = !0, this.pressEvent = null, clearTimeout(this._holdTimeout), n.splice(e.inArray(this, n), 1) }, skip: function () { this.dispose() }, cancel: function () { this.dispose() }, isMoved: function () { return this._moved }, _start: function (e) { clearTimeout(this._holdTimeout), this.startTime = d(), this._moved = !0, this._trigger(b, e) }, _trigger: function (e, t) { var n = this, i = t.event, o = { touch: n, x: n.x, y: n.y, target: n.target, event: i }; n.userEvents.notify(e, o) && i.preventDefault() }, _withinIgnoreThreshold: function () { var e = this.x.initialDelta, t = this.y.initialDelta; return Math.sqrt(e * e + t * t) <= this.threshold } }), P = l.extend({ init: function (t, n) { var i, s, d, u, h = this, f = r.guid(); n = n || {}, i = h.filter = n.filter, h.threshold = n.threshold || g, h.minHold = n.minHold || p, h.touches = [], h._maxTouches = n.multiTouch ? 2 : 1, h.allowSelection = n.allowSelection, h.captureUpIfMoved = n.captureUpIfMoved, h.useClickAsTap = !n.fastTap && !a.delayedClick(), h.eventNS = f, h._clicks = 0, h.supportDoubleTap = n.supportDoubleTap, t = e(t).handler(h), l.fn.init.call(h), c(h, { element: t, surface: e(n.global && M ? t[0].ownerDocument.documentElement : n.surface || t), stopPropagation: n.stopPropagation, pressed: !1 }), h.surface.handler(h).on(r.applyEventMap("move", f), "_move").on(r.applyEventMap("up cancel", f), "_end"), t.on(r.applyEventMap("down", f), i, "_start"), h.useClickAsTap && t.on(r.applyEventMap("click", f), i, "_click"), (a.pointers || a.msPointers) && (a.browser.version < 11 ? (s = "pinch-zoom double-tap-zoom", t.css("-ms-touch-action", n.touchAction && "none" != n.touchAction ? s + " " + n.touchAction : s)) : t.css("touch-action", n.touchAction || "none")), n.preventDragEvent && t.on(r.applyEventMap("dragstart", f), r.preventDefault), t.on(r.applyEventMap("mousedown", f), i, { root: t }, "_select"), h.captureUpIfMoved && a.eventCapture && (d = h.surface[0], u = e.proxy(h.preventIfMoving, h), o(function (e) { d.addEventListener(e, u, !0) })), h.bind([m, v, x, C, b, w, k, S, y, T, D, A, E, _], n) }, preventIfMoving: function (e) { this._isMoved() && e.preventDefault() }, destroy: function () { var e, t = this; t._destroyed || (t._destroyed = !0, t.captureUpIfMoved && a.eventCapture && (e = t.surface[0], o(function (n) { e.removeEventListener(n, t.preventIfMoving) })), t.element.kendoDestroy(t.eventNS), t.surface.kendoDestroy(t.eventNS), t.element.removeData("handler"), t.surface.removeData("handler"), t._disposeAll(), t.unbind(), delete t.surface, delete t.element, delete t.currentTarget) }, capture: function () { P.current = this }, cancel: function () { this._disposeAll(), this.trigger(y) }, notify: function (e, t) { var i = this, o = i.touches; if (this._isMultiTouch()) { switch (e) { case w: e = D; break; case k: e = A; break; case x: e = E }c(t, { touches: o }, n(o[0], o[1])) } return this.trigger(e, c(t, { type: e })) }, press: function (e, t, n) { this._apiCall("_start", e, t, n) }, move: function (e, t) { this._apiCall("_move", e, t) }, end: function (e, t) { this._apiCall("_end", e, t) }, _isMultiTouch: function () { return this.touches.length > 1 }, _maxTouchesReached: function () { return this.touches.length >= this._maxTouches }, _disposeAll: function () { for (var e = this.touches; e.length > 0;)e.pop().dispose() }, _isMoved: function () { return e.grep(this.touches, function (e) { return e.isMoved() }).length }, _select: function (e) { this.allowSelection && !this.trigger(_, { event: e }) || e.preventDefault() }, _start: function (t) { var n, o, r = this, a = 0, s = r.filter, l = i(t), d = l.length, c = t.which; if (!(c && c > 1 || r._maxTouchesReached())) for (P.current = null, r.currentTarget = t.currentTarget, r.stopPropagation && t.stopPropagation(); a < d && !r._maxTouchesReached(); a++)o = l[a], n = s ? e(o.currentTarget) : r.element, n.length && (o = new F(r, n, o), r.touches.push(o), o.press(), r._isMultiTouch() && r.notify("gesturestart", {})) }, _move: function (e) { this._eachTouch("move", e) }, _end: function (e) { this._eachTouch("end", e) }, _click: function (t) { var n = { touch: { initialTouch: t.target, target: e(t.currentTarget), endTime: d(), x: { location: t.pageX, client: t.clientX }, y: { location: t.pageY, client: t.clientY } }, x: t.pageX, y: t.pageY, target: e(t.currentTarget), event: t, type: "tap" }; this.trigger("tap", n) && t.preventDefault() }, _eachTouch: function (e, t) { var n, o, r, a, s = this, l = {}, d = i(t), c = s.touches; for (n = 0; n < c.length; n++)o = c[n], l[o.id] = o; for (n = 0; n < d.length; n++)r = d[n], a = l[r.id], a && a[e](r) }, _apiCall: function (t, n, i, o) { this[t]({ api: !0, pageX: n, pageY: i, clientX: n, clientY: i, target: e(o || this.element)[0], stopPropagation: e.noop, preventDefault: e.noop }) } }); P.defaultThreshold = function (e) { g = e }, P.minHold = function (e) { p = e }, r.getTouches = i, r.touchDelta = n, r.UserEvents = P }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.draganddrop.min", ["kendo.core.min", "kendo.userevents.min"], e) }(function () { return function (e, t) { function n(t, n) { try { return e.contains(t, n) || t == n } catch (i) { return !1 } } function i(e, t) { return parseInt(e.css(t), 10) || 0 } function o(e, t) { return Math.min(Math.max(e, t.min), t.max) } function r(e, t) { var n = A(e), o = _._outerWidth, r = _._outerHeight, a = n.left + i(e, "borderLeftWidth") + i(e, "paddingLeft"), s = n.top + i(e, "borderTopWidth") + i(e, "paddingTop"), l = a + e.width() - o(t, !0), d = s + e.height() - r(t, !0); return { x: { min: a, max: l }, y: { min: s, max: d } } } function a(n, i, o) { for (var r, a, s = 0, l = i && i.length, d = o && o.length; n && n.parentNode;) { for (s = 0; s < l; s++)if (r = i[s], r.element[0] === n) return { target: r, targetElement: n }; for (s = 0; s < d; s++)if (a = o[s], e.contains(a.element[0], n) && b.matchesSelector.call(n, a.options.filter)) return { target: a, targetElement: n }; n = n.parentNode } return t } function s(e, t) { var n, i = t.options.group, o = e[i]; if (x.fn.destroy.call(t), o.length > 1) { for (n = 0; n < o.length; n++)if (o[n] == t) { o.splice(n, 1); break } } else o.length = 0, delete e[i] } function l(e) { var t, n, i, o = d()[0]; return e[0] === o ? (n = o.scrollTop, i = o.scrollLeft, { top: n, left: i, bottom: n + k.height(), right: i + k.width() }) : (t = e.offset(), t.bottom = t.top + e.height(), t.right = t.left + e.width(), t) } function d() { return e(_.support.browser.edge || _.support.browser.safari ? w.body : w.documentElement) } function c(t) { var n, i = d(); if (!t || t === w.body || t === w.documentElement) return i; for (n = e(t)[0]; n && !_.isScrollable(n) && n !== w.body;)n = n.parentNode; return n === w.body ? i : e(n) } function u(e, t, n) { var i = { x: 0, y: 0 }, o = 50; return e - n.left < o ? i.x = -(o - (e - n.left)) : n.right - e < o && (i.x = o - (n.right - e)), t - n.top < o ? i.y = -(o - (t - n.top)) : n.bottom - t < o && (i.y = o - (n.bottom - t)), i } var h, p, f, g, m, v, _ = window.kendo, b = _.support, w = window.document, k = e(window), y = _.Class, x = _.ui.Widget, C = _.Observable, S = _.UserEvents, T = e.proxy, D = e.extend, A = _.getOffset, E = {}, I = {}, M = {}, R = _.elementUnderCursor, F = "keyup", P = "change", z = "dragstart", B = "hold", L = "drag", H = "dragend", N = "dragcancel", O = "hintDestroyed", V = "dragenter", W = "dragleave", U = "drop", j = C.extend({ init: function (t, n) { var i = this, o = t[0]; i.capture = !1, o.addEventListener ? (e.each(_.eventMap.down.split(" "), function () { o.addEventListener(this, T(i._press, i), !0) }), e.each(_.eventMap.up.split(" "), function () { o.addEventListener(this, T(i._release, i), !0) })) : (e.each(_.eventMap.down.split(" "), function () { o.attachEvent(this, T(i._press, i)) }), e.each(_.eventMap.up.split(" "), function () { o.attachEvent(this, T(i._release, i)) })), C.fn.init.call(i), i.bind(["press", "release"], n || {}) }, captureNext: function () { this.capture = !0 }, cancelCapture: function () { this.capture = !1 }, _press: function (e) { var t = this; t.trigger("press"), t.capture && e.preventDefault() }, _release: function (e) { var t = this; t.trigger("release"), t.capture && (e.preventDefault(), t.cancelCapture()) } }), q = C.extend({ init: function (t) { var n = this; C.fn.init.call(n), n.forcedEnabled = !1, e.extend(n, t), n.scale = 1, n.horizontal ? (n.measure = "offsetWidth", n.scrollSize = "scrollWidth", n.axis = "x") : (n.measure = "offsetHeight", n.scrollSize = "scrollHeight", n.axis = "y") }, makeVirtual: function () { e.extend(this, { virtual: !0, forcedEnabled: !0, _virtualMin: 0, _virtualMax: 0 }) }, virtualSize: function (e, t) { this._virtualMin === e && this._virtualMax === t || (this._virtualMin = e, this._virtualMax = t, this.update()) }, outOfBounds: function (e) { return e > this.max || e < this.min }, forceEnabled: function () { this.forcedEnabled = !0 }, getSize: function () { return this.container[0][this.measure] }, getTotal: function () { return this.element[0][this.scrollSize] }, rescale: function (e) { this.scale = e }, update: function (e) { var t = this, n = t.virtual ? t._virtualMax : t.getTotal(), i = n * t.scale, o = t.getSize(); (0 !== n || t.forcedEnabled) && (t.max = t.virtual ? -t._virtualMin : 0, t.size = o, t.total = i, t.min = Math.min(t.max, o - i), t.minScale = o / n, t.centerOffset = (i - o) / 2, t.enabled = t.forcedEnabled || i > o, e || t.trigger(P, t)) } }), G = C.extend({ init: function (e) { var t = this; C.fn.init.call(t), t.x = new q(D({ horizontal: !0 }, e)), t.y = new q(D({ horizontal: !1 }, e)), t.container = e.container, t.forcedMinScale = e.minScale, t.maxScale = e.maxScale || 100, t.bind(P, e) }, rescale: function (e) { this.x.rescale(e), this.y.rescale(e), this.refresh() }, centerCoordinates: function () { return { x: Math.min(0, -this.x.centerOffset), y: Math.min(0, -this.y.centerOffset) } }, refresh: function () { var e = this; e.x.update(), e.y.update(), e.enabled = e.x.enabled || e.y.enabled, e.minScale = e.forcedMinScale || Math.min(e.x.minScale, e.y.minScale), e.fitScale = Math.max(e.x.minScale, e.y.minScale), e.trigger(P) } }), $ = C.extend({ init: function (e) { var t = this; D(t, e), C.fn.init.call(t) }, outOfBounds: function () { return this.dimension.outOfBounds(this.movable[this.axis]) }, dragMove: function (e) { var t = this, n = t.dimension, i = t.axis, o = t.movable, r = o[i] + e; n.enabled && ((r < n.min && e < 0 || r > n.max && e > 0) && (e *= t.resistance), o.translateAxis(i, e), t.trigger(P, t)) } }), K = y.extend({ init: function (t) { var n, i, o, r, a = this; D(a, { elastic: !0 }, t), o = a.elastic ? .5 : 0, r = a.movable, a.x = n = new $({ axis: "x", dimension: a.dimensions.x, resistance: o, movable: r }), a.y = i = new $({ axis: "y", dimension: a.dimensions.y, resistance: o, movable: r }), a.userEvents.bind(["press", "move", "end", "gesturestart", "gesturechange"], { gesturestart: function (e) { a.gesture = e, a.offset = a.dimensions.container.offset() }, press: function (t) { e(t.event.target).closest("a").is("[data-navigate-on-press=true]") && t.sender.cancel() }, gesturechange: function (e) { var t, o, s, l = a.gesture, d = l.center, c = e.center, u = e.distance / l.distance, h = a.dimensions.minScale, p = a.dimensions.maxScale; r.scale <= h && u < 1 && (u += .8 * (1 - u)), r.scale * u >= p && (u = p / r.scale), o = r.x + a.offset.left, s = r.y + a.offset.top, t = { x: (o - d.x) * u + c.x - o, y: (s - d.y) * u + c.y - s }, r.scaleWith(u), n.dragMove(t.x), i.dragMove(t.y), a.dimensions.rescale(r.scale), a.gesture = e, e.preventDefault() }, move: function (e) { e.event.target.tagName.match(/textarea|input/i) || (n.dimension.enabled || i.dimension.enabled ? (n.dragMove(e.x.delta), i.dragMove(e.y.delta), e.preventDefault()) : e.touch.skip()) }, end: function (e) { e.preventDefault() } }) } }), Y = b.transitions.prefix + "Transform"; p = b.hasHW3D ? function (e, t, n) { return "translate3d(" + e + "px," + t + "px,0) scale(" + n + ")" } : function (e, t, n) { return "translate(" + e + "px," + t + "px) scale(" + n + ")" }, f = C.extend({ init: function (t) { var n = this; C.fn.init.call(n), n.element = e(t), n.element[0].style.webkitTransformOrigin = "left top", n.x = 0, n.y = 0, n.scale = 1, n._saveCoordinates(p(n.x, n.y, n.scale)) }, translateAxis: function (e, t) { this[e] += t, this.refresh() }, scaleTo: function (e) { this.scale = e, this.refresh() }, scaleWith: function (e) { this.scale *= e, this.refresh() }, translate: function (e) { this.x += e.x, this.y += e.y, this.refresh() }, moveAxis: function (e, t) { this[e] = t, this.refresh() }, moveTo: function (e) { D(this, e), this.refresh() }, refresh: function () { var e, t = this, n = t.x, i = t.y; t.round && (n = Math.round(n), i = Math.round(i)), e = p(n, i, t.scale), e != t.coordinates && (_.support.browser.msie && _.support.browser.version < 10 ? (t.element[0].style.position = "absolute", t.element[0].style.left = t.x + "px", t.element[0].style.top = t.y + "px") : t.element[0].style[Y] = e, t._saveCoordinates(e), t.trigger(P)) }, _saveCoordinates: function (e) { this.coordinates = e } }), g = x.extend({ init: function (e, t) { var n, i = this; x.fn.init.call(i, e, t), n = i.options.group, n in I ? I[n].push(i) : I[n] = [i] }, events: [V, W, U], options: { name: "DropTarget", group: "default" }, destroy: function () { s(I, this) }, _trigger: function (e, t) { var n = this, i = E[n.options.group]; if (i) return n.trigger(e, D({}, t.event, { draggable: i, dropTarget: t.dropTarget })) }, _over: function (e) { this._trigger(V, e) }, _out: function (e) { this._trigger(W, e) }, _drop: function (e) { var t = this, n = E[t.options.group]; n && (n.dropped = !t._trigger(U, e)) } }), g.destroyGroup = function (e) { var t, n = I[e] || M[e]; if (n) { for (t = 0; t < n.length; t++)x.fn.destroy.call(n[t]); n.length = 0, delete I[e], delete M[e] } }, g._cache = I, m = g.extend({ init: function (e, t) { var n, i = this; x.fn.init.call(i, e, t), n = i.options.group, n in M ? M[n].push(i) : M[n] = [i] }, destroy: function () { s(M, this) }, options: { name: "DropTargetArea", group: "default", filter: null } }), v = x.extend({ init: function (e, t) { var n = this; x.fn.init.call(n, e, t), n._activated = !1, n.userEvents = new S(n.element, { global: !0, allowSelection: !0, filter: n.options.filter, threshold: n.options.distance, start: T(n._start, n), hold: T(n._hold, n), move: T(n._drag, n), end: T(n._end, n), cancel: T(n._cancel, n), select: T(n._select, n) }), _.support.touch && n.element.find(n.options.filter).css("touch-action", "none"), n._afterEndHandler = T(n._afterEnd, n), n._captureEscape = T(n._captureEscape, n) }, events: [B, z, L, H, N, O], options: { name: "Draggable", distance: _.support.touch ? 0 : 5, group: "default", cursorOffset: null, axis: null, container: null, filter: null, ignore: null, holdToDrag: !1, autoScroll: !1, dropped: !1 }, cancelHold: function () { this._activated = !1 }, _captureEscape: function (e) { var t = this; e.keyCode === _.keys.ESC && (t._trigger(N, { event: e }), t.userEvents.cancel()) }, _updateHint: function (t) { var n, i = this, r = i.options, a = i.boundaries, s = r.axis, l = i.options.cursorOffset; l ? n = { left: t.x.location + l.left, top: t.y.location + l.top } : (i.hintOffset.left += t.x.delta, i.hintOffset.top += t.y.delta, n = e.extend({}, i.hintOffset)), a && (n.top = o(n.top, a.y), n.left = o(n.left, a.x)), "x" === s ? delete n.top : "y" === s && delete n.left, i.hint.css(n) }, _shouldIgnoreTarget: function (t) { var n = this.options.ignore; return n && e(t).is(n) }, _select: function (e) { this._shouldIgnoreTarget(e.event.target) || e.preventDefault() }, _start: function (n) { var i, o = this, a = o.options, s = a.container ? e(a.container) : null, l = a.hint; return this._shouldIgnoreTarget(n.touch.initialTouch) || a.holdToDrag && !o._activated ? (o.userEvents.cancel(), t) : (o.currentTarget = n.target, o.currentTargetOffset = A(o.currentTarget), l && (o.hint && o.hint.stop(!0, !0).remove(), o.hint = _.isFunction(l) ? e(l.call(o, o.currentTarget)) : l, i = A(o.currentTarget), o.hintOffset = i, o.hint.css({ position: "absolute", zIndex: 2e4, left: i.left, top: i.top }).appendTo(w.body), o.angular("compile", function () { o.hint.removeAttr("ng-repeat"); for (var t = e(n.target); !t.data("$$kendoScope") && t.length;)t = t.parent(); return { elements: o.hint.get(), scopeFrom: t.data("$$kendoScope") } })), E[a.group] = o, o.dropped = !1, s && (o.boundaries = r(s, o.hint)), e(w).on(F, o._captureEscape), o._trigger(z, n) && (o.userEvents.cancel(), o._afterEnd()), o.userEvents.capture(), t) }, _hold: function (e) { this.currentTarget = e.target, this._trigger(B, e) ? this.userEvents.cancel() : this._activated = !0 }, _drag: function (t) { var n, i; t.preventDefault(), n = this._elementUnderCursor(t), this.options.autoScroll && this._cursorElement !== n && (this._scrollableParent = c(n), this._cursorElement = n), this._lastEvent = t, this._processMovement(t, n), this.options.autoScroll && this._scrollableParent[0] && (i = u(t.x.location, t.y.location, l(this._scrollableParent)), this._scrollCompenstation = e.extend({}, this.hintOffset), this._scrollVelocity = i, 0 === i.y && 0 === i.x ? (clearInterval(this._scrollInterval), this._scrollInterval = null) : this._scrollInterval || (this._scrollInterval = setInterval(e.proxy(this, "_autoScroll"), 50))), this.hint && this._updateHint(t) }, _processMovement: function (n, i) { this._withDropTarget(i, function (i, o) { if (!i) return h && (h._trigger(W, D(n, { dropTarget: e(h.targetElement) })), h = null), t; if (h) { if (o === h.targetElement) return; h._trigger(W, D(n, { dropTarget: e(h.targetElement) })) } i._trigger(V, D(n, { dropTarget: e(o) })), h = D(i, { targetElement: o }) }), this._trigger(L, D(n, { dropTarget: h, elementUnderCursor: i })) }, _autoScroll: function () { var e, t, n, i, o, r, a, s, l = this._scrollableParent[0], c = this._scrollVelocity, u = this._scrollCompenstation; l && (e = this._elementUnderCursor(this._lastEvent), this._processMovement(this._lastEvent, e), i = l === d()[0], i ? (t = w.body.scrollHeight > k.height(), n = w.body.scrollWidth > k.width()) : (t = l.offsetHeight <= l.scrollHeight, n = l.offsetWidth <= l.scrollWidth), o = l.scrollTop + c.y, r = t && o > 0 && o < l.scrollHeight, a = l.scrollLeft + c.x, s = n && a > 0 && a < l.scrollWidth, r && (l.scrollTop += c.y), s && (l.scrollLeft += c.x), this.hint && i && (s || r) && (r && (u.top += c.y), s && (u.left += c.x), this.hint.css(u))) }, _end: function (t) { this._withDropTarget(this._elementUnderCursor(t), function (n, i) { n && (n._drop(D({}, t, { dropTarget: e(i) })), h = null) }), this._cancel(this._trigger(H, t)) }, _cancel: function (e) { var t = this; t._scrollableParent = null, this._cursorElement = null, clearInterval(this._scrollInterval), t._activated = !1, t.hint && !t.dropped ? setTimeout(function () { t.hint.stop(!0, !0), e ? t._afterEndHandler() : t.hint.animate(t.currentTargetOffset, "fast", t._afterEndHandler) }, 0) : t._afterEnd() }, _trigger: function (e, t) { var n = this; return n.trigger(e, D({}, t.event, { x: t.x, y: t.y, currentTarget: n.currentTarget, initialTarget: t.touch ? t.touch.initialTouch : null, dropTarget: t.dropTarget, elementUnderCursor: t.elementUnderCursor })) }, _elementUnderCursor: function (e) { var t = R(e), i = this.hint; return i && n(i[0], t) && (i.hide(), t = R(e), t || (t = R(e)), i.show()), t }, _withDropTarget: function (e, t) { var n, i = this.options.group, o = I[i], r = M[i]; (o && o.length || r && r.length) && (n = a(e, o, r), n ? t(n.target, n.targetElement) : t()) }, destroy: function () { var e = this; x.fn.destroy.call(e), e._afterEnd(), e.userEvents.destroy(), this._scrollableParent = null, this._cursorElement = null, clearInterval(this._scrollInterval), e.currentTarget = null }, _afterEnd: function () { var t = this; t.hint && t.hint.remove(), delete E[t.options.group], t.trigger("destroy"), t.trigger(O), e(w).off(F, t._captureEscape) } }), _.ui.plugin(g), _.ui.plugin(m), _.ui.plugin(v), _.TapCapture = j, _.containerBoundaries = r, D(_.ui, { Pane: K, PaneDimensions: G, Movable: f }), _.ui.Draggable.utils = { autoScrollVelocity: u, scrollableViewPort: l, findScrollableParent: c } }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.mobile.scroller.min", ["kendo.fx.min", "kendo.draganddrop.min"], e) }(function () { return function (e, t) { var n = window.kendo, i = n.mobile, o = n.effects, r = i.ui, a = e.proxy, s = e.extend, l = r.Widget, d = n.Class, c = n.ui.Movable, u = n.ui.Pane, h = n.ui.PaneDimensions, p = o.Transition, f = o.Animation, g = Math.abs, m = 500, v = .7, _ = .96, b = 10, w = 55, k = .5, y = 5, x = "km-scroller-release", C = "km-scroller-refresh", S = "pull", T = "change", D = "resize", A = "scroll", E = 2, I = f.extend({ init: function (e) { var t = this; f.fn.init.call(t), s(t, e), t.userEvents.bind("gestureend", a(t.start, t)), t.tapCapture.bind("press", a(t.cancel, t)) }, enabled: function () { return this.movable.scale < this.dimensions.minScale }, done: function () { return this.dimensions.minScale - this.movable.scale < .01 }, tick: function () { var e = this.movable; e.scaleWith(1.1), this.dimensions.rescale(e.scale) }, onEnd: function () { var e = this.movable; e.scaleTo(this.dimensions.minScale), this.dimensions.rescale(e.scale) } }), M = f.extend({ init: function (e) { var t = this; f.fn.init.call(t), s(t, e, { transition: new p({ axis: e.axis, movable: e.movable, onEnd: function () { t._end() } }) }), t.tapCapture.bind("press", function () { t.cancel() }), t.userEvents.bind("end", a(t.start, t)), t.userEvents.bind("gestureend", a(t.start, t)), t.userEvents.bind("tap", a(t.onEnd, t)) }, onCancel: function () { this.transition.cancel() }, freeze: function (e) { var t = this; t.cancel(), t._moveTo(e) }, onEnd: function () { var e = this; e.paneAxis.outOfBounds() ? e._snapBack() : e._end() }, done: function () { return g(this.velocity) < 1 }, start: function (e) { var t, n = this; n.dimension.enabled && (n.paneAxis.outOfBounds() ? n.transition._started ? (n.transition.cancel(), n.velocity = Math.min(e.touch[n.axis].velocity * n.velocityMultiplier, w), f.fn.start.call(n)) : n._snapBack() : (t = e.touch.id === E ? 0 : e.touch[n.axis].velocity, n.velocity = Math.max(Math.min(t * n.velocityMultiplier, w), -w), n.tapCapture.captureNext(), f.fn.start.call(n))) }, tick: function () { var e = this, t = e.dimension, n = e.paneAxis.outOfBounds() ? k : e.friction, i = e.velocity *= n, o = e.movable[e.axis] + i; !e.elastic && t.outOfBounds(o) && (o = Math.max(Math.min(o, t.max), t.min), e.velocity = 0), e.movable.moveAxis(e.axis, o) }, _end: function () { this.tapCapture.cancelCapture(), this.end() }, _snapBack: function () { var e = this, t = e.dimension, n = e.movable[e.axis] > t.max ? t.max : t.min; e._moveTo(n) }, _moveTo: function (e) { this.transition.moveTo({ location: e, duration: m, ease: p.easeOutExpo }) } }), R = f.extend({ init: function (e) { var t = this; n.effects.Animation.fn.init.call(this), s(t, e, { origin: {}, destination: {}, offset: {} }) }, tick: function () { this._updateCoordinates(), this.moveTo(this.origin) }, done: function () { return g(this.offset.y) < y && g(this.offset.x) < y }, onEnd: function () { this.moveTo(this.destination), this.callback && this.callback.call() }, setCoordinates: function (e, t) { this.offset = {}, this.origin = e, this.destination = t }, setCallback: function (e) { e && n.isFunction(e) ? this.callback = e : e = t }, _updateCoordinates: function () { this.offset = { x: (this.destination.x - this.origin.x) / 4, y: (this.destination.y - this.origin.y) / 4 }, this.origin = { y: this.origin.y + this.offset.y, x: this.origin.x + this.offset.x } } }), F = d.extend({ init: function (t) { var n = this, i = "x" === t.axis, o = e('
    '); s(n, t, { element: o, elementSize: 0, movable: new c(o), scrollMovable: t.movable, alwaysVisible: t.alwaysVisible, size: i ? "width" : "height" }), n.scrollMovable.bind(T, a(n.refresh, n)), n.container.append(o), t.alwaysVisible && n.show() }, refresh: function () { var e = this, t = e.axis, n = e.dimension, i = n.size, o = e.scrollMovable, r = i / n.total, a = Math.round(-o[t] * r), s = Math.round(i * r); r >= 1 ? this.element.css("display", "none") : this.element.css("display", ""), a + s > i ? s = i - a : a < 0 && (s += a, a = 0), e.elementSize != s && (e.element.css(e.size, s + "px"), e.elementSize = s), e.movable.moveAxis(t, a) }, show: function () { this.element.css({ opacity: v, visibility: "visible" }) }, hide: function () { this.alwaysVisible || this.element.css({ opacity: 0 }) } }), P = l.extend({ init: function (i, o) { var r, d, p, f, m, v, _, b, w, k = this; return l.fn.init.call(k, i, o), i = k.element, (k._native = k.options.useNative && n.support.hasNativeScrolling) ? (i.addClass("km-native-scroller").prepend('
    '), s(k, { scrollElement: i, fixedContainer: i.children().first() }), t) : (i.css("overflow", "hidden").addClass("km-scroll-wrapper").wrapInner('
    ').prepend('
    '), r = i.children().eq(1), d = new n.TapCapture(i), p = new c(r), f = new h({ element: r, container: i, forcedEnabled: k.options.zoom }), m = this.options.avoidScrolling, v = new n.UserEvents(i, { touchAction: "pan-y", fastTap: !0, allowSelection: !0, preventDragEvent: !0, captureUpIfMoved: !0, multiTouch: k.options.zoom, supportDoubleTap: k.options.supportDoubleTap, start: function (t) { f.refresh(); var n = g(t.x.velocity), i = g(t.y.velocity), o = 2 * n >= i, r = e.contains(k.fixedContainer[0], t.event.target), a = 2 * i >= n; !r && !m(t) && k.enabled && (f.x.enabled && o || f.y.enabled && a) ? v.capture() : v.cancel() } }), _ = new u({ movable: p, dimensions: f, userEvents: v, elastic: k.options.elastic }), b = new I({ movable: p, dimensions: f, userEvents: v, tapCapture: d }), w = new R({ moveTo: function (e) { k.scrollTo(e.x, e.y) } }), p.bind(T, function () { k.scrollTop = -p.y, k.scrollLeft = -p.x, k.trigger(A, { scrollTop: k.scrollTop, scrollLeft: k.scrollLeft }) }), k.options.mousewheelScrolling && i.on("DOMMouseScroll mousewheel", a(this, "_wheelScroll")), s(k, { movable: p, dimensions: f, zoomSnapBack: b, animatedScroller: w, userEvents: v, pane: _, tapCapture: d, pulled: !1, enabled: !0, scrollElement: r, scrollTop: 0, scrollLeft: 0, fixedContainer: i.children().first() }), k._initAxis("x"), k._initAxis("y"), k._wheelEnd = function () { k._wheel = !1, k.userEvents.end(0, k._wheelY) }, f.refresh(), k.options.pullToRefresh && k._initPullToRefresh(), t) }, _wheelScroll: function (e) { if (!e.ctrlKey) { this._wheel || (this._wheel = !0, this._wheelY = 0, this.userEvents.press(0, this._wheelY)), clearTimeout(this._wheelTimeout), this._wheelTimeout = setTimeout(this._wheelEnd, 50); var t = n.wheelDeltaY(e); t && (this._wheelY += t, this.userEvents.move(0, this._wheelY)), e.preventDefault() } }, makeVirtual: function () { this.dimensions.y.makeVirtual() }, virtualSize: function (e, t) { this.dimensions.y.virtualSize(e, t) }, height: function () { return this.dimensions.y.size }, scrollHeight: function () { return this.scrollElement[0].scrollHeight }, scrollWidth: function () { return this.scrollElement[0].scrollWidth }, options: { name: "Scroller", zoom: !1, pullOffset: 140, visibleScrollHints: !1, elastic: !0, useNative: !1, mousewheelScrolling: !0, avoidScrolling: function () { return !1 }, pullToRefresh: !1, messages: { pullTemplate: "Pull to refresh", releaseTemplate: "Release to refresh", refreshTemplate: "Refreshing" } }, events: [S, A, D], _resize: function () { this._native || this.contentResized() }, setOptions: function (e) { var t = this; l.fn.setOptions.call(t, e), e.pullToRefresh && t._initPullToRefresh() }, reset: function () { this._native ? this.scrollElement.scrollTop(0) : (this.movable.moveTo({ x: 0, y: 0 }), this._scale(1)) }, contentResized: function () { this.dimensions.refresh(), this.pane.x.outOfBounds() && this.movable.moveAxis("x", this.dimensions.x.min), this.pane.y.outOfBounds() && this.movable.moveAxis("y", this.dimensions.y.min) }, zoomOut: function () { var e = this.dimensions; e.refresh(), this._scale(e.fitScale), this.movable.moveTo(e.centerCoordinates()) }, enable: function () { this.enabled = !0 }, disable: function () { this.enabled = !1 }, scrollTo: function (e, t) { this._native ? (this.scrollElement.scrollLeft(g(e)), this.scrollElement.scrollTop(g(t))) : (this.dimensions.refresh(), this.movable.moveTo({ x: e, y: t })) }, animatedScrollTo: function (e, t, n) { var i, o; this._native ? this.scrollTo(e, t) : (i = { x: this.movable.x, y: this.movable.y }, o = { x: e, y: t }, this.animatedScroller.setCoordinates(i, o), this.animatedScroller.setCallback(n), this.animatedScroller.start()) }, pullHandled: function () { var e = this; e.refreshHint.removeClass(C), e.hintContainer.html(e.pullTemplate({})), e.yinertia.onEnd(), e.xinertia.onEnd(), e.userEvents.cancel() }, destroy: function () { l.fn.destroy.call(this), this.userEvents && this.userEvents.destroy() }, _scale: function (e) { this.dimensions.rescale(e), this.movable.scaleTo(e) }, _initPullToRefresh: function () { var e = this; e.dimensions.y.forceEnabled(), e.pullTemplate = n.template(e.options.messages.pullTemplate), e.releaseTemplate = n.template(e.options.messages.releaseTemplate), e.refreshTemplate = n.template(e.options.messages.refreshTemplate), e.scrollElement.prepend('' + e.pullTemplate({}) + ""), e.refreshHint = e.scrollElement.children().first(), e.hintContainer = e.refreshHint.children(".km-template"), e.pane.y.bind("change", a(e._paneChange, e)), e.userEvents.bind("end", a(e._dragEnd, e)) }, _dragEnd: function () { var e = this; e.pulled && (e.pulled = !1, e.refreshHint.removeClass(x).addClass(C), e.hintContainer.html(e.refreshTemplate({})), e.yinertia.freeze(e.options.pullOffset / 2), e.trigger("pull")) }, _paneChange: function () { var e = this; e.movable.y / k > e.options.pullOffset ? e.pulled || (e.pulled = !0, e.refreshHint.removeClass(C).addClass(x), e.hintContainer.html(e.releaseTemplate({}))) : e.pulled && (e.pulled = !1, e.refreshHint.removeClass(x), e.hintContainer.html(e.pullTemplate({}))) }, _initAxis: function (e) { var t = this, n = t.movable, i = t.dimensions[e], o = t.tapCapture, r = t.pane[e], a = new F({ axis: e, movable: n, dimension: i, container: t.element, alwaysVisible: t.options.visibleScrollHints }); i.bind(T, function () { a.refresh() }), r.bind(T, function () { a.show() }), t[e + "inertia"] = new M({ axis: e, paneAxis: r, movable: n, tapCapture: o, userEvents: t.userEvents, dimension: i, elastic: t.options.elastic, friction: t.options.friction || _, velocityMultiplier: t.options.velocityMultiplier || b, end: function () { a.hide(), t.trigger("scrollEnd", { axis: e, scrollTop: t.scrollTop, scrollLeft: t.scrollLeft }) } }) } }); r.plugin(P) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.groupable.min", ["kendo.core.min", "kendo.draganddrop.min"], e) }(function () { return function (e, t) { var n = window.kendo, i = n.ui.Widget, o = n._outerWidth, r = n.attr, a = e.extend, s = e.each, l = e.proxy, d = !1, c = "dir", u = "field", h = "title", p = "asc", f = "desc", g = "group-sort", m = ".kendoGroupable", v = "change", _ = n.template('', { useWithBlock: !1 }), b = function (t) { var i = t.attr(n.attr("title")); return i && (i = n.htmlEncode(i)), e('
    ').html(i || t.attr(n.attr("field"))).prepend('') }, w = e('
    '), k = i.extend({ init: function (s, u) { var h, _, k = this, y = n.guid(), x = l(k._intializePositions, k), C = k._dropCuePositions = []; i.fn.init.call(k, s, u), d = n.support.isRtl(s), _ = d ? "right" : "left", k.draggable = h = k.options.draggable || new n.ui.Draggable(k.element, { filter: k.options.draggableElements, hint: b, group: y }), k.groupContainer = e(k.options.groupContainer, k.element).kendoDropTarget({ group: h.options.group, dragenter: function (e) { k._canDrag(e.draggable.currentTarget) && (e.draggable.hint.find(".k-drag-status").removeClass("k-i-cancel").addClass("k-i-plus"), w.css(_, 0).appendTo(k.groupContainer)) }, dragleave: function (e) { e.draggable.hint.find(".k-drag-status").removeClass("k-i-plus").addClass("k-i-cancel"), w.remove() }, drop: function (t) { var i, o = t.draggable.currentTarget, r = o.attr(n.attr("field")), s = o.attr(n.attr("title")), l = k.indicator(r), c = k._dropCuePositions, u = c[c.length - 1], h = a({}, k.options.sort, o.data(g)), p = h.dir; (o.hasClass("k-group-indicator") || k._canDrag(o)) && (u ? (i = k._dropCuePosition(n.getOffset(w).left + parseInt(u.element.css("marginLeft"), 10) * (d ? -1 : 1) + parseInt(u.element.css("marginRight"), 10)), i && k._canDrop(e(l), i.element, i.left) && (i.before ? i.element.before(l || k.buildIndicator(r, s, p)) : i.element.after(l || k.buildIndicator(r, s, p)), k._setIndicatorSortOptions(r, h), k._change())) : (k.groupContainer.empty(), k.groupContainer.append(k.buildIndicator(r, s, p)), k._setIndicatorSortOptions(r, h), k._change())) } }).kendoDraggable({ filter: "div.k-group-indicator", hint: b, group: h.options.group, dragcancel: l(k._dragCancel, k), dragstart: function (e) { var t = e.currentTarget, n = parseInt(t.css("marginLeft"), 10), i = t.position(), r = d ? i.left - n : i.left + o(t); x(), w.css("left", r).appendTo(k.groupContainer), this.hint.find(".k-drag-status").removeClass("k-i-cancel").addClass("k-i-plus") }, dragend: function () { k._dragEnd(this) }, drag: l(k._drag, k) }).on("click" + m, ".k-button", function (t) { t.preventDefault(), k._removeIndicator(e(this).parent()) }).on("click" + m, ".k-link", function (t) { var n = e(this).parent(), i = n.attr(r(c)) === p ? f : p; n.attr(r(c), i), k._change(), t.preventDefault() }), h.bind(["dragend", "dragcancel", "dragstart", "drag"], { dragend: function () { k._dragEnd(this) }, dragcancel: l(k._dragCancel, k), dragstart: function (e) { var n, i, r; return k.options.allowDrag || k._canDrag(e.currentTarget) ? (x(), C.length ? (n = C[C.length - 1].element, i = parseInt(n.css("marginRight"), 10), r = n.position().left + o(n) + i) : r = 0, t) : (e.preventDefault(), t) }, drag: l(k._drag, k) }), k.dataSource = k.options.dataSource, k.dataSource && k._refreshHandler ? k.dataSource.unbind(v, k._refreshHandler) : k._refreshHandler = l(k.refresh, k), k.dataSource && (k.dataSource.bind("change", k._refreshHandler), k.refresh()) }, refresh: function () { var t, n = this, i = n.dataSource, o = i.group() || [], l = r(u), d = r(h); n.groupContainer && (n.groupContainer.empty(), s(o, function (i, o) { var r = o.field, s = o.dir, c = n.element.find(n.options.filter).filter(function () { return e(this).attr(l) === r }); t = n.buildIndicator(r, c.attr(d), s), n.groupContainer.append(t), n._setIndicatorSortOptions(r, a({}, n.options.sort, { dir: s, compare: o.compare })) })), n._invalidateGroupContainer() }, destroy: function () { var e = this; i.fn.destroy.call(e), e.groupContainer.off(m), e.groupContainer.data("kendoDropTarget") && e.groupContainer.data("kendoDropTarget").destroy(), e.groupContainer.data("kendoDraggable") && e.groupContainer.data("kendoDraggable").destroy(), e.options.draggable || e.draggable.destroy(), e.dataSource && e._refreshHandler && (e.dataSource.unbind("change", e._refreshHandler), e._refreshHandler = null), e.groupContainer = e.element = e.draggable = null }, events: ["change"], options: { name: "Groupable", filter: "th", draggableElements: "th", messages: { empty: "Drag a column header and drop it here to group by that column" }, sort: { dir: p, compare: null } }, indicator: function (t) { var i = e(".k-group-indicator", this.groupContainer); return e.grep(i, function (i) { return e(i).attr(n.attr("field")) === t })[0] }, buildIndicator: function (e, t, i) { var o = this, r = _({ ns: n.ns, field: e.replace(/"/g, "'"), title: t, dir: i || (o.options.sort || {}).dir || p }); return r }, _setIndicatorSortOptions: function (t, n) { var i = e(this.indicator(t)); i.data(g, n) }, aggregates: function () { var t, i, o, r = this; return r.element.find(r.options.filter).map(function () { var r = e(this), a = r.attr(n.attr("aggregates")), s = r.attr(n.attr("field")); if (a && "" !== a) for (t = a.split(","), a = [], i = 0, o = t.length; i < o; i++)a.push({ field: s, aggregate: t[i] }); return a }).toArray() }, descriptors: function () { var t, i = this, o = e(".k-group-indicator", i.groupContainer), r = i.aggregates(); return e.map(o, function (o) { var a, s; return o = e(o), t = o.attr(n.attr("field")), a = i.options.sort || {}, s = o.data(g) || {}, { field: t, dir: o.attr(n.attr("dir")), aggregates: r || [], compare: s.compare || a.compare } }) }, _removeIndicator: function (e) { var t = this; e.off(), e.removeData(), e.remove(), t._invalidateGroupContainer(), t._change() }, _change: function () { var e, n = this; if (n.dataSource) { if (e = n.descriptors(), n.trigger("change", { groups: e })) return n.refresh(), t; n.dataSource.group(e) } }, _dropCuePosition: function (t) { var n, i, r, a, s, l = this._dropCuePositions; if (w.is(":visible") && 0 !== l.length) return t = Math.ceil(t), n = l[l.length - 1], i = n.left, r = n.right, a = parseInt(n.element.css("marginLeft"), 10), s = parseInt(n.element.css("marginRight"), 10), t >= r && !d || t < i && d ? t = { left: n.element.position().left + (d ? -a : o(n.element) + s), element: n.element, before: !1 } : (t = e.grep(l, function (e) { return e.left <= t && t <= e.right || d && t > e.right })[0], t && (t = { left: d ? t.element.position().left + o(t.element) + s : t.element.position().left - a, element: t.element, before: !0 })), t }, _drag: function (e) { var t = this._dropCuePosition(e.x.location); t && w.css({ left: t.left, right: "auto" }) }, _canDrag: function (e) { var t = e.attr(n.attr("field")); return "false" != e.attr(n.attr("groupable")) && t && (e.hasClass("k-group-indicator") || !this.indicator(t)) }, _canDrop: function (e, t, n) { var i = e.next(), o = e[0] !== t[0] && (!i[0] || t[0] !== i[0] || !d && n > i.position().left || d && n < i.position().left); return o }, _dragEnd: function (t) { var i = this, o = t.currentTarget.attr(n.attr("field")), r = i.indicator(o); t !== i.options.draggable && !t.dropped && r && i._removeIndicator(e(r)), i._dragCancel() }, _dragCancel: function () { w.remove(), this._dropCuePositions = [] }, _intializePositions: function () { var t, i = this, r = e(".k-group-indicator", i.groupContainer); i._dropCuePositions = e.map(r, function (i) { return i = e(i), t = n.getOffset(i).left, { left: parseInt(t, 10), right: parseInt(t + o(i), 10), element: i } }) }, _invalidateGroupContainer: function () { var e = this.groupContainer; e && e.is(":empty") && e.html(this.options.messages.empty) } }); n.ui.plugin(k) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.reorderable.min", ["kendo.core.min", "kendo.draganddrop.min"], e) }(function () { return function (e, t) { function n(t, n) { t = e(t), n ? t.find(".k-drag-status").removeClass("k-i-plus").addClass("k-i-cancel") : t.find(".k-drag-status").removeClass("k-i-cancel").addClass("k-i-plus") } var i = window.kendo, o = i._outerWidth, r = i._outerHeight, a = i.getOffset, s = i.ui.Widget, l = "change", d = "k-reorderable", c = s.extend({ init: function (t, c) { var u, h = this, p = i.guid() + "-reorderable"; s.fn.init.call(h, t, c), t = h.element.addClass(d), c = h.options, h.draggable = u = c.draggable || new i.ui.Draggable(t, { group: p, autoScroll: !0, filter: c.filter, hint: c.hint }), h.reorderDropCue = e('
    '), t.find(u.options.filter).kendoDropTarget({ group: u.options.group, dragenter: function (e) { var t, i, s, l; h._draggable && (t = this.element, s = !h._dropTargetAllowed(t) || h._isLastDraggable(), n(e.draggable.hint, s), s || (i = a(t), l = i.left, c.inSameContainer && !c.inSameContainer({ source: t, target: h._draggable, sourceIndex: h._index(t), targetIndex: h._index(h._draggable) }) ? h._dropTarget = t : h._index(t) > h._index(h._draggable) && (l += o(t)), h.reorderDropCue.css({ height: r(t), top: i.top, left: l }).appendTo(document.body))) }, dragleave: function (e) { n(e.draggable.hint, !0), h.reorderDropCue.remove(), h._dropTarget = null }, drop: function () { var e, t; h._dropTarget = null, h._draggable && (e = this.element, t = h._draggable, h._dropTargetAllowed(e) && !h._isLastDraggable() && h.trigger(l, { element: h._draggable, target: e, oldIndex: h._index(t), newIndex: h._index(e), position: a(h.reorderDropCue).left > a(e).left ? "after" : "before" })) } }), u.bind(["dragcancel", "dragend", "dragstart", "drag"], { dragcancel: function () { h.reorderDropCue.remove(), h._draggable = null, h._elements = null }, dragend: function () { h.reorderDropCue.remove(), h._draggable = null, h._elements = null }, dragstart: function (e) { h._draggable = e.currentTarget, h._elements = h.element.find(h.draggable.options.filter) }, drag: function (e) { var t, n; h._dropTarget && !this.hint.find(".k-drag-status").hasClass("k-i-cancel") && (t = a(h._dropTarget).left, n = o(h._dropTarget), h.reorderDropCue.css(e.pageX > t + n / 2 ? { left: t + n } : { left: t })) } }) }, options: { name: "Reorderable", filter: "*" }, events: [l], _isLastDraggable: function () { var e, t = this.options.inSameContainer, n = this._draggable[0], i = this._elements.get(), o = !1; if (!t) return !1; for (; !o && i.length > 0;)e = i.pop(), o = n !== e && t({ source: n, target: e, sourceIndex: this._index(n), targetIndex: this._index(e) }); return !o }, _dropTargetAllowed: function (e) { var t = this.options.inSameContainer, n = this.options.dragOverContainers, i = this._draggable; return i[0] !== e[0] && (!t || !n || (!!t({ source: i, target: e, sourceIndex: this._index(i), targetIndex: this._index(e) }) || n(this._index(i), this._index(e)))) }, _index: function (e) { return this._elements.index(e) }, destroy: function () { var t = this; s.fn.destroy.call(t), t.element.find(t.draggable.options.filter).each(function () { var t = e(this); t.data("kendoDropTarget") && t.data("kendoDropTarget").destroy() }), t.draggable && (t.draggable.destroy(), t.draggable.element = t.draggable = null), t.elements = t.reorderDropCue = t._elements = t._draggable = null } }); i.ui.plugin(c) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.resizable.min", ["kendo.core.min", "kendo.draganddrop.min"], e) }(function () { return function (e, t) { var n = window.kendo, i = n.ui, o = i.Widget, r = e.proxy, a = n.isFunction, s = e.extend, l = "horizontal", d = "vertical", c = "start", u = "resize", h = "resizeend", p = o.extend({ init: function (e, t) { var n = this; o.fn.init.call(n, e, t), n.orientation = n.options.orientation.toLowerCase() != d ? l : d, n._positionMouse = n.orientation == l ? "x" : "y", n._position = n.orientation == l ? "left" : "top", n._sizingDom = n.orientation == l ? "outerWidth" : "outerHeight", n.draggable = new i.Draggable(t.draggableElement || e, { distance: 1, filter: t.handle, drag: r(n._resize, n), dragcancel: r(n._cancel, n), dragstart: r(n._start, n), dragend: r(n._stop, n) }), n.userEvents = n.draggable.userEvents }, events: [u, h, c], options: { name: "Resizable", orientation: l }, resize: function () { }, _max: function (e) { var n = this, i = n.hint ? n.hint[n._sizingDom]() : 0, o = n.options.max; return a(o) ? o(e) : o !== t ? n._initialElementPosition + o - i : o }, _min: function (e) { var n = this, i = n.options.min; return a(i) ? i(e) : i !== t ? n._initialElementPosition + i : i }, _start: function (t) { var n = this, i = n.options.hint, o = e(t.currentTarget); n._initialElementPosition = o.position()[n._position], n._initialMousePosition = t[n._positionMouse].startLocation, i && (n.hint = a(i) ? e(i(o)) : i, n.hint.css({ position: "absolute" }).css(n._position, n._initialElementPosition).appendTo(n.element)), n.trigger(c, t), n._maxPosition = n._max(t), n._minPosition = n._min(t), e(document.body).css("cursor", o.css("cursor")) }, _resize: function (e) { var n, i = this, o = i._maxPosition, r = i._minPosition, a = i._initialElementPosition + (e[i._positionMouse].location - i._initialMousePosition); n = r !== t ? Math.max(r, a) : a, i.position = n = o !== t ? Math.min(o, n) : n, i.hint && i.hint.toggleClass(i.options.invalidClass || "", n == o || n == r).css(i._position, n), i.resizing = !0, i.trigger(u, s(e, { position: n })) }, _stop: function (t) { var n = this; n.hint && n.hint.remove(), n.resizing = !1, n.trigger(h, s(t, { position: n.position })), e(document.body).css("cursor", "") }, _cancel: function (e) { var n = this; n.hint && (n.position = t, n.hint.css(n._position, n._initialElementPosition), n._stop(e)) }, destroy: function () { var e = this; o.fn.destroy.call(e), e.draggable && e.draggable.destroy() }, press: function (e) { if (e) { var t = e.position(), n = this; n.userEvents.press(t.left, t.top, e[0]), n.targetPosition = t, n.target = e } }, move: function (e) { var n = this, i = n._position, o = n.targetPosition, r = n.position; r === t && (r = o[i]), o[i] = r + e, n.userEvents.move(o.left, o.top) }, end: function () { this.userEvents.end(), this.target = this.position = t } }); n.ui.plugin(p) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.sortable.min", ["kendo.draganddrop.min"], e) }(function () { return function (e, t) { function n(t, n) { try { return e.contains(t, n) || t == n } catch (i) { return !1 } } function i(e) { return e.clone() } function o(e) { return e.clone().removeAttr("id").css("visibility", "hidden") } var r = window.kendo, a = r.ui.Widget, s = r._outerWidth, l = r._outerHeight, d = "start", c = "beforeMove", u = "move", h = "end", p = "change", f = "cancel", g = "sort", m = "remove", v = "receive", _ = ">*", b = -1, w = a.extend({ init: function (e, t) { var n = this; a.fn.init.call(n, e, t), n.options.placeholder || (n.options.placeholder = o), n.options.hint || (n.options.hint = i), n.draggable = n._createDraggable() }, events: [d, c, u, h, p, f], options: { name: "Sortable", hint: null, placeholder: null, filter: _, holdToDrag: !1, disabled: null, container: null, connectWith: null, handler: null, cursorOffset: null, axis: null, ignore: null, autoScroll: !1, cursor: "auto", moveOnDragEnter: !1 }, destroy: function () { this.draggable.destroy(), a.fn.destroy.call(this) }, _createDraggable: function () { var t = this, n = t.element, i = t.options; return new r.ui.Draggable(n, { filter: i.filter, hint: r.isFunction(i.hint) ? i.hint : e(i.hint), holdToDrag: i.holdToDrag, container: i.container ? e(i.container) : null, cursorOffset: i.cursorOffset, axis: i.axis, ignore: i.ignore, autoScroll: i.autoScroll, dragstart: e.proxy(t._dragstart, t), dragcancel: e.proxy(t._dragcancel, t), drag: e.proxy(t._drag, t), dragend: e.proxy(t._dragend, t) }) }, _dragstart: function (t) { var n = this.draggedElement = t.currentTarget, i = this.options.disabled, o = this.options.handler, a = this.options.placeholder, s = this.placeholder = e(r.isFunction(a) ? a.call(this, n) : a); i && n.is(i) ? t.preventDefault() : o && !e(t.initialTarget).is(o) ? t.preventDefault() : this.trigger(d, { item: n, draggableEvent: t }) ? t.preventDefault() : (n.css("display", "none"), n.before(s), this._setCursor()) }, _dragcancel: function () { this._cancel(), this.trigger(f, { item: this.draggedElement }), this._resetCursor() }, _drag: function (n) { var i, o, r, a, s, l = this.draggedElement, d = this._findTarget(n), c = { left: n.x.location, top: n.y.location }, u = { x: n.x.delta, y: n.y.delta }, h = this.options.axis, p = this.options.moveOnDragEnter, f = { item: l, list: this, draggableEvent: n }; if ("x" === h || "y" === h) return this._movementByAxis(h, c, u[h], f), t; if (d) { if (i = this._getElementCenter(d.element), o = { left: Math.round(c.left - i.left), top: Math.round(c.top - i.top) }, e.extend(f, { target: d.element }), d.appendToBottom) return this._movePlaceholder(d, null, f), t; if (d.appendAfterHidden && this._movePlaceholder(d, "next", f), this._isFloating(d.element) ? u.x < 0 && p || !p && o.left < 0 ? r = "prev" : (u.x > 0 && p || !p && o.left > 0) && (r = "next") : u.y < 0 && p || !p && o.top < 0 ? r = "prev" : (u.y > 0 && p || !p && o.top > 0) && (r = "next"), r) { for (s = "prev" === r ? jQuery.fn.prev : jQuery.fn.next, a = s.call(d.element); a.length && !a.is(":visible");)a = s.call(a); a[0] != this.placeholder[0] && this._movePlaceholder(d, r, f) } } }, _dragend: function (n) { var i, o, r, a, s = this.placeholder, l = this.draggedElement, d = this.indexOf(l), c = this.indexOf(s), u = this.options.connectWith; return this._resetCursor(), r = { action: g, item: l, oldIndex: d, newIndex: c, draggableEvent: n }, c >= 0 ? o = this.trigger(h, r) : (i = s.parents(u).getKendoSortable(), r.action = m, a = e.extend({}, r, { action: v, oldIndex: b, newIndex: i.indexOf(s) }), o = !(!this.trigger(h, r) && !i.trigger(h, a))), o || c === d ? (this._cancel(), t) : (s.replaceWith(l), l.show(), this.draggable.dropped = !0, r = { action: this.indexOf(l) != b ? g : m, item: l, oldIndex: d, newIndex: this.indexOf(l), draggableEvent: n }, this.trigger(p, r), i && (a = e.extend({}, r, { action: v, oldIndex: b, newIndex: i.indexOf(l) }), i.trigger(p, a)), t) }, _findTarget: function (n) { var i, o, r = this._findElementUnderCursor(n), a = this.options.connectWith; return e.contains(this.element[0], r) ? (i = this.items(), o = i.filter(r)[0] || i.has(r)[0], o ? { element: e(o), sortable: this } : null) : this.element[0] == r && this._isEmpty() ? { element: this.element, sortable: this, appendToBottom: !0 } : this.element[0] == r && this._isLastHidden() ? (o = this.items().eq(0), { element: o, sortable: this, appendAfterHidden: !0 }) : a ? this._searchConnectedTargets(r, n) : t }, _findElementUnderCursor: function (e) { var t = r.elementUnderCursor(e), i = e.sender; return n(i.hint[0], t) && (i.hint.hide(), t = r.elementUnderCursor(e), t || (t = r.elementUnderCursor(e)), i.hint.show()), t }, _searchConnectedTargets: function (t, n) { var i, o, r, a, s = e(this.options.connectWith); for (a = 0; a < s.length; a++)if (i = s.eq(a).getKendoSortable(), e.contains(s[a], t)) { if (i) return o = i.items(), r = o.filter(t)[0] || o.has(t)[0], r ? (i.placeholder = this.placeholder, { element: e(r), sortable: i }) : null } else if (s[a] == t) { if (i && i._isEmpty()) return { element: s.eq(a), sortable: i, appendToBottom: !0 }; if (this._isCursorAfterLast(i, n)) return r = i.items().last(), { element: r, sortable: i } } }, _isCursorAfterLast: function (e, t) { var n, i, o = e.items().last(), a = { left: t.x.location, top: t.y.location }; return n = r.getOffset(o), n.top += l(o), n.left += s(o), i = this._isFloating(o) ? n.left - a.left : n.top - a.top, i < 0 }, _movementByAxis: function (t, n, i, o) { var r, a = "x" === t ? n.left : n.top, s = i < 0 ? this.placeholder.prev() : this.placeholder.next(), l = this.items(); s.length && !s.is(":visible") && (s = i < 0 ? s.prev() : s.next()), l.filter(s).length && (e.extend(o, { target: s }), r = this._getElementCenter(s), r && (r = "x" === t ? r.left : r.top), s.length && i < 0 && a - r < 0 ? this._movePlaceholder({ element: s, sortable: this }, "prev", o) : s.length && i > 0 && a - r > 0 && this._movePlaceholder({ element: s, sortable: this }, "next", o)) }, _movePlaceholder: function (e, t, n) { var i = this.placeholder; e.sortable.trigger(c, n) || (t ? "prev" === t ? e.element.before(i) : "next" === t && e.element.after(i) : e.element.append(i), e.sortable.trigger(u, n)) }, _setCursor: function () { var t, n = this.options.cursor; n && "auto" !== n && (t = e(document.body), this._originalCursorType = t.css("cursor"), t.css({ cursor: n }), this._cursorStylesheet || (this._cursorStylesheet = e("")), this._cursorStylesheet.appendTo(t)) }, _resetCursor: function () { this._originalCursorType && (e(document.body).css("cursor", this._originalCursorType), this._originalCursorType = null, this._cursorStylesheet.remove()) }, _getElementCenter: function (e) { var t = e.length ? r.getOffset(e) : null; return t && (t.top += l(e) / 2, t.left += s(e) / 2), t }, _isFloating: function (e) { var t = /left|right/.test(e.css("float")), n = /inline|table-cell/.test(e.css("display")), i = /flex/.test(e.parent().css("display")) && (/row|row-reverse/.test(e.parent().css("flex-direction")) || !e.parent().css("flex-direction")); return t || n || i }, _cancel: function () { this.draggedElement.show(), this.placeholder.remove(), this.draggable.dropped = !0 }, _items: function () { var e, t = this.options.filter; return e = t ? this.element.find(t) : this.element.children() }, indexOf: function (e) { var t = this._items(), n = this.placeholder, i = this.draggedElement; return n && e[0] == n[0] ? t.not(i).index(e) : t.not(n).index(e) }, items: function () { var e = this.placeholder, t = this._items(); return e && (t = t.not(e)), t }, _isEmpty: function () { return !this.items().length }, _isLastHidden: function () { return 1 === this.items().length && this.items().is(":hidden") } }); r.ui.plugin(w) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.selectable.min", ["kendo.core.min", "kendo.userevents.min"], e) }(function () { return function (e, t) { function n(e, t) { if (!e.is(":visible")) return !1; var n = o.getOffset(e), i = t.left + t.width, r = t.top + t.height; return n.right = n.left + o._outerWidth(e), n.bottom = n.top + o._outerHeight(e), !(n.left > i || n.right < t.left || n.top > r || n.bottom < t.top) } var i, o = window.kendo, r = o.ui.Widget, a = e.proxy, s = Math.abs, l = "aria-selected", d = "k-state-selected", c = "k-state-selecting", u = "k-selectable", h = "change", p = ".kendoSelectable", f = "unselect", g = "k-state-unselecting", m = "input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up,label.k-checkbox-label.k-no-text,.k-icon.k-i-collapse,.k-icon.k-i-expand,span.k-numeric-wrap,.k-focusable", v = o.support.browser.msie, _ = !1; !function (e) { !function () { e('
    ').on("click", ">*", function () { _ = !0 }).find("span").trigger("click").end().off() }() }(e), i = r.extend({ init: function (t, n) { var i, s = this; r.fn.init.call(s, t, n), s._marquee = e("
    "), s._lastActive = null, s.element.addClass(u), s.relatedTarget = s.options.relatedTarget, i = s.options.multiple, this.options.aria && i && s.element.attr("aria-multiselectable", !0), s.userEvents = new o.UserEvents(s.element, { global: !0, allowSelection: !0, filter: (_ ? "" : "." + u + " ") + s.options.filter, tap: a(s._tap, s), touchAction: i ? "none" : "pan-x pan-y" }), i && s.userEvents.bind("start", a(s._start, s)).bind("move", a(s._move, s)).bind("end", a(s._end, s)).bind("select", a(s._select, s)) }, events: [h, f], options: { name: "Selectable", filter: ">*", inputSelectors: m, multiple: !1, relatedTarget: e.noop }, _isElement: function (e) { var t, n = this.element, i = n.length, o = !1; for (e = e[0], t = 0; t < i; t++)if (n[t] === e) { o = !0; break } return o }, _tap: function (t) { var n, i = e(t.target), o = this, r = t.event.ctrlKey || t.event.metaKey, a = o.options.multiple, s = a && t.event.shiftKey, l = t.event.which, c = t.event.button; !o._isElement(i.closest("." + u)) || l && 3 == l || c && 2 == c || this._allowSelection(t.event.target) && (n = i.hasClass(d), a && r || o.clear(), i = i.add(o.relatedTarget(i)), s ? o.selectRange(o._firstSelectee(), i, t) : (n && r ? (o._unselect(i), o._notify(h, t)) : o.value(i, t), o._lastActive = o._downTarget = i)) }, _start: function (n) { var i, o = this, r = e(n.target), a = r.hasClass(d), s = n.event.ctrlKey || n.event.metaKey; if (this._allowSelection(n.event.target)) { if (o._downTarget = r, !o._isElement(r.closest("." + u))) return o.userEvents.cancel(), t; o.options.useAllItems ? o._items = o.element.find(o.options.filter) : (i = r.closest(o.element), o._items = i.find(o.options.filter)), n.sender.capture(), o._marquee.appendTo(document.body).css({ left: n.x.client + 1, top: n.y.client + 1, width: 0, height: 0 }), s || o.clear(), r = r.add(o.relatedTarget(r)), a && (o._selectElement(r, !0), s && r.addClass(g)) } }, _move: function (e) { var t = this, n = { left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation, top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation, width: s(e.x.initialDelta), height: s(e.y.initialDelta) }; t._marquee.css(n), t._invalidateSelectables(n, e.event.ctrlKey || e.event.metaKey), e.preventDefault() }, _end: function (e) { var t, n = this; n._marquee.remove(), n._unselect(n.element.find(n.options.filter + "." + g)).removeClass(g), t = n.element.find(n.options.filter + "." + c), t = t.add(n.relatedTarget(t)), n.value(t, e), n._lastActive = n._downTarget, n._items = null }, _invalidateSelectables: function (e, t) { var i, o, r, a, s = this._downTarget[0], l = this._items; for (i = 0, o = l.length; i < o; i++)a = l.eq(i), r = a.add(this.relatedTarget(a)), n(a, e) ? a.hasClass(d) ? t && s !== a[0] && r.removeClass(d).addClass(g) : a.hasClass(c) || a.hasClass(g) || r.addClass(c) : a.hasClass(c) ? r.removeClass(c) : t && a.hasClass(g) && r.removeClass(g).addClass(d) }, value: function (e, n) { var i = this, o = a(i._selectElement, i); return e ? (e.each(function () { o(this) }), i._notify(h, n), t) : i.element.find(i.options.filter + "." + d) }, _firstSelectee: function () { var e, t = this; return null !== t._lastActive ? t._lastActive : (e = t.value(), e.length > 0 ? e[0] : t.element.find(t.options.filter)[0]) }, _selectElement: function (t, n) { var i = e(t), o = !n && this._notify("select", { element: t }); i.removeClass(c), o || (i.addClass(d), this.options.aria && i.attr(l, !0)) }, _notify: function (e, t) { return t = t || {}, this.trigger(e, t) }, _unselect: function (e) { if (!this.trigger(f, { element: e })) return e.removeClass(d), this.options.aria && e.attr(l, !1), e }, _select: function (t) { this._allowSelection(t.event.target) && (!v || v && !e(o._activeElement()).is(this.options.inputSelectors)) && t.preventDefault() }, _allowSelection: function (t) { return !e(t).is(this.options.inputSelectors) || (this.userEvents.cancel(), this._downTarget = null, !1) }, resetTouchEvents: function () { this.userEvents.cancel() }, clear: function () { var e = this.element.find(this.options.filter + "." + d); this._unselect(e) }, selectRange: function (t, n, i) { var o, r, a, s = this; for (s.clear(), s.element.length > 1 && (a = s.options.continuousItems()), a && a.length || (a = s.element.find(s.options.filter)), t = e.inArray(e(t)[0], a), n = e.inArray(e(n)[0], a), t > n && (r = t, t = n, n = r), s.options.useAllItems || (n += s.element.length - 1), o = t; o <= n; o++)s._selectElement(a[o]); s._notify(h, i) }, destroy: function () { var e = this; r.fn.destroy.call(e), e.element.off(p), e.userEvents.destroy(), e._marquee = e._lastActive = e.element = e.userEvents = null } }), i.parseOptions = function (e) { var t = "string" == typeof e && e.toLowerCase(); return { multiple: t && t.indexOf("multiple") > -1, cell: t && t.indexOf("cell") > -1 } }, o.ui.plugin(i) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("chat/messageBox.min", ["kendo.core.min"], e) }(function () { return function (e, t) { var n = window.kendo, i = n.ui.Widget, o = e.extend, r = e.proxy, a = ".", s = ".kendoChat", l = n.keys, d = '', c = ' ', u = { input: "k-input", button: "k-button", buttonFlat: "k-flat", buttonIcon: "k-button-icon", buttonSend: "k-button-send", buttonToggle: "k-button-toggle", iconAdd: "k-icon k-i-add", hidden: "k-hidden" }, h = i.extend({ init: function (e, t) { i.fn.init.call(this, e, t), this._wrapper(), this._attachEvents(), this._typing = !1 }, events: [], options: { messages: { placeholder: "Type a message...", toggleButton: "Toggle toolbar", sendButton: "Send message" } }, destroy: function () { i.fn.destroy.call(this), this.input && (this.input.off(s), this.input.remove(), this.input = null), this.element.off(s), this.element.empty() }, _wrapper: function () { var t = h.styles, i = this.options, o = i.messages, r = "inputId_" + n.guid(); e("
    # } #') }), A = d.extend({ init: function (t, n) { var i, o, r, a, s, l = this; d.fn.init.call(l, t, n), n = l.options, t = l.element, i = t.attr("value") || t.val(), i = i ? c(i, !0) : c(n.value, !0), l._value = n.value = i, o = l.wrapper = e(l._template(n)), t.hide().after(o), l._inputWrapper = e(l.wrapper[0].firstChild), t.is("input") && (t.appendTo(o), r = t.closest("label"), a = t.attr("id"), a && (r = r.add('label[for="' + a + '"]')), r.click(function (e) { l.open(), e.preventDefault() })), l._tabIndex = t.attr("tabIndex") || 0, l.enable(!t.attr("disabled")), s = t.attr("accesskey"), s && (t.attr("accesskey", null), o.attr("accesskey", s)), l.bind("activate", function (e) { e.isDefaultPrevented() || l.toggle() }), l._updateUI(i) }, destroy: function () { this.wrapper.off(b).find("*").off(b), this._popup && (this._selector.destroy(), this._popup.destroy()), this._selector = this._popup = this.wrapper = null, d.fn.destroy.call(this) }, enable: function (e) { var t = this, n = t.wrapper, i = n.children(".k-picker-wrap"), o = i.find(".k-select"); 0 === arguments.length && (e = !0), t.element.attr("disabled", !e), n.attr("aria-disabled", !e), o.off(b).on("mousedown" + b, r), n.addClass("k-state-disabled").removeAttr("tabIndex").add("*", n).off(b), e ? n.removeClass("k-state-disabled").attr("tabIndex", t._tabIndex).on("mouseenter" + b, function () { i.addClass("k-state-hover") }).on("mouseleave" + b, function () { i.removeClass("k-state-hover") }).on("focus" + b, function () { i.addClass("k-state-focused") }).on("blur" + b, function () { i.removeClass("k-state-focused") }).on(k, a(t._keydown, t)).on(w, ".k-select", a(t.toggle, t)).on(w, t.options.toolIcon ? ".k-tool-icon" : ".k-selected-color", function () { t.trigger("activate") }) : t.close() }, _template: s.template('# if (toolIcon) { ## } else { ## } #'), options: { name: "ColorPicker", palette: null, columns: 10, toolIcon: null, value: null, messages: _, opacity: !1, buttons: !0, preview: !0, clearButton: !1, ARIATemplate: 'Current selected color is #=data || ""#' }, events: ["activate", "change", "select", "open", "close"], open: function () { this.element.prop("disabled") || this._getPopup().open() }, close: function () { var e = this._selector && this._selector.options || {}; e._closing = !0, this._getPopup().close(), delete e._closing }, toggle: function () { this.element.prop("disabled") || this._getPopup().toggle() }, _noColorIcon: function () { return this.wrapper.find(".k-picker-wrap > .k-selected-color > .k-icon.k-i-line") }, color: S.fn.color, value: S.fn.value, _select: S.fn._select, _triggerSelect: S.fn._triggerSelect, _isInputTypeColor: function () { var e = this.element[0]; return /^input$/i.test(e.tagName) && /^color$/i.test(e.type) }, _updateUI: function (e) { var t = ""; e && (t = this._isInputTypeColor() || 1 == e.a ? e.toCss() : e.toCssRgba(), this.element.val(t)), this._ariaTemplate || (this._ariaTemplate = s.template(this.options.ARIATemplate)), this.wrapper.attr("aria-label", this._ariaTemplate(t)), this._triggerSelect(e), this.wrapper.find(".k-selected-color").css(p, e ? e.toDisplay() : v), this._noColorIcon()[t ? "hide" : "show"]() }, _keydown: function (e) { var t = e.keyCode; this._getPopup().visible() ? (t == h.ESC ? this._selector._cancel() : this._selector._keydown(e), r(e)) : t != h.ENTER && t != h.DOWN || (this.open(), r(e)) }, _getPopup: function () { var t, i, o, r, a = this, l = a._popup; return l || (t = a.options, i = t.palette ? T : D, t._standalone = !1, delete t.select, delete t.change, delete t.cancel, o = s.guid(), r = a._selector = new i(e('
    ').appendTo(document.body), t), a.wrapper.attr("aria-owns", o), a._popup = l = r.wrapper.kendoPopup({ anchor: a.wrapper, adjustSize: { width: 5, height: 0 } }).data("kendoPopup"), r.element.find(".k-clear-color").kendoButton({ icon: "reset-color", click: function (e) { r.options._clearedColor = !0, a.value(null), a.element.val(null), a._updateUI(null), r._colorAsText.val(""), r._hsvHandle.css({ top: "0px", left: "0px" }), r._selectedColor.css(p, v), a.trigger("change", { value: a.value() }), e.preventDefault() } }), r.bind({ select: function (e) { a._updateUI(c(e.value)), delete r.options._clearedColor }, change: function () { r.options._clearedColor || a._select(r.color()), a.close() }, cancel: function () { r.options._clearedColor && !a.value() && r.value() && a._select(r.color(), !0), a.close() } }), l.bind({ close: function (e) { var t, i, o, s; return a.trigger("close") ? (e.preventDefault(), n) : (a.wrapper.children(".k-picker-wrap").removeClass("k-state-focused"), t = r._selectOnHide(), i = r.value(), o = a.value(), s = r.options, t ? s._clearedColor && !o || a._select(t) : (setTimeout(function () { a.wrapper && !a.wrapper.is("[unselectable='on']") && a.wrapper.focus() }), !s._closing && s._clearedColor && !o && i ? a._select(i, !0) : a._updateUI(a.color())), n) }, open: function (e) { a.trigger("open") ? e.preventDefault() : a.wrapper.children(".k-picker-wrap").addClass("k-state-focused") }, activate: function () { r._select(a.color(), !0), r.focus(), a.wrapper.children(".k-picker-wrap").addClass("k-state-focused") } })), l } }); l.plugin(T), l.plugin(D), l.plugin(A) }(jQuery, parseInt), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.floatinglabel.min", ["kendo.core.min"], e) }(function () { return function (e, t) { var n = window.kendo, i = n.ui.Widget, o = n.ui, r = ".kendoFloatingLabel", a = "k-floating-label-container", s = "k-state-empty", l = "k-state-focused", d = "k-state-disabled", c = "k-no-click", u = e.proxy, h = i.extend({ init: function (o, r) { var s = this; i.fn.init.call(s, o, r), r = e.extend(!0, {}, r), s.refresh(), s._editable({ readonly: s.options.widget.options.readonly !== t && s.options.widget.options.readonly, disable: s.options.widget.options.enable !== t && !s.options.widget.options.enable }), s.element.addClass(a), n.notify(s) }, options: { name: "FloatingLabel", widget: null }, readonly: function (e) { this._editable({ readonly: e === t || e, disable: !1 }) }, enable: function (e) { this._editable({ readonly: !1, disable: !(e = e === t || e) }) }, refresh: function () { var e = this, t = e.element; t.removeClass(s).removeClass(l), e.options.widget.element.val() || t.addClass(s), document.activeElement === e.options.widget.element[0] && t.addClass(l) }, destroy: function () { var e = this; e.element.off(r), i.fn.destroy.call(e) }, _editable: function (e) { var t = this, n = t.element, i = e.disable, o = e.readonly; n.off(r), o || i ? n.toggleClass(d, i).toggleClass(c, o) : (n.removeClass(d).removeClass(c), n.on("focusin" + r, u(t.refresh, t)), n.on("focusout" + r, u(t.refresh, t))) } }); o.plugin(h) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.numerictextbox.min", ["kendo.core.min", "kendo.userevents.min", "kendo.floatinglabel.min"], e) }(function () { return function (e, t) { function n(e, t) { var n = "k-i-arrow-" + ("increase" === e ? "60-up" : "60-down"); return '' } function i(e, t) { var n = ("" + parseFloat(e, 10)).split(D); return n[1] && (n[1] = n[1].substring(0, t)), n.join(D) } var o = window.kendo, r = o.caret, a = o.keys, s = o.ui, l = s.Widget, d = o._activeElement, c = o._extractFormat, u = o.parseFloat, h = o.support.placeholder, p = o.getCulture, f = "change", g = "disabled", m = "readonly", v = "k-input", _ = "spin", b = ".kendoNumericTextBox", w = "touchend", k = "mouseleave" + b, y = "mouseenter" + b + " " + k, x = "k-state-default", C = "k-state-focused", S = "k-state-hover", T = "focus", D = ".", A = "k-icon", E = "k-label k-input-label", I = "k-state-selected", M = "k-state-disabled", R = "k-state-invalid", F = "aria-disabled", P = /^(-)?(\d*)$/, z = null, B = e.proxy, L = e.isPlainObject, H = e.extend, N = l.extend({ init: function (n, i) { var r, a, s, d, u, h, p = this, f = i && i.step !== t; l.fn.init.call(p, n, i), i = p.options, n = p.element.on("focusout" + b, B(p._focusout, p)).attr("role", "spinbutton"), i.placeholder = i.placeholder || n.attr("placeholder"), r = p.min(n.attr("min")), a = p.max(n.attr("max")), s = p._parse(n.attr("step")), i.min === z && r !== z && (i.min = r), i.max === z && a !== z && (i.max = a), f || s === z || (i.step = s), p._initialOptions = H({}, i), h = n.attr("type"), p._reset(), p._wrapper(), p._arrows(), p._validation(), p._input(), o.support.mobileOS ? p._text.on(w + b + " " + T + b, function () { o.support.browser.edge ? p._text.one(T + b, function () { p._toggleText(!1), n.focus() }) : (p._toggleText(!1), n.focus()) }) : p._text.on(T + b, B(p._click, p)), n.attr("aria-valuemin", i.min !== z ? i.min * i.factor : i.min).attr("aria-valuemax", i.max !== z ? i.max * i.factor : i.max), i.format = c(i.format), d = i.value, d == z && (d = "number" == h ? parseFloat(n.val()) : n.val()), p.value(d), u = n.is("[disabled]") || e(p.element).parents("fieldset").is(":disabled"), u ? p.enable(!1) : p.readonly(n.is("[readonly]")), p.angular("compile", function () { return { elements: p._text.get() } }), p._label(), o.notify(p) }, options: { name: "NumericTextBox", decimals: z, restrictDecimals: !1, min: z, max: z, value: z, step: 1, round: !0, culture: "", format: "n", spinners: !0, placeholder: "", factor: 1, upArrowText: "Increase value", downArrowText: "Decrease value", label: null }, events: [f, _], _editable: function (e) { var t = this, n = t.element, i = e.disable, o = e.readonly, r = t._text.add(n), a = t._inputWrapper.off(y); t._toggleText(!0), t._upArrowEventHandler.unbind("press"), t._downArrowEventHandler.unbind("press"), n.off("keydown" + b).off("keyup" + b).off("input" + b).off("paste" + b), t._inputLabel && t._inputLabel.off(b), o || i ? (a.addClass(i ? M : x).removeClass(i ? x : M), r.attr(g, i).attr(m, o).attr(F, i)) : (a.addClass(x).removeClass(M).on(y, t._toggleHover), r.removeAttr(g).removeAttr(m).attr(F, !1), t._upArrowEventHandler.bind("press", function (e) { e.preventDefault(), t._spin(1), t._upArrow.addClass(I) }), t._downArrowEventHandler.bind("press", function (e) { e.preventDefault(), t._spin(-1), t._downArrow.addClass(I) }), t.element.on("keydown" + b, B(t._keydown, t)).on("keyup" + b, B(t._keyup, t)).on("paste" + b, B(t._paste, t)).on("input" + b, B(t._inputHandler, t)), t._inputLabel && t._inputLabel.on("click" + b, B(t.focus, t))) }, readonly: function (e) { var n = this; this._editable({ readonly: e === t || e, disable: !1 }), n.floatingLabel && n.floatingLabel.readonly(e === t || e) }, enable: function (e) { var n = this; this._editable({ readonly: !1, disable: !(e = e === t || e) }), n.floatingLabel && n.floatingLabel.enable(e = e === t || e) }, setOptions: function (e) { var n = this; l.fn.setOptions.call(n, e), n._arrowsWrap.toggle(n.options.spinners), n._inputWrapper.toggleClass("k-expand-padding", !n.options.spinners), n._text.prop("placeholder", n.options.placeholder), n._placeholder(n.options.placeholder), n.element.attr({ "aria-valuemin": n.options.min !== z ? n.options.min * n.options.factor : n.options.min, "aria-valuemax": n.options.max !== z ? n.options.max * n.options.factor : n.options.max }), n.options.format = c(n.options.format), e.value !== t && n.value(e.value) }, destroy: function () { var e = this; e._inputLabel && (e._inputLabel.off(b), e.floatingLabel && e.floatingLabel.destroy()), e.element.add(e._text).add(e._upArrow).add(e._downArrow).add(e._inputWrapper).off(b), e._upArrowEventHandler.destroy(), e._downArrowEventHandler.destroy(), e._form && e._form.off("reset", e._resetHandler), l.fn.destroy.call(e) }, min: function (e) { return this._option("min", e) }, max: function (e) { return this._option("max", e) }, step: function (e) { return this._option("step", e) }, value: function (e) { var n, i = this; return e === t ? i._value : (e = i._parse(e), n = i._adjust(e), e === n && (i._update(e), i._old = i._value), t) }, focus: function () { this._focusin() }, _adjust: function (e) { var t = this, n = t.options, i = n.min, o = n.max; return e === z ? e : (i !== z && e < i ? e = i : o !== z && e > o && (e = o), e) }, _arrows: function () { var t, i = this, r = function () { clearTimeout(i._spinning), t.removeClass(I) }, a = i.options, s = a.spinners, l = i.element; t = l.siblings("." + A), t[0] || (t = e(n("increase", a.upArrowText) + n("decrease", a.downArrowText)).insertAfter(l), i._arrowsWrap = t.wrapAll('').parent()), s || (t.parent().toggle(s), i._inputWrapper.addClass("k-expand-padding")), i._upArrow = t.eq(0), i._upArrowEventHandler = new o.UserEvents(i._upArrow, { release: r }), i._downArrow = t.eq(1), i._downArrowEventHandler = new o.UserEvents(i._downArrow, { release: r }) }, _validation: function () { var t = this, n = t.element; t._validationIcon = e("").hide().insertAfter(n) }, _blur: function () { var e = this; e._toggleText(!0), e._change(e.element.val()) }, _click: function (e) { var t = this; clearTimeout(t._focusing), t._focusing = setTimeout(function () { var n, i, o, a = e.target, s = r(a)[0], l = a.value.substring(0, s), d = t._format(t.options.format), c = d[","], u = 0; c && (i = RegExp("\\" + c, "g"), o = RegExp("(^(-)$)|(^(-)?([\\d\\" + c + "]+)(\\" + d[D] + ")?(\\d+)?)")), o && (n = o.exec(l)), n && (u = n[0].replace(i, "").length, l.indexOf("(") != -1 && t._value < 0 && u++), t._focusin(), r(t.element[0], u) }) }, _change: function (e) { var t = this, n = t.options.factor; n && 1 !== n && (e = o.parseFloat(e), null !== e && (e /= n)), t._update(e), e = t._value, t._old != e && (t._old = e, t._typing || t.element.trigger(f), t.trigger(f)), t._typing = !1 }, _culture: function (e) { return e || p(this.options.culture) }, _focusin: function () { var e = this; e._inputWrapper.addClass(C), e._toggleText(!1), e.element[0].focus() }, _focusout: function () { var e = this; clearTimeout(e._focusing), e._inputWrapper.removeClass(C).removeClass(S), e._blur(), e._removeInvalidState() }, _format: function (e, t) { var n = this._culture(t).numberFormat; return e = e.toLowerCase(), e.indexOf("c") > -1 ? n = n.currency : e.indexOf("p") > -1 && (n = n.percent), n }, _input: function () { var t, n = this, i = n.options, o = "k-formatted-value", r = n.element.addClass(v).show()[0], a = r.accessKey, s = n.wrapper; t = s.find(D + o), t[0] || (t = e('').insertBefore(r).addClass(o).attr("aria-hidden", "true")); try { r.setAttribute("type", "text") } catch (l) { r.type = "text" } t[0].title = r.title, t[0].tabIndex = r.tabIndex, t[0].style.cssText = r.style.cssText, t.prop("placeholder", i.placeholder), a && (t.attr("accesskey", a), r.accessKey = ""), n._text = t.addClass(r.className).attr({ role: "spinbutton", "aria-valuemin": i.min !== z ? i.min * i.factor : i.min, "aria-valuemax": i.max !== z ? i.max * i.factor : i.max, autocomplete: "off" }) }, _keydown: function (e) { var n = this, i = e.keyCode; return i === a.NUMPAD_DOT && (n._numPadDot = !0), i == a.DOWN ? (n._step(-1), t) : i == a.UP ? (n._step(1), t) : i == a.ENTER ? (n._change(n.element.val()), t) : (i != a.TAB && (n._typing = !0), n._cachedCaret = r(n.element), t) }, _keyup: function () { this._removeInvalidState() }, _inputHandler: function () { var e = this.element, t = e.val(), n = this.options.min, i = this._format(this.options.format), o = i[D], a = null !== n && n >= 0 && "-" === t.charAt(0); this._numPadDot && o !== D && (t = t.replace(D, o), this.element.val(t), this._numPadDot = !1), this._numericRegex(i).test(t) && !a ? this._oldText = t : (this._blinkInvalidState(), this.element.val(this._oldText), this._cachedCaret && (r(e, this._cachedCaret[0]), this._cachedCaret = null)) }, _blinkInvalidState: function () { var e = this; e._addInvalidState(), clearTimeout(e._invalidStateTimeout), e._invalidStateTimeout = setTimeout(B(e._removeInvalidState, e), 100) }, _addInvalidState: function () { var e = this; e._inputWrapper.addClass(R), e._validationIcon.show() }, _removeInvalidState: function () { var e = this; e._inputWrapper.removeClass(R), e._validationIcon.hide(), e._invalidStateTimeout = null }, _numericRegex: function (e) { var t = this, n = e[D], i = t.options.decimals, o = "*"; return n === D && (n = "\\" + n), i === z && (i = e.decimals), 0 === i && t.options.restrictDecimals ? P : (t.options.restrictDecimals && (o = "{0," + i + "}"), t._separator !== n && (t._separator = n, t._floatRegExp = RegExp("^(-)?(((\\d+(" + n + "\\d" + o + ")?)|(" + n + "\\d" + o + ")))?$")), t._floatRegExp) }, _paste: function (e) { var t = this, n = e.target, i = n.value, o = t._format(t.options.format); setTimeout(function () { var e = t._parse(n.value); e === z ? t._update(i) : (n.value = ("" + e).replace(D, o[D]), t._adjust(e) === e && t._numericRegex(o).test(n.value) || t._update(i)) }) }, _option: function (e, n) { var i = this, o = i.element, r = i.options; return n === t ? r[e] : (n = i._parse(n), (n || "step" !== e) && (r[e] = n, o.add(i._text).attr("aria-value" + e, n), o.attr(e, n)), t) }, _spin: function (e, t) { var n = this; t = t || 500, clearTimeout(n._spinning), n._spinning = setTimeout(function () { n._spin(e, 50) }, t), n._step(e) }, _step: function (e) { var t = this, n = t.element, i = t._value, o = t._parse(n.val()) || 0, r = t.options.decimals || 2; d() != n[0] && t._focusin(), t.options.factor && o && (o /= t.options.factor), o = +(o + t.options.step * e).toFixed(r), o = t._adjust(o), t._update(o), t._typing = !1, i !== o && t.trigger(_) }, _toggleHover: function (t) { e(t.currentTarget).toggleClass(S, "mouseenter" === t.type) }, _toggleText: function (e) { var t = this; t._text.toggle(e), t.element.toggle(!e) }, _parse: function (e, t) { return u(e, this._culture(t), this.options.format) }, _round: function (e, t) { var n = this.options.round ? o._round : i; return n(e, t) }, _update: function (e) { var t, n = this, i = n.options, r = i.factor, a = i.format, s = i.decimals, l = n._culture(), d = n._format(a, l); s === z && (s = d.decimals), e = n._parse(e, l), t = e !== z, t && (e = parseFloat(n._round(e, s), 10)), n._value = e = n._adjust(e), n._placeholder(o.toString(e, a, l)), t ? (r && (e = parseFloat(n._round(e * r, s), 10)), e = "" + e, e.indexOf("e") !== -1 && (e = n._round(+e, s)), e = e.replace(D, d[D])) : e = null, n.element.val(e), n._oldText = e, n.element.add(n._text).attr("aria-valuenow", e) }, _placeholder: function (e) { var t = this._text; t.val(e), h || e || t.val(this.options.placeholder), t.attr("title", this.element.attr("title") || t.val()) }, _label: function () { var n, i, r = this, a = r.element, s = r.options, l = a.attr("id"); null !== s.label && (n = !!L(s.label) && s.label.floating, i = L(s.label) ? s.label.content : s.label, n && (r._floatingLabelContainer = r.wrapper.wrap("").parent(), r.floatingLabel = new o.ui.FloatingLabel(r._floatingLabelContainer, { widget: r })), o.isFunction(i) && (i = i.call(r)), i || (i = ""), l || (l = s.name + "_" + o.guid(), a.attr("id", l)), r._inputLabel = e("'").insertBefore(r.wrapper), r.element.attr("disabled") === t && r.element.attr("readonly") === t && r._inputLabel.on("click" + b, B(r.focus, r))) }, _wrapper: function () { var t, n = this, i = n.element, o = i[0]; t = i.parents(".k-numerictextbox"), t.is("span.k-numerictextbox") || (t = i.hide().wrap('').parent(), t = t.wrap("").parent()), t[0].style.cssText = o.style.cssText, o.style.width = "", n.wrapper = t.addClass("k-widget k-numerictextbox").addClass(o.className).removeClass("input-validation-error").css("display", ""), n._inputWrapper = e(t[0].firstChild) }, _reset: function () { var t = this, n = t.element, i = n.attr("form"), o = i ? e("#" + i) : n.closest("form"); o[0] && (t._resetHandler = function () { setTimeout(function () { t.value(n[0].value), t.max(t._initialOptions.max), t.min(t._initialOptions.min) }) }, t._form = o.on("reset", t._resetHandler)) } }); s.plugin(N) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.filtermenu.min", ["kendo.datepicker.min", "kendo.numerictextbox.min", "kendo.dropdownlist.min", "kendo.binder.min"], e) }(function () { return function (e, t) { function n(t, i) { t.filters && (t.filters = e.grep(t.filters, function (e) { return n(e, i), e.filters ? e.filters.length : e.field != i })) } function i(e) { var t, n, i, o, r, a; if (e && e.length) for (a = [], t = 0, n = e.length; t < n; t++)i = e[t], r = "" !== i.text ? i.text || i.value || i : i.text, o = null == i.value ? i.text || i : i.value, a[t] = { text: r, value: o }; return a } function o(t, n) { return e.grep(t, function (t) { return t.filters ? (t.filters = e.grep(t.filters, function (e) { return e.field != n }), t.filters.length) : t.field != n }) } function r(t, n) { t.filters && (t.filters = e.grep(t.filters, function (e) { return r(e, n), e.filters ? e.filters.length : e.field == n && "eq" == e.operator })) } function a(n) { return "and" == n.logic && n.filters.length > 1 ? [] : n.filters ? e.map(n.filters, function (e) { return a(e) }) : n.value !== t ? [n.value] : [] } function s(e, n) { for (var i, o, r = d.getter(n, !0), a = [], s = 0, l = {}; s < e.length;)i = e[s++], o = r(i), o === t || l.hasOwnProperty(o) || (a.push(i), l[o] = !0); return a } function l(e, t) { return function (n) { var i = e(n); return s(i, t) } } var d = window.kendo, c = d.ui, u = e.proxy, h = d.support, p = h.browser.chrome ? "disabled" : "off", f = "kendoPopup", g = "init", m = "open", v = "refresh", _ = "change", b = ".kendoFilterMenu", w = "Is equal to", k = "Is not equal to", y = { number: "numerictextbox", date: "datepicker" }, x = { string: "text", number: "number", date: "date" }, C = d.isFunction, S = c.Widget, T = '
    #=messages.info#
    ', D = '
    #=messages.info#
    ', A = '
    #=messages.info#
    #if(values){##}else{##}##if(extra){##if(values){##}else{##}##}#
    ', E = '
    #=messages.filter# #=messages.into# #=title#
    • #=messages.info#
      #if(extra){#
      #}#
    •  
      • #=messages.clear#
    ', I = '
    #=messages.filter# #=messages.into# #=title#
    • #=messages.info#
    •  
      • #=messages.clear#
    ', M = S.extend({ init: function (t, n) { var i, o, r, a, s = this, l = "string"; S.fn.init.call(s, t, n), i = s.operators = n.operators || {}, t = s.element, n = s.options, n.appendToElement || (r = t.addClass("k-with-icon k-filterable").find(".k-grid-filter"), r[0] || (r = t.prepend('').find(".k-grid-filter")), r.attr("tabindex", -1).on("click" + b, u(s._click, s))), s.link = r || e(), s.dataSource = F.create(n.dataSource), s.field = n.field || t.attr(d.attr("field")), s.model = s.dataSource.reader.model, s._parse = function (e) { return null != e ? e + "" : e }, s.model && s.model.fields && (a = s.model.fields[s.field], a && (l = a.type || "string", a.parse && (s._parse = u(a.parse, a)))), n.values && (l = "enums"), s.type = l, i = i[l] || n.operators[l]; for (o in i) break; s._defaultFilter = function () { return { field: s.field, operator: o || "eq", value: "" } }, s._refreshHandler = u(s.refresh, s), s.dataSource.bind(_, s._refreshHandler), n.appendToElement ? s._init() : s.refresh() }, _init: function () { var t, n = this, i = n.options.ui, o = C(i); n.pane = n.options.pane, n.pane && (n._isMobile = !0), o || (t = i || y[n.type]), n._isMobile ? n._createMobileForm(t) : n._createForm(t), n.form.on("submit" + b, u(n._submit, n)).on("reset" + b, u(n._reset, n)), o && n.form.find(".k-textbox").removeClass("k-textbox").each(function () { i(e(this)) }), n.form.find("[" + d.attr("role") + "=numerictextbox]").removeClass("k-textbox").end().find("[" + d.attr("role") + "=datetimepicker]").removeClass("k-textbox").end().find("[" + d.attr("role") + "=timepicker]").removeClass("k-textbox").end().find("[" + d.attr("role") + "=datepicker]").removeClass("k-textbox"), n.refresh(), n.trigger(g, { field: n.field, container: n.form }), d.cycleForm(n.form) }, _createForm: function (t) { var n = this, o = n.options, r = n.operators || {}, a = n.type, s = C(n.options.ui); r = r[a] || o.operators[a], n.form = e('
    ').html(d.template("boolean" === a ? s ? D : T : A)({ field: n.field, format: o.format, ns: d.ns, messages: o.messages, extra: o.extra, operators: r, type: a, role: t, values: i(o.values) })), o.appendToElement ? (n.element.append(n.form), n.popup = n.element.closest(".k-popup").data(f)) : n.popup = n.form[f]({ anchor: n.link, open: u(n._open, n), activate: u(n._activate, n), close: function () { n.options.closeCallback && n.options.closeCallback(n.element) } }).data(f), n.form.on("keydown" + b, u(n._keydown, n)) }, _createMobileForm: function (t) { var n = this, o = n.options, r = n.operators || {}, a = d.guid(), s = n.type; r = r[s] || o.operators[s], n.form = e("
    ").html(d.template("boolean" === s ? I : E)({ field: n.field, title: o.title || n.field, format: o.format, ns: d.ns, messages: o.messages, extra: o.extra, operators: r, filterMenuGuid: a, type: s, role: t, inputType: x[s], values: i(o.values) })), n.view = n.pane.append(n.form.html()), n.form = n.view.element.find("form"), n.view.element.on("click", ".k-header-done", function (e) { n.form.submit(), e.preventDefault() }).on("click", ".k-header-cancel", function (e) { n._closeForm(), e.preventDefault() }).on("click", ".k-clear", function (e) { n._mobileClear(), e.preventDefault() }), n.view.bind("showStart", function () { n.refresh() }) }, refresh: function () { var e = this, t = e.dataSource.filter() || { filters: [], logic: "and" }, n = [e._defaultFilter()], i = e._defaultFilter().operator; (e.options.extra || "isnull" !== i && "isnullorempty" !== i && "isnotnullorempty" !== i && "isnotnull" !== i && "isempty" !== i && "isnotempty" !== i) && n.push(e._defaultFilter()), e.filterModel = d.observable({ logic: "and", filters: n }), e.form && d.bind(e.form.children().first(), e.filterModel), e._bind(t) ? e.link.addClass("k-state-active") : e.link.removeClass("k-state-active") }, destroy: function () { var e = this; S.fn.destroy.call(e), e.form && (d.unbind(e.form), d.destroy(e.form), e.form.unbind(b), e.popup && (e.popup.destroy(), e.popup = null), e.form = null), e.view && (e.view.purge(), e.view = null), e.link.unbind(b), e._refreshHandler && (e.dataSource.unbind(_, e._refreshHandler), e.dataSource = null), e.element = e.link = e._refreshHandler = e.filterModel = null }, _bind: function (e) { var t, n, i, o, r = this, a = e.filters, s = !1, l = 0, d = r.filterModel; for (t = 0, n = a.length; t < n; t++)o = a[t], o.field == r.field ? (d.set("logic", e.logic), i = d.filters[l], i || (d.filters.push({ field: r.field }), i = d.filters[l]), i.set("value", r._parse(o.value)), i.set("operator", o.operator), l++, s = !0) : o.filters && (s = s || r._bind(o)); return s }, _stripFilters: function (t) { return e.grep(t, function (e) { return "" !== e.value && null != e.value || "isnull" === e.operator || "isnotnull" === e.operator || "isempty" === e.operator || "isnotempty" === e.operator || "isnullorempty" == e.operator || "isnotnullorempty" == e.operator }) }, _merge: function (e) { var t, i, o, r = this, a = e.logic || "and", s = this._stripFilters(e.filters), l = r.dataSource.filter() || { filters: [], logic: "and" }; for (n(l, r.field), i = 0, o = s.length; i < o; i++)t = s[i], t.value = r._parse(t.value); return s.length && (l.filters.length ? (e.filters = s, "and" !== l.logic && (l.filters = [{ logic: l.logic, filters: l.filters }], l.logic = "and"), l.filters.push(s.length > 1 ? e : s[0])) : (l.filters = s, l.logic = a)), l }, filter: function (e) { var t = this._stripFilters(e.filters); t.length && this.trigger("change", { filter: { logic: e.logic, filters: t }, field: this.field }) || (e = this._merge(e), e.filters.length && this.dataSource.filter(e)) }, clear: function () { var e = this, t = e.dataSource.filter() || { filters: [] }; this.trigger("change", { filter: null, field: e.field }) || e._removeFilter(t) }, _mobileClear: function () { var t, n, i, o, r, a = this, s = a.view.element; "boolean" === a.type ? (t = s.find("[type='radio']:checked"), n = t.val(), t.val(""), t.trigger("change"), t.val(n), t.prop("checked", !1)) : (i = s.find("select"), i.each(function (t, n) { var i = e(n); i.val(i.find("option:first").val()), i.trigger("change") }), "string" !== a.type && "date" !== a.type && "number" !== a.type || (o = s.find(".k-value-input"), o.each(function (t, n) { var i = e(n); i.val(""), i.trigger("change") })), a.options.extra && (r = s.find("[name=logic]").first(), r.prop("checked", !0), r.trigger("change"))) }, _removeFilter: function (t) { var n = this; t.filters = e.grep(t.filters, function (e) { return e.filters ? (e.filters = o(e.filters, n.field), e.filters.length) : e.field != n.field }), t.filters.length || (t = null), n.dataSource.filter(t) }, _submit: function (t) { var n, i, o; t.preventDefault(), t.stopPropagation(), n = this.filterModel.toJSON(), i = e.grep(n.filters, function (e) { return "" !== e.value && null !== e.value }), this._checkForNullOrEmptyFilter(n) || i && i.length ? this.filter(n) : (o = this.dataSource.filter(), o && (o.filters.push(n), n = o), this._removeFilter(n)), this._closeForm() }, _checkForNullOrEmptyFilter: function (e) { var t, n, i; return !!(e && e.filters && e.filters.length) && (t = !1, n = !1, e.filters[0] && (i = e.filters[0].operator, t = "isnull" == i || "isnotnull" == i || "isnotempty" == i || "isempty" == i || "isnullorempty" == i || "isnotnullorempty" == i), e.filters[1] && (i = e.filters[1].operator, n = "isnull" == i || "isnotnull" == i || "isnotempty" == i || "isempty" == i || "isnullorempty" == i || "isnotnullorempty" == i), !this.options.extra && t || this.options.extra && (t || n)) }, _reset: function () { this.clear(), this.options.search && this.container && this.container.find("label").parent().show(), this._closeForm() }, _closeForm: function () { this._isMobile ? this.pane.navigate("", this.options.animations.right) : this.popup.close() }, _click: function (e) { e.preventDefault(), e.stopPropagation(), this.popup || this.pane || this._init(), this._isMobile ? this.pane.navigate(this.view, this.options.animations.left) : this.popup.toggle() }, _open: function () { var t; e(".k-filter-menu").not(this.form).each(function () { t = e(this).data(f), t && t.close() }) }, _activate: function () { this.form.find(":kendoFocusable:first").focus(), this.trigger(m, { field: this.field, container: this.form }) }, _keydown: function (e) { e.keyCode == d.keys.ESC && this.popup.close() }, events: [g, "change", m], options: { name: "FilterMenu", extra: !0, appendToElement: !1, type: "string", operators: { string: { eq: w, neq: k, startswith: "Starts with", contains: "Contains", doesnotcontain: "Does not contain", endswith: "Ends with", isnull: "Is null", isnotnull: "Is not null", isempty: "Is empty", isnotempty: "Is not empty", isnullorempty: "Has no value", isnotnullorempty: "Has value" }, number: { eq: w, neq: k, gte: "Is greater than or equal to", gt: "Is greater than", lte: "Is less than or equal to", lt: "Is less than", isnull: "Is null", isnotnull: "Is not null" }, date: { eq: w, neq: k, gte: "Is after or equal to", gt: "Is after", lte: "Is before or equal to", lt: "Is before", isnull: "Is null", isnotnull: "Is not null" }, enums: { eq: w, neq: k, isnull: "Is null", isnotnull: "Is not null" } }, messages: { info: "Show items with value that:", title: "Show items with value that:", isTrue: "is true", isFalse: "is false", filter: "Filter", clear: "Clear", and: "And", or: "Or", selectValue: "-Select value-", operator: "Operator", value: "Value", additionalValue: "Additional value", additionalOperator: "Additional operator", logic: "Filters logic", cancel: "Cancel", done: "Done", into: "in" }, animations: { left: "slide", right: "slide:right" } } }), R = ".kendoFilterMultiCheck", F = d.data.DataSource, P = '
    #=messages.filter# #=messages.into# #=title#
      #if(search){#
    • #}#
    • #=messages.checkAll##=messages.clearAll#
    • #if(messages.selectedItemsFormat){#
    • #}#
      ', z = S.extend({ init: function (t, n) { var i, o; S.fn.init.call(this, t, n), n = this.options, this.element = e(t), i = this.field = this.options.field || this.element.attr(d.attr("field")), o = n.checkSource, this._foreignKeyValues() ? (this.checkSource = F.create(n.values), this.checkSource.fetch()) : n.forceUnique ? (o = e.extend(!0, {}, n.dataSource.options), delete o.pageSize, this.checkSource = F.create(o), this.checkSource.reader.data = l(this.checkSource.reader.data, this.field)) : this.checkSource = F.create(o), this.dataSource = n.dataSource, this.model = this.dataSource.reader.model, this._parse = function (e) { return e + "" }, this.model && this.model.fields && (i = this.model.fields[this.field], i && ("number" == i.type ? this._parse = function (e) { return "string" == typeof e && "null" === e.toLowerCase() ? null : parseFloat(e) } : i.parse && (this._parse = u(i.parse, i)), this.type = i.type || "string")), n.appendToElement ? this._init() : this._createLink(), this._refreshHandler = u(this.refresh, this), this.dataSource.bind(_, this._refreshHandler) }, _createLink: function () { var e = this.element, t = e.addClass("k-with-icon k-filterable").find(".k-grid-filter"); t[0] || (t = e.prepend('').find(".k-grid-filter")), this._link = t.attr("tabindex", -1).on("click" + b, u(this._click, this)) }, _init: function () { var e = this, t = this.options.forceUnique, n = this.options; this.pane = n.pane, this.pane && (this._isMobile = !0), this._createForm(), this._foreignKeyValues() ? this.refresh() : t && !this.checkSource.options.serverPaging && this.dataSource.data().length ? (this.checkSource.data(s(this.dataSource.data(), this.field)), this.refresh()) : (this._attachProgress(), this.checkSource.fetch(function () { e.refresh.call(e) })), this.options.forceUnique || (this.checkChangeHandler = function () { e.container.empty(), e.refresh() }, this.checkSource.bind(_, this.checkChangeHandler)), this.form.on("keydown" + R, u(this._keydown, this)).on("submit" + R, u(this._filter, this)).on("reset" + R, u(this._reset, this)), this.trigger(g, { field: this.field, container: this.form }) }, _attachProgress: function () { var e = this; this._progressHandler = function () { c.progress(e.container, !0) }, this._progressHideHandler = function () { c.progress(e.container, !1) }, this.checkSource.bind("progress", this._progressHandler).bind("change", this._progressHideHandler) }, _input: function () { var e = this; e._clearTypingTimeout(), e._typingTimeout = setTimeout(function () { e.search() }, 100) }, _clearTypingTimeout: function () { this._typingTimeout && (clearTimeout(this._typingTimeout), this._typingTimeout = null) }, search: function () { var e, t, n, i = this.options.ignoreCase, o = this.searchTextBox[0].value, r = this.container.find("label"); for (i && (o = o.toLowerCase()), e = 0, this.options.checkAll && r.length && (this._isMobile ? this.view.element.find(".k-select-all")[0].style.visibility = o ? "hidden" : "" : (r[0].parentNode.style.display = o ? "none" : "", e++)); e < r.length;)t = r[e], n = t.textContent || t.innerText, i && (n = n.toLowerCase()), t.parentNode.style.display = n.indexOf(o) >= 0 ? "" : "none", e++ }, _activate: function () { this.form.find(":kendoFocusable:first").focus(), this.trigger(m, { field: this.field, container: this.form }) }, _createForm: function () { var t, n = this.options, i = "", o = this; this._isMobile || (i += "
      ", n.search && (i += "
      "), i += "
        ", n.messages.selectedItemsFormat && (i += "
        " + d.format(n.messages.selectedItemsFormat, 0) + "
        "), i += "
        ", i += "", i += "", i += "
        ", i += "
        ", this.form = e('
        ').html(i), this.container = this.form.find(".k-multicheck-wrap")), this._isMobile ? (o.form = e("
        ").html(d.template(P)({ field: o.field, title: n.title || o.field, ns: d.ns, messages: n.messages, search: n.search, checkAll: n.checkAll })), o.view = o.pane.append(o.form.html()), o.form = o.view.element.find("form"), t = this.view.element, this.container = t.find(".k-multicheck-wrap"), t.on("click", ".k-header-done", function (e) { o.form.submit(), e.preventDefault() }).on("click", ".k-header-cancel", function (e) { o._closeForm(), e.preventDefault() }).on("click", ".k-clear-all", function (e) { o._mobileCheckAll(!1), e.preventDefault() }).on("click", ".k-select-all", function (e) { o._mobileCheckAll(!0), e.preventDefault() }), o.view.bind("showStart", function () { o.refresh() })) : n.appendToElement ? (this.popup = this.element.closest(".k-popup").data(f), this.element.append(this.form)) : o.popup = o.form.kendoPopup({ anchor: o._link, open: u(o._open, o), activate: u(o._activate, o), close: function () { o.options.closeCallback && o.options.closeCallback(o.element) } }).data(f), n.search && (this.searchTextBox = this.form.find(".k-textbox > input"), this.searchTextBox.on("input", u(this._input, this))) }, createCheckAllItem: function () { var t = this.options, n = d.template(t.itemTemplate({ field: "all", mobile: this._isMobile })), i = e(n({ all: t.messages.checkAll })); this.container.prepend(i), this.checkBoxAll = i.find(":checkbox").eq(0).addClass("k-check-all"), this.checkAllHandler = u(this.checkAll, this), this.checkBoxAll.on(_ + R, this.checkAllHandler) }, updateCheckAllState: function () { if (this.options.messages.selectedItemsFormat && this.form.find(".k-filter-selected-items").text(d.format(this.options.messages.selectedItemsFormat, this.container.find(":checked:not(.k-check-all)").length)), this.checkBoxAll) { var e = this.container.find(":checkbox:not(.k-check-all)").length == this.container.find(":checked:not(.k-check-all)").length; this.checkBoxAll.prop("checked", e) } }, refresh: function (e) { var t = this.options.forceUnique, n = this.dataSource, i = this.getFilterArray(); this._link && this._link.toggleClass("k-state-active", 0 !== i.length), this.form && (e && t && e.sender === n && !n.options.serverPaging && ("itemchange" == e.action || "add" == e.action || "remove" == e.action || n.options.autoSync && "sync" === e.action) && !this._foreignKeyValues() && (this.checkSource.data(s(this.dataSource.data(), this.field)), this.container.empty()), this.container.is(":empty") && this.createCheckBoxes(), this.checkValues(i), this.trigger(v)) }, getFilterArray: function () { var t, n = e.extend(!0, {}, { filters: [], logic: "and" }, this.dataSource.filter()); return r(n, this.field), t = a(n) }, createCheckBoxes: function () { var e, t, n, i = this.options, o = { field: this.field, format: i.format, mobile: this._isMobile, type: this.type }; this.options.forceUnique ? this._foreignKeyValues() ? (e = this.checkSource.data(), o.valueField = "value", o.field = "text") : e = this.checkSource._isServerGrouped() ? s(this.checkSource._flatData(this.checkSource.data()), this.field) : this.checkSource.data() : e = this.checkSource.view(), t = d.template(i.itemTemplate(o)), n = d.render(t, e), i.checkAll && !this._isMobile && this.createCheckAllItem(), this.container.on(_ + R, ":checkbox", u(this.updateCheckAllState, this)), this.container.append(n) }, checkAll: function () { var e = this.checkBoxAll.is(":checked"); this.container.find(":checkbox").prop("checked", e) }, checkValues: function (t) { var n = this; e(e.grep(this.container.find(":checkbox").prop("checked", !1), function (i) { var o, r, a = !1; if (!e(i).is(".k-check-all")) for (o = n._parse(e(i).val()), r = 0; r < t.length; r++)if (a = "date" == n.type ? t[r] && o ? t[r].getTime() == o.getTime() : null === t[r] && null === o : t[r] == o) return a })).prop("checked", !0), this.updateCheckAllState() }, _mobileCheckAll: function (t) { var n = this, i = n.container.find(":checkbox"); i.each(function (n, i) { var o = e(i); o.prop("checked", t), o.trigger("change") }) }, _filter: function (t) { var n, i; t.preventDefault(), t.stopPropagation(), n = { logic: "or" }, i = this, n.filters = e.map(this.form.find(":checkbox:checked:not(.k-check-all)"), function (t) { return { value: e(t).val(), operator: "eq", field: i.field } }), n.filters.length && this.trigger("change", { filter: n, field: i.field }) || (n = this._merge(n), n.filters.length ? this.dataSource.filter(n) : this.clear(), this._closeForm()) }, _stripFilters: function (t) { return e.grep(t, function (e) { return null != e.value }) }, _foreignKeyValues: function () { var e = this.options; return e.values && !e.checkSource }, destroy: function () { var e = this; S.fn.destroy.call(e), e.form && (d.unbind(e.form), d.destroy(e.form), e.form.unbind(R), e.popup && (e.popup.destroy(), e.popup = null), e.form = null, e.container && (e.container.unbind(R), e.container = null), e.checkBoxAll && e.checkBoxAll.unbind(R)), e.view && (e.view.purge(), e.view = null), e._link && e._link.unbind(b), e._refreshHandler && (e.dataSource.unbind(_, e._refreshHandler), e.dataSource = null), e.checkChangeHandler && e.checkSource.unbind(_, e.checkChangeHandler), e._progressHandler && e.checkSource.unbind("progress", e._progressHandler), e._progressHideHandler && e.checkSource.unbind("change", e._progressHideHandler), this._clearTypingTimeout(), this.searchTextBox = null, e.element = e.checkSource = e.container = e.checkBoxAll = e._link = e._refreshHandler = e.checkAllHandler = null }, options: { name: "FilterMultiCheck", itemTemplate: function (e) { var n = e.field, i = e.format, o = e.valueField, r = e.mobile, a = ""; return o === t && (o = n), "date" == e.type && (a = ":yyyy-MM-ddTHH:mm:sszzz"), r ? "
      • " : "
      • " }, checkAll: !0, search: !1, ignoreCase: !0, appendToElement: !1, messages: { checkAll: "Select All", clearAll: "Clear All", clear: "Clear", filter: "Filter", search: "Search", cancel: "Cancel", selectedItemsFormat: "{0} items selected", done: "Done", into: "in" }, forceUnique: !0, animations: { left: "slide", right: "slide:right" } }, events: [g, v, "change", m] }); e.extend(z.fn, { _click: M.fn._click, _keydown: M.fn._keydown, _reset: M.fn._reset, _closeForm: M.fn._closeForm, _removeFilter: M.fn._removeFilter, clear: M.fn.clear, _merge: M.fn._merge }), c.plugin(M), c.plugin(z) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.menu.min", ["kendo.popup.min", "kendo.data.min"], e) }(function () { return function (e, t) { function n(e, t) { return e = e.split(" ")[!t + 0] || e, e.replace("top", "up").replace("bottom", "down") } function i(e, t, n) { e = e.split(" ")[!t + 0] || e; var i = { origin: ["bottom", n ? "right" : "left"], position: ["top", n ? "right" : "left"] }, o = /left|right/.test(e); return o ? (i.origin = ["top", e], i.position[1] = S.directions[e].reverse) : (i.origin[0] = e, i.position[0] = S.directions[e].reverse), i.origin = i.origin.join(" "), i.position = i.position.join(" "), i } function o(t, n) { try { return e.contains(t, n) } catch (i) { return !1 } } function r(t) { t = e(t), t.addClass("k-item k-menu-item").children(U).addClass(Z), t.children("a").addClass(G).children(U).addClass(Z), t.filter(":not([disabled])").addClass(xe), t.filter(".k-separator").removeClass("k-menu-item").addClass("k-menu-separator").empty().append(" "), t.filter("li[disabled]").addClass(Te).removeAttr("disabled").attr("aria-disabled", !0), t.filter("[role]").length || t.attr("role", "menuitem"), t.children($).length || t.contents().filter(function () { return !(this.nodeName.match(V) || 3 == this.nodeType && !S.trim(this.nodeValue)) }).wrapAll(""), a(t), l(t) } function a(t) { t = e(t), t.find("> .k-link > [class*=k-i-arrow-60]:not(.k-sprite)").remove(), t.filter(":has(.k-menu-group)").children(".k-link:not(:has([class*=k-i-arrow]:not(.k-sprite)))").each(function () { var t = e(this), n = s(t); t.append("") }) } function s(e) { var t, n = e.parent().parent(), i = S.support.isRtl(n); return t = n.hasClass(q + "-horizontal") ? "k-i-arrow-60-down" : i ? "k-i-arrow-60-left" : "k-i-arrow-60-right" } function l(t) { t = e(t), t.filter(".k-first:not(:first-child)").removeClass(J), t.filter(".k-last:not(:last-child)").removeClass(Y), t.filter(":first-child").addClass(J), t.filter(":last-child").addClass(Y) } function d(e) { var t, n; if (e && e.length) for (t in e) n = e.eq(t), n.find("ul").length ? n.attr("aria-haspopup", !0) : n.removeAttr("aria-haspopup") } function c(e) { if (!e.hasClass(q)) return e.parentsUntil("." + q, "li") } function u(t, n) { var i = p(n); i && h(t, i), n.items && e(t).children("ul").children("li").each(function (e) { u(this, n.items[e]) }) } function h(t, n) { e(t).children(".k-link").data({ selectHandler: n }) } function p(e) { var t = e.select, n = S.isFunction; return t && n(t) ? t : null } function f(e) { return e ? "li[data-groupparent='" + e + "']" : "li[data-groupparent]" } function g(e) { var t = e ? "[data-group='" + e + "']" : "[data-group]"; return "ul" + t + ",div" + t } function m(t, n) { var i = t.find(f()), o = []; return i.each(function (i, r) { var a, s; for (r = e(r), a = r.data(we), s = t; a;)s = n.find(g(a) + ":visible"), s.length && o.push(s), r = s.find(f()), a = r.data(we) }), o } function v(t, n) { var i = t.data(be); return i ? n.find(f(i)) : e([]) } function _(t, n) { var i = t.data(we); return i ? n.children(Ie).children(g(i)) : e([]) } function b(t, n) { var i, o, r = [], a = function (e) { for (; e.parentNode && !n.is(e.parentNode);)r.push(e.parentNode), e = e.parentNode }, s = t[0] || t; for (a(s), i = r[r.length - 1]; e(i).is(Ie) && (o = e(i).children("ul"), s = v(o, n)[0]);)r.push(s), a(s), i = r[r.length - 1]; return r } function w(e) { var t = 0; return e.wheelDelta && (t = -e.wheelDelta / 120, t = t > 0 ? Math.ceil(t) : Math.floor(t)), e.detail && (t = Math.round(e.detail / 3)), t } function k(e, t) { for (var n = 0, i = e.parentNode; i && !isNaN(i[t]);)n += i[t], i = i.parentNode; return n } function y(e) { return se && e.originalEvent && e.originalEvent.pointerType in We } function x(e) { var t = e.originalEvent; return A && /touch/i.test(t.type || "") } function C(e) { e.contents().filter(function () { return "LI" != this.nodeName }).remove() } var S = window.kendo, T = S.ui, D = S._activeElement, A = S.support.touch && S.support.mobileOS, E = e.isArray, I = S.data.HierarchicalDataSource, M = "mousedown", R = "click", F = 30, P = 50, z = e.extend, B = e.proxy, L = e.each, H = S.template, N = S.keys, O = T.Widget, V = /^(ul|a|div)$/i, W = ".kendoMenu", U = "img", j = "open", q = "k-menu", G = "k-link k-menu-link", $ = ".k-link", K = ".k-menu-expand-arrow", Y = "k-last", Q = "close", X = "timer", J = "k-first", Z = "k-image", ee = "select", te = "zIndex", ne = "activate", ie = "deactivate", oe = "touchstart" + W + " MSPointerDown" + W + " pointerdown" + W, re = S.support.pointers, ae = S.support.msPointers, se = ae || re, le = "change", de = "error", ce = S.support.touch ? "touchstart" : "", ue = re ? "pointerover" : ae ? "MSPointerOver" : "mouseenter", he = re ? "pointerout" : ae ? "MSPointerOut" : "mouseleave", pe = "DOMMouseScroll" + W + " mousewheel" + W, fe = S.support.resize + W, ge = "scrollWidth", me = "scrollHeight", ve = "offsetWidth", _e = "offsetHeight", be = "group", we = "groupparent", ke = e(document.documentElement), ye = "kendoPopup", xe = "k-state-default", Ce = "k-state-hover", Se = "k-state-focused", Te = "k-state-disabled", De = "k-state-selected", Ae = ".k-menu", Ee = ".k-menu-group", Ie = ".k-animation-container", Me = Ee + "," + Ie, Re = ":not(.k-list) > .k-item", Fe = ".k-item.k-state-disabled", Pe = ".k-item", ze = ".k-item:not(.k-state-disabled)", Be = ".k-item:not(.k-state-disabled) > .k-link", Le = ":not(.k-item.k-separator)", He = Pe + Le + ":eq(0)", Ne = Pe + Le + ":last", Oe = "div:not(.k-animation-container,.k-list-container)", Ve = ".k-menu-scroll-button", We = { 2: 1, touch: 1 }, Ue = "string", je = "dataBound", qe = { text: "dataTextField", url: "dataUrlField", spriteCssClass: "dataSpriteCssClassField", imageUrl: "dataImageUrlField", imageAttr: "dataImageAttrField", content: "dataContentField" }, Ge = { wrapperCssClass: function (e, t) { var n = "k-item k-menu-item", i = t.index; return n += t.enabled === !1 ? " k-state-disabled" : " k-state-default", e.firstLevel && 0 === i && (n += " k-first"), i == e.length - 1 && (n += " k-last"), t.cssClass && (n += " " + t.cssClass), t.attr && t.attr.hasOwnProperty("class") && (n += " " + t.attr["class"]), t.selected && (n += " " + De), n }, itemCssAttributes: function (e) { var t, n = "", i = e.attr || {}; for (t in i) i.hasOwnProperty(t) && "class" !== t && (n += t + '="' + i[t] + '" '); return n }, imageCssAttributes: function (e) { var t, n = "", i = e && e.toJSON ? e.toJSON() : {}; i["class"] ? i["class"] += " " + Z : i["class"] = Z; for (t in i) i.hasOwnProperty(t) && (n += t + '="' + i[t] + '" '); return n }, contentCssAttributes: function (e) { var t, n = "", i = e.contentAttr || {}, o = "k-content k-group k-menu-group"; i["class"] ? i["class"] += " " + o : i["class"] = o; for (t in i) i.hasOwnProperty(t) && (n += t + '="' + i[t] + '" '); return n }, textClass: function () { return G }, arrowClass: function (e, t) { var n = "k-menu-expand-arrow k-icon"; return n += t.horizontal ? " k-i-arrow-60-down" : " k-i-arrow-60-right" }, groupAttributes: function (e) { return e.expanded !== !0 ? " style='display:none'" : "" }, groupCssClass: function () { return "k-group k-menu-group" }, content: function (e) { return e.content ? e.content : " " } }, $e = S.ui.DataBoundWidget.extend({ init: function (e, t) { var n = this; O.fn.init.call(n, e, t), e = n.wrapper = n.element, t = n.options, n._accessors(), n._templates(), n._dataSource(), n._updateClasses(), n._animations(t), n.nextItemZIndex = 100, n._tabindex(), n._initOverflow(t), n._attachMenuEventsHandlers(), t.openOnClick && (n.clicked = !1), e.attr("role", "menubar"), e[0].id && (n._ariaId = S.format("{0}_mn_active", e[0].id)), S.notify(n) }, events: [j, Q, ne, ie, ee, je], options: { name: "Menu", animation: { open: { duration: 200 }, close: { duration: 100 } }, orientation: "horizontal", direction: "default", openOnClick: !1, closeOnClick: !0, hoverDelay: 100, scrollable: !1, popupCollision: t }, _initData: function () { var e = this; e.dataSource && (e.angular("cleanup", function () { return { elements: e.element.children() } }), e.element.empty(), e.append(e.dataSource.view(), e.element), e.angular("compile", function () { return { elements: e.element.children() } })) }, _attachMenuEventsHandlers: function () { var t = this, n = t.element, i = t.options, o = t._overflowWrapper(); (o || n).on(oe, Pe, B(t._focusHandler, t)).on(R + W, Fe, !1).on(R + W, Pe, B(t._click, t)).on(oe + " " + M + W, ".k-content", B(t._preventClose, t)).on(ue + W, ze, B(t._mouseenter, t)).on(he + W, ze, B(t._mouseleave, t)).on(M + W, ze, B(t._mousedown, t)).on(ce + W + " " + ue + W + " " + he + W + " " + M + W + " " + R + W, Be, B(t._toggleHover, t)), n.on("keydown" + W, B(t._keydown, t)).on("focus" + W, B(t._focus, t)).on("focus" + W, ".k-content", B(t._focus, t)).on("blur" + W, B(t._removeHoverItem, t)).on("blur" + W, "[tabindex]", B(t._checkActiveElement, t)), o && o.on(he + W, Me, B(t._mouseleavePopup, t)).on(ue + W, Me, B(t._mouseenterPopup, t)), i.openOnClick && (t._documentClickHandler = B(t._documentClick, t), e(document).click(t._documentClickHandler)) }, _detachMenuEventsHandlers: function () { var t = this, n = t._overflowWrapper(); n && n.off(W), t.element.off(W), t._documentClickHandler && e(document).unbind("click", t._documentClickHandler) }, _initOverflow: function (t) { var n, i, o, r, a = this, s = "horizontal" == t.orientation; t.scrollable && (a._openedPopups = {}, a._scrollWrapper = a.element.wrap("
        ").parent(), s && C(a.element), n = e(a.templates.scrollButton({ direction: s ? "left" : "up" })), i = e(a.templates.scrollButton({ direction: s ? "right" : "down" })), n.add(i).appendTo(a._scrollWrapper), a._initScrolling(a.element, n, i, s), o = a.element.outerWidth(), r = a.element[0].style.width, r = "auto" === r ? "" : r, s && e(window).on(fe, S.throttle(function () { a._setOverflowWrapperWidth(o, r), a._toggleScrollButtons(a.element, n, i, s) }, 100)), a._setOverflowWrapperWidth(o, r), a._toggleScrollButtons(a.element, n, i, s)) }, _overflowWrapper: function () { return this._scrollWrapper || this._popupsWrapper }, _setOverflowWrapperWidth: function (e, t) { var n, i, o, r, a = this, s = a._scrollWrapper.css("width"); a._scrollWrapper.css({ width: "" }), n = a._scrollWrapper.outerWidth(), a._scrollWrapper.css({ width: s }), i = a.element.outerWidth(), o = a.element[0].offsetWidth - a.element[0].clientWidth, i != n && n > 0 && (r = t ? Math.min(e, n) : n, a.element.width(r - o), a._scrollWrapper.width(r)) }, _reinitOverflow: function (e) { var t = this, n = e.scrollable && !t.options.scrollable || !e.scrollable && t.options.scrollable || e.scrollable && t.options.scrollable && e.scrollable.distance != t.options.scrollable.distance || e.orientation != t.options.orientation; n && (t._detachMenuEventsHandlers(), t._destroyOverflow(), t._initOverflow(e), t._attachMenuEventsHandlers()) }, _destroyOverflow: function () { var n = this, i = n._overflowWrapper(); i && (i.off(W), i.find(Ve).off(W).remove(), i.children(Ie).each(function (t, n) { var o, r = e(n).children(Ee); r.off(pe), o = v(r, i), o.length && o.append(n) }), i.find(f()).removeAttr("data-groupparent"), i.find(g()).removeAttr("data-group"), n.element.off(pe), e(window).off(fe), i.contents().unwrap(), n._scrollWrapper = n._popupsWrapper = n._openedPopups = t) }, _initScrolling: function (t, n, i, o) { var r = this, a = r.options.scrollable, s = e.isNumeric(a.distance) ? a.distance : P, l = s / 2, d = "-=" + s, c = "+=" + s, u = "-=" + 2 * s, h = "+=" + 2 * s, p = !1, f = !1, g = function (e) { var a = o ? { scrollLeft: e } : { scrollTop: e }; t.finish().animate(a, "fast", "linear", function () { p && g(e) }), r._toggleScrollButtons(t, n, i, o) }, m = function (e) { p || f || (g(e.data.direction), p = !0) }, v = function (a) { var s = o ? { scrollLeft: a.data.direction } : { scrollTop: a.data.direction }; f = x(a) || y(a), t.stop().animate(s, "fast", "linear", function () { f ? (r._toggleScrollButtons(t, n, i, o), p = !0) : e(a.currentTarget).trigger(ue) }), p = !1, a.stopPropagation(), a.preventDefault() }; n.on(ue + W, { direction: d }, m).on(S.eventMap.down + W, { direction: u }, v), i.on(ue + W, { direction: c }, m).on(S.eventMap.down + W, { direction: h }, v), n.add(i).on(he + W, function () { t.stop(), p = !1, r._toggleScrollButtons(t, n, i, o) }), t.on(pe, function (e) { var a, s, d, c; e.ctrlKey || e.shiftKey || e.altKey || (a = w(e.originalEvent), s = Math.abs(a) * l, d = (a > 0 ? "+=" : "-=") + s, c = o ? { scrollLeft: d } : { scrollTop: d }, r._closeChildPopups(t), t.finish().animate(c, "fast", "linear", function () { r._toggleScrollButtons(t, n, i, o) }), e.preventDefault()) }) }, _toggleScrollButtons: function (e, t, n, i) { var o = i ? e.scrollLeft() : e.scrollTop(), r = i ? ge : me, a = i ? ve : _e; t.toggle(0 !== o), n.toggle(o < e[0][r] - e[0][a] - 1) }, setOptions: function (e) { var t = this.options.animation; this._animations(e), e.animation = z(!0, t, e.animation), "dataSource" in e && this._dataSource(e), this._updateClasses(), this._reinitOverflow(e), O.fn.setOptions.call(this, e) }, destroy: function () { var e = this; O.fn.destroy.call(e), e._detachMenuEventsHandlers(), e._destroyOverflow(), S.destroy(e.element) }, enable: function (e, t) { return this._toggleDisabled(e, t !== !1), this }, disable: function (e) { return this._toggleDisabled(e, !1), this }, attemptGetItem: function (t) { var n, i; return t = t || this.element, n = this.element.find(t), i = this._overflowWrapper(), n.length || t === this.element ? n : i ? i.find(t) : e() }, append: function (e, t) { t = this.attemptGetItem(t); var n = this._insert(e, t, t.length ? this._childPopupElement(t) : null); return L(n.items, function (t) { n.group.append(this), a(this), u(this, e[t] || e) }), a(t), l(n.group.find(".k-first, .k-last").add(n.items)), d(c(n.group)), this }, insertBefore: function (e, t) { t = this.attemptGetItem(t); var n = this._insert(e, t, t.parent()); return L(n.items, function (n) { t.before(this), a(this), l(this), u(this, e[n] || e) }), l(t), this }, insertAfter: function (e, t) { t = this.attemptGetItem(t); var n = this._insert(e, t, t.parent()); return L(n.items, function (n) { t.after(this), a(this), l(this), u(this, e[n] || e) }), l(t), this }, _insert: function (t, n, i) { var o, a, s, l, d = this; return n && n.length || (i = d.element), s = e.isPlainObject(t) || t instanceof S.data.ObservableObject, l = { firstLevel: i.hasClass(q), horizontal: i.hasClass(q + "-horizontal"), expanded: !0, length: i.children().length }, n && !i.length && (i = e(d.renderGroup({ group: l, options: d.options })).appendTo(n)), s || E(t) || t instanceof S.data.ObservableArray ? o = e(e.map(s ? [t] : t, function (t, n) { return "string" == typeof t ? e(t).get() : e(d.renderItem({ group: l, item: z(t, { index: n }) })).get() })) : (o = "string" == typeof t && "<" != t.charAt(0) ? d.element.find(t) : e(t), a = o.find("> ul").addClass("k-menu-group").attr("role", "menu"), o = o.filter("li"), o.add(a.find("> li")).each(function () { r(this) })), { items: o, group: i } }, remove: function (e) { var t, n, i, o, r; return e = this.attemptGetItem(e), t = this, n = e.parentsUntil(t.element, Re), i = e.parent("ul:not(.k-menu)"), e.remove(), i && !i.children(Re).length && (o = c(i), r = i.parent(Ie), r.length ? r.remove() : i.remove(), d(o)), n.length && (n = n.eq(0), a(n), l(n)), t }, _openAfterLoad: function (e, t) { var n = this; t.loaded() ? (n.open(e), n._loading = !1) : t.one(le, function () { e.find(K).removeClass("k-i-loading"), n._loading && (n.open(e), n._loading = !1) }) }, open: function (o) { var r, a, s, l = this, d = l.options, c = "horizontal" == d.orientation, u = d.direction, h = S.support.isRtl(l.wrapper), p = l._overflowWrapper(); return o = (p || l.element).find(o), r = l.dataSource && l.dataSource.getByUid(o.data(S.ns + "uid")), r && r.hasChildren && !r.loaded() && !l._loading ? (l._loading = !0, o.find(K).addClass("k-i-loading"), r.load(), l._openAfterLoad(o, r), t) : (/^(top|bottom|default)$/.test(u) && (u = h ? c ? (u + " left").replace("default", "bottom") : "left" : c ? (u + " right").replace("default", "bottom") : "right"), a = ">.k-popup:visible,>.k-animation-container>.k-popup:visible", s = function () { var t = e(this).data(ye); t && l.close(e(this).closest("li.k-item"), !0) }, o.siblings().find(a).each(s), p && o.find(a).each(s), l.options.openOnClick && (l.clicked = !0), o.each(function () { var o = e(this); clearTimeout(o.data(X)), o.data(X, setTimeout(function () { var r, a, s, g, m, v, _, b, w, k, y = o.find(".k-menu-group:first:hidden"); !y[0] && p && (a = l._getPopup(o), y = a && a.element), y.is(":visible") || y[0] && l._triggerEvent({ item: o[0], type: j }) === !1 && (!y.find(".k-menu-group")[0] && y.children(".k-item").length > 1 ? (s = e(window).height(), g = function () { y.css({ maxHeight: s - (S._outerHeight(y) - y.height()) - S.getShadows(y).bottom, overflow: "auto" }) }, S.support.browser.msie && S.support.browser.version <= 7 ? setTimeout(g, 0) : g()) : y.css({ maxHeight: "", overflow: "" }), o.data(te, o.css(te)), m = l.nextItemZIndex++, o.css(te, m), l.options.scrollable && o.parent().siblings(Ve).css({ zIndex: ++m }), r = y.data(ye), v = o.parent().hasClass(q), _ = v && c, b = i(u, v, h), w = d.animation.open.effects, k = w !== t ? w : "slideIn:" + n(u, v), r ? (r = y.data(ye), r.options.origin = b.origin, r.options.position = b.position, r.options.animation.open.effects = k) : r = y.kendoPopup({ activate: function () { l._triggerEvent({ item: this.wrapper.parent(), type: ne }) }, deactivate: function (e) { l._closing = !1, e.sender.element.removeData("targetTransform").css({ opacity: "" }), l._triggerEvent({ item: this.wrapper.parent(), type: ie }) }, origin: b.origin, position: b.position, collision: d.popupCollision !== t ? d.popupCollision : _ ? "fit" : "fit flip", anchor: o, appendTo: p || o, animation: { open: z(!0, { effects: k }, d.animation.open), close: d.animation.close }, open: B(l._popupOpen, l), close: function (e) { var t, n; l._closing = !0, t = e.sender.wrapper.parent(), p && (n = e.sender.element.data(be), n && (t = (p || l.element).find(f(n))), e.sender.wrapper.children(Ve).hide()), l._triggerEvent({ item: t[0], type: Q }) ? e.preventDefault() : (t.css(te, t.data(te)), t.removeData(te), l.options.scrollable && t.parent().siblings(Ve).css({ zIndex: "" }), (A || se || S.support.mouseAndTouchPresent) && (t.removeClass(Ce), l._removeHoverItem())) } }).data(ye), y.removeAttr("aria-hidden"), l._configurePopupOverflow(r, o), r._hovered = !0, r.open(), l._initPopupScrolling(r)) }, l.options.hoverDelay)) }), l) }, _configurePopupOverflow: function (e, t) { var n, i = this; i.options.scrollable && (i._wrapPopupElement(e), t.attr("data-groupparent") || (n = (new Date).getTime(), t.attr("data-groupparent", n), e.element.attr("data-group", n))) }, _wrapPopupElement: function (e) { e.element.parent().is(Ie) || (e.wrapper = S.wrap(e.element, e.options.autosize).css({ overflow: "hidden", display: "block", position: "absolute" })) }, _initPopupScrolling: function (e, t, n) { var i = this; i.options.scrollable && e.element[0].scrollHeight > e.element[0].offsetHeight && i._initPopupScrollButtons(e, t, n) }, _initPopupScrollButtons: function (t, n, i) { var o = this, r = t.wrapper.children(Ve), a = o.options.animation, s = (a && a.open && a.open.duration || 0) + F; setTimeout(function () { var a, s; r.length || (a = e(o.templates.scrollButton({ direction: n ? "left" : "up" })), s = e(o.templates.scrollButton({ direction: n ? "right" : "down" })), r = a.add(s).appendTo(t.wrapper), o._initScrolling(t.element, a, s, n), i || r.on(ue + W, function () { var n = o._overflowWrapper(); e(m(t.element, n)).each(function (e, t) { var i = n.find(f(t.data(be))); o.close(i) }) }).on(he + W, function () { setTimeout(function () { e.isEmptyObject(o._openedPopups) && o._closeParentPopups(t.element); }, F) })), o._toggleScrollButtons(t.element, r.first(), r.last(), n) }, s) }, _popupOpen: function (e) { this._keyTriggered || e.sender.element.children("." + Se).removeClass(Se), this.options.scrollable && this._setPopupHeight(e.sender) }, _setPopupHeight: function (t, n) { var i, o, r, a, s, l, d, c, u, h = t.element, p = h.add(h.parent(Ie)); p.height(h.hasClass(q) && this._initialHeight || ""), i = t._location(n), o = e(window).height(), r = i.height, a = n ? 0 : Math.max(i.top, 0), s = n ? 0 : k(this._overflowWrapper()[0], "scrollTop"), l = window.innerHeight - o, d = o - S.getShadows(h).bottom + l, c = d + s > r + a, c || (u = Math.min(d, d - a + s), p.css({ overflow: "hidden", height: u + "px" })) }, close: function (t, n) { var i, o, r = this, a = r._overflowWrapper(), s = a || r.element; return t = s.find(t), t.length || (t = s.find(">.k-item")), i = function (t) { var n = !1; return e.isEmptyObject(r._openedPopups) ? n : (e(m(t, a)).each(function (e, t) { return n = !!r._openedPopups["" + t.data(be)], !n }), n) }, o = function (e) { var t = e.data(we); return !a || !t || !r._openedPopups["" + t] }, t.each(function () { var s = e(this); !n && r._isRootItem(s) && (r.clicked = !1), clearTimeout(s.data(X)), s.data(X, setTimeout(function () { var e = r._getPopup(s); if (e && (o(s) || r._forceClose)) { if (!r._forceClose && i(e.element)) return; e.close(), e.element.attr("aria-hidden", !0), a && r._forceClose && t.last().is(s[0]) && delete r._forceClose } }, r.options.hoverDelay)) }), r }, _getPopup: function (e) { var t, n, i = this, o = e.find(".k-menu-group:not(.k-list-container):not(.k-calendar-container):first:visible").data(ye), r = i._overflowWrapper(); return !o && r && (t = e.data(we), t && (n = r.find(g(t)), o = n.data(ye))), o }, _toggleDisabled: function (t, n) { this.element.find(t).each(function () { e(this).toggleClass(xe, n).toggleClass(Te, !n).attr("aria-disabled", !n) }) }, _toggleHover: function (t) { var n = e(S.eventTarget(t) || t.target).closest(Re), i = t.type == ue || M.indexOf(t.type) !== -1; n.siblings().removeClass(Ce), n.parents("li." + Te).length || n.toggleClass(Ce, i || "mousedown" == t.type || "pointerover" == t.type || t.type == ce), this._removeHoverItem() }, _preventClose: function () { this.options.closeOnClick || (this._closurePrevented = !0) }, _checkActiveElement: function (t) { var n = this, i = e(t ? t.currentTarget : this._hoverItem()), r = n._findRootParent(i)[0]; this._closurePrevented || setTimeout(function () { document.hasFocus() && (o(r, S._activeElement()) || !t || o(r, t.currentTarget)) || n.close(r) }, 0), this._closurePrevented = !1 }, _removeHoverItem: function () { var e = this._hoverItem(); e && e.hasClass(Se) && (e.removeClass(Se), this._oldHoverItem = null) }, _updateClasses: function () { var e, t = this.element, n = ".k-menu-init div ul"; t.removeClass("k-menu-horizontal k-menu-vertical"), t.addClass("k-widget k-reset k-header k-menu-init " + q).addClass(q + "-" + this.options.orientation), t.find("li > ul").filter(function () { return !S.support.matchesSelector.call(this, n) }).addClass("k-group k-menu-group").attr("role", "menu").attr("aria-hidden", t.is(":visible")).parent("li").attr("aria-haspopup", "true").end().find("li > div").addClass("k-content").attr("tabindex", "-1"), e = t.find("> li,.k-menu-group > li"), t.removeClass("k-menu-init"), e.each(function () { r(this) }) }, _mouseenter: function (t) { var n = this, i = e(t.currentTarget), r = n._itemHasChildren(i), a = i.data(we) || i.parent().data(be), s = y(t); a && (n._openedPopups["" + a] = !0), n._closing || t.delegateTarget != i.parents(Ae)[0] && t.delegateTarget != i.parents(".k-menu-scroll-wrapper,.k-popups-wrapper")[0] || (n._keyTriggered = !1, n.options.openOnClick.rootMenuItems && n._isRootItem(i.closest(Re)) || n.options.openOnClick.subMenuItems && !n._isRootItem(i.closest(Re)) || (!(n.options.openOnClick === !1 || n.options.openOnClick.rootMenuItems === !1 && n._isRootItem(i.closest(Re)) || n.options.openOnClick.subMenuItems === !1 && !n._isRootItem(i.closest(Re)) || n.clicked) || A || s && n._isRootItem(i.closest(Re)) || !o(t.currentTarget, t.relatedTarget) && r && n.open(i), (n.options.openOnClick === !0 && n.clicked || A) && i.siblings().each(B(function (e, t) { n.close(t, !0) }, n)))) }, _mousedown: function (t) { var n = this, i = e(t.currentTarget); (n.options.openOnClick.subMenuItems && !n._isRootItem(i) || A) && i.siblings().each(B(function (e, t) { n.close(t, !0) }, n)) }, _mouseleave: function (n) { var i = this, r = e(n.currentTarget), a = r.data(we), s = r.children(Ie).length || r.children(Ee).length || a, l = e(window); return a && delete i._openedPopups["" + a], r.parentsUntil(Ie, ".k-list-container,.k-calendar-container")[0] ? (n.stopImmediatePropagation(), t) : i.options.openOnClick !== !1 && (i.options.openOnClick.rootMenuItems || !i._isRootItem(r)) && (i.options.openOnClick.subMenuItems || i._isRootItem(r)) || A || y(n) || o(n.currentTarget, n.relatedTarget || n.target) || !s || o(n.currentTarget, S._activeElement()) ? ((S.support.browser.msie && !n.toElement && !n.relatedTarget && !y(n) || n.clientX < 0 || n.clientY < 0 || n.clientY > l.height() || n.clientX > l.width()) && i.close(r), t) : (i.close(r, !0), i._loading = !1, t) }, _mouseenterPopup: function (t) { var n, i = this, o = e(t.currentTarget); o.parent().is(Ie) || (o = o.children("ul"), n = o.data(be), n && (i._openedPopups["" + n] = !0)) }, _mouseleavePopup: function (t) { var n = this, i = e(t.currentTarget); !y(t) && i.is(Ie) && n._closePopups(i.children("ul")) }, _closePopups: function (t) { var n, i = this, o = i._overflowWrapper(), r = t.data(be); r && (delete i._openedPopups["" + r], n = o.find(f(r)), setTimeout(function () { if (i.options.openOnClick) i._closeChildPopups(t); else if (e.isEmptyObject(i._openedPopups)) { var o = i._innerPopup(t); i._closeParentPopups(o) } else i.close(n, !0) }, 0)) }, _closeChildPopups: function (t) { var n = this, i = n._overflowWrapper(); e(m(t, i)).each(function () { var e = i.find(f(this.data(be))); n.close(e, !0) }) }, _innerPopup: function (e) { var t = this._overflowWrapper(), n = m(e, t); return n[n.length - 1] || e }, _closeParentPopups: function (e) { var t = this, n = t._overflowWrapper(), i = e.data(be), o = n.find(f(i)); for (i = o.parent().data(be), t.close(o, !0); i && !t._openedPopups[i] && !o.parent().is(Ae);)o = n.find(f(i)), t.close(o, !0), i = o.parent().data(be) }, _click: function (n) { for (var i, o, r, a, s, l, d = this, c = d.options, u = e(S.eventTarget(n)), h = u[0], p = u[0] ? u[0].nodeName.toUpperCase() : "", f = "INPUT" == p || "SELECT" == p || "BUTTON" == p || "LABEL" == p, m = u.closest($), v = u.closest(Re), _ = v[0], b = m.attr("href"), w = u.attr("href"), k = e("").attr("href"), x = !!b && b !== k, C = x && !!b.match(/^#/), T = !!w && w !== k, D = d._overflowWrapper(); h && h.parentNode != _;)h = h.parentNode; if (!e(h).is(Oe)) { if (v.hasClass(Te)) return n.preventDefault(), t; if (n.handled || !d._triggerSelect(u, _) || f || n.preventDefault(), n.handled = !0, o = v.children(Me), D && (s = v.data(we), s && (o = D.find(g(s)))), r = o.is(":visible"), a = c.openOnClick && r && d._isRootItem(v), c.closeOnClick && (!x || C) && (!o.length || a)) return v.removeClass(Ce).css("height"), d._oldHoverItem = d._findRootParent(v), l = d._parentsUntil(m, d.element, Re), d._forceClose = !!D, d.close(l), d.clicked = !1, "MSPointerUp".indexOf(n.type) != -1 && n.preventDefault(), t; x && n.enterKey && m[0].click(), (d._isRootItem(v) && c.openOnClick !== !1 || c.openOnClick.subMenuItems || S.support.touch || y(n) && d._isRootItem(v.closest(Re))) && (x || f || T || n.preventDefault(), d.clicked = !0, i = o.is(":visible") ? Q : j, (c.closeOnClick || i != Q) && d[i](v)) } }, _parentsUntil: function (n, i, o) { var r, a, s = this._overflowWrapper(); return s ? (r = b(n, s), a = [], e(r).each(function () { var n = e(this); return !n.is(i) && (n.is(o) && a.push(this), t) }), e(a)) : n.parentsUntil(i, o) }, _triggerSelect: function (e, t) { var n, i, o, r; return e = e.is(".k-link") ? e : e.closest(".k-link"), n = e.data("selectHandler"), n && (i = this._getEventData(e), n.call(this, i)), o = i && i.isDefaultPrevented(), r = this._triggerEvent({ item: t, type: ee }), o || r }, _getEventData: function (e) { var t = { sender: this, target: e, _defaultPrevented: !1, preventDefault: function () { this._defaultPrevented = !0 }, isDefaultPrevented: function () { return this._defaultPrevented } }; return t }, _documentClick: function (e) { var t = this; o((t._overflowWrapper() || t.element)[0], e.target) || (t.clicked = !1) }, _focus: function (n) { var i = this, o = n.target, r = i._hoverItem(), a = D(); return o == i.wrapper[0] || e(o).is(":kendoFocusable") ? (a === n.currentTarget && (r.length ? i._moveHover([], r) : i._oldHoverItem || i._moveHover([], i.wrapper.children().first())), t) : (n.stopPropagation(), e(o).closest(".k-content").closest(".k-menu-group").closest(".k-item").addClass(Se), i.wrapper.focus(), t) }, _keydown: function (e) { var n, i, o, r = this, a = e.keyCode, s = r._oldHoverItem, l = S.support.isRtl(r.wrapper); if (e.target == e.currentTarget || a == N.ESC) { if (s || (s = r._oldHoverItem = r._hoverItem()), i = r._itemBelongsToVertival(s), o = r._itemHasChildren(s), r._keyTriggered = !0, a == N.RIGHT) n = r[l ? "_itemLeft" : "_itemRight"](s, i, o); else if (a == N.LEFT) n = r[l ? "_itemRight" : "_itemLeft"](s, i, o); else if (a == N.DOWN) n = r._itemDown(s, i, o); else if (a == N.UP) n = r._itemUp(s, i, o); else if (a == N.HOME) r._moveHover(s, s.parent().children().first()), e.preventDefault(); else if (a == N.END) r._moveHover(s, s.parent().children().last()), e.preventDefault(); else if (a == N.ESC) n = r._itemEsc(s, i); else if (a == N.ENTER || a == N.SPACEBAR) n = s.children(".k-link"), n.length > 0 && (r._click({ target: n[0], preventDefault: function () { }, enterKey: !0 }), o && !s.hasClass(Te) ? (r.open(s), r._moveHover(s, r._childPopupElement(s).children().first())) : r._moveHover(s, r._findRootParent(s))); else if (a == N.TAB) return n = r._findRootParent(s), r._moveHover(s, n), r._checkActiveElement(), t; n && n[0] && (e.preventDefault(), e.stopPropagation()) } }, _hoverItem: function () { return this.wrapper.find(".k-item.k-state-hover,.k-item.k-state-focused").filter(":visible") }, _itemBelongsToVertival: function (e) { var t = this.wrapper.hasClass("k-menu-vertical"); return e.length ? e.parent().hasClass("k-menu-group") || t : t }, _itemHasChildren: function (e) { return !!(e && e.length && e[0].nodeType) && (e.children(".k-menu-group, div.k-animation-container").length > 0 || !!e.data(we) && !!this._overflowWrapper().children(g(e.data(we)))) }, _moveHover: function (t, n) { var i = this, o = i._ariaId; t.length && n.length && t.removeClass(Se), n.length && (n[0].id && (o = n[0].id), n.addClass(Se), i._oldHoverItem = n, o && (i.element.removeAttr("aria-activedescendant"), e("#" + o).removeAttr("id"), n.attr("id", o), i.element.attr("aria-activedescendant", o)), i._scrollToItem(n)) }, _findRootParent: function (e) { return this._isRootItem(e) ? e : this._parentsUntil(e, Ae, "li.k-item").last() }, _isRootItem: function (e) { return e.parent().hasClass(q) }, _itemRight: function (e, t, n) { var i, o, r, a, s = this; return t ? n && !e.hasClass(Te) ? (s.open(e), i = s._childPopupElement(e).children().first()) : "horizontal" == s.options.orientation && (o = s._findRootParent(e), r = s._overflowWrapper(), r && (a = _(o, r), s._closeChildPopups(a)), s.close(o), i = o.nextAll(He)) : (i = e.nextAll(He), i.length || (i = e.prevAll(Ne)), s.close(e)), i && !i.length ? i = s.wrapper.children(".k-item").first() : i || (i = []), s._moveHover(e, i), i }, _itemLeft: function (e, t) { var n, i, o = this; return t ? (n = e.parent().closest(".k-item"), i = o._overflowWrapper(), !n.length && i && (n = v(e.parent(), i)), o.close(n), o._isRootItem(n) && "horizontal" == o.options.orientation && (n = n.prevAll(He))) : (n = e.prevAll(He), n.length || (n = e.nextAll(Ne)), o.close(e)), n.length || (n = o.wrapper.children(".k-item").last()), o._moveHover(e, n), n }, _itemDown: function (e, t, n) { var i, o = this; if (t) i = e.nextAll(He); else { if (!n || e.hasClass(Te)) return; o.open(e), i = o._childPopupElement(e).children().first() } return !i.length && e.length ? i = e.parent().children().first() : e.length || (i = o.wrapper.children(".k-item").first()), o._moveHover(e, i), i }, _itemUp: function (e, t) { var n, i = this; if (t) return n = e.prevAll(He), !n.length && e.length ? n = e.parent().children().last() : e.length || (n = i.wrapper.children(".k-item").last()), i._moveHover(e, n), n }, _scrollToItem: function (e) { var t, n, i, o, r, a, s, l, d, c, u, h, p = this; p.options.scrollable && e && e.length && (t = e.parent(), n = !!t.hasClass(q) && "horizontal" == p.options.orientation, i = n ? "scrollLeft" : "scrollTop", o = n ? S._outerWidth : S._outerHeight, r = t[i](), a = o(e), s = e[0][n ? "offsetLeft" : "offsetTop"], l = o(t), d = t.siblings(Ve), c = d.length ? o(d.first()) : 0, r + l < s + a + c ? u = s + a - l + c : r > s - c && (u = s - c), isNaN(u) || (h = {}, h[i] = u, t.finish().animate(h, "fast", "linear", function () { p._toggleScrollButtons(t, d.first(), d.last(), n) }))) }, _itemEsc: function (e, t) { var n, i = this; return t ? (n = e.parent().closest(".k-item"), i.close(n), i._moveHover(e, n), n) : e }, _childPopupElement: function (e) { var t = e.find(".k-menu-group"), n = this._overflowWrapper(); return !t.length && n && (t = _(e, n)), t }, _triggerEvent: function (e) { var t = this; return t.trigger(e.type, { type: e.type, item: e.item }) }, _focusHandler: function (t) { var n = this, i = e(S.eventTarget(t)).closest(Re); i.hasClass(Te) || setTimeout(function () { n._moveHover([], i), i.children(".k-content")[0] && i.parent().closest(".k-item").removeClass(Se) }, 200) }, _animations: function (e) { e && "animation" in e && !e.animation && (e.animation = { open: { effects: {} }, close: { hide: !0, effects: {} } }) }, _dataSource: function (e) { var t = this, n = e ? e.dataSource : t.options.dataSource; n && (n = E(n) ? { data: n } : n, t._unbindDataSource(), n.fields || (n.fields = [{ field: "uid" }, { field: "text" }, { field: "url" }, { field: "cssClass" }, { field: "spriteCssClass" }, { field: "imageUrl" }, { field: "imageAttr" }, { field: "attr" }, { field: "contentAttr" }, { field: "content" }, { field: "encoded" }, { field: "items" }, { field: "select" }]), t.dataSource = I.create(n), t._bindDataSource(), t.dataSource.fetch()) }, _bindDataSource: function () { this._refreshHandler = B(this.refresh, this), this._errorHandler = B(this._error, this), this.dataSource.bind(le, this._refreshHandler), this.dataSource.bind(de, this._errorHandler) }, _unbindDataSource: function () { var e = this.dataSource; e && (e.unbind(le, this._refreshHandler), e.unbind(de, this._errorHandler)) }, _error: function () { }, findByUid: function (e) { var t = this._overflowWrapper() || this.element; return t.find("[" + S.attr("uid") + "=" + e + "]") }, refresh: function (t) { var n = this, i = t.node, o = t.action, r = i ? n.findByUid(i.uid) : n.element, a = t.items, s = t.index, l = e.proxy(n._updateItem, n), d = e.proxy(n._removeItem, n); "add" == o ? n._appendItems(a, s, r) : "remove" == o ? a.forEach(d) : "itemchange" == o ? a.forEach(l) : "itemloaded" === o ? n.append(t.items, r) : this._initData(), this.trigger(je, { item: r, dataItem: i }) }, _appendItems: function (e, t, n) { var i = this, o = n.find(Pe).eq(t); o.length ? i.insertBefore(e, o) : i.append(e, n) }, _removeItem: function (e) { var t = this, n = t.findByUid(e.uid); t.remove(n) }, _updateItem: function (e) { var t = this, n = t.findByUid(e.uid), i = n.next(), o = e.parentNode(); t.remove(n), i.length ? t.insertBefore(e, i) : t.append(e, o && t.findByUid(o.uid)) }, _accessors: function () { var e, t, n, i = this, o = i.options, r = i.element; for (e in qe) t = o[qe[e]], n = r.attr(S.attr(e + "-field")), !t && n && (t = n), t || (t = e), E(t) || (t = [t]), o[qe[e]] = t }, _fieldAccessor: function (t) { var n = this.options[qe[t]] || [], i = n.length, o = "(function(item) {"; return 0 === i ? o += "return item['" + t + "'];" : (o += "var levels = [" + e.map(n, function (e) { return "function(d){ return " + S.expr(e) + "}" }).join(",") + "];", o += "if(item.level){return levels[Math.min(item.level(), " + i + "-1)](item);}else", o += "{return levels[" + i + "-1](item)}"), o += "})" }, _templates: function () { var e = this, t = e.options, n = B(e._fieldAccessor, e); t.template && typeof t.template == Ue ? t.template = H(t.template) : t.template || (t.template = H("# var text = " + n("text") + "(data.item); ## if (typeof data.item.encoded != 'undefined' && data.item.encoded === false) {##= text ## } else { ##: text ## } #")), e.templates = { content: H("#var contentHtml = " + n("content") + "(item);#
        #= contentHtml || '' #
        "), group: H(""), itemWrapper: H("# var url = " + n("url") + "(item); ## var imageUrl = " + n("imageUrl") + "(item); ## var imgAttributes = " + n("imageAttr") + "(item);## var tag = url ? 'a' : 'span' #<#= tag # class='#= textClass(item) #' #if(url){#href='#= url #'#}#># if (imageUrl) { ## } ##= sprite(item) ##= data.menu.options.template(data) ##= arrow(data) #"), item: H("#var contentHtml = " + n("content") + "(item);#"), scrollButton: H(""), arrow: H(""), sprite: H("# var spriteCssClass = " + n("spriteCssClass") + "(data); if(spriteCssClass) {##}#"), empty: H("") } }, renderItem: function (e) { var t, n, i = this; return e = z({ menu: i, group: {} }, e), t = i.templates.empty, n = e.item, i.templates.item(z(e, { sprite: i.templates.sprite, itemWrapper: i.templates.itemWrapper, renderContent: i.renderContent, arrow: n.items || n.content || n[i.options.dataContentField[0]] ? i.templates.arrow : t, subGroup: i.renderGroup }, Ge)) }, renderGroup: function (e) { var t = this, n = t.templates || e.menu.templates; return n.group(z({ renderItems: function (e) { for (var t = "", n = 0, i = e.items, o = i ? i.length : 0, r = z({ length: o }, e.group); n < o; n++)t += e.menu.renderItem(z(e, { group: r, item: z({ index: n }, i[n]) })); return t } }, e, Ge)) }, renderContent: function (e) { return e.menu.templates.content(z(e, Ge)) } }), Ke = $e.extend({ init: function (t, n) { var i = this; $e.fn.init.call(i, t, n), i._marker = S.guid().substring(0, 8), i.target = e(i.options.target), i._popup(), i._wire() }, _initOverflow: function (t) { var n = this; t.scrollable && !n._overflowWrapper() && (n._openedPopups = {}, n._popupsWrapper = (n.element.parent().is(Ie) ? n.element.parent() : n.element).wrap("
        ").parent(), "horizontal" == n.options.orientation && C(n.element), t.appendTo && (t.appendTo = e(t.appendTo), t.appendTo.append(n._popupsWrapper)), n._initialHeight = n.element[0].style.height, n._initialWidth = n.element[0].style.width) }, options: { name: "ContextMenu", filter: null, showOn: "contextmenu", orientation: "vertical", alignToAnchor: !1, copyAnchorStyles: !0, target: "body" }, events: [j, Q, ne, ie, ee], setOptions: function (t) { var n = this; $e.fn.setOptions.call(n, t), n.target.off(n.showOn + W + n._marker, n._showProxy), n.userEvents && n.userEvents.destroy(), n.target = e(n.options.target), t.orientation && n.popup.wrapper[0] && n.popup.element.unwrap(), n._wire(), $e.fn.setOptions.call(this, t) }, destroy: function () { var e = this; e.target.off(e.options.showOn + W + e._marker), ke.off(S.support.mousedown + W + e._marker, e._closeProxy), e.userEvents && e.userEvents.destroy(), $e.fn.destroy.call(e) }, open: function (n, i) { var r, a, s = this; return n = e(n)[0], o(s.element[0], e(n)[0]) || s._itemHasChildren(e(n)) ? $e.fn.open.call(s, n) : s._triggerEvent({ item: s.element, type: j }) === !1 && (s.popup.visible() && s.options.filter && (s.popup.close(!0), s.popup.element.kendoStop(!0)), i !== t ? (r = s._overflowWrapper(), r && (a = r.offset(), n -= a.left, i -= a.top), s.popup.wrapper.hide(), s._configurePopupScrolling(n, i), s.popup.open(n, i)) : (s.popup.options.anchor = (n ? n : s.popup.anchor) || s.target, s.popup.element.kendoStop(!0), s._configurePopupScrolling(), s.popup.open()), ke.off(s.popup.downEvent, s.popup._mousedownProxy), ke.on(S.support.mousedown + W + s._marker, s._closeProxy)), s }, _configurePopupScrolling: function (e, n) { var i = this, o = i.popup, r = "horizontal" == i.options.orientation; i.options.scrollable && (i._wrapPopupElement(o), o.element.parent().css({ position: "", height: "" }), o.element.css({ visibility: "hidden", display: "", position: "" }), r ? i._setPopupWidth(o, isNaN(e) ? t : { isFixed: !0, x: e, y: n }) : i._setPopupHeight(o, isNaN(e) ? t : { isFixed: !0, x: e, y: n }), o.element.css({ visibility: "", display: "none", position: "absolute" }), i._initPopupScrollButtons(o, r, !0), o.element.siblings(Ve).hide()) }, _setPopupWidth: function (t, n) { var i, o, r, a, s, l, d, c, u = t.element, h = u.add(u.parent(Ie)); h.width(this._initialWidth || ""), i = t._location(n), o = e(window).width(), r = i.width, a = Math.max(i.left, 0), s = n ? 0 : k(this._overflowWrapper()[0], "scrollLeft"), l = S.getShadows(u), d = o - l.left - l.right, c = d + s > r + a, c || h.css({ overflow: "hidden", width: d - a + s + "px" }) }, close: function () { var t = this; o(t.element[0], e(arguments[0])[0]) || t._itemHasChildren(arguments[0]) ? $e.fn.close.call(t, arguments[0]) : t.popup.visible() && t._triggerEvent({ item: t.element, type: Q }) === !1 && (t.popup.close(), ke.off(S.support.mousedown + W + t._marker, t._closeProxy), t.unbind(ee, t._closeTimeoutProxy)) }, _showHandler: function (t) { var n, i = t, r = this, a = r.options, s = e(S.support.mobileOS ? i.target : i.currentTarget); t.event && (i = t.event, i.pageX = t.x.location, i.pageY = t.y.location), o(r.element[0], t.relatedTarget || t.target) || (r._eventOrigin = i, i.preventDefault(), i.stopImmediatePropagation(), r.element.find("." + Se).removeClass(Se), (a.filter && s.is(a.filter) || !a.filter) && (a.alignToAnchor ? (r.popup.options.anchor = i.currentTarget, r.open(i.currentTarget)) : (r.popup.options.anchor = i.currentTarget, r._targetChild ? (n = r.target.offset(), r.open(i.pageX - n.left, i.pageY - n.top)) : r.open(i.pageX, i.pageY)))) }, _closeHandler: function (t) { var n, i = this, r = e(t.relatedTarget || t.target), a = r.closest(i.target.selector)[0] == i.target[0], s = r.closest(Pe), l = i._itemHasChildren(s), d = i._overflowWrapper(), c = o(i.element[0], r[0]) || d && o(d[0], r[0]); i._eventOrigin = t, n = 3 !== t.which, i.popup.visible() && (n && a || !a) && (i.options.closeOnClick && !l && c || !c) && (c ? (this.unbind(ee, this._closeTimeoutProxy), i.bind(ee, i._closeTimeoutProxy)) : i.close()) }, _wire: function () { var e = this, t = e.options, n = e.target; e._preventProxy = null, e._showProxy = B(e._showHandler, e), e._closeProxy = B(e._closeHandler, e), e._closeTimeoutProxy = B(e.close, e), n[0] && (S.support.mobileOS && "contextmenu" == t.showOn && (e.userEvents = new S.UserEvents(n, { filter: t.filter, allowSelection: !1 }), e._preventProxy = function () { return !1 }, e.userEvents.bind("hold", e._showProxy)), t.filter ? n.on(t.showOn + W + e._marker, t.filter, e._preventProxy || e._showProxy) : n.on(t.showOn + W + e._marker, e._preventProxy || e._showProxy)) }, _triggerEvent: function (n) { var i = this, o = e(i.popup.options.anchor)[0], r = i._eventOrigin; return i._eventOrigin = t, i.trigger(n.type, z({ type: n.type, item: n.item || this.element[0], target: o }, r ? { event: r } : {})) }, _popup: function () { var t = this, n = t._overflowWrapper(); t._triggerProxy = B(t._triggerEvent, t), t.popup = t.element.addClass("k-context-menu").kendoPopup({ autosize: "horizontal" === t.options.orientation, anchor: t.target || "body", copyAnchorStyles: t.options.copyAnchorStyles, collision: t.options.popupCollision || "fit", animation: t.options.animation, activate: t._triggerProxy, deactivate: t._triggerProxy, appendTo: n || t.options.appendTo, close: n ? function (t) { e(m(t.sender.element, n)).each(function (e, t) { var n = t.data(ye); n && n.close(!0) }) } : e.noop }).data(ye), t._targetChild = o(t.target[0], t.popup.element[0]) } }); T.plugin($e), T.plugin(Ke) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.columnmenu.min", ["kendo.popup.min", "kendo.filtermenu.min", "kendo.menu.min"], e) }(function () { return function (e, t) { function n(e) { return d.trim(e).replace(/ /gi, "") } function i(e, t) { var n, i, o, r = {}; for (n = 0, i = e.length; n < i; n++)o = e[n], r[o[t]] = o; return r } function o(e) { var t, n = []; for (t = 0; t < e.length; t++)e[t].columns ? n = n.concat(o(e[t].columns)) : n.push(e[t]); return n } function r(e, t) { return "[" + d.attr(e) + "='" + (t || "").replace(/'/g, '"') + "']" } function a(e, t, n) { e > 0 ? t.insertAfter(n.children().eq(e - 1)) : n.prepend(t) } function s(e) { var t, n, i = {}; for (n = 0; n < e.length; n++)t = JSON.stringify(e[n]), i[t] ? i[t].push(n) : i[t] = [n]; return i } function l(e, t) { var n, i, o, r, a, s, l = d.attr("index"), c = d.attr("field"), u = {}; for (s = 0; s < e.length; s++)i = t.eq(s), o = parseInt(i.attr(l), 10), r = i.attr(c), a = i.attr("title"), n = r ? r : a, u[n] ? u[n].push(o) : u[n] = [o]; return u } var d = window.kendo, c = d.ui, u = e.proxy, h = e.extend, p = e.grep, f = e.map, g = e.inArray, m = "k-state-selected", v = "asc", _ = "desc", b = "change", w = "init", k = "open", y = "select", x = "kendoPopup", C = "kendoFilterMenu", S = "kendoMenu", T = ".kendoColumnMenu", D = c.Widget, A = D.extend({ init: function (t, n) { var i, o = this; D.fn.init.call(o, t, n), t = o.element, n = o.options, o.owner = n.owner, o.dataSource = n.dataSource, o.field = t.attr(d.attr("field")), o.title = t.attr(d.attr("title")), i = t.find(".k-header-column-menu"), i[0] || (i = t.addClass("k-with-icon").prepend('
        ').find(".k-header-column-menu")), o.link = i.attr("tabindex", -1).on("click" + T, u(o._click, o)), o.wrapper = e('
        '), o._refreshHandler = u(o.refresh, o), o.dataSource.bind(b, o._refreshHandler) }, _init: function () { var e = this; e.pane = e.options.pane, e.pane && (e._isMobile = !0), e._isMobile ? e._createMobileMenu() : e._createMenu(), e.owner._muteAngularRebind(function () { e._angularItems("compile") }), e._sort(), e._columns(), e._filter(), e._lockColumns(), e.trigger(w, { field: e.field, container: e.wrapper }) }, events: [w, k, "sort", "filtering"], options: { name: "ColumnMenu", messages: { sortAscending: "Sort Ascending", sortDescending: "Sort Descending", filter: "Filter", column: "Column", columns: "Columns", columnVisibility: "Column Visibility", clear: "Clear", cancel: "Cancel", done: "Done", settings: "Edit Column Settings", lock: "Lock", unlock: "Unlock" }, filter: "", columns: !0, sortable: !0, filterable: !0, animations: { left: "slide" } }, _createMenu: function () { var e = this, t = e.options; e.wrapper.html(d.template(E)({ uid: d.guid(), ns: d.ns, messages: t.messages, sortable: t.sortable, filterable: t.filterable, columns: e._ownerColumns(), showColumns: t.columns, lockedColumns: t.lockedColumns })), e.popup = e.wrapper[x]({ anchor: e.link, open: u(e._open, e), activate: u(e._activate, e), deactivate: u(e._deactivate, e), close: function () { e.menu._closing = !0, e.options.closeCallback && e.options.closeCallback(e.element) } }).data(x), e.menu = e.wrapper.children()[S]({ orientation: "vertical", closeOnClick: !1, open: function () { e._updateMenuItems() } }).data(S) }, _deactivate: function () { this.menu._closing = !1 }, _createMobileMenu: function () { var e, t = this, n = t.options, i = d.template(I)({ ns: d.ns, field: t.field, title: t.title || t.field, messages: n.messages, sortable: n.sortable, filterable: n.filterable, columns: t._ownerColumns(), showColumns: n.columns, lockedColumns: n.lockedColumns }); t.view = t.pane.append(i), t.view.state = { columns: {} }, t.wrapper = t.view.element.find(".k-column-menu"), t.menu = new M(t.wrapper.children(), { pane: t.pane, columnMenu: t }), t.menu.element.on("transitionend" + T, function (e) { e.stopPropagation() }), e = t.view.wrapper && t.view.wrapper[0] ? t.view.wrapper : t.view.element, e.on("click", ".k-header-done", function (e) { e.preventDefault(), t.menu._applyChanges(), t.menu._cancelChanges(!1), t.close() }), e.on("click", ".k-header-cancel", function (e) { e.preventDefault(), t.menu._cancelChanges(!0), t.close() }), t.view.bind("showStart", function () { var e = t.view || { columns: {} }; t.options.lockedColumns && t._updateLockedColumns(), e.element.find(".k-sort-asc.k-state-selected").length ? e.state.initialSort = "asc" : e.element.find(".k-sort-desc.k-state-selected").length && (e.state.initialSort = "desc") }) }, _angularItems: function (t) { var n = this; n.angular(t, function () { var t = n.wrapper.find(".k-columns-item input[" + d.attr("field") + "]").map(function () { return e(this).closest("li") }), i = f(n._ownerColumns(), function (e) { return { column: e._originalObject } }); return { elements: t, data: i } }) }, destroy: function () { var e = this; e._angularItems("cleanup"), D.fn.destroy.call(e), e.filterMenu && e.filterMenu.destroy(), e._refreshHandler && e.dataSource.unbind(b, e._refreshHandler), e.options.columns && e.owner && (e._updateColumnsMenuHandler && (e.owner.unbind("columnShow", e._updateColumnsMenuHandler), e.owner.unbind("columnHide", e._updateColumnsMenuHandler)), e._updateColumnsLockedStateHandler && (e.owner.unbind("columnLock", e._updateColumnsLockedStateHandler), e.owner.unbind("columnUnlock", e._updateColumnsLockedStateHandler))), e.menu && (e.menu.element.off(T), e.menu.destroy()), e.wrapper.off(T), e.popup && e.popup.destroy(), e.view && e.view.purge(), e.link.off(T), e.owner = null, e.wrapper = null, e.element = null }, close: function () { this.menu.close(), this.popup && (this.popup.close(), this.popup.element.off("keydown" + T)) }, _click: function (e) { var t, n = this; e.preventDefault(), e.stopPropagation(), t = this.options, t.filter && this.element.is(!t.filter) || (this.popup || this.pane ? n._updateMenuItems() : this._init(), this._isMobile ? this.pane.navigate(this.view, this.options.animations.left) : this.popup.toggle()) }, _updateMenuItems: function () { var e = this; e.options.columns && (e._setMenuItemsVisibility(), e._reorderMenuItems()) }, _setMenuItemsVisibility: function () { var e = this; e._eachRenderedMenuItem(function (e, t, n) { t.matchesMedia === !1 ? n.hide() : n.show() }) }, _reorderMenuItems: function () { var e = this; e._eachRenderedMenuItem(function (e, t, n, i) { n[0] && n.index() !== e && a(e, n, i) }), e._updateDataIndexes() }, _updateDataIndexes: function () { var t = this, n = t._isMobile && t.view ? e(t.view.element).find(".k-columns-item").children("ul") : e(t.wrapper).find(".k-menu-group").first(); n.find("span." + (this._isMobile ? "k-listgroup-form-field-wrapper" : "k-menu-link") + " input").each(function (t) { e(this).attr(d.attr("index"), t) }) }, _eachRenderedMenuItem: function (t) { var i, a, d, c, u, h, f, g = this, m = p(o(g.owner.columns), function (e) { var t = !0, i = n(e.title || ""); return e.menu !== !1 && (e.field || i.length) || (t = !1), t }).map(function (e) { return { field: e.field, title: e.title, matchesMedia: e.matchesMedia } }), v = g._isMobile && g.view ? e(g.view.element).find(".k-columns-item").children("ul") : e(g.wrapper).find(".k-menu-group").first(), _ = v.find("span." + (this._isMobile ? "k-listgroup-form-field-wrapper" : "k-menu-link")), b = l(_, v.find("input[type=checkbox]")), w = s(m); for (h = 0; h < m.length; h++) { for (c = m[h], d = c.field ? c.field : c.title, a = e.inArray(h, w[JSON.stringify(c)]), u = e(), f = 0; f < b[d].length; f++)u = u.add(_.eq(b[d][f])); i = u.find(r("field", d)).closest("li").eq(a), t(h, c, i, v) } }, _open: function () { var t = this; e(".k-column-menu").not(t.wrapper).each(function () { e(this).data(x).close() }), t.popup.element.on("keydown" + T, function (e) { e.keyCode == d.keys.ESC && t.close() }), t.options.lockedColumns && t._updateLockedColumns() }, _activate: function () { this.menu.element.focus(), this.trigger(k, { field: this.field, container: this.wrapper }) }, _ownerColumns: function () { var e = o(this.owner.columns), t = p(e, function (e) { var t = !0, i = n(e.title || ""); return e.menu !== !1 && (e.field || i.length) || (t = !1), t }); return f(t, function (t) { return { originalField: t.field, field: t.field || t.title, title: t.title || t.field, hidden: t.hidden, matchesMedia: t.matchesMedia, index: g(t, e), locked: !!t.locked, _originalObject: t, uid: t.headerAttributes.id } }) }, _sort: function () { var t = this; t.options.sortable && (t.refresh(), t.menu.bind(y, function (n) { var i, o = e(n.item); o.hasClass("k-sort-asc") ? i = v : o.hasClass("k-sort-desc") && (i = _), i && (o.parent().find(".k-sort-" + (i == v ? _ : v)).removeClass(m), t._sortDataSource(o, i), t._isMobile || t.close()) })) }, _sortDataSource: function (e, n) { var i, o, r = this, a = r.options.sortable, s = null === a.compare ? t : a.compare, l = r.dataSource, d = l.sort() || [], c = e.hasClass(m) && a && a.allowUnsort !== !1; if (n = c ? t : n, !r.trigger("sort", { sort: { field: r.field, dir: n, compare: s } })) { if (c ? e.removeClass(m) : e.addClass(m), "multiple" === a.mode) { for (i = 0, o = d.length; i < o; i++)if (d[i].field === r.field) { d.splice(i, 1); break } d.push({ field: r.field, dir: n, compare: s }) } else d = [{ field: r.field, dir: n, compare: s }]; l.sort(d) } }, _columns: function () { var t = this; t.options.columns && (t._updateColumnsMenu(), t._updateColumnsMenuHandler = u(t._updateColumnsMenu, t), t.owner.bind(["columnHide", "columnShow"], t._updateColumnsMenuHandler), t._updateColumnsLockedStateHandler = u(t._updateColumnsLockedState, t), t.owner.bind(["columnUnlock", "columnLock"], t._updateColumnsLockedStateHandler), t.menu.bind(y, function (i) { var r, a, s = e(i.item), l = d.attr("index"), c = {}, u = 0, h = p(o(t.owner.columns), function (e, t) { var i = !0, o = n(e.title || ""); return e.menu !== !1 && (e.field || o.length) || (i = !1), i && (c[t] = u, u++), i }); t._isMobile && i.preventDefault(), s.parent().closest("li.k-columns-item")[0] && (r = s.find(":checkbox"), r.attr("disabled") || (a = h[c[parseInt(r.attr(l), 10)]], a.hidden === !0 ? t.owner.showColumn(a) : t.owner.hideColumn(a))) })) }, _updateColumnsMenu: function () { var e, t, i, r, a, s, l, c = d.attr("field"), u = d.attr("locked"), h = d.attr("uid"), f = {}, g = 0, m = 0, v = p(o(this.owner.columns), function (e, t) { var i = !0, o = n(e.title || ""); return e.menu !== !1 && (e.field || o.length) || (i = !1), i && (f[t] = g, g++), i }), _ = p(this._ownerColumns(), function (e) { return !e.hidden && e.matchesMedia !== !1 }), b = p(_, function (e) { return e.originalField }), w = p(b, function (e) { return e.locked === !0 }).length, k = p(b, function (e) { return e.locked !== !0 }).length, y = p(this.owner.columns, function (e) { return e.menu === !1 }), x = p(y, function (e) { return e.hidden }); for (this.wrapper.find("[role='menuitemcheckbox']").attr("aria-checked", !1), s = this.wrapper.find(".k-columns-item input[" + c + "]").prop("disabled", !1).prop("checked", !1), e = 0, t = s.length; e < t; e++)i = s.eq(e), a = "true" === i.attr(u), r = !1, l = i.data("kendoSwitch"), m = v.map(function (e) { return e.headerAttributes.id }).indexOf(i.attr(h)), r = !v[m].hidden && v[m].matchesMedia !== !1, i.prop("checked", r), l && (l.enable(!0), l.check(r)), i.closest("[role='menuitemcheckbox']").attr("aria-checked", r), r && (1 == w && a && (i.prop("disabled", !0), l && l.enable(!1)), 0 !== y.length && y.length !== x.length || 1 != k || a || (i.prop("disabled", !0), l && l.enable(!1))) }, _updateColumnsLockedState: function () { var e, t, n, o, r = d.attr("field"), a = d.attr("locked"), s = i(this._ownerColumns(), "field"), l = this.wrapper.find(".k-columns-item input[type=checkbox]"); for (e = 0, t = l.length; e < t; e++)n = l.eq(e), o = s[n.attr(r)], o && n.attr(a, o.locked); this._updateColumnsMenu() }, _filter: function () { var t = this, n = C, i = t.options; i.filterable !== !1 && (i.filterable.multi && (n = "kendoFilterMultiCheck", i.filterable.dataSource && (i.filterable.checkSource = i.filterable.dataSource, delete i.filterable.dataSource)), t.filterMenu = t.wrapper.find(".k-filterable")[n](h(!0, {}, { appendToElement: !0, dataSource: i.dataSource, values: i.values, field: t.field, title: t.title, change: function (e) { t.trigger("filtering", { filter: e.filter, field: e.field }) && e.preventDefault() } }, i.filterable)).data(n), t._isMobile && t.menu.bind(y, function (n) { var i = e(n.item); i.hasClass("k-filter-item") && t.pane.navigate(t.filterMenu.view, t.options.animations.left) })) }, _lockColumns: function () { var t = this; t.menu.bind(y, function (n) { var i = e(n.item); i.hasClass("k-lock") ? (t.owner.lockColumn(t.field), t._isMobile || t.close()) : i.hasClass("k-unlock") && (t.owner.unlockColumn(t.field), t._isMobile || t.close()) }) }, _updateLockedColumns: function () { var e, t, n, i, o = this.field, r = this.owner.columns, a = p(r, function (e) { return e.field == o || e.title == o })[0]; a && (e = a.locked === !0, t = p(r, function (t) { return !t.hidden && (t.locked && e || !t.locked && !e) }).length, n = this.wrapper.find(".k-lock").removeClass("k-state-disabled"), i = this.wrapper.find(".k-unlock").removeClass("k-state-disabled"), (e || 1 == t) && n.addClass("k-state-disabled"), e && 1 != t || i.addClass("k-state-disabled"), this._updateColumnsLockedState()) }, refresh: function () { var e, t, n, i = this, o = i.options.dataSource.sort() || [], r = i.field; for (i.wrapper.find(".k-sort-asc, .k-sort-desc").removeClass(m), t = 0, n = o.length; t < n; t++)e = o[t], r == e.field && i.wrapper.find(".k-sort-" + e.dir).addClass(m); i.link[i._filterExist(i.dataSource.filter()) ? "addClass" : "removeClass"]("k-state-active") }, _filterExist: function (e) { var t, n, i, o = !1; if (e) { for (e = e.filters, n = 0, i = e.length; n < i; n++)t = e[n], t.field == this.field ? o = !0 : t.filters && (o = o || this._filterExist(t)); return o } } }), E = '
          #if(sortable){#
        • ${messages.sortAscending}
        • ${messages.sortDescending}
        • #if(showColumns || filterable){##}##}##if(showColumns){#
        • ${messages.columns}
            #for (var idx = 0; idx < columns.length; idx++) {#
          • #=columns[idx].title#
          • #}#
        • #if(filterable || lockedColumns){##}##}##if(filterable){#
        • ${messages.filter}
        • #if(lockedColumns){##}##}##if(lockedColumns){#
        • ${messages.lock}
        • ${messages.unlock}
        • #}#
        ', I = '
        ${messages.settings}
        • #=messages.column#: ${title}
            #if(sortable){#
          • ${messages.sortAscending}
          • ${messages.sortDescending}
          • #}##if(lockedColumns){#
          • ${messages.lock}
          • ${messages.unlock}
          • #}##if(filterable){#
          • ${messages.filter}
          • #}#
        • #if(showColumns){#
        • ${messages.columnVisibility}
            #for (var idx = 0; idx < columns.length; idx++) {#
          • #=columns[idx].title#
          • #}#
        • #}#
        •  
          • #=messages.clear#
        ', M = D.extend({ init: function (e, t) { var n = this; D.fn.init.call(n, e, t), n._createCheckBoxes(), n.element.on("click" + T, "li.k-item:not(.k-separator):not(.k-state-disabled):not(:has(.k-switch))", "_click") }, events: [y], _click: function (n) { var i = this; return e(n.target).is("[type=checkbox]") || n.preventDefault(), e(n.target).hasClass("k-clear") ? (i._cancelChanges(!0), t) : e(n.target).hasClass("k-filterable") ? (i._cancelChanges(!0), i.trigger(y, { item: n.currentTarget }), t) : (i._updateSelectedItems(n.currentTarget), t) }, _updateSelectedItems: function (t) { var n, i, o, r = this, a = e(t), s = r.options.columnMenu.view.state || { columns: {} }, l = a.prop("id"); a.hasClass("k-filter-item") || (s[l] = !s[l], (a.hasClass("k-sort-asc") || a.hasClass("k-sort-desc")) && (a.hasClass("k-sort-asc") ? (n = "asc", i = r.element.find(".k-sort-desc")) : (n = "desc", i = r.element.find(".k-sort-asc")), o = i.prop("id"), n !== s.initialSort || a.hasClass("k-state-selected") || (s[l] = !1), s[o] && (s[o] = !1), i.removeClass(m)), a.hasClass(m) ? a.removeClass(m) : a.addClass(m)) }, _cancelChanges: function (e) { var t, n, i, o, r = this, a = r.options.columnMenu, s = a.view, l = s.state || { columns: {} }, d = l.columns; if (r.element.find("." + m).removeClass(m), a.refresh(), e) { t = []; for (n in d) d.hasOwnProperty(n) && d[n] === !0 && (i = s.element.find("#" + n), t.push(i[0])); for (o = t.length - 1; o >= 0; o--)r.trigger(y, { item: t[o] }); a.options.lockedColumns && a._updateLockedColumns() } r.options.columnMenu.view.state = { columns: {} } }, _applyChanges: function () { var e, t, n = this, i = n.options.columnMenu.view, o = i.state || { columns: {} }; for (e in o) o.hasOwnProperty(e) && "initialSort" !== e && "columns" !== e && o[e] === !0 && (t = i.element.find("#" + e), t.hasClass(m) ? t.removeClass(m) : t.addClass(m), n.trigger(y, { item: t[0] })) }, _createCheckBoxes: function () { var e = this; e.element.find(".k-columns-item").find("[type='checkbox']").kendoSwitch({ messages: { checked: "", unchecked: "" }, change: function (t) { var n = t.sender.element.closest(".k-item"), i = e.options.columnMenu.view.state || { columns: {} }, o = n.prop("id"); i.columns[o] = !i.columns[o], e.trigger(y, { item: n }) } }) }, _destroyCheckBoxes: function () { var e, t, n = this, i = n.element.find(".k-columns-item").find("[type='checkbox']"); for (t = 0; t < i.length; t++)e = i.eq(t).data("kendoSwitch"), e && e.destroy() }, close: function () { this.options.pane.navigate("") }, destroy: function () { var e = this; D.fn.destroy.call(e), e.element.off(T), e._destroyCheckBoxes() } }); c.plugin(A) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.columnsorter.min", ["kendo.core.min"], e) }(function () { return function (e, t) { function n(n) { var i = n.find("tr:not(.k-filter-row)"), r = o.attr("index"), a = i.find("th[" + r + "]:visible"); return a.sort(function (n, i) { var o, a; return n = e(n), i = e(i), o = n.attr(r), a = i.attr(r), o === t && (o = e(n).index()), a === t && (a = e(i).index()), o = parseInt(o, 10), a = parseInt(a, 10), o > a ? 1 : o < a ? -1 : 0 }), a } function i(e) { var t = null; return e.is("th") && (t = e.closest("table"), t.parent().hasClass("k-grid-header-wrap") ? t = t.closest(".k-grid").find(".k-grid-content > table") : t.parent().hasClass("k-grid-header-locked") && (t = t.closest(".k-grid").find(".k-grid-content-locked > table"))), t } var o = window.kendo, r = o.ui, a = r.Widget, s = "dir", l = "asc", d = "single", c = "field", u = "desc", h = ".kendoColumnSorter", p = ".k-link", f = "aria-sort", g = e.proxy, m = a.extend({ init: function (e, t) { var n, i = this; a.fn.init.call(i, e, t), i._refreshHandler = g(i.refresh, i), i.dataSource = i.options.dataSource.bind("change", i._refreshHandler), i.directions = i.options.initialDirection === l ? [l, u] : [u, l], n = i.element.find(p), n[0] || (n = i.element.wrapInner('').find(p)), i.link = n, i.element.on("click" + h, g(i._click, i)) }, options: { name: "ColumnSorter", mode: d, allowUnsort: !0, compare: null, filter: "", initialDirection: l, showIndexes: !1 }, events: ["change"], destroy: function () { var e = this; a.fn.destroy.call(e), e.element.off(h), e.dataSource.unbind("change", e._refreshHandler), e._refreshHandler = e.element = e.link = e.dataSource = null }, refresh: function (r) { if (!r || "itemchange" !== r.action && "sync" !== r.action) { var a, d, h, p, g, m = this, v = m.dataSource.sort() || [], _ = m.element, b = _.attr(o.attr(c)), w = (m.dataSource._sortFields || {})[b]; _.removeAttr(o.attr(s)), _.removeAttr(f), w && (a = w.dir, _.attr(o.attr(s), a), g = w.index), _.is("th") && w && (d = i(_), d && (_.attr(o.attr("index")) ? (h = n(_.closest("table")), p = h.index(_)) : p = _.parent().children(":visible").index(_), d.find("col:not(.k-group-col):not(.k-hierarchy-col)").eq(p).toggleClass("k-sorted", a !== t))), _.toggleClass("k-sorted", a !== t), _.find(".k-i-sort-asc-sm,.k-i-sort-desc-sm,.k-sort-order").remove(), a === l ? (e('').appendTo(m.link), _.attr(f, "ascending")) : a === u && (e('').appendTo(m.link), _.attr(f, "descending")), m.options.showIndexes && v.length > 1 && g && e('').html(g).appendTo(m.link) } }, _toggleSortDirection: function (e) { var n = this.directions; return e === n[n.length - 1] && this.options.allowUnsort ? t : n[0] === e ? n[1] : n[0] }, _click: function (e) { var n, i, r = this, a = r.element, l = a.attr(o.attr(c)), u = a.attr(o.attr(s)), h = r.options, p = null === r.options.compare ? t : r.options.compare, f = r.dataSource.sort() || []; if (e.preventDefault(), (!h.filter || a.is(h.filter)) && (u = this._toggleSortDirection(u), !this.trigger("change", { sort: { field: l, dir: u, compare: p } }))) { if (h.mode === d) f = [{ field: l, dir: u, compare: p }]; else if ("multiple" === h.mode) { for (n = 0, i = f.length; n < i; n++)if (f[n].field === l) { f.splice(n, 1); break } f.push({ field: l, dir: u, compare: p }) } this.dataSource.options.endless && (this.dataSource.options.endless = null, a.closest(".k-grid").getKendoGrid()._endlessPageSize = r.dataSource.options.pageSize, this.dataSource.pageSize(r.dataSource.options.pageSize)), this.dataSource.sort(f) } } }); r.plugin(m) }(window.kendo.jQuery), window.kendo }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.editable.min", ["kendo.dropdownlist.min", "kendo.datepicker.min", "kendo.numerictextbox.min", "kendo.validator.min", "kendo.binder.min"], e) }(function () { return function (e, t) { function n(t) { return t = null != t ? t : "", t.type || e.type(t) || "string" } function i(t) { t.find(":input:not(:button, .k-combobox .k-input, [" + d.attr("role") + "=listbox], [" + d.attr("role") + "=upload], [" + d.attr("skip") + "], [type=file])").each(function () { var t = d.attr("bind"), n = this.getAttribute(t) || "", i = "checkbox" === this.type || "radio" === this.type ? "checked:" : "value:", o = this.name; n.indexOf(i) === -1 && o && (n += (n.length ? "," : "") + i + o, e(this).attr(t, n)) }) } function o(e) { var t, i, o, r, a, s, l = (e.model.fields || e.model)[e.field], c = n(l), u = l ? l.validation : {}, h = l ? l.attributes : {}, p = d.attr("type"), b = d.attr("bind"), w = { id: e.id || e.field, name: e.field, title: e.title ? e.title : e.field }; for (t in u) i = u[t], m(t, x) >= 0 ? w[p] = t : f(i) || (o = d.getCulture(), "number" == typeof i && o.name.length ? (r = o.numberFormat, a = ("" + i).replace(v, r[v]), w[t] = a) : w[t] = g(i) ? i.value || t : i), w[d.attr(t + "-msg")] = i.message, w.autocomplete = _; for (s in h) w[s] = h[s]; return m(c, x) >= 0 && (w[p] = c), w[b] = "value:" + e.field, w } function r(e, t) { var n = e.attr("id"); return n && (t.id = n, e.removeAttr("id")), t } function a(e) { var t, n, i, o, r, a; if (e && e.length) for (a = [], t = 0, n = e.length; t < n; t++)i = e[t], r = i.text || i.value || i, o = null == i.value ? i.text || i : i.value, a[t] = { text: r, value: o }; return a } function s(e, t) { var n; if (e.length) return n = "DropDownTree" === e && t && t.checkboxes || "MultiSelect" === e ? "
        ", indent: function (e) { return e.replace(/<\/(p|li|ul|ol|h[1-6]|table|tr|td|th)>/gi, "\n").replace(/<(ul|ol)([^>]*)>
      • \n/gi, "
        \n").replace(/\n$/, "") } }), n.ui.editor.ViewHtmlCommand = c, o.EditorUtils.registerTool("viewHtml", new s({ command: c, template: new l({ template: r.buttonTemplate, title: "View HTML" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/format.min", ["editor/command.min"], e) }(function () { !function (e) { var t = window.kendo, n = e.extend, i = t.ui.editor, o = i.Tool, r = i.Command, a = i.EditorUtils, s = r.extend({ init: function (e) { e.formatter = e.formatter(); var t = e.formatter.finder; t && a.formatByName("immutable", t.format) && t._initOptions({ immutables: e.immutables }), r.fn.init.call(this, e) } }), l = o.extend({ init: function (e) { o.fn.init.call(this, e) }, command: function (e) { var t = this; return new s(n(e, { formatter: t.options.formatter })) }, update: function (e, t) { var n = this.options.finder.isFormatted(t); e.toggleClass("k-state-selected", n), e.attr("aria-pressed", n) } }); e.extend(i, { FormatCommand: s, FormatTool: l }) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/inlineformat.min", ["editor/plugins/format.min"], e) }(function () { !function (e) { var t = window.kendo, n = t.Class, i = t.ui.editor, o = t.ui.Editor.fn.options.formats, r = i.EditorUtils, a = i.Tool, s = i.ToolTemplate, l = i.FormatTool, d = i.Dom, c = i.RangeUtils, u = e.extend, h = i.EditorUtils.registerTool, p = i.EditorUtils.registerFormat, f = "mousedown.kendoEditor", g = "keydown.kendoEditor", m = "k-marker", v = n.extend({ init: function (e) { this.format = e }, numberOfSiblings: function (e) { var t, n = 0, i = 0, o = 0, r = e.parentNode; for (t = r.firstChild; t; t = t.nextSibling)t != e && (t.className == m ? o++ : 3 == t.nodeType ? n++ : i++); return o > 1 && r.firstChild.className == m && r.lastChild.className == m ? 0 : i + n }, findSuitable: function (e, t) { var n, i; if (!t && this.numberOfSiblings(e) > 0) return null; for (n = e.parentNode, i = this.format[0].tags; !d.ofType(n, i);) { if (this.numberOfSiblings(n) > 0) return null; n = n.parentNode } return n }, findFormat: function (e) { var t, n, i, o, r, a = this.format, s = d.attrEquals; for (t = 0, n = a.length; t < n; t++) { if (i = e, o = a[t].tags, r = a[t].attr, i && d.ofType(i, o) && s(i, r)) return i; for (; i;)if (i = d.parentOfType(i, o), i && s(i, r)) return i } return null }, isFormatted: function (e) { var t, n; for (t = 0, n = e.length; t < n; t++)if (this.findFormat(e[t])) return !0; return !1 } }), _ = n.extend({ init: function (e, t) { this.finder = new v(e), this.attributes = u({}, e[0].attr, t), this.tag = e[0].tags[0] }, wrap: function (e) { return d.wrap(e, d.create(e.ownerDocument, this.tag, this.attributes)) }, activate: function (e, t) { this.finder.isFormatted(t) ? (this.split(e), this.remove(t)) : this.apply(t) }, toggle: function (e) { var t = this.immutables() ? c.editableTextNodes : c.textNodes, n = t(e); n.length > 0 && this.activate(e, n) }, immutables: function () { return this.editor && this.editor.options.immutables }, apply: function (e) { var t, n, i, o, r = []; if (e.length > 1) for (t = 0, n = e.length; t < n; t++)i = e[t], o = this.format(i, !0), r.push(o); else i = e[0], o = this.format(i, !1); this.consolidate(r) }, format: function (e, t) { var n = this.finder.findSuitable(e), i = this.attributes, o = i ? i.style || {} : {}; if (n) d.is(n, "font") && (o.color && n.removeAttribute("color"), o.fontName && n.removeAttribute("face"), o.fontSize && n.removeAttribute("size")), d.attr(n, i); else { for (; !d.isBlock(e.parentNode) && 1 == e.parentNode.childNodes.length && "true" !== e.parentNode.contentEditable && t;)e = e.parentNode; n = this.wrap(e) } return n }, remove: function (e) { var t, n, i; for (t = 0, n = e.length; t < n; t++)i = this.finder.findFormat(e[t]), i && (this.attributes && this.attributes.style ? (d.unstyle(i, this.attributes.style), i.style.cssText || i.attributes["class"] || d.unwrap(i)) : d.unwrap(i)) }, split: function (e) { var t, n, i = c.textNodes(e), o = i.length; if (o > 0) for (t = 0; t < o; t++)n = this.finder.findFormat(i[t]), n && c.split(e, n, !0) }, consolidate: function (e) { for (var t, n; e.length > 1;)if (t = e.pop(), n = e[e.length - 1], t.previousSibling && t.previousSibling.className == m && n.appendChild(t.previousSibling), t.tagName == n.tagName && t.previousSibling == n && t.style.cssText == n.style.cssText && t.className === n.className) { for (; t.firstChild;)n.appendChild(t.firstChild); d.remove(t) } } }), b = v.extend({ init: function (e, t) { this.format = e, this.greedyProperty = t, v.fn.init.call(this, e) }, getInlineCssValue: function (e) { var n, i, o, r, a, s, l, c, u, h, p, f, g = e.attributes, m = t.trim; if (g) for (n = 0, i = g.length; n < i; n++)if (o = g[n], r = o.nodeName, a = o.nodeValue, o.specified && "style" == r) for (s = m(a || e.style.cssText).split(";"), c = 0, u = s.length; c < u; c++)if (l = s[c], l.length) { if (h = l.split(":"), p = m(h[0].toLowerCase()), f = m(h[1]), p != this.greedyProperty) continue; return p.indexOf("color") >= 0 ? d.toHex(f) : f } }, getFormatInner: function (t) { var n, i, o, r = e(d.isDataNode(t) ? t.parentNode : t), a = r.parentsUntil("[contentEditable]").addBack().toArray().reverse(); for (n = 0, i = a.length; n < i; n++)if (o = "className" == this.greedyProperty ? a[n].className : this.getInlineCssValue(a[n])) return o; return "inherit" }, getFormat: function (e) { var t, n, i = this.getFormatInner(e[0]); for (t = 1, n = e.length; t < n; t++)if (i != this.getFormatInner(e[t])) return ""; return i }, isFormatted: function (e) { return "" !== this.getFormat(e) } }), w = _.extend({ init: function (e, n, i) { _.fn.init.call(this, e, n), this.values = n, this.finder = new b(e, i), i && (this.greedyProperty = t.toCamelCase(i)) }, activate: function (e, t) { var n = this.greedyProperty, i = "apply"; this.split(e), n && "inherit" == this.values.style[n] && (i = "remove"), this[i](t) } }), k = l.extend({ init: function (e) { l.fn.init.call(this, u(e, { finder: new v(e.format), formatter: function () { return new _(e.format) } })) } }), y = a.extend({ update: function (e, t) { var n = e.data(this.type); n.close(), n.value(this.finder.getFormat(t)) } }), x = y.extend({ init: function (e) { a.fn.init.call(this, e), this.type = t.support.browser.msie || t.support.touch ? "kendoDropDownList" : "kendoComboBox", this.format = [{ tags: ["span", "font"] }], this.finder = new b(this.format, e.cssAttr) }, command: function (e) { var t = this.options, n = this.format, o = {}; return new i.FormatCommand(u(e, { formatter: function () { return o[t.domAttr] = e.value, new w(n, { style: o }, t.cssAttr) } })) }, initialize: function (e, n) { var i, o, r, s = n.editor, l = this.options, d = l.name, c = []; l.defaultValue && (c = [{ text: s.options.messages[l.defaultValue[0].text], value: l.defaultValue[0].value }]), i = c.concat(l.items ? l.items : s.options[d] || []), e.attr({ title: n.title }), e[this.type]({ dataTextField: "text", dataValueField: "value", dataSource: i, change: function () { s._range = o, a.exec(s, d, this.value()) }, close: function () { setTimeout(function () { s._deleteSavedRange() }, 0) }, highlightFirst: !1 }), e.closest(".k-widget").removeClass("k-" + d).find("*").addBack().attr("unselectable", "on"), r = e.data(this.type), r.value("inherit"), r.wrapper.on(f, ".k-select,.k-input", function () { var e = s.getRange(); o = s._containsRange(e) ? e : o }).on(g, function (e) { e.keyCode === t.keys.ENTER && (s._deleteSavedRange(), e.preventDefault()) }) } }), C = a.extend({ init: function (e) { a.fn.init.call(this, e), this.format = [{ tags: ["span", "font"] }], this.finder = new b(this.format, e.cssAttr) }, options: { palette: "websafe" }, update: function () { this._widget.close() }, command: function (e) { var t = this.options, n = this.format, o = {}; return new i.FormatCommand(u(e, { formatter: function () { return o[t.domAttr] = e.value, new w(n, { style: o }, t.cssAttr) } })) }, initialize: function (n, i) { var o = this, s = i.editor, l = this.name, d = u({}, C.fn.options, this.options), c = d.palette, h = d.columns; n = this._widget = new t.ui.ColorPicker(n, { toolIcon: "k-icon k-i-" + r.getToolCssClass(d.name), palette: c, columns: h, change: function () { var e = n.value(); t.support.browser.msie && o.storedRange && o._inputFocused && s.selectRange(o.storedRange), e && a.exec(s, l, e), delete o.storedRange, delete o._inputFocused, s.focus() }, open: function (t) { var n = t.sender; o.storedRange = s.getRange(), n._popup.element.on(f, function (t) { e(t.target).is("input.k-color-value") || t.preventDefault() }), n._popup.element.is("[unselectable='on']") || n._popup.element.attr({ unselectable: "on" }).find("*:not(input)").attr("unselectable", "on").end().find("input").on("focus", function () { o._inputFocused = !0 }) }, close: function (e) { e.sender._popup.element.off(f), t.support.browser.msie && o.storedRange && o._inputFocused && s.selectRange(o.storedRange) }, activate: function (e) { e.preventDefault(), "rgba(255, 255, 255, 0)" !== e.sender._value.toCssRgba() && n.trigger("change") } }), n.wrapper.attr({ title: i.title, unselectable: "on" }).find("*:not(input)").attr("unselectable", "on"), n.value("transparent") } }); u(i, { InlineFormatFinder: v, InlineFormatter: _, DelayedExecutionTool: y, GreedyInlineFormatFinder: b, GreedyInlineFormatter: w, InlineFormatTool: k, FontTool: x, ColorTool: C }), p("bold", [{ tags: ["strong", "b"] }, { tags: ["span"], attr: { style: { fontWeight: "bold" } } }]), h("bold", new k({ key: "B", ctrl: !0, format: o.bold, template: new s({ template: r.buttonTemplate, title: "Bold" }) })), p("italic", [{ tags: ["em", "i"] }, { tags: ["span"], attr: { style: { fontStyle: "italic" } } }]), h("italic", new k({ key: "I", ctrl: !0, format: o.italic, template: new s({ template: r.buttonTemplate, title: "Italic" }) })), p("underline", [{ tags: ["span"], attr: { style: { textDecoration: "underline" } } }, { tags: ["u"] }]), h("underline", new k({ key: "U", ctrl: !0, format: o.underline, template: new s({ template: r.buttonTemplate, title: "Underline" }) })), p("strikethrough", [{ tags: ["del", "strike"] }, { tags: ["span"], attr: { style: { textDecoration: "line-through" } } }]), h("strikethrough", new k({ format: o.strikethrough, template: new s({ template: r.buttonTemplate, title: "Strikethrough" }) })), p("superscript", [{ tags: ["sup"] }]), h("superscript", new k({ format: o.superscript, template: new s({ template: r.buttonTemplate, title: "Superscript" }) })), p("subscript", [{ tags: ["sub"] }]), h("subscript", new k({ format: o.subscript, template: new s({ template: r.buttonTemplate, title: "Subscript" }) })), h("foreColor", new C({ cssAttr: "color", domAttr: "color", name: "foreColor", template: new s({ template: r.colorPickerTemplate, title: "Color" }) })), h("backColor", new C({ cssAttr: "background-color", domAttr: "backgroundColor", name: "backColor", template: new s({ template: r.colorPickerTemplate, title: "Background Color" }) })), h("fontName", new x({ cssAttr: "font-family", domAttr: "fontFamily", name: "fontName", defaultValue: [{ text: "fontNameInherit", value: "inherit" }], template: new s({ template: r.comboBoxTemplate, title: "Font Name" }) })), h("fontSize", new x({ cssAttr: "font-size", domAttr: "fontSize", name: "fontSize", defaultValue: [{ text: "fontSizeInherit", value: "inherit" }], template: new s({ template: r.comboBoxTemplate, title: "Font Size" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/link.min", ["editor/plugins/inlineformat.min"], e) }(function () { !function (e, t) { function n(e, t) { for (var n = e.length; n-- && !t.test(e[n]);); return n } function i(e, t) { var n = t.exec(e); return n ? n.index : -1 } var o = window.kendo, r = o.Class, a = e.extend, s = e.proxy, l = o.ui.editor, d = l.Dom, c = l.RangeUtils, u = l.EditorUtils, h = l.Command, p = l.Tool, f = l.ToolTemplate, g = l.InlineFormatter, m = l.InlineFormatFinder, v = c.textNodes, _ = c.editableTextNodes, b = l.EditorUtils.registerTool, w = o.keys, k = "http://", y = /^\w*:\/\//, x = /[\w\/\$\-_\*\?]/i, C = r.extend({ findSuitable: function (e) { return d.parentOfType(e, ["a"]) } }), S = r.extend({ init: function () { this.finder = new C }, apply: function (e, t) { var n, i, o, r, a, s, l, u = this.immutables ? _(e) : v(e); if (t.innerText) { for (i = c.documentFromRange(e), n = c.getMarkers(e), e.deleteContents(), r = d.create(i, "a", t), e.insertNode(r), a = r.parentNode, "a" == d.name(a) && d.insertAfter(r, a), d.emptyNode(a) && d.remove(a), s = r, l = 0; l < n.length; l++)d.insertAfter(n[l], s), s = n[l]; n.length && (d.insertBefore(i.createTextNode("\ufeff"), n[1] || n[0]), d.insertAfter(i.createTextNode("\ufeff"), n[1] || n[0]), e.setStartBefore(n[0]), e.setEndAfter(n[n.length - 1])) } else o = new g([{ tags: ["a"] }], t), o.finder = this.finder, o.apply(u) } }), T = h.extend({ init: function (e) { var t = this; e.formatter = { toggle: function (e) { var n = t.immutables() ? _(e) : v(e); new g([{ tags: ["a"] }]).remove(n) } }, this.options = e, h.fn.init.call(this, e) } }), D = h.extend({ init: function (e) { var t; this.options = e, h.fn.init.call(this, e), this.formatter = new S, e.url ? this.exec = function () { this.formatter.immutables = t && t.immutables(), this.formatter.apply(e.range, { href: e.url, innerText: e.text || e.url, target: e.target }) } : (this.attributes = null, this.async = !0) }, _dialogTemplate: function () { return o.template("
        ")({ messages: this.editor.options.messages }) }, exec: function () { var t, n, i, o, r = this.editor.options.messages; this._initialText = "", this._range = this.lockRange(!0), this.formatter.immutables = this.immutables(), t = v(this._range), n = t.length ? this.formatter.finder.findSuitable(t[0]) : null, i = t.length && "img" == d.name(t[0]), o = this.createDialog(this._dialogTemplate(), { title: r.createLink, close: s(this._close, this), visible: !1 }), n && (this._range.selectNodeContents(n), t = v(this._range)), this._initialText = this.linkText(t), o.find(".k-dialog-insert").click(s(this._apply, this)).end().find(".k-dialog-close").click(s(this._close, this)).end().find(".k-edit-field input").keydown(s(this._keydown, this)).end().find("#k-editor-link-url").val(this.linkUrl(n)).end().find("#k-editor-link-text").val(this._initialText).end().find("#k-editor-link-title").val(n ? n.title : "").end().find("#k-editor-link-target").attr("checked", !!n && "_blank" == n.target).end().find(".k-editor-link-text-row").toggle(!i), this._dialog = o.data("kendoWindow").center().open(), e("#k-editor-link-url", o).focus().select() }, _keydown: function (e) { var t = o.keys; e.keyCode == t.ENTER ? this._apply(e) : e.keyCode == t.ESC && this._close(e) }, _apply: function (t) { var n, i, o, r = this._dialog.element, a = e("#k-editor-link-url", r).val(), s = e("#k-editor-link-text", r); a && a != k && (a.indexOf("@") > 0 && !/^(\w+:)|(\/\/)/i.test(a) && (a = "mailto:" + a), this.attributes = { href: a }, n = e("#k-editor-link-title", r).val(), n && (this.attributes.title = n), s.is(":visible") && (i = s.val(), i || this._initialText ? i && i !== this._initialText && (this.attributes.innerText = d.stripBom(i)) : this.attributes.innerText = a), o = e("#k-editor-link-target", r).is(":checked"), this.attributes.target = o ? "_blank" : null, this.formatter.apply(this._range, this.attributes)), this._close(t), this.change && this.change() }, _close: function (e) { e.preventDefault(), this._dialog.destroy(), d.windowFromDocument(c.documentFromRange(this._range)).focus(), this.releaseRange(this._range) }, linkUrl: function (e) { return e ? e.getAttribute("href", 2) : k }, linkText: function (e) { var t, n = ""; for (t = 0; t < e.length; t++)n += e[t].nodeValue; return d.stripBom(n || "") }, redo: function () { var e = this.lockRange(!0); this.formatter.apply(e, this.attributes), this.releaseRange(e) } }), A = h.extend({ init: function (e) { h.fn.init.call(this, e), this.formatter = new S }, exec: function () { var e, t, n, i = this.detectLink(); i && (e = this.getRange(), t = new o.ui.editor.Marker, n = e.cloneRange(), n.setStart(i.start.node, i.start.offset), n.setEnd(i.end.node, i.end.offset), e = this.lockRange(), t.add(n), this.formatter.apply(n, { href: this._ensureWebProtocol(i.text) }), t.remove(n), this.releaseRange(e)) }, detectLink: function () { var e, t, n = this.getRange(), i = n.startContainer, o = n.startOffset, r = i.previousSibling; return !r && (d.isBom(i) && !i.nextSibling || !o && d.isDataNode(i)) && (i = i.parentNode, o = 0), e = new F({ node: i, offset: o, cancelAtNode: function (e) { return e && "a" === d.name(e) } }), t = new I(e), t.detectLink() }, changesContent: function () { return !!this.detectLink() }, _ensureWebProtocol: function (e) { var t = this._hasProtocolPrefix(e); return t ? e : this._prefixWithWebProtocol(e) }, _hasProtocolPrefix: function (e) { return y.test(e) }, _prefixWithWebProtocol: function (e) { return k + e } }), E = p.extend({ init: function (t) { this.options = t, this.finder = new m([{ tags: ["a"] }]), p.fn.init.call(this, e.extend(t, { command: T })) }, initialize: function (e, t) { p.fn.initialize.call(this, e, t), e.addClass("k-state-disabled") }, update: function (e, t) { e.toggleClass("k-state-disabled", !this.finder.isFormatted(t)).removeClass("k-state-hover") } }), I = r.extend({ init: function (e) { this.traverser = e, this.start = M(), this.end = M(), this.text = "" }, detectLink: function () { var t, n, i, o, r = this.traverser.node, a = this.traverser.offset; if (d.isDataNode(r)) { if (t = r.data.substring(0, a), /\s{2}$/.test(d.stripBom(t))) return } else 0 === a && (n = d.closestEditableOfType(r, d.blockElements), n && n.previousSibling && this.traverser.init({ node: n.previousSibling })); return this.traverser.traverse(e.proxy(this._detectEnd, this)), this.end.blank() || (this.traverser = this.traverser.clone(this.end), this.traverser.traverse(e.proxy(this._detectStart, this)), this._isLinkDetected() || (i = this.traverser.extendOptions(this.start), o = new P(i), o.traverse(e.proxy(this._skipStartPuntuation, this)), this._isLinkDetected() || (this.start = M()))), this.start.blank() ? null : { start: this.start, end: this.end, text: this.text } }, _isLinkDetected: function () { return y.test(this.text) || /^w{3}\./i.test(this.text) }, _detectEnd: function (e, t) { var i = n(e, x); if (i > -1) return this.end.node = t, this.end.offset = i + 1, !1 }, _detectStart: function (e, t) { var i = n(e, /\s/), o = i + 1; if (this.text = e.substring(o) + this.text, this.start.node = t, this.start.offset = o, i > -1) return !1 }, _skipStartPuntuation: function (e, t, n) { var o = i(e, /\w/), r = o; if (o === -1 && (r = e.length), this.text = this.text.substring(r), this.start.node = t, this.start.offset = r + (0 | n), o > -1) return !1 } }), M = function () { return { node: null, offset: null, blank: function () { return null === this.node && null === this.offset } } }, R = r.extend({ init: function (n) { this.node = n.node, this.offset = n.offset === t ? d.isDataNode(this.node) && this.node.length || 0 : n.offset, this.cancelAtNode = n.cancelAtNode || this.cancelAtNode || e.noop }, traverse: function (e) { e && (this.cancel = !1, this._traverse(e, this.node, this.offset)) }, _traverse: function (e, n, i) { var o, r, a, s; if (n && !this.cancel) { if (3 !== n.nodeType) return r = this.edgeNode(n), this.cancel = this.cancel || this.cancelAtNode(r), this._traverse(e, r); if (o = n.data, i !== t && (o = this.subText(o, i)), this.cancel = e(o, n, i) === !1, a = this.next(n), !a) for (s = n.parentNode; !a && d.isInline(s);)a = this.next(s), s = s.parentNode; this.cancel = this.cancel || this.cancelAtNode(a), this._traverse(e, a) } }, extendOptions: function (t) { return e.extend({ node: this.node, offset: this.offset, cancelAtNode: this.cancelAtNode }, t || {}) }, edgeNode: function (e) { }, next: function (e) { }, subText: function (e, t) { } }), F = R.extend({ subText: function (e, t) { return e.substring(0, t) }, next: function (e) { return e.previousSibling }, edgeNode: function (e) { return e.lastChild }, clone: function (e) { var t = this.extendOptions(e); return new F(t) } }), P = R.extend({ subText: function (e, t) { return e.substring(t) }, next: function (e) { return e.nextSibling }, edgeNode: function (e) { return e.firstChild }, clone: function (e) { var t = this.extendOptions(e); return new P(t) } }); a(o.ui.editor, { LinkFormatFinder: C, LinkFormatter: S, UnlinkCommand: T, LinkCommand: D, AutoLinkCommand: A, UnlinkTool: E, DomTextLinkDetection: I, LeftDomTextTraverser: F, RightDomTextTraverser: P }), b("createLink", new p({ key: "K", ctrl: !0, command: D, template: new f({ template: u.buttonTemplate, title: "Create Link" }) })), b("unlink", new E({ key: "K", ctrl: !0, shift: !0, template: new f({ template: u.buttonTemplate, title: "Remove Link" }) })), b("autoLink", new p({ key: [w.ENTER, w.SPACEBAR], keyPressCommand: !0, command: A })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/formatblock.min", ["editor/plugins/format.min"], e) }(function () { !function (e) { var t, n = window.kendo, i = n.Class, o = e.extend, r = n.ui.editor, a = n.ui.Editor.fn.options.formats, s = r.Dom, l = r.ToolTemplate, d = r.FormatTool, c = r.EditorUtils, u = c.registerTool, h = c.registerFormat, p = r.RangeUtils, f = i.extend({ init: function (e) { this.format = e }, contains: function (e, t) { var n, i, o; for (n = 0, i = t.length; n < i; n++)if (o = t[n], !o || !s.isAncestorOrSelf(e, o)) return !1; return !0 }, findSuitable: function (t) { var n, i, o, r, a = this.format, l = []; for (n = 0, i = t.length; n < i; n++) { for (r = a.length - 1; r >= 0 && !(o = s.ofType(t[n], a[r].tags) ? t[n] : s.closestEditableOfType(t[n], a[r].tags)); r--); if (!o || "true" === o.contentEditable) return []; e.inArray(o, l) < 0 && l.push(o) } for (this._resolveListsItems(l), n = 0, i = l.length; n < i; n++)if (this.contains(l[n], l)) return [l[n]]; return l }, _resolveListsItems: function (e) { var t, n, i; for (t = 0; t < e.length; t++)n = e[t], i = s.is(n, "li") ? n : s.wrapper(n), i = i && s.list(i) ? i.children[0] : i, s.is(i, "li") && (n = e[t] = i) }, findFormat: function (e) { var t, n, i, o, a, l, d = this.format, c = s.editableParent(e), u = this.options && this.options.immutables, h = r.Immutables; for (t = 0, n = d.length; t < n; t++) { if (i = e, o = d[t].tags, a = d[t].attr, u && o && "immutable" == o[0] && (l = h.immutableParent(i), l && s.attrEquals(l, a))) return i; for (; i && s.isAncestorOf(c, i);) { if (s.ofType(i, o) && s.attrEquals(i, a)) return i; i = i.parentNode } } return null }, getFormat: function (e) { var t, n, i = this, o = function (e) { return i.findFormat(s.isDataNode(e) ? e.parentNode : e) }, r = o(e[0]); if (!r) return ""; for (t = 1, n = e.length; t < n; t++)if (r != o(e[t])) return ""; return r.nodeName.toLowerCase() }, isFormatted: function (e) { for (var t = 0, n = e.length; t < n; t++)if (!this.findFormat(e[t])) return !1; return !0 } }), g = i.extend({ init: function (e, t) { this.format = e, this.values = t, this.finder = new f(e) }, wrap: function (e, t, n) { var i, o, r, a, l, d = 1 == n.length ? s.blockParentOrBody(n[0]) : s.commonAncestor.apply(null, n); for (s.isInline(d) && (d = s.blockParentOrBody(d)), i = s.significantChildNodes(d), o = s.findNodeIndex(i[0]), r = s.create(d.ownerDocument, e, t), a = 0; a < i.length; a++)l = i[a], s.isBlock(l) ? (s.attr(l, t), r.childNodes.length && (s.insertBefore(r, l), r = r.cloneNode(!1)), o = s.findNodeIndex(l) + 1) : r.appendChild(l); r.firstChild && s.insertAt(d, r, o) }, apply: function (t) { function n(e) { return o({}, e && e.attr, f) } var i, r, a, l, d, u, h, p, f = this.values; if (this._handleImmutables(t, !0), r = s.filter("img", t), a = c.formatByName("img", this.format), l = n(a), e.each(r, function () { s.attr(this, l) }), r.length != t.length) if (d = s.filter("img", t, !0), u = this.finder.findSuitable(d), u.length) for (h = 0, p = u.length; h < p; h++)i = c.formatByName(s.name(u[h]), this.format), s.attr(u[h], n(i)); else i = this.format[0], this.wrap(i.tags[0], n(i), d) }, _handleImmutables: function (e, t) { var n, i, o, a, l; if (this.immutables() && (n = c.formatByName("immutable", this.format))) for (i = r.Immutables, o = e.length - 1, a = o; a >= 0; a--)l = i.immutableParent(e[a]), l && (l !== e[a + 1] && (t ? s.attr(l, n.attr) : s.unstyle(l, n.attr.style)), e.splice(a, 1)) }, immutables: function () { return this.editor && this.editor.options.immutables }, remove: function (e) { var t, n, i, o, r; for (this._handleImmutables(e, !1), t = 0, n = e.length; t < n; t++)i = this.finder.findFormat(e[t]), i && (r = s.name(i), o = c.formatByName(r, this.format), o.attr.style && s.unstyle(i, o.attr.style), o.attr.className && s.removeClass(i, o.attr.className)) }, toggle: function (e) { var t = this, n = s.filterBy(p.nodes(e), s.htmlIndentSpace, !0); t.finder.isFormatted(n) ? t.remove(n) : t.apply(n) } }), m = i.extend({ init: function (e, t) { var n = this; n.format = e, n.values = t, n.finder = new f(e) }, apply: function (e) { var t, n, i, o, a, l, d, c, u, h, p = this.format, f = s.blockParents(e), m = p[0].tags[0]; if (f.length) for (t = 0, n = f.length; t < n; t++)c = f[t], u = this.immutables() && r.Immutables.immutableParent(c), u || (d = s.name(c), "li" == d ? (i = c.parentNode, o = new r.ListFormatter(i.nodeName.toLowerCase(), m), a = this.editor.createRange(), a.selectNode(f[t]), o.toggle(a)) : m && ("td" == d || c.attributes.contentEditable) ? new g(p, this.values).apply(c.childNodes) : (l = s.changeTag(c, m), s.attr(l, p[0].attr))); else h = new g(p, this.values), h.editor = this.editor, h.apply(e) }, toggle: function (e) { var t = p.textNodes(e); t.length || (e.selectNodeContents(e.commonAncestorContainer), t = p.textNodes(e), t.length || (t = s.significantChildNodes(e.commonAncestorContainer))), this.apply(t) }, immutables: function () { return this.editor && this.editor.options.immutables } }), v = d.extend({ init: function (e) { d.fn.init.call(this, o(e, { finder: new f(e.format), formatter: function () { return new g(e.format) } })) } }); o(r, { BlockFormatFinder: f, BlockFormatter: g, GreedyBlockFormatter: m, BlockFormatTool: v }), t = ["ul", "ol", "li"], h("justifyLeft", [{ tags: s.nonListBlockElements, attr: { style: { textAlign: "left" } } }, { tags: ["img"], attr: { style: { "float": "left", display: "", marginLeft: "", marginRight: "" } } }, { tags: ["immutable"], attr: { style: { "float": "left", display: "", marginLeft: "", marginRight: "" } } }, { tags: t, attr: { style: { textAlign: "left", listStylePosition: "" } } }]), u("justifyLeft", new v({ format: a.justifyLeft, template: new l({ template: c.buttonTemplate, title: "Justify Left" }) })), h("justifyCenter", [{ tags: s.nonListBlockElements, attr: { style: { textAlign: "center" } } }, { tags: ["img"], attr: { style: { display: "block", marginLeft: "auto", marginRight: "auto", "float": "" } } }, { tags: ["immutable"], attr: { style: { display: "block", marginLeft: "auto", marginRight: "auto", "float": "" } } }, { tags: t, attr: { style: { textAlign: "center", listStylePosition: "inside" } } }]), u("justifyCenter", new v({ format: a.justifyCenter, template: new l({ template: c.buttonTemplate, title: "Justify Center" }) })), h("justifyRight", [{ tags: s.nonListBlockElements, attr: { style: { textAlign: "right" } } }, { tags: ["img"], attr: { style: { "float": "right", display: "", marginLeft: "", marginRight: "" } } }, { tags: ["immutable"], attr: { style: { "float": "right", display: "", marginLeft: "", marginRight: "" } } }, { tags: t, attr: { style: { textAlign: "right", listStylePosition: "inside" } } }]), u("justifyRight", new v({ format: a.justifyRight, template: new l({ template: c.buttonTemplate, title: "Justify Right" }) })), h("justifyFull", [{ tags: s.nonListBlockElements, attr: { style: { textAlign: "justify" } } }, { tags: ["img"], attr: { style: { display: "block", marginLeft: "auto", marginRight: "auto", "float": "" } } }, { tags: ["immutable"], attr: { style: { display: "block", marginLeft: "auto", marginRight: "auto", "float": "" } } }, { tags: t, attr: { style: { textAlign: "justify", listStylePosition: "" } } }]), u("justifyFull", new v({ format: a.justifyFull, template: new l({ template: c.buttonTemplate, title: "Justify Full" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/lists.min", ["editor/plugins/formatblock.min"], e) }(function () { !function (e) { var t = window.kendo, n = t.Class, i = e.extend, o = t.ui.editor, r = o.Dom, a = o.RangeUtils, s = o.EditorUtils, l = o.Command, d = o.ToolTemplate, c = o.FormatTool, u = o.BlockFormatFinder, h = a.textNodes, p = o.EditorUtils.registerTool, f = u.extend({ init: function (e) { this.tag = e; var t = this.tags = ["ul" == e ? "ol" : "ul", e]; u.fn.init.call(this, [{ tags: t }]) }, isFormatted: function (e) { var t, n, i = []; for (n = 0; n < e.length; n++)t = this.findFormat(e[n]), t && r.name(t) == this.tag && i.push(t); if (i.length < 1) return !1; if (i.length != e.length) return !1; for (n = 0; n < i.length && i[n].parentNode == t.parentNode; n++)if (i[n] != t) return !1; return !0 }, findSuitable: function (e) { var t = this.findFormat(e[0]); return t && r.name(t) == this.tag ? t : null } }), g = n.extend({ init: function (e, t) { var n = this; n.finder = new f(e), n.tag = e, n.unwrapTag = t }, isList: function (e) { return r.list(e) }, immutables: function () { return this.editor && !!this.editor.options.immutables }, wrap: function (t, n) { var i, a, s = r.create(t.ownerDocument, "li"), l = this.immutables() ? o.Immutables.immutable : e.noop; for (i = 0; i < n.length; i++)if (a = n[i], r.is(a, "li")) t.appendChild(a); else if (this.isList(a)) for (; a.firstChild;)t.appendChild(a.firstChild); else if (r.is(a, "td")) { for (; a.firstChild;)s.appendChild(a.firstChild); t.appendChild(s), a.appendChild(t), t = t.cloneNode(!1), s = s.cloneNode(!1) } else s.appendChild(a), r.isBlock(a) && (t.appendChild(s), l(a) || r.unwrap(a), s = s.cloneNode(!1)); s.firstChild && t.appendChild(s) }, containsAny: function (e, t) { for (var n = 0; n < t.length; n++)if (r.isAncestorOrSelf(e, t[n])) return !0; return !1 }, suitable: function (e, t) { if ("k-marker" == e.className) { var n = e.nextSibling; if (n && r.isBlock(n)) return !1; if (n = e.previousSibling, n && r.isBlock(n)) return !1 } return this.containsAny(e, t) || r.isInline(e) || 3 == e.nodeType }, _parentLists: function (t) { var n = r.closestEditable(t); return e(t).parentsUntil(n, "ul,ol") }, split: function (e) { var t, n, i, o, s, l, d = h(e); if (d.length) for (t = r.parentOfType(d[0], ["li"]), n = r.parentOfType(d[d.length - 1], ["li"]), e.setStartBefore(t), e.setEndAfter(n), o = 0, s = d.length; o < s; o++)l = this.finder.findFormat(d[o]), l && (i = this._parentLists(l), i.length ? a.split(e, i.last()[0], !0) : a.split(e, l, !0)) }, merge: function (e, t) { for (var n, i = t.previousSibling; i && ("k-marker" == i.className || 3 == i.nodeType && r.isWhitespace(i));)i = i.previousSibling; if (i && r.name(i) == e) { for (; t.firstChild;)i.appendChild(t.firstChild); r.remove(t), t = i } for (n = t.nextSibling; n && ("k-marker" == n.className || 3 == n.nodeType && r.isWhitespace(n));)n = n.nextSibling; if (n && r.name(n) == e) { for (; t.lastChild;)n.insertBefore(t.lastChild, n.firstChild); r.remove(t) } }, breakable: function (e) { return e != e.ownerDocument.body && !/table|tbody|thead|tr|td/.test(r.name(e)) && !e.attributes.contentEditable }, applyOnSection: function (t, n) { function i() { u.push(this) } var o, a, s, l, d = this.tag, c = r.closestSplittableParent(n), u = [], h = this.finder.findSuitable(n); for (h || (h = new f("ul" == d ? "ol" : "ul").findSuitable(n)), /table|tbody|thead/.test(r.name(c)) ? o = e.map(n, function (e) { return r.parentOfType(e, ["td"]) }) : (o = r.significantChildNodes(c), e.grep(o, r.isBlock).length && (o = e.grep(o, e.proxy(function (e) { return this.containsAny(e, n) }, this))), o.length || (o = n)), a = 0; a < o.length; a++)s = o[a], l = (!h || !r.isAncestorOrSelf(h, s)) && this.suitable(s, n), l && (h && this.isList(s) ? (e.each(s.children, i), r.remove(s)) : u.push(s)); for (u.length == o.length && this.breakable(c) && (u = [c]), h || (h = r.create(c.ownerDocument, d), r.isBlock(u[0]) && r.mergeAttributes(u[0], h), r.insertBefore(h, u[0])), this.wrap(h, u); r.isBom(h.nextSibling);)r.remove(h.nextSibling); r.is(h, d) || r.changeTag(h, d), this.merge(d, h) }, apply: function (t) { function n() { i && c.push({ section: i, nodes: a }) } var i, a, s, l, d = 0, c = [], u = t.length, h = this.immutables() ? o.Immutables.immutableParent : e.noop; for (d = 0; d < u; d++)l = h(t[d]) || t[d], s = r.closestEditable(l, ["td", "th", "body"]), i && s == i ? a.push(l) : (n(), a = [l], i = s); for (n(), d = 0; d < c.length; d++)this.applyOnSection(c[d].section, c[d].nodes) }, unwrap: function (e) { var t, n, i, o, a = e.ownerDocument.createDocumentFragment(), s = this.unwrapTag; for (n = e.firstChild; n; n = n.nextSibling) { for (i = r.create(e.ownerDocument, s || "p"); n.firstChild;)o = n.firstChild, r.isBlock(o) ? (i.firstChild && (a.appendChild(i), i = r.create(e.ownerDocument, s || "p")), a.appendChild(o)) : i.appendChild(o); i.firstChild && a.appendChild(i) } t = this._parentLists(e), t[0] ? (r.insertAfter(a, t.last()[0]), t.last().remove()) : r.insertAfter(a, e), r.remove(e) }, remove: function (e) { var t, n, i; for (n = 0, i = e.length; n < i; n++)t = this.finder.findFormat(e[n]), t && this.unwrap(t) }, toggle: function (e) { var t, n = this, i = h(e), o = e.commonAncestorContainer; i.length || (e.selectNodeContents(o), i = h(e), i.length || (t = o.ownerDocument.createTextNode(""), e.startContainer.appendChild(t), i = [t], e.selectNode(t.parentNode))), i = r.filterBy(i, r.htmlIndentSpace, !0), n.finder.isFormatted(i) ? (n.split(e), n.remove(i)) : n.apply(i) } }), m = l.extend({ init: function (e) { e.formatter = new g(e.tag), l.fn.init.call(this, e) } }), v = c.extend({ init: function (e) { this.options = e, c.fn.init.call(this, i(e, { finder: new f(e.tag) })) }, command: function (e) { return new m(i(e, { tag: this.options.tag })) } }); i(o, { ListFormatFinder: f, ListFormatter: g, ListCommand: m, ListTool: v }), p("insertUnorderedList", new v({ tag: "ul", template: new d({ template: s.buttonTemplate, title: "Insert unordered list" }) })), p("insertOrderedList", new v({ tag: "ol", template: new d({ template: s.buttonTemplate, title: "Insert ordered list" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/formatting.min", ["editor/plugins/inlineformat.min"], e) }(function () { !function (e) { function t(e) { var t, o, r = l.closestEditableOfType(e, ["li"]); r && (t = new i.ListFormatter(l.name(r.parentNode)), o = n.ui.editor.W3CRange.fromNode(e), o.selectNode(r), t.toggle(o)) } var n = window.kendo, i = n.ui.editor, o = i.Tool, r = i.ToolTemplate, a = i.DelayedExecutionTool, s = i.Command, l = i.Dom, d = i.EditorUtils, c = i.RangeUtils, u = d.registerTool, h = a.extend({ init: function (e) { var t = this; o.fn.init.call(t, n.deepExtend({}, t.options, e)), t.type = "kendoSelectBox", t.finder = { getFormat: function () { return "" } } }, options: { items: [{ text: "Paragraph", value: "p" }, { text: "Quotation", value: "blockquote" }, { text: "Heading 1", value: "h1" }, { text: "Heading 2", value: "h2" }, { text: "Heading 3", value: "h3" }, { text: "Heading 4", value: "h4" }, { text: "Heading 5", value: "h5" }, { text: "Heading 6", value: "h6" }], width: 110 }, toFormattingItem: function (e) { var t, n = e.value; return n ? e.tag || e.className ? e : (t = n.indexOf("."), 0 === t ? e.className = n.substring(1) : t == -1 ? e.tag = n : (e.tag = n.substring(0, t), e.className = n.substring(t + 1)), e) : e }, command: function (t) { var n = this, o = t.value; return o = this.toFormattingItem(o), new i.FormatCommand({ range: t.range, formatter: function () { var t, r = (o.tag || o.context || "span").split(","), a = [{ tags: r, attr: { className: o.className || "" } }]; return t = e.inArray(r[0], l.inlineElements) >= 0 ? new i.GreedyInlineFormatter(a) : new i.GreedyBlockFormatter(a), t.editor = n.editor, t } }) }, initialize: function (e, t) { var i, r = t.editor, a = this.options, s = a.name, l = this; l.editor = r, e.width(a.width), i = e.kendoSelectBox({ dataTextField: "text", dataValueField: "value", dataSource: a.items || r.options[s], title: r.options.messages[s], autoSize: !0, change: function () { var e = this.dataItem(); e && o.exec(r, s, e.toJSON()) }, dataBound: function () { var e, t = this.dataSource.data(); for (e = 0; e < t.length; e++)t[e] = l.toFormattingItem(t[e]) }, highlightFirst: !1, template: n.template('#:data.text#') }).data("kendoSelectBox"), e.attr("title", t.title), i.wrapper.attr("title", t.title), e.addClass("k-decorated").closest(".k-widget").removeClass("k-" + s).find("*").addBack().attr("unselectable", "on") }, getFormattingValue: function (t, n) { var i, o, r, a, s, l, d; for (i = 0; i < t.length; i++)if (o = t[i], r = o.tag || o.context || "", a = o.className ? "." + o.className : "", s = r + a, l = e(n[0]).closest(s)[0]) { if (1 == n.length) return o.value; for (d = 1; d < n.length && e(n[d]).closest(s)[0]; d++)if (d == n.length - 1) return o.value } return "" }, update: function (t, n) { var i, o, r, s, d, c = e(t).data(this.type); if (c && (i = c.dataSource, o = i.data(), d = l.commonAncestor.apply(null, n), d == l.closestEditable(d) || this._ancestor != d)) { for (this._ancestor = d, r = 0; r < o.length; r++)s = o[r].context, o[r].visible = !s || !!e(d).closest(s).length; i.filter([{ field: "visible", operator: "eq", value: !0 }]), a.fn.update.call(this, t, n), c.value(this.getFormattingValue(i.view(), n)), c.wrapper.toggleClass("k-state-disabled", !i.view().length) } }, destroy: function () { this._ancestor = null } }), p = s.extend({ exec: function () { var e, t, n, i = this.lockRange(!0); for (this.tagsToClean = this.options.remove || "strong,em,span,sup,sub,del,b,i,u,font".split(","), c.wrapSelectedElements(i), e = c.mapAll(i, function (e) { return e }), t = e.length - 1; t >= 0; t--)n = e[t], this.immutableParent(n) || this.clean(n); this.releaseRange(i) }, clean: function (n) { var o, r, a, s, d; if (n && !l.isMarker(n)) { if (o = l.name(n), "ul" == o || "ol" == o) for (r = new i.ListFormatter(o), a = n.previousSibling, s = n.nextSibling, r.unwrap(n); a && a != s; a = a.nextSibling)this.clean(a); else if ("blockquote" == o) l.changeTag(n, "p"); else if (1 != n.nodeType || l.insignificant(n)) t(n); else { for (d = n.childNodes.length - 1; d >= 0; d--)this.clean(n.childNodes[d]); n.removeAttribute("style"), n.removeAttribute("class") } e.inArray(o, this.tagsToClean) > -1 && l.unwrap(n) } }, immutableParent: function (e) { return this.immutables() && i.Immutables.immutableParent(e) } }); e.extend(i, { FormattingTool: h, CleanFormatCommand: p }), u("formatting", new h({ template: new r({ template: d.dropDownListTemplate, title: "Format" }) })), u("cleanFormatting", new o({ command: p, template: new r({ template: d.buttonTemplate, title: "Clean formatting" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/image.min", ["kendo.imagebrowser.min", "editor/command.min"], e) }(function () { !function (e, t) { var n = window.kendo, i = e.extend, o = n.ui.editor, r = o.EditorUtils, a = o.Dom, s = r.registerTool, l = o.ToolTemplate, d = o.RangeUtils, c = o.Command, u = n.keys, h = "#k-editor-image-url", p = "#k-editor-image-title", f = "#k-editor-image-width", g = "#k-editor-image-height", m = c.extend({ init: function (e) { var t = this; c.fn.init.call(t, e), t.async = !0, t.attributes = {} }, insertImage: function (e, t) { var n, i = this.attributes, o = d.documentFromRange(t); if (i.src && "http://" != i.src) { if (n = function () { setTimeout(function () { i.width || e.removeAttribute("width"), i.height || e.removeAttribute("height"), e.removeAttribute("complete") }) }, !e) return e = a.create(o, "img", i), e.onload = e.onerror = n, t.deleteContents(), t.insertNode(e), e.nextSibling || a.insertAfter(o.createTextNode("\ufeff"), e), n(), t.setStartAfter(e), t.setEndAfter(e), d.selectRange(t), !0; e.onload = e.onerror = n, a.attr(e, i), n() } return !1 }, _dialogTemplate: function (e) { return n.template('
        # if (showBrowser) { #
        # } #
        ')({ messages: this.editor.options.messages, showBrowser: e }) }, redo: function () { var e = this, t = e.lockRange(); e.insertImage(d.image(t), t) || e.releaseRange(t) }, exec: function () { function e(e) { var t = s.element, n = parseInt(t.find(f).val(), 10), i = parseInt(t.find(g).val(), 10); m.attributes = { src: t.find(h).val().replace(/ /g, "%20"), alt: t.find(p).val() }, m.attributes.width = null, m.attributes.height = null, !isNaN(n) && n > 0 && (m.attributes.width = n), !isNaN(i) && i > 0 && (m.attributes.height = i), _ = m.insertImage(b, v), o(e), m.change && m.change() } function o(e) { e.preventDefault(), s.destroy(), a.windowFromDocument(d.documentFromRange(v)).focus(), _ || m.releaseRange(v) } function r(t) { t.keyCode == u.ENTER ? e(t) : t.keyCode == u.ESC && o(t) } var s, l, c, m = this, v = m.lockRange(), _ = !1, b = d.image(v), w = b && b.getAttribute("width") || "", k = b && b.getAttribute("height") || "", y = n.support.browser.msie, x = m.editor.options, C = x.messages, S = x.imageBrowser, T = !!(n.ui.ImageBrowser && S && S.transport && S.transport.read !== t), D = { title: C.insertImage, visible: !1, resizable: T }; this.expandImmutablesIn(v), D.close = o, T && (D.width = 750), s = this.createDialog(m._dialogTemplate(T), D).toggleClass("k-filebrowser-dialog", T).find(".k-dialog-insert").click(e).end().find(".k-dialog-close").click(o).end().find(".k-edit-field input").keydown(r).end().find(h).val(b ? b.getAttribute("src", 2) : "http://").end().find(p).val(b ? b.alt : "").end().find(f).val(w).end().find(g).val(k).end().data("kendoWindow"), l = s.element, T && (this._imageBrowser = new n.ui.ImageBrowser(l.find(".k-imagebrowser"), i({}, S)), this._imageBrowser.bind("change", function (e) { "f" === e.selected.get("type") && l.find(h).val(this.value()) }), this._imageBrowser.bind("apply", e)), y && (c = l.closest(".k-window").height(), l.css("max-height", c)), s.center().open(), l.find(h).focus().select() } }); n.ui.editor.ImageCommand = m, s("insertImage", new o.Tool({ command: m, template: new l({ template: r.buttonTemplate, title: "Insert Image" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/import.min", ["editor/main.min"], e) }(function () { !function (e, t) { var n = window.kendo, i = e.extend, o = e.proxy, r = n.ui.editor, a = r.EditorUtils, s = r.Command, l = r.Tool, d = a.registerTool, c = r.ToolTemplate, u = '
        ', h = s.extend({ exec: function () { (this.editor._uploadWidget || this._initializeUploadWidget()).element.click() }, _initializeUploadWidget: function () { var t = this, n = t.editor, i = n.options["import"], r = e('').kendoUpload({ success: o(t._onUploadSuccess, t), progress: o(t._onUploadProgress, t), select: o(t._onUploadSelect, t), error: o(t._onUploadError, t), complete: o(t._onUploadComplete, t), showFileList: !1, multiple: !1, async: { saveUrl: i.proxyUrl, autoUpload: !0, saveField: "file" }, validation: { allowedExtensions: i.allowedExtensions, maxFileSize: i.maxFileSize } }).getKendoUpload(); return n._uploadWidget = r, r }, _onUploadComplete: function (e) { this._trigger("complete", e), e.sender.clearAllFiles(), this._removeLoadingOverlay() }, _onUploadSuccess: function (e) { this.editor.value(e.response.html.replace(/<\/?body>/gi, "")), this._trigger("success", e) }, _onUploadProgress: function (e) { this._trigger("progress", e) }, _onUploadSelect: function (e) { this._trigger("select", e), e.files[0].validationErrors || this._initLoadingOverlay() }, _onUploadError: function (e) { this._trigger("error", e) }, _trigger: function (e, t) { var n = this.editor, i = n.options["import"]; "function" == typeof i[e] && i[e].call(n, t) }, _initLoadingOverlay: function () { var t = this.editor.body; r.Dom.is(t, "body") ? this._iframeWrapper = this._container = this.editor.wrapper.find("iframe").parent().css({ position: "relative" }).append(u) : this._container = e(t).append(u), n.ui.progress(this._container, !0) }, _removeLoadingOverlay: function () { n.ui.progress(this._container, !1), e(this._iframeWrapper).css({ position: "" }), delete this._container, delete this._iframeWrapper } }); i(r, { ImportCommand: h }), d("import", new l({ command: h, template: new c({ template: a.buttonTemplate, title: "Import" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/insert.min", ["editor/command.min"], e) }(function () { !function (e) { var t = window.kendo, n = t.ui.editor, i = n.Command, o = n.GenericCommand, r = n.EditorUtils, a = r.registerTool, s = n.Tool, l = n.ToolTemplate, d = n.RestorePoint, c = e.extend, u = i.extend({ init: function (e) { i.fn.init.call(this, e), this.managesUndoRedo = !0 }, exec: function () { var e, t = this.editor, n = this.options, i = n.range, r = t.body, a = new d(i, r), s = n.html || n.value || ""; t.selectRange(i), t.clipboard.paste(s, n), n.postProcess && n.postProcess(t, t.getRange()), e = new o(a, new d(t.getRange(), r)), e.editor = t, t.undoRedoStack.push(e), t.focus() } }), h = s.extend({ initialize: function (e, t) { var i = t.editor, o = this.options, r = o.items ? o.items : i.options.insertHtml; this._selectBox = new n.SelectBox(e, { dataSource: r, dataTextField: "text", dataValueField: "value", change: function () { s.exec(i, "insertHtml", this.value()) }, title: i.options.messages.insertHtml, highlightFirst: !1 }), e.attr("title", t.title), this._selectBox.wrapper.attr("title", t.title) }, command: function (e) { return new u(e) }, update: function (e) { var t = e.data("kendoSelectBox") || e.find("select").data("kendoSelectBox"); t.close(), t.value(t.options.title) } }); c(n, { InsertHtmlCommand: u, InsertHtmlTool: h }), a("insertHtml", new h({ template: new l({ template: r.dropDownListTemplate, title: "Insert HTML", initialValue: "Insert HTML" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/export.min", ["editor/main.min"], e) }(function () { !function (e, t) { var n = window.kendo, i = e.extend, o = e.proxy, r = n.ui.editor, a = r.EditorUtils, s = r.Command, l = r.Tool, d = a.registerTool, c = r.ToolTemplate, u = [{ text: "Docx", value: "docx" }, { text: "Rtf", value: "rtf" }, { text: "Pdf", value: "pdf" }, { text: "Html", value: "html" }, { text: "Plain Text", value: "txt" }], h = s.extend({ init: function (e) { var t = this; t.options = e, s.fn.init.call(t, e), t.attributes = null, t.exportType = e.exportType }, exec: function () { var e = this, t = this.lockRange(!0); e.postToProxy(), e.releaseRange(t) }, postToProxy: function () { this.generateForm().appendTo("body").submit().remove() }, generateForm: function () { var t = this, n = t.editor.options.exportAs, i = e("").attr({ action: n && n.proxyURL || "", method: "POST" }); return i.append([t.valueInput(), t.exportTypeInput(), t.fileNameInput()]), i }, valueInput: function () { var t = this.editor; return e("").attr({ value: t.encodedValue(), name: "value", type: "hidden" }) }, exportTypeInput: function () { var t = this; return e("").attr({ value: t.exportType, name: "exportType", type: "hidden" }) }, fileNameInput: function () { var t = this.editor, n = t.options.exportAs, i = n && n.fileName || t.element.attr("id") || "editor"; return e("").attr({ value: i, name: "fileName", type: "hidden" }) } }), p = l.extend({ init: function (e) { var t = this; l.fn.init.call(t, n.deepExtend({}, t.options, e)), t.type = "kendoSelectBox" }, options: { items: u, width: 115 }, command: function (e) { var t = e.value; return new r.ExportAsCommand({ range: e.range, exportType: t.exportType }) }, initialize: function (e, t) { var i, r = this, a = t.editor, s = r.options, l = s.name, d = o(r.changeHandler, r), c = s.items || a.options[l]; c.unshift({ text: a.options.messages[l], value: "" }), r.editor = a, e.width(s.width), i = e.kendoSelectBox({ dataTextField: "text", dataValueField: "value", dataSource: c, autoSize: !0, change: d, open: function (e) { var t = e.sender; t.items()[0].style.display = "none", t.unbind("open") }, highlightFirst: !1, template: n.template('#:data.text#') }).data("kendoSelectBox"), e.attr("title", t.title), i.wrapper.attr("title", t.title), e.addClass("k-decorated").closest(".k-widget").removeClass("k-" + l).find("*").addBack().attr("unselectable", "on") }, changeHandler: function (e) { var t = e.sender, n = t.dataItem(), i = n && n.value; this._exec(i), t.value("") }, _exec: function (e) { e && l.exec(this.editor, this.options.name, { exportType: e }) }, destroy: function () { this._ancestor = null } }); i(r, { ExportAsTool: p, ExportAsCommand: h }), d("exportAs", new p({ template: new c({ template: a.dropDownListTemplate, title: "Export As" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/indent.min", ["editor/plugins/formatblock.min"], e) }(function () { !function (e, t) { function n(n, i) { var o = "rtl" == e(n).css("direction"), r = o ? "Right" : "Left", a = "td" != s.name(n) ? "margin" + r : "padding" + r; return i === t ? n.style[a] || 0 : (i > 0 ? n.style[a] = i + "px" : (n.style[a] = "", n.style.cssText || n.removeAttribute("style")), t) } var i = window.kendo, o = i.Class, r = e.extend, a = i.ui.editor, s = a.Dom, l = a.EditorUtils, d = l.registerTool, c = a.Command, u = a.Tool, h = a.ToolTemplate, p = a.RangeUtils, f = s.blockElements, g = a.BlockFormatFinder, m = a.BlockFormatter, v = o.extend({ init: function () { this.finder = new g([{ tags: s.blockElements }]) }, apply: function (t) { var i, o, r, a, l, d, c, u, h, p, f, g; if (t = s.filterBy(t, s.htmlIndentSpace, !0), i = this.finder.findSuitable(t), o = [], i = this.mapImmutables(i), i.length) { for (r = 0, a = i.length; r < a; r++)s.is(i[r], "li") ? e(i[r]).index() ? e.inArray(i[r].parentNode, o) < 0 && o.push(i[r]) : o.push(i[r].parentNode) : o.push(i[r]); for (; o.length;)if (l = o.shift(), s.is(l, "li")) if (d = l.parentNode, c = e(l).prev("li"), u = c.find("ul,ol").last(), h = e(l).children("ul,ol")[0], h && c[0]) u[0] ? (u.append(l), u.append(e(h).children()), s.remove(h)) : (c.append(h), h.insertBefore(l, h.firstChild)); else for (h = c.children("ul,ol")[0], h || (h = s.create(l.ownerDocument, s.name(d)), c.append(h)); l && l.parentNode == d;)h.appendChild(l), l = o.shift(); else for (p = parseInt(n(l), 10) + 30, n(l, p), f = 0; f < o.length; f++)e.contains(l, o[f]) && o.splice(f, 1) } else g = new m([{ tags: ["p"] }], { style: { marginLeft: 30 } }), g.apply(t) }, mapImmutables: function (t) { if (this.immutables) { var n = []; return e.map(t, function (t) { var i = a.Immutables.immutableParent(t); if (i) { if (e.inArray(i, n) !== -1) return null; n.push(i) } return i || t }) } return t }, remove: function (t) { t = s.filterBy(t, s.htmlIndentSpace, !0); var i, o, r, a, l, d, c, u, h = this.finder.findSuitable(t); for (h = this.mapImmutables(h), o = 0, r = h.length; o < r; o++) { if (c = e(h[o]), c.is("li")) { if (a = c.parent(), l = a.parent(), l.is("li,ul,ol") && !n(a[0])) { if (i && e.contains(i, l[0])) continue; d = c.nextAll("li"), d.length && e(a[0].cloneNode(!1)).appendTo(c).append(d), l.is("li") ? c.insertAfter(l) : c.appendTo(l), a.children("li").length || a.remove(); continue } if (i == a[0]) continue; i = a[0] } else i = h[o]; u = parseInt(n(i), 10) - 30, n(i, u) } } }), _ = c.extend({ init: function (t) { var n = this; t.formatter = { toggle: e.proxy(function (e) { var t = new v; t.immutables = this.editor && this.editor.options.immutables, t.apply(p.nodes(e)) }, n) }, c.fn.init.call(this, t) } }), b = c.extend({ init: function (t) { var n = this; t.formatter = { toggle: e.proxy(function (e) { var t = new v; t.immutables = this.editor && this.editor.options.immutables, t.remove(p.nodes(e)) }, n) }, c.fn.init.call(this, t) } }), w = u.extend({ init: function (e) { u.fn.init.call(this, e), this.finder = new g([{ tags: f }]) }, initialize: function (t, n) { u.fn.initialize.call(this, t, n), e.extend(this.options, { immutables: n.editor && n.editor.options.immutables }), t.addClass("k-state-disabled") }, update: function (i, o) { var r, l, d, c, u, h, p = this.finder.findSuitable(o); for (d = 0, c = p.length; d < c; d++)if (u = p[d], this.options.immutables && (h = a.Immutables.immutableParent(u), h && (u = h)), r = n(u), r || (l = e(u).parents("ul,ol").length, r = s.is(u, "li") && (l > 1 || n(u.parentNode)) || s.ofType(u, ["ul", "ol"]) && l > 0), r) return i.removeClass("k-state-disabled"), t; i.addClass("k-state-disabled").removeClass("k-state-hover") } }); r(a, { IndentFormatter: v, IndentCommand: _, OutdentCommand: b, OutdentTool: w }), d("indent", new u({ command: _, template: new h({ template: l.buttonTemplate, title: "Indent" }) })), d("outdent", new w({ command: b, template: new h({ template: l.buttonTemplate, title: "Outdent" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/linebreak.min", ["editor/plugins/formatblock.min"], e) }(function () { !function (e) { var t = window.kendo, n = e.extend, i = t.ui.editor, o = i.Dom, r = i.Command, a = i.Tool, s = i.BlockFormatter, l = o.normalize, d = i.RangeUtils, c = i.EditorUtils.registerTool, u = r.extend({ init: function (e) { this.options = e, r.fn.init.call(this, e) }, _insertMarker: function (e, t) { var n, i = o.create(e, "a"); return i.className = "k-marker", t.insertNode(i), i.parentNode || (n = t.commonAncestorContainer, n.innerHTML = "", n.appendChild(i)), l(i.parentNode), i }, _moveFocus: function (e, t) { var n, i; if (o.isEmpty(t)) e.setStartBefore(t); else { if (e.selectNodeContents(t), n = d.textNodes(e)[0], !n) { for (; t.childNodes.length && !o.is(t.firstChild, "br");)t = t.firstChild; n = t } o.isEmpty(n) ? e.setStartBefore(n) : (o.emptyNode(n) && (n.innerHTML = "\ufeff"), i = n.firstChild || n, o.isDataNode(i) ? e.setStart(i, 0) : e.setStartBefore(i)) } }, shouldTrim: function (e) { var t = "p,h1,h2,h3,h4,h5,h6".split(","), n = o.parentOfType(e.startContainer, t), i = o.parentOfType(e.endContainer, t); return n && !i || !n && i }, _blankAfter: function (e) { for (; e && (o.isMarker(e) || "" === o.stripBom(e.nodeValue));)e = e.nextSibling; return !e }, exec: function () { var t, n, r, a, c, u, h, p, f, g, m, v, _, b, w = this.getRange(), k = d.documentFromRange(w), y = i.emptyElementContent; this.expandImmutablesIn(w), g = this.shouldTrim(w), w.deleteContents(), c = this._insertMarker(k, w), o.stripBomNode(c.previousSibling), o.stripBomNode(c.nextSibling), u = o.closestEditableOfType(c, ["li"]), h = o.closestEditableOfType(c, "h1,h2,h3,h4,h5,h6".split(",")), p = o.is(c.parentNode, "table") && c.parentNode, u ? o.emptyNode(u) && (a = o.create(k, "p"), o.next(u) && (f = w.cloneRange(), f.selectNode(u), d.split(f, u.parentNode)), m = e("br", u), 1 == m.length && m.remove(), v = u.parentNode, _ = u.parentNode.children.length, b = _ > 1 && 1 == u.childNodes.length && u.children[0], o.insertAfter(a, v), o.remove(1 == _ ? u.parentNode : u), b && b !== c ? (a.appendChild(b), a.appendChild(c)) : a.innerHTML = y, r = a) : h && this._blankAfter(c) ? (a = this._insertParagraphAfter(h), o.remove(c), r = a) : p && (a = this._insertParagraphAfter(p), o.remove(c), r = a), r || (u || h || new s([{ tags: ["p"] }]).apply([c]), w.selectNode(c), t = o.parentOfType(c, [u ? "li" : h ? o.name(h) : "p"]), d.split(w, t, g), n = t.previousSibling, o.is(n, "li") && n.firstChild && !o.is(n.firstChild, "br") && (n = n.firstChild), r = t.nextSibling, this.clean(n, { links: !0 }), this.clean(r, { links: !0 }), o.is(r, "li") && r.firstChild && !o.is(r.firstChild, "br") && (r = r.firstChild), o.remove(t), l(n)), l(r), this._moveFocus(w, r), w.collapse(!0), o.scrollTo(r, !0), d.selectRange(w) }, _insertParagraphAfter: function (e) { var t = this.getRange(), n = d.documentFromRange(t), r = i.emptyElementContent, a = o.create(n, "p"); return o.insertAfter(a, e), a.innerHTML = r, a }, clean: function (t, n) { var r, a = t; if (t.firstChild && o.is(t.firstChild, "br") && o.remove(t.firstChild), o.isDataNode(t) && !t.nodeValue && (t = t.parentNode), t) { for (r = !1; t.firstChild && 1 == t.firstChild.nodeType;)r = r || o.significantNodes(t.childNodes).length > 1, t = t.firstChild; if (o.isEmpty(t) || !/^\s*$/.test(t.innerHTML) || r || (e(a).find(".k-br").remove(), t.innerHTML = i.emptyElementContent), n && n.links) for (; t != a;) { if (o.is(t, "a") && o.emptyNode(t)) { o.unwrap(t); break } t = t.parentNode } } } }), h = r.extend({ init: function (e) { this.options = e, r.fn.init.call(this, e) }, exec: function () { var e, n, i, r, a, s, c = this.getRange(); this.expandImmutablesIn(c), e = o.create(d.documentFromRange(c), "br"), n = c.startContainer, r = t.support.browser, a = r.msie && r.version < 11, s = o.is(n, "table") && n, c.deleteContents(), s ? o.insertAfter(e, s) : c.insertNode(e), l(e.parentNode), a || e.nextSibling && !o.isWhitespace(e.nextSibling) || (i = e.cloneNode(!0), i.className = "k-br", o.insertAfter(i, e)), c.setStartAfter(e), c.collapse(!0), o.scrollTo(e.nextSibling || e, !0), d.selectRange(c) } }); n(i, { ParagraphCommand: u, NewLineCommand: h }), c("insertLineBreak", new a({ key: 13, shift: !0, command: h })), c("insertParagraph", new a({ key: 13, command: u })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/file.min", ["kendo.filebrowser.min", "editor/plugins/link.min"], e) }(function () { !function (e, t) { var n = window.kendo, i = e.extend, o = n.ui.editor, r = o.EditorUtils, a = o.Dom, s = r.registerTool, l = o.ToolTemplate, d = o.RangeUtils, c = o.Command, u = o.LinkFormatter, h = d.textNodes, p = n.keys, f = "#k-editor-file-url", g = "#k-editor-file-text", m = "#k-editor-file-title", v = c.extend({ init: function (e) { var t = this; c.fn.init.call(t, e), t.formatter = new u, t.async = !0, t.attributes = {} }, insertFile: function (e, t) { var n = this.attributes, i = d.documentFromRange(t); if (n.href && "http://" != n.href) { if (!e) return e = a.create(i, "a", { href: n.href }), e.innerHTML = n.innerHTML, e.title = n.title, t.deleteContents(), t.insertNode(e), e.nextSibling || a.insertAfter(i.createTextNode("\ufeff"), e), t.setStartAfter(e), t.setEndAfter(e), d.selectRange(t), !0; a.attr(e, n) } return !1 }, _dialogTemplate: function (e) { return n.template('
        # if (showBrowser) { #
        # } #
        ')({ messages: this.editor.options.messages, showBrowser: e }) }, redo: function () { var e = this, t = e.lockRange(); this.formatter.apply(t, this.attributes), e.releaseRange(t) }, exec: function () { function e(e) { var t = s.element, n = t.find(f).val().replace(/ /g, "%20"), i = t.find(g).val(), r = t.find(m).val(); u.attributes = { href: n, innerHTML: "" !== i ? i : n, title: r }, b = u.insertFile(w, v), o(e), u.change && u.change() } function o(e) { e.preventDefault(), s.destroy(), a.windowFromDocument(d.documentFromRange(v)).focus(), b || u.releaseRange(v) } function r(t) { t.keyCode == p.ENTER ? e(t) : t.keyCode == p.ESC && o(t) } var s, l, c, u = this, v = u.lockRange(), _ = h(v), b = !1, w = _.length ? this.formatter.finder.findSuitable(_[0]) : null, k = n.support.browser.msie, y = u.editor.options, x = y.messages, C = y.fileBrowser, S = !!(n.ui.FileBrowser && C && C.transport && C.transport.read !== t), T = { title: x.insertFile, visible: !1, resizable: S }; this.expandImmutablesIn(v), T.close = o, S && (T.width = 750), s = this.createDialog(u._dialogTemplate(S), T).toggleClass("k-filebrowser-dialog", S).find(".k-dialog-insert").click(e).end().find(".k-dialog-close").click(o).end().find(".k-edit-field input").keydown(r).end().find(f).val(w ? w.getAttribute("href", 2) : "http://").end().find(g).val(w ? w.innerText : "").end().find(m).val(w ? w.title : "").end().data("kendoWindow"), l = s.element, S && (u._fileBrowser = new n.ui.FileBrowser(l.find(".k-filebrowser"), i({}, C)), u._fileBrowser.bind("change", function (e) { "f" === e.selected.get("type") && l.find(f).val(this.value()) }), u._fileBrowser.bind("apply", e)), k && (c = l.closest(".k-window").height(), l.css("max-height", c)), s.center().open(), l.find(f).focus().select() } }); n.ui.editor.FileCommand = v, s("insertFile", new o.Tool({ command: v, template: new l({ template: r.buttonTemplate, title: "Insert File" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/tables.min", ["editor/plugins/formatblock.min", "editor/plugins/insert.min"], e) }(function () { !function (e, t) { var n = window.kendo, i = e.extend, o = e.proxy, r = n.ui.editor, a = r.Dom, s = r.EditorUtils, l = r.RangeUtils, d = r.Command, c = "kendoEditor", u = "k-state-active", h = "k-state-selected", p = "scope", f = "row", g = "col", m = "rowgroup", v = "colgroup", _ = "colspan", b = "rowspan", w = "table", k = "thead", y = "tbody", x = "tr", C = "td", S = "th", T = r.Tool, D = r.ToolTemplate, A = r.InsertHtmlCommand, E = r.BlockFormatFinder, I = r.EditorUtils.registerTool, M = n.getTouches, R = n.template, F = "#=content#", P = new E([{ tags: [w] }]), z = A.extend({ init: function (t) { var n = e.extend({ postProcess: this.postProcess, skipCleaners: !0 }, t || {}); A.fn.init.call(this, n) }, _tableHtml: function (e, t) { var n, i; return e = e || 1, t = t || 1, n = R(F)({ width: 100 / t, content: r.emptyTableCellContent }), i = 100 / e, "" + Array(e + 1).join("" + Array(t + 1).join(n) + "") + "
        " }, postProcess: function (t, n) { var i = e("table[data-last]", t.document).removeAttr("data-last"); n.setStart(i.find(C)[0], 0), n.collapse(!0), t.selectRange(n) }, exec: function () { var e = this.options; e.html = this._tableHtml(e.rows, e.columns), A.fn.exec.call(this) } }), B = T.extend({ initialize: function (t, n) { var i, a, l, d; T.fn.initialize.call(this, t, n), i = e(this.options.popupTemplate).appendTo("body").kendoPopup({ anchor: t, copyAnchorStyles: !1, open: o(this._open, this), activate: o(this._activate, this), close: o(this._close, this) }).data("kendoPopup"), t.click(o(this._toggle, this)).keydown(o(this._keydown, this)), a = this._editor = n.editor, this._popup = i, l = new r.TableWizardTool({ template: new D({ template: s.tableWizardButtonTemplate, title: a.options.messages.tableWizard }), command: r.TableWizardCommand, insertNewTable: !0 }), I("tableWizardInsert", l), d = e("
        " + l.options.template.getHtml() + "
        "), d.appendTo(i.element), a.toolbar && a.toolbar.attachToolsEvents(d) }, popup: function () { return this._popup }, _activate: e.noop, _open: function () { this._popup.options.anchor.addClass(u) }, _close: function () { this._popup.options.anchor.removeClass(u) }, _keydown: function (e) { var t = n.keys, i = e.keyCode; i == t.DOWN && e.altKey ? this._popup.open() : i == t.ESC && this._popup.close() }, _toggle: function (t) { var n = e(t.target).closest(".k-tool"); n.hasClass("k-state-disabled") || this.popup().toggle() }, update: function (e) { var t = this.popup(); t.wrapper && "block" == t.wrapper.css("display") && t.close(), e.removeClass("k-state-hover") }, destroy: function () { this._popup.destroy() } }), L = B.extend({ init: function (t) { this.cols = 8, this.rows = 6, B.fn.init.call(this, e.extend(t, { command: z, popupTemplate: "
        " + Array(this.cols * this.rows + 1).join("") + "
        " })) }, _activate: function () { function t(t) { var n = e(window); return { row: Math.floor((t.clientY + n.scrollTop() - u.top) / o) + 1, col: Math.floor((t.clientX + n.scrollLeft() - u.left) / i) + 1 } } var i, o, r = this, a = r._popup.element, s = a.find(".k-ct-cell"), l = s.eq(0), d = s.eq(s.length - 1), u = n.getOffset(l), h = n.getOffset(d), p = r.cols, f = r.rows; a.find("*").addBack().attr("unselectable", "on"), h.left += d[0].offsetWidth, h.top += d[0].offsetHeight, i = (h.left - u.left) / p, o = (h.top - u.top) / f, a.autoApplyNS(c).on("mousemove", ".k-ct-cell", function (e) { r._setTableSize(t(e)) }).on("mouseleave", ".k-ct-cell", function () { r._setTableSize() }).on("down", ".k-ct-cell", function (e) { e.preventDefault(); var n = M(e)[0]; r._exec(t(n.location)) }) }, _valid: function (e) { return e && e.row > 0 && e.col > 0 && e.row <= this.rows && e.col <= this.cols }, _exec: function (e) { this._valid(e) && (this._editor.exec("createTable", { rows: e.row, columns: e.col }), this._popup.close()) }, _setTableSize: function (t) { var i = this._popup.element, o = i.find(".k-status"), r = i.find(".k-ct-cell"), a = this.cols, s = this._editor.options.messages; this._valid(t) ? (o.text(n.format(s.createTableHint, t.row, t.col)), r.each(function (n) { e(this).toggleClass(h, n % a < t.col && n / a < t.row) })) : (o.text(s.createTable), r.removeClass(h)) }, _keydown: function (e) { var t, i, o, r, a, s, l, d; B.fn._keydown.call(this, e), this._popup.visible() && (t = n.keys, i = e.keyCode, o = this._popup.element.find(".k-ct-cell"), r = Math.max(o.filter(".k-state-selected").last().index(), 0), a = Math.floor(r / this.cols), s = r % this.cols, l = !1, i != t.DOWN || e.altKey ? i == t.UP ? (l = !0, a--) : i == t.RIGHT ? (l = !0, s++) : i == t.LEFT && (l = !0, s--) : (l = !0, a++), d = { row: Math.max(1, Math.min(this.rows, a + 1)), col: Math.max(1, Math.min(this.cols, s + 1)) }, i == t.ENTER ? this._exec(d) : this._setTableSize(d), l && (e.preventDefault(), e.stopImmediatePropagation())) }, _open: function () { var e = this._editor.options.messages; B.fn._open.call(this), this.popup().element.find(".k-status").text(e.createTable).end().find(".k-ct-cell").removeClass(h) }, _close: function () { B.fn._close.call(this), this.popup().element.off("." + c) } }), H = d.extend({ _clearColIndexAttr: function (e) { a.clearTableMappings(e, "col-index") }, _mapColIndices: function (e) { a.reMapTableColumns(e, "col-index") }, _findRowSpanCell: function (t, n, i) { var o, r, a; for (a = n; a >= 0; a--)if (o = t.rows[a], r = e(o).find("[col-index=" + i + "]"), r.length) return r }, _resetTableResizing: function (e) { e._destroyResizings(), e._initializeColumnResizing(), e._initializeRowResizing(), e._initializeTableResizing() }, _findNextTdInRow: function (e, t) { var n, i, o = e.find("td:last-child"), r = parseInt(o.attr("col-index"), 10) + o.prop("colSpan") - 1; for (i = t; i <= r; i++)if (n = e.find("[col-index=" + i + "]"), n.length) return n }, _adjustColgroups: function (e, t) { for (var n, i, o, r = t.getElementsByTagName(g), s = t.getElementsByTagName(v), l = e.cells, d = l.length; r.length > 0;)r[0].remove(); for (; s.length > 0;)s[0].remove(); for (n = d - 1; n >= 0; n--)o = l[n], o.getAttribute(p) === v ? (i = a.createEmptyNode(this.editor.document, v), i.setAttribute("span", o.getAttribute(_)), t.prepend(i)) : t.prepend(a.createEmptyNode(this.editor.document, g)) }, _associateHeaderIds: function (t) { a.clearTableMappings(t, "col-index"), a.reMapTableColumns(t, "col-index"), e(t).find("th, td").removeAttr("id headers"), a.associateWithIds(t) }, _getNumberOfColumns: function (e) { return a._getNumberOfColumns(e, "td, th") } }), N = H.extend({ exec: function () { var n, i, o, s, l, d, c, u, h = this.lockRange(!0), g = a.closest(h.endContainer, [C, S]), v = a.closest(g, w), _ = this.options.position || "after"; if (!v || this.immutables() && r.Immutables.immutableParent(g)) return this.releaseRange(h), t; for (this._mapColIndices(v), i = g.parentNode, l = a.findNodeIndex(i, !0), g.rowSpan > 1 && "after" === _ && (i = v.rows[l + g.rowSpan - 1]), n = this._getNumberOfColumns(v), s = i.cloneNode(!0), e(s).empty(), u = 0; u < n; u += o.prop("colSpan"))o = e(i).find("[col-index=" + u + "]"), o.length ? o.prop("rowSpan") > 1 && "after" === _ && o ? o.attr(b, o.prop("rowSpan") + 1) : this._appendCell(s, o) : (l = a.findNodeIndex(i, !0), o = this._findRowSpanCell(i.parentElement, l, u), d = o.closest(x).index(), d + o.prop("rowSpan") - 1 === l && "after" === _ ? this._appendCell(s, o) : o.attr(b, o.prop("rowSpan") + 1)), c = e(s).find("[col-index=" + u + "]"), c.attr(p) !== m || c.attr(b) || c.attr(p, f); "before" == _ ? a.insertBefore(s, i) : a.insertAfter(s, i), e(v).find("[headers]").length > 0 && this._associateHeaderIds(v), this._clearColIndexAttr(v), this.releaseRange(h), this._resetTableResizing(this.editor) }, _appendCell: function (e, t) { var n; n = t.clone(), n.html(r.emptyTableCellContent), n.removeAttr(b), n.appendTo(e) } }), O = H.extend({ exec: function () { var n, i, o, s, l = this.lockRange(!0), d = a.closest(l.endContainer, [C, S]), c = a.closest(d, w), u = c.getElementsByTagName(g), h = c.getElementsByTagName(v), f = c && c.rows, m = this.options.position || "after"; if (!d || this.immutables() && r.Immutables.immutableParent(d)) return this.releaseRange(l), t; for (this._mapColIndices(c), n = parseInt(d.getAttribute("col-index"), 10), d.colSpan > 1 && "after" === m && (d.setAttribute("col-index", n + d.colSpan - 1), n = n + d.colSpan - 1), i = 0; i < f.length; i++)o = this._processForColSpan(f[i], n, m, d), o && (s = o.cloneNode(), s.innerHTML = r.emptyTableCellContent, s.removeAttribute(_), s.getAttribute(p) && s.getAttribute(p) === v && s.setAttribute(p, g), "before" == m ? a.insertBefore(s, o) : a.insertAfter(s, o), this._resizeCells(s, o)); (u.length > 0 || h.length > 0) && this._adjustColgroups(f[0], c), e(c).find("[headers]").length > 0 && this._associateHeaderIds(c), this._clearColIndexAttr(c), this.releaseRange(l), this._resetTableResizing(this.editor) }, _processForColSpan: function (n, i, o, r) { var a, s, l = i - 1; if (a = e(n).find("[col-index=" + i + "]")[0], a && a.colSpan > 1 && "after" === o && a !== r) return a.colSpan += 1, t; if (a) return a; for (l; l >= 0 && (a = e(n).find("[col-index=" + l + "]")[0], !(a && a.colSpan > 1)); l--); return a ? (s = parseInt(a.getAttribute("col-index"), 10) + a.colSpan - 1, s === i && "after" === o ? a : (i <= s && a.setAttribute(_, a.colSpan + 1), t)) : t }, _resizeCells: function (e, t) { var n, i, o, r = e.style.width; r && (n = parseFloat(r), i = r.slice(("" + n).length), o = n / 2 + i, e.style.width = o, t.style.width = o) } }), V = H.extend({ exec: function () { var n, i, o, s = this.lockRange(), d = l.mapAll(s, function (t) { return e(t).closest(x)[0] }), c = a.closest(s.endContainer, [C, S]), u = d[0], h = c ? c.rowSpan : 1, p = e(d[0]).index(), f = a.closest(u, w), g = u.parentElement; if (!f || this.immutables() && r.Immutables.immutableParent(u)) return this.releaseRange(s), t; for (i = 0; i < h; i++)d.indexOf(g.rows[p + i]) < 0 && d.push(g.rows[p + i]); if (f.rows.length <= d.length) n = a.next(f), n && !a.insignificant(n) || (n = a.prev(f)), a.remove(f), this._resetTableResizing(this.editor); else if (g.rows.length <= d.length) n = g.nextSibling, n || (n = g.previousSibling), a.remove(g); else { for (this._mapColIndices(f), o = 0; o < d.length; o++)u = d[o], a.removeTextSiblings(u), n = a.next(u) || a.prev(u), n = n.cells[0], this._handleRowSpanCells(f, u), a.remove(u); this._clearColIndexAttr(f) } e(f).find("[headers]").length > 0 ? this._associateHeaderIds(f) : a.is(g, k) && e(f).find("[scope]").length > 0 && this._adjustColgroups(g.rows[0], f), n && (s.setStart(n, 0), s.collapse(!0), this.editor.selectRange(s)), this._resetTableResizing(this.editor) }, _handleRowSpanCells: function (t, n) { var i, o, r, s, l = a.findNodeIndex(n, !0), d = t.rows[0], c = d.cells[d.cells.length - 1], u = parseInt(c.getAttribute("col-index"), 10) + c.colSpan - 1; for (i = 0; i <= u; i += o.prop("colSpan"))o = e(n).find("[col-index=" + i + "]"), o.length && o.prop("rowSpan") > 1 && (s = t.rows[l + 1], r = e(s).find("[col-index=" + (i + 1) + "]"), r.length ? r.before(o) : e(s).append(o), this._reduceRowSpan(o)), o.length || (o = this._findRowSpanCell(n.parentElement, l, i), this._reduceRowSpan(o)) }, _reduceRowSpan: function (e) { var t = e.prop("rowSpan") - 1; t <= 1 ? (e.removeAttr(b), e.attr(p) === m && e.attr(p, f)) : e.attr(b, t) } }), W = H.extend({ exec: function () { var n, i, o, s, l = this.lockRange(), d = a.closest(l.endContainer, [C, S]), c = a.closest(d, w), u = c && c.rows, h = a.findNodeIndex(d, !0), p = u && u[0].cells.length, f = c.getElementsByTagName(g), m = c.getElementsByTagName(v); if (!d || this.immutables() && r.Immutables.immutableParent(d)) return this.releaseRange(l), t; if (1 == p || d.colSpan == p) n = a.next(c), n && !a.insignificant(n) || (n = a.prev(c)), a.remove(c), this._resetTableResizing(this.editor); else { for (a.removeTextSiblings(d), n = a.next(d) || a.prev(d), this._mapColIndices(c), h = parseInt(d.getAttribute("col-index"), 10), s = 0; s < d.colSpan; s++)for (i = 0; i < u.length; i += o.prop("rowSpan") || 1)o = e(u[i]).find("[col-index=" + (h + s) + "]"), o.length && o.prop("colSpan") <= 1 ? o.remove() : this._handleColSpanCells(u[i], h + s); this._clearColIndexAttr(c) } (f.length > 0 || m.length > 0) && this._adjustColgroups(u[0], c), e(c).find("[headers]").length > 0 && this._associateHeaderIds(c), n && (l.setStart(n, 0), l.collapse(!0), this.editor.selectRange(l)), this._resetTableResizing(this.editor) }, _handleColSpanCells: function (n, i) { var o, r, a = e(n).find("[col-index=" + i + "]"); if (a.length && a.prop("colSpan") > 1) return o = a.clone(!0), a.after(o), this._reduceColSpan(o), o.attr("col-index", parseInt(a.attr("col-index"), 10) + 1), a.remove(), t; for (r = i; r >= 0; r--)if (a = e(n).find("[col-index=" + r + "]"), a.length) return this._reduceColSpan(a), a.attr("col-index", parseInt(a.attr("col-index"), 10) + 1), t }, _reduceColSpan: function (e) { var t = e.prop("colSpan") - 1; t <= 1 ? (e.removeAttr(_), e.attr(p) === v && e.attr(p, g)) : e.attr(_, t) } }), U = H.extend({ exec: function () { var n, i, o, s, l, d = this.lockRange(), c = a.closest(d.endContainer, [C, S]); return c ? (n = a.closest(c, w), i = c.parentNode, o = a.findNodeIndex(c, !0), s = i.children[o + 1], this.immutables() && r.Immutables.immutableParent(c) ? (this.releaseRange(d), t) : (this._mapColIndices(n), o = parseInt(e(c).attr("col-index"), 10), s = e(i).find("[col-index=" + (o + 1 + this._getColspan(c) - 1) + "]").get(0), s && s.rowSpan === c.rowSpan && c.tagName === s.tagName ? (l = this._getColspan(c) + this._getColspan(s), e(c).prop(_, l).append(a.emptyNode(s) ? "" : "
        " + s.innerHTML), e(c).width(c.offsetWidth), e(s).remove(), c.getAttribute(p) === g && c.setAttribute(p, v), c.getAttribute(p) === v && this._adjustColgroups(i, n), e(n).find("[headers]").length > 0 && this._associateHeaderIds(n), this._clearColIndexAttr(n), this.releaseRange(d), this._resetTableResizing(this.editor), t) : (this._clearColIndexAttr(n), this.releaseRange(d), t))) : (this.releaseRange(d), t) }, _getColspan: function (e) { return parseInt(e.getAttribute(_), 10) || 1 } }), j = H.extend({ exec: function () { var n, i, o, s, l, d, c, u = this.lockRange(), h = a.closest(u.endContainer, [C, S]); return h ? (n = a.closest(h, x), i = a.closest(h, [k, y]), o = a.closest(h, w), s = a.findNodeIndex(h, !0), l = a.findNodeIndex(n, !0), l + 1 === i.rows.length ? (this.releaseRange(u), t) : (d = i.rows[l + this._getRowspan(h)], c = d && d.children[s], this.immutables() && r.Immutables.immutableParent(h) ? (this.releaseRange(u), t) : (this._mapColIndices(o), s = e(h).attr("col-index"), c = e(d).find("[col-index=" + s + "]").get(0), c && c.colSpan === h.colSpan && h.tagName === c.tagName ? (e(h).prop(b, this._getRowspan(h) + this._getRowspan(c)).append(a.emptyNode(c) ? "" : "
        " + c.innerHTML), h.getAttribute(p) === f && h.setAttribute(p, m), e(c).remove(), e(o).find("[headers]").length > 0 && this._associateHeaderIds(o), this._clearColIndexAttr(o), this.releaseRange(u), t) : (this._clearColIndexAttr(o), this.releaseRange(u), t)))) : (this.releaseRange(u), t) }, _getRowspan: function (e) { return parseInt(e.getAttribute(b), 10) || 1 } }), q = H.extend({ exec: function () { var n = this.lockRange(), i = this.options.type, o = "row" === i ? _ : b, s = a.closest(n.endContainer, [C, S]), l = a.closest(s, [k, y]), d = a.closest(s, w), c = a.createEmptyNode(this.editor.document, s.nodeName.toLowerCase()); return !s || this.immutables() && r.Immutables.immutableParent(s) ? (this.releaseRange(n), t) : (this._mapColIndices(d), "row" === i && e(s).is("[" + o + "]") ? this._splitCellHorizontally(s, l, o, c) : "column" === i && e(s).is("[" + o + "]") && this._splitCellVertically(s, l, o, c), e(s).prop(o.toLowerCase()) <= 1 && e(s).removeAttr(o), e(d).find("[headers]").length > 0 && this._associateHeaderIds(d), this._clearColIndexAttr(d), this.releaseRange(n), t) }, _getRowspanValue: function (e) { return parseInt(e.getAttribute(b), 10) }, _getColspanValue: function (e) { return parseInt(e.getAttribute(_), 10) }, _splitCellHorizontally: function (t, n, i, o) { var r = t.rowSpan, a = t.colSpan, s = e(o), l = Math.floor(a / 2); l > 1 && s.attr(_, l), r > 1 && s.attr(b, r), e(t).prop(i, a - l).after(s), e(t).width(t.offsetWidth), s.width(s[0].offsetWidth), t.hasAttribute(p) && (t.getAttribute(p) === v ? (s.attr(p, g), t.getAttribute(_) && "1" !== t.getAttribute(_) || t.setAttribute(p, g), this._adjustColgroups(t.parentNode, n.parentNode)) : s.attr(p, t.getAttribute(p))) }, _splitCellVertically: function (t, n, i, o) { var r = a.closest(t, x), s = parseInt(e(t).attr("col-index"), 10), l = a.findNodeIndex(r, !0), d = t.rowSpan, c = t.colSpan, u = Math.floor(d / 2), h = e(n).find(x).eq(l + d - u), g = this._findNextTdInRow(h, s + c), v = e(o); u > 1 && v.attr(b, u), c > 1 && v.attr(_, c), g && g.length ? g.before(v) : h.append(v), e(t).prop(i, d - u), t.hasAttribute(p) && (t.getAttribute(p) === m ? (v.attr(p, f), t.getAttribute(b) && "1" !== t.getAttribute(b) || t.setAttribute(p, f)) : v.attr(p, t.getAttribute(p))) } }), G = T.extend({ command: function (e) { var t = { row: { insert: N, "delete": V, merge: U, split: q }, column: { insert: O, "delete": W, merge: j, split: q } }; return e = i(e, this.options), e.action = e.action || "insert", new t[e.type][e.action](e) }, initialize: function (e, t) { T.fn.initialize.call(this, e, t), e.addClass("k-state-disabled"), e.attr("disabled", "disabled") }, update: function (e, t) { var n = !P.isFormatted(t); n === !0 ? (e.parent().addClass("k-hidden k-state-disabled"), e.attr("disabled", "disabled"), e.addClass("k-state-disabled")) : (e.parent().removeClass("k-hidden k-state-disabled"), e.removeAttr("disabled"), e.removeClass("k-state-disabled")) } }); i(n.ui.editor, { PopupTool: B, TableCommand: z, InsertTableTool: L, TableModificationTool: G, InsertRowCommand: N, InsertColumnCommand: O, DeleteRowCommand: V, DeleteColumnCommand: W, MergeCellsHorizontallyCommand: U, MergeCellsVerticallyCommand: j, SplitCellCommand: q }), I("createTable", new L({ template: new D({ template: s.buttonTemplate, popup: !0, title: "Create table" }) })), I("addColumnLeft", new G({ type: "column", position: "before", template: new D({ template: s.buttonTemplate, title: "Add column on the left" }) })), I("addColumnRight", new G({ type: "column", template: new D({ template: s.buttonTemplate, title: "Add column on the right" }) })), I("addRowAbove", new G({ type: "row", position: "before", template: new D({ template: s.buttonTemplate, title: "Add row above" }) })), I("addRowBelow", new G({ type: "row", template: new D({ template: s.buttonTemplate, title: "Add row below" }) })), I("deleteRow", new G({ type: "row", action: "delete", template: new D({ template: s.buttonTemplate, title: "Delete row" }) })), I("deleteColumn", new G({ type: "column", action: "delete", template: new D({ template: s.buttonTemplate, title: "Delete column" }) })), I("mergeCellsHorizontally", new G({ type: "row", action: "merge", template: new D({ template: s.buttonTemplate, title: "Merge Cell Right" }) })), I("mergeCellsVertically", new G({ type: "column", action: "merge", template: new D({ template: s.buttonTemplate, title: "Merge Cell Down" }) })), I("splitCellHorizontally", new G({ type: "row", action: "split", template: new D({ template: s.buttonTemplate, title: "Split Cell" }) })), I("splitCellVertically", new G({ type: "column", action: "split", template: new D({ template: s.buttonTemplate, title: "Split Cell" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/clipboard.min", ["editor/command.min"], e) }(function () { !function (e) { var t = window.kendo, n = t.Class, i = t.ui.editor, o = i.RangeUtils, r = i.Dom, a = i.RestorePoint, s = i.Marker, l = t.support.browser, d = e.extend, c = n.extend({ init: function (e) { this.editor = e; var t = e.options.pasteCleanup; this.cleaners = [new h(t), new p(t), new f(t), new g(t), new v(t), new _(t), new y(t), new x(t)] }, htmlToFragment: function (e) { var t = this.editor, n = t.document, i = r.create(n, "div"), o = n.createDocumentFragment(); for (i.innerHTML = e; i.firstChild;)o.appendChild(i.firstChild); return o }, isBlock: function (e) { return /<(div|p|ul|ol|table|h[1-6])/i.test(e) }, _startModification: function () { var e, t, n = this.editor; if (!this._inProgress) return this._inProgress = !0, e = n.getRange(), t = new a(e, n.body), r.persistScrollTop(n.document), { range: e, restorePoint: t } }, _endModification: function (e) { i._finishUpdate(this.editor, e.restorePoint), this.editor._selectionChange(), this._inProgress = !1 }, _contentModification: function (e, t) { var n = this, i = n.editor, o = n._startModification(); o && (e.call(n, i, o.range), setTimeout(function () { t.call(n, i, o.range), n._endModification(o) })) }, _removeBomNodes: function (e) { var t, n = o.textNodes(e); for (t = 0; t < n.length; t++)n[t].nodeValue = r.stripBom(n[t].nodeValue) || n[t].nodeValue }, _onBeforeCopy: function (e) { var t = new s; t.add(e), this._removeBomNodes(e), t.remove(e), this.editor.selectRange(e) }, oncopy: function () { this._onBeforeCopy(this.editor.getRange()) }, oncut: function () { this._onBeforeCopy(this.editor.getRange()), this._contentModification(e.noop, e.noop) }, _fileToDataURL: function (t) { var n = e.Deferred(), i = new FileReader; return t instanceof window.File || !t.getAsFile || (t = t.getAsFile()), i.onload = e.proxy(n.resolve, n), i.readAsDataURL(t), n.promise() }, _triggerPaste: function (e, t) { var n = { html: e || "" }; n.html = n.html.replace(/\ufeff/g, ""), this.editor.trigger("paste", n), this.paste(n.html, t || {}) }, _handleImagePaste: function (e) { var t, n; if ("FileReader" in window && !(l.msie && l.version > 10)) return t = e.clipboardData || e.originalEvent.clipboardData || window.clipboardData || {}, n = t.items || t.files, this._insertImages(n) }, _insertImages: function (t) { var n, i, o; if (t && (n = e.grep(t, function (e) { return /^image\//i.test(e.type) }), i = e.grep(t, function (e) { return /^text\/html/i.test(e.type) }), !i.length && n.length && (o = this._startModification()))) return e.when.apply(e, e.map(n, this._fileToDataURL)).done(e.proxy(function () { var t = Array.prototype.slice.call(arguments), n = e.map(t, function (e) { return '' }).join(""); this._triggerPaste(n), this._endModification(o) }, this)), !0 }, onpaste: function (n) { if ("false" !== this.editor.body.contentEditable) { if (this._handleImagePaste(n)) return void n.preventDefault(); this.expandImmutablesIn(), this._contentModification(function (i, o) { var a, s, l, d = r.create(i.document, "div", { className: "k-paste-container", innerHTML: "\ufeff" }), c = t.support.browser, u = i.body; this._decoreateClipboardNode(d, u), u.appendChild(d), c.webkit && this._moveToCaretPosition(d, o), c.msie && c.version < 11 ? (n.preventDefault(), a = i.createRange(), a.selectNodeContents(d), i.selectRange(a), s = i.document.body.createTextRange(), s.moveToElementText(d), e(u).unbind("paste"), s.execCommand("Paste"), e(u).bind("paste", e.proxy(this.onpaste, this))) : (l = i.createRange(), l.selectNodeContents(d), i.selectRange(l)), o.deleteContents() }, function (t, n) { var i, o = ""; t.selectRange(n), i = e(t.body).children(".k-paste-container"), i.each(function () { var e = this.lastChild; e && r.is(e, "br") && r.remove(e), o += this.innerHTML }), i.remove(), this._triggerPaste(o, { clean: !0 }) }) } }, ondragover: function (e) { (l.msie || l.edge) && (e.stopPropagation(), e.preventDefault()) }, ondrop: function (e) { var t, n; "FileReader" in window && (t = (e.originalEvent || e).dataTransfer || {}, n = t.items || t.files, this._insertImages(n) && e.preventDefault()) }, _decoreateClipboardNode: function (t, n) { var i, o, r, a; (l.msie || l.webkit) && (t = e(t), t.css({ borderWidth: "0px", width: "0px", height: "0px", overflow: "hidden", margin: "0", padding: "0" }), l.msie && (i = e(n.ownerDocument.documentElement), t.css({ fontVariant: "normal", fontWeight: "normal", lineSpacing: "normal", lineHeight: "normal", textDecoration: "none" }), o = i.css("color"), o && t.css("color", o), r = i.css("fontFamily"), r && t.css("fontFamily", r), a = i.css("fontSize"), a && t.css("fontSize", a))) }, _moveToCaretPosition: function (t, n) { var i = this, o = i.editor.body, a = r.offset(t, o), s = i._caretOffset(n, o), l = s.left - a.left, d = s.top - a.top, c = "translate(" + l + "px," + d + "px)"; e(t).css({ "-webkit-transform": c, transform: c }) }, _caretOffset: function (e, t) { var n, i, o, a, s, l, d = this.editor, c = r.create(d.document, "span", { innerHTML: "\ufeff" }), u = e.startContainer; return e.collapsed ? (i = r.isDataNode(u), i && (r.isBom(u) || 0 === e.startOffset) ? r.insertBefore(c, u) : i && e.startOffset === u.length ? r.insertAfter(c, u) : (e.insertNode(c), n = !0)) : (u = u === t ? u.childNodes[e.startOffset] : u, r.insertBefore(c, u)), o = r.offset(c, t), a = c.previousSibling, s = c.nextSibling, r.remove(c), n && r.isDataNode(a) && r.isDataNode(s) && !r.isBom(a) && !r.isBom(s) && (l = a.length, s.data = a.data + s.data, e.setStart(s, l), r.remove(a), e.collapse(!0), d.selectRange(e)), o }, expandImmutablesIn: function (e) { var n, i, o, r = this.editor; r && r.options.immutables && (n = r.body, e = e || r.getRange(), t.ui.editor.Immutables.expandImmutablesIn(e), e.startContainer === n && 0 === e.startOffset && (i = n.ownerDocument, o = i.createTextNode("\ufeff"), n.insertBefore(o, n.childNodes[0]), e.setStartBefore(o)), r.selectRange(e)) }, splittableParent: function (e, t) { var n, i; if (e) return r.closestEditableOfType(t, ["p", "ul", "ol"]) || t.parentNode; if (n = t.parentNode, i = t.ownerDocument.body, r.isInline(n)) for (; n.parentNode != i && !r.isBlock(n.parentNode);)n = n.parentNode; return n }, paste: function (t, n) { var i, a, l, c, u, h, p, f, g, m, v, _, b, w, k, y, x, C = this.editor; if (this.expandImmutablesIn(), n = d({ clean: !1, split: !0 }, n), !n.skipCleaners) for (i = 0, a = this.cleaners.length; i < a; i++)this.cleaners[i].applicable(t) && (t = this.cleaners[i].clean(t)); if (n.clean && (t = t.replace(/(
        (\s| )*)+(<\/?(div|p|li|col|t))/gi, "$3"), t = t.replace(/<(a|span)[^>]*><\/\1>/gi, "")), t = t.replace(/<(a|span|font)([^>]*)> <\/\1>/gi, "<$1$2> "), t = t.replace(/^
      • $/g, "li>"), c = this.isBlock(t), C.focus(), u = C.getRange(), u.deleteContents(), u.startContainer == C.document && u.selectNodeContents(C.body), h = new s, p = h.addCaret(u), f = this.splittableParent(c, p), g = !1, m = f != C.body && !r.is(f, "td"), n.split && m && (c || r.isInline(f)) && (u.selectNode(p), o.split(u, f, !0), g = !0), v = this.htmlToFragment(t), v.firstChild && "k-paste-container" === v.firstChild.className) { for (_ = [], i = 0, a = v.childNodes.length; i < a; i++)_.push(v.childNodes[i].innerHTML); v = this.htmlToFragment(_.join("
        ")) } if (l = v.childNodes, e(l).filter("table").addClass("k-table").end().find("table").addClass("k-table"), e(l).each(function (e, t) { r.isBlock(t) && !r.isSelfClosing(t) && "" === t.innerHTML && t.appendChild(C.document.createTextNode("\ufeff")) }), u.insertNode(v), f = this.splittableParent(c, p), g) { for (; p.parentNode != f;)r.unwrap(p.parentNode); r.unwrap(p.parentNode) } if (r.normalize(u.commonAncestorContainer), p.style.display = "inline", r.restoreScrollTop(C.document), r.scrollTo(p), h.removeCaret(u), b = u.commonAncestorContainer.parentNode, (u.collapsed && "tbody" == r.name(b) || u.collapsed && "thead" == r.name(b)) && (u.setStartAfter(e(b).closest("table")[0]), u.collapse(!0)), w = e(u.commonAncestorContainer.parentNode).closest("table"), w.get(0)) { for (k = w.parent().contents(), y = k.length - 1, x = k.get(y); null !== x.nodeValue && (" " === x.nodeValue || "" === x.nodeValue);)y -= 1, x = k.get(y); x !== w.get(0) || w.parents("table").length || r.insertAfter(r.createEmptyNode(C.document, "p"), w[0]) } C.selectRange(u) } }), u = n.extend({ init: function (e) { this.options = e || {}, this.replacements = [] }, clean: function (e, t) { var n, i, o = this, r = t || o.replacements; for (n = 0, i = r.length; n < i; n += 2)e = e.replace(r[n], r[n + 1]); return e } }), h = u.extend({ init: function (e) { u.fn.init.call(this, e), this.replacements = [/<(\/?)script([^>]*)>/i, "<$1telerik:script$2>"] }, applicable: function (e) { return !this.options.none && /]*>/i.test(e) } }), p = u.extend({ init: function (e) { u.fn.init.call(this, e); var t = " "; this.replacements = [/]*>\s*<\/span>/gi, t, /\t/gi, t, /    /gi, t] }, applicable: function (e) { return /    |class="?Apple-tab-span/i.test(e) } }), f = u.extend({ init: function (e) { u.fn.init.call(this, e), this.junkReplacements = [/<\?xml[^>]*>/gi, "", //g, "", /"/g, "'", / <\/o:p>/gi, " ", /<\/?(meta|link|style|o:|v:|x:)[^>]*>((?:.|\n)*?<\/(meta|link|style|o:|v:|x:)[^>]*>)?/gi, "", /<\/o>/g, ""], this.replacements = this.junkReplacements.concat([/(?:
         [\s\r\n]+|
        )*(<\/?(h[1-6]|hr|p|div|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|address|pre|form|blockquote|dl|dt|dd|dir|fieldset)[^>]*>)(?:
         [\s\r\n]+|
        )*/g, "$1", /

        /g, "

        ", /
        (?!\n)/g, " ", /]*)>(\s| )+]*>(\s| )*<\/tr>/gi, "", /]*>(\s| )*<\/tbody>/gi, "", /]*>(\s| )*<\/table>/gi, "", /

        /g, "
        ", /^\s*( )+/gi, "", /( |]*>)+\s*$/gi, "", /mso-[^;"]*;?/gi, "", /<(\/?)b(\s[^>]*)?>/gi, "<$1strong$2>", /<(\/?)font(\s[^>]*)?>/gi, this.convertFontMatch, /<(\/?)i(\s[^>]*)?>/gi, "<$1em$2>", /style=(["|'])\s*\1/g, "", /(]*>)?\n/g, function (e, t) { return t ? e : " " }]) }, convertFontMatch: function (e, t, n) { var i = /face=['"]([^'"]+)['"]/i, o = i.exec(n), r = n && o && o[1]; return t ? "" : r ? '' : "" }, applicable: function (e) { return /class="?Mso/i.test(e) || /style="[^"]*mso-/i.test(e) || /urn:schemas-microsoft-com:office/.test(e) }, stripEmptyAnchors: function (e) { return e.replace(/]*)>\s*<\/a>/gi, function (e, t) { return !t || t.indexOf("href") < 0 ? "" : e }) }, listType: function (e, t) { var n, i = e.innerHTML, o = r.innerText(e), a = i.match(/^(?:]*texhtml[^>]*>)?]*(?:Symbol|Wingdings)[^>]*>([^<]+)/i), s = a && a[1], l = /^[a-z\d]/i.test(s), d = function (e) { return e.replace(/^(?: |[\u00a0\n\r\s])+/, "") }; return a && (n = !0), i = i.replace(/<\/?\w+[^>]*>/g, "").replace(/ /g, "Â "), !n && /^[\u2022\u00b7\u00a7\u00d8o]\u00a0+/.test(i) || n && /^.\u00a0+/.test(i) || s && !l && t ? { tag: "ul", style: this._guessUnorderedListStyle(d(o)) } : /^\s*\w+[\.\)][\u00a0 ]{2,}/.test(i) ? { tag: "ol", style: this._guessOrderedListStyle(d(o)) } : void 0 }, _convertToLi: function (e) { var t, n = r.name(e); return 1 == e.childNodes.length ? t = e.firstChild.nodeType === r.nodeTypes.TEXT_NODE ? r.innerText(e) : e.firstChild.innerHTML.replace(/^\w+[\.\)]( )+ /, "") : (r.remove(e.firstChild), 3 == e.firstChild.nodeType && /^[ivxlcdm]+\.$/i.test(e.firstChild.nodeValue) && r.remove(e.firstChild), /^( |\s)+$/i.test(e.firstChild.innerHTML) && r.remove(e.firstChild), t = "p" != n ? "<" + n + ">" + e.innerHTML + "" : e.innerHTML), r.remove(e), r.create(document, "li", { innerHTML: t }) }, _guessUnorderedListStyle: function (e) { return /^[\u2022\u00b7\u00FC\u00D8\u002dv-]/.test(e) ? null : /^o/.test(e) ? "circle" : "square" }, _guessOrderedListStyle: function (e) { var t = null; return /^\d/.test(e) || (t = (/^[a-z]/.test(e) ? "lower-" : "upper-") + (/^[ivxlcdm]/i.test(e) ? "roman" : "alpha")), t }, extractListLevels: function (e) { var n = /style=['"]?[^'"]*?mso-list:\s?[a-zA-Z]+(\d+)\s[a-zA-Z]+(\d+)\s(\w+)/gi; return e = e.replace(n, function (e, n, i) { return t.format('data-list="{0}" data-level="{1}" {2}', n, i, e) }) }, _createList: function (e, t) { return r.create(document, e, { style: { listStyleType: t } }) }, lists: function (t) { var n, i, o, a, s, d, c, u, h, p, f, g, m, v, _, b, w = e(t).find(r.blockElements.join(",")), k = -1, y = {}, x = ["p", "h1", "h2", "h3", "h4", "h5", "h6"], C = !1; for (u = 0; u < w.length; u++)h = w[u], m = e(h).data(), v = m.list, n = r.name(h), C = !!e(h).parents("table").length, C || (_ = this.listType(h, m), p = _ && _.tag, !p || x.indexOf(n) < 0 ? h.innerHTML ? i && !d && i.appendChild(h) : r.remove(h) : l.msie || (f = m.level || parseFloat(h.style.marginLeft || 0), b = p + v, y[f] || (y[f] = {}), (!o || o < 0) && (o = f, a = v, s = e(t).find("[data-list='" + a + "']:last")[0], c = this._createList(p, _.style), r.insertBefore(c, h), k = f, y[f][b] = c), d = s === h, g = y[f][b], (f > k || !g) && (g = this._createList(p, _.style), y[f][b] = g, i.appendChild(g)), i = this._convertToLi(h), g.appendChild(i), d ? o = k = -1 : k = f)) }, removeAttributes: function (e) { for (var t = e.attributes, n = t.length; n--;)"colspan" != r.name(t[n]) && e.removeAttributeNode(t[n]) }, createColGroup: function (n) { var i = n.cells, o = e(n).closest("table"), r = o.children("colgroup"); i.length < 2 || (r.length && (i = r.children(), r[0].parentNode.removeChild(r[0])), r = e(e.map(i, function (e) { var n = e.width; return n && 0 !== parseInt(n, 10) ? t.format('', n) : "" }).join("")), r.is("colgroup") || (r = e("").append(r)), r.prependTo(o)) }, convertHeaders: function (t) { var n, i = t.cells, o = e.map(i, function (t) { var n = e(t).children("p").children("strong")[0]; if (n && "strong" == r.name(n)) return n }); if (o.length == i.length) { for (n = 0; n < o.length; n++)r.unwrap(o[n]); for (e(t).closest("table").find("colgroup").after("").end().find("thead").append(t), n = 0; n < i.length; n++)r.changeTag(i[n], "th") } }, removeParagraphs: function (t) { var n, i, o, a, s; for (n = 0; n < t.length; n++)for (this.removeAttributes(t[n]), a = e(t[n]), s = a.children("p"), i = 0, o = s.length; i < o; i++)i < o - 1 && r.insertAfter(r.create(document, "br"), s[i]), r.unwrap(s[i]) }, removeDefaultColors: function (e) { for (var t = 0; t < e.length; t++)/^\s*color:\s*[^;]*;?$/i.test(e[t].style.cssText) && r.unwrap(e[t]) }, tables: function (t) { var n, i, o, r, a, s = e(t).find("table"), l = this; for (r = 0; r < s.length; r++) { for (n = s[r].rows, o = i = n[0], a = 1; a < n.length; a++)n[a].cells.length > o.cells.length && (o = n[a]); l.createColGroup(o), l.convertHeaders(i), l.removeAttributes(s[r]), l.removeParagraphs(s.eq(r).find("td,th")), l.removeDefaultColors(s.eq(r).find("span")) } }, headers: function (t) { var n, i = e(t).find("p.MsoTitle"); for (n = 0; n < i.length; n++)r.changeTag(i[n], "h1") }, removeFormatting: function (t) { e(t).find("*").each(function () { e(this).css({ fontSize: "", fontFamily: "" }), this.getAttribute("style") || this.style.cssText || this.removeAttribute("style") }) }, clean: function (e) { var t, n = this, i = this.options; return i.none ? (e = u.fn.clean.call(n, e, this.junkReplacements), e = n.stripEmptyAnchors(e)) : (e = i.msConvertLists ? this.extractListLevels(e) : e, e = u.fn.clean.call(n, e), e = n.stripEmptyAnchors(e), t = r.create(document, "div", { innerHTML: e }), n.headers(t), i.msConvertLists && n.lists(t), n.tables(t), i.msAllFormatting && n.removeFormatting(t), e = t.innerHTML.replace(/(<[^>]*)\s+class="?[^"\s>]*"?/gi, "$1")), e } }), g = u.extend({ init: function (e) { u.fn.init.call(this, e), this.replacements = [/\s+class="Apple-style-span[^"]*"/gi, "", /<(div|p|h[1-6])\s+style="[^"]*"/gi, "<$1", /^
        (.*)<\/div>$/, "$1"] }, applicable: function (e) { return /class="?Apple-style-span|style="[^"]*-webkit-nbsp-mode/i.test(e) } }), m = u.extend({ clean: function (e) { var t = r.create(document, "div", { innerHTML: e }); return t = this.cleanDom(t), t.innerHTML }, cleanDom: function (e) { return e } }), v = m.extend({ cleanDom: function (t) { var n = this.collectTags(); return e(t).find(n).each(function () { r.unwrap(this) }), t }, collectTags: function () { if (this.options.span) return "span" }, applicable: function () { return this.options.span } }), _ = m.extend({ cleanDom: function (t) { var n = this.collectAttr(), i = e(t).find("[" + n.join("],[") + "]"); return i.removeAttr(n.join(" ")), t }, collectAttr: function () { return this.options.css ? ["class", "style"] : [] }, applicable: function () { return this.options.css } }), b = function () { this.text = "", this.add = function (e) { this.text += e } }, w = n.extend({ init: function (e) { this.separators = e || { text: " ", line: "
        " }, this.lines = [], this.inlineBlockText = [], this.resetLine() }, appendText: function (e) { 3 === e.nodeType && (e = e.nodeValue), this.textContainer.add(e) }, appendInlineBlockText: function (e) { this.inlineBlockText.push(e) }, flashInlineBlockText: function () { this.inlineBlockText.length && (this.appendText(this.inlineBlockText.join(" ")), this.inlineBlockText = []) }, endLine: function () { this.flashInlineBlockText(), this.resetLine() }, html: function () { var e, t, n, i, o, r, a, s, l = this.separators, d = "", c = this.lines; for (this.flashInlineBlockText(), e = 0, t = c.length, n = t - 1; e < t; e++) { for (i = c[e], o = 0, r = i.length, a = r - 1; o < r; o++)s = i[o].text, d += s, o !== a && (d += l.text); e !== n && (d += l.line) } return d }, resetLine: function () { this.textContainer = new b, this.line = [], this.line.push(this.textContainer), this.lines.push(this.line) } }), k = n.extend({ init: function (e) { this.callback = e }, enumerate: function (e) { var t, n; e && (t = this.callback(e), n = e.firstChild, !t && n && this.enumerate(n), this.enumerate(e.nextSibling)) } }), y = u.extend({ init: function (t) { u.fn.init.call(this, t), this.hasText = !1, this.enumerator = new k(e.proxy(this.buildText, this)) }, clean: function (e) { var t = r.create(document, "div", { innerHTML: e }); return this.cleanDom(t) }, cleanDom: function (e) { return this.separators = this.getDefaultSeparators(), this.htmlLines = new w(this.separators), this.enumerator.enumerate(e.firstChild), this.hasText = !1, this.htmlLines.html() }, buildText: function (e) { if (r.isDataNode(e)) { if (r.isEmptyspace(e)) return; this.htmlLines.appendText(e.nodeValue.replace("\n", this.separators.line)), this.hasText = !0 } else { if (r.isBlock(e) && this.hasText) { var t = this.actions[r.name(e)] || this.actions.block; return t(this, e) } r.isBr(e) && this.htmlLines.appendText(this.separators.line) } }, applicable: function () { var e = this.options; return e.all || e.keepNewLines }, getDefaultSeparators: function () { return this.options.all ? { text: " ", line: " " } : { text: " ", line: "
        " } }, actions: { ul: e.noop, ol: e.noop, table: e.noop, thead: e.noop, tbody: e.noop, td: function (e, t) { var n = new y({ all: !0 }), i = n.cleanDom(t); return e.htmlLines.appendInlineBlockText(i), !0 }, block: function (e) { e.htmlLines.endLine() } } }), x = u.extend({ clean: function (e) { return this.options.custom(e) }, applicable: function () { return "function" == typeof this.options.custom } }); d(i, { Clipboard: c, Cleaner: u, ScriptCleaner: h, TabCleaner: p, MSWordFormatCleaner: f, WebkitFormatCleaner: g, HtmlTagsCleaner: v, HtmlAttrCleaner: _, HtmlContentCleaner: y, HtmlTextLines: w, CustomCleaner: x }) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/keyboard.min", ["editor/command.min"], e) }(function () { !function (e) { function t(e, t) { return t.startContainer === e && t.endContainer === e && 0 === t.startOffset && t.endOffset == e.childNodes.length } function n(e, t, n) { for (var i = e ? e[t] : null; i && !n(i);)i = i[t]; return i } var i = window.kendo, o = i.Class, r = i.ui.editor, a = r.RangeUtils, s = r.Dom, l = r.RestorePoint, d = r.Marker, c = i.support.browser, u = "\ufeff", h = e.extend, p = s.nodeTypes, f = "previousSibling", g = "td,th,caption", m = "table,tbody,thead,tfoot,tr", v = m + "," + g, _ = function (t) { return !t.collapsed && e(t.commonAncestorContainer).is(m) }, b = o.extend({ remove: function (t) { var n, i, o, r, l, c, u, h = this, p = new d; p.add(t, !1), n = a.getAll(t, function (t) { return e(t).is(v) }), i = a.documentFromRange(t), o = p.start, r = p.end, l = g.split(","), c = s.parentOfType(o, l), u = s.parentOfType(r, l), h._removeContent(o, c, !0), h._removeContent(r, u, !1), e(n).each(function (t, n) { n = e(n), (n.is(g) ? n : n.find(g)).each(function (e, t) { t.innerHTML = "" }) }), c && !o.previousSibling && s.insertBefore(i.createTextNode("\ufeff"), o), u && !r.nextSibling && s.insertAfter(i.createTextNode("\ufeff"), r), c ? t.setStartBefore(o) : n[0] && (c = e(n[0]), c = c.is(g) ? c : c.find(g).first(), c.length && t.setStart(c.get(0), 0)), t.collapse(!0), s.remove(o), s.remove(r) }, _removeContent: function (t, n, i) { if (n) { var o, r = i ? "nextSibling" : "previousSibling", a = function (t) { for (; t && !t[r];)t = t.parentNode; return t && e.contains(n, t) ? t[r] : null }; for (t = a(t); t;)o = a(t), s.remove(t), t = o } } }), w = o.extend({ init: function (e) { this.editor = e }, keydown: function (n) { var i, o, a, s, d = this, u = d.editor, p = u.keyboard, f = p.isTypingKey(n), g = h(e.Event(), n); return d.editor.trigger("keydown", g), g.isDefaultPrevented() ? (n.preventDefault(), !0) : !(g.isDefaultPrevented() || !f || p.isTypingInProgress()) && (i = u.getRange(), o = u.body, d.startRestorePoint = new l(i, o), _(i) && (a = new b(u), a.remove(i), u.selectRange(i)), c.webkit && !i.collapsed && t(o, i) && (o.innerHTML = ""), u.immutables && r.Immutables.immutablesContext(i) && (s = new r.BackspaceHandler(u), s.deleteSelection(i)), p.startTyping(function () { d.endRestorePoint = r._finishUpdate(u, d.startRestorePoint) }), !0) }, keyup: function (e) { var t = this.editor.keyboard; return this.editor.trigger("keyup", e), !!t.isTypingInProgress() && (t.endTyping(), !0) } }), k = o.extend({ init: function (e) { this.editor = e }, _addCaret: function (e) { var t = s.create(this.editor.document, "a"); return !i.support.browser.chrome && e.firstChild && e.firstChild.nodeType === p.ELEMENT_NODE && (e = e.firstChild), s.insertAt(e, t, 0), s.stripBomNode(t.previousSibling), s.stripBomNode(t.nextSibling), t }, _restoreCaret: function (e) { var t = this.editor.createRange(); !e.nextSibling && s.isDataNode(e.previousSibling) ? t.setStart(e.previousSibling, e.previousSibling.length) : t.setStartAfter(e), t.collapse(!0), this.editor.selectRange(t), s.remove(e) }, _handleDelete: function (e) { var t, n, i = e.endContainer, o = s.closestEditableOfType(i, s.blockElements); return !(!o || !r.RangeUtils.isEndOf(e, o)) && (t = s.next(o), !(!t || "p" != s.name(t)) && (n = this._addCaret(t), this._merge(o, t), this._restoreCaret(n), !0)) }, _cleanBomBefore: function (e) { for (var t = e.startOffset, n = e.startContainer, i = n.nodeValue, o = 0; t - o >= 0 && "\ufeff" == i[t - o - 1];)o++; o > 0 && (n.deleteData(t - o, o), e.setStart(n, Math.max(0, t - o)), e.collapse(!0), this.editor.selectRange(e)) }, _handleBackspace: function (t) { var i, o, a, l, d, c, u, h, p, g, m, v, _, b = t.startContainer, w = s.closestEditableOfType(b, ["li"]), k = s.closestEditableOfType(b, "p,h1,h2,h3,h4,h5,h6".split(",")), y = this.editor; if (s.isDataNode(b)) { if (t.collapsed && /^\s[\ufeff]+$/.test(b.nodeValue)) return t.setStart(b, 0), t.setEnd(b, b.length), y.selectRange(t), !1; this._cleanBomBefore(t) } return i = n(k, f, function (e) { return !s.htmlIndentSpace(e) }), t.collapsed && t.startOffset !== t.endOffset && t.startOffset < 0 && (t.startOffset = 0, t.endOffset = 0, y.selectRange(t)), o = w && r.RangeUtils.isStartOf(t, w), a = w && e(w).index(), l = o && a > 0, l && (k = w, i = s.prev(w)), k && i && s.is(i, "table") && r.RangeUtils.isStartOf(t, k) ? ("" === k.innerText && (k.innerHTML = "\ufeff"), !0) : r.RangeUtils.isStartOf(t, k) && (parseInt(k.style.marginLeft, 10) > 0 || parseInt(k.style.marginRight, 10) > 0) ? (y.exec("outdent"), !0) : k && i && r.RangeUtils.isStartOf(t, k) || l ? (d = this._addCaret(k), this._merge(i, k), this._restoreCaret(d), !0) : o && 0 === a ? (c = w.firstChild, c || (w.innerHTML = r.emptyElementContent, c = w.firstChild), u = new r.ListFormatter(s.name(w.parentNode), "p"), t.selectNodeContents(w), u.toggle(t), s.insignificant(c) ? t.setStartBefore(c) : t.setStart(c, 0), y.selectRange(t), !0) : (h = b.childNodes[t.startOffset - 1], p = t, g = h && s.closestEditableOfType(h, ["a"]), m = n(h || b, f, function (e) { return !s.isDataNode(e) || !s.isBom(e) && e.length > 0 }), (g || (0 === t.startOffset || h) && s.is(m, "a")) && (g = g || m, p = y.createRange(), p.setStart(g, g.childNodes.length), p.collapse(!0)), g = g || s.closestEditableOfType(h || p.startContainer, ["a"]), v = g && r.RangeUtils.isEndOf(p, g), v && (_ = new r.UnlinkCommand({ range: p, body: y.body, immutables: !!y.immutables }), y.execCommand(_), y._selectionChange()), !1) }, _handleSelection: function (t) { var n, i, o, a, l, c = t.commonAncestorContainer, u = s.closest(c, "table"), h = r.emptyElementContent, p = this.editor; return _(t) ? (i = new b(p), i.remove(t), p.selectRange(t), !0) : (o = new d, o.add(t, !1), t.commonAncestorContainer === p.body && this._surroundFullyContent(o, t), p.immutables && this._handleImmutables(o), this._surroundFullySelectedAnchor(o, t), t.setStartAfter(o.start), t.setEndBefore(o.end), a = t.startContainer, l = t.endContainer, t.deleteContents(), "li" === l.tagName.toLocaleLowerCase() && s.emptyNode(l) && (t.selectNode(l), t.deleteContents()), u && "" === e(u).text() && (t.selectNode(u), t.deleteContents()), c = t.commonAncestorContainer, "p" === s.name(c) && "" === c.innerHTML && (c.innerHTML = h, t.setStart(c, 0)), this._join(a, l), s.insertAfter(p.document.createTextNode("\ufeff"), o.start), o.remove(t), a = t.startContainer, "tr" == s.name(a) && (a = a.childNodes[Math.max(0, t.startOffset - 1)], t.setStart(a, s.getNodeLength(a))), t.collapse(!0), p.selectRange(t), n = a.parentElement || a.parentNode, s.isDataNode(a) && !s.emptyNode(n) && this._cleanBomBefore(t), !0) }, _handleImmutables: function (e) { var t = r.Immutables.immutableParent, n = t(e.start), i = t(e.start); n && s.insertBefore(e.start, n), i && s.insertAfter(e.end, i), n && s.remove(n), i && i.parentNode && s.remove(i) }, _surroundFullyContent: function (e, t) { var n = t.commonAncestorContainer.children, i = n[0], o = n[n.length - 1]; this._moveMarker(e, t, i, o) }, _surroundFullySelectedAnchor: function (t, n) { var i = t.start, o = e(i).closest("a").get(0), r = t.end, a = e(r).closest("a").get(0); this._moveMarker(t, n, o, a) }, _moveMarker: function (e, t, n, i) { var o = e.start, r = e.end; n && a.isStartOf(t, n) && s.insertBefore(o, n), i && a.isEndOf(t, i) && s.insertAfter(r, i) }, _root: function (e) { for (; e && "body" != s.name(e) && e.parentNode && "body" != s.name(e.parentNode);)e = e.parentNode; return e }, _join: function (e, t) { e = this._root(e), t = this._root(t), e != t && s.is(t, "p") && this._merge(e, t) }, _merge: function (e, t) { for (s.removeTrailingBreak(e); e && t.firstChild;)1 == e.nodeType ? (e = s.list(e) ? e.children[e.children.length - 1] : e, e && e.appendChild(t.firstChild)) : e.nodeType === p.TEXT_NODE ? this._mergeWithTextNode(e, t.firstChild) : e.parentNode.appendChild(t.firstChild); s.remove(t) }, _mergeWithTextNode: function (e, t) { e && e.nodeType === p.TEXT_NODE && (e.nextSibling && this._isCaret(e.nextSibling) ? s.insertAfter(t, e.nextSibling) : s.insertAfter(t, e)) }, _isCaret: function (t) { return e(t).is("a") }, keydown: function (e) { var t, n, o = this.editor, a = o.getRange(), s = e.keyCode, d = i.keys, c = s === d.BACKSPACE, u = s == d.DELETE; o.immutables && o.immutables.keydown(e, a) || (!c && !u || a.collapsed ? c ? t = "_handleBackspace" : u && (t = "_handleDelete") : t = "_handleSelection", t && (n = new l(a, o.body), this[t](a) && (e.preventDefault(), r._finishUpdate(o, n)))) }, deleteSelection: function (e) { this._handleSelection(e) }, keyup: e.noop }), y = o.extend({ init: function (e) { this.editor = e, this.systemCommandIsInProgress = !1 }, createUndoCommand: function () { this.startRestorePoint = this.endRestorePoint = r._finishUpdate(this.editor, this.startRestorePoint) }, changed: function () { return !!this.startRestorePoint && this.startRestorePoint.html != this.editor.body.innerHTML }, keydown: function (e) { var t = this, n = t.editor, i = n.keyboard; return i.isModifierKey(e) ? (i.isTypingInProgress() && i.endTyping(!0), t.startRestorePoint = new l(n.getRange(), n.body), !0) : !!i.isSystem(e) && (t.systemCommandIsInProgress = !0, t.changed() && (t.systemCommandIsInProgress = !1, t.createUndoCommand()), !0) }, keyup: function () { var e = this; return !(!e.systemCommandIsInProgress || !e.changed()) && (e.systemCommandIsInProgress = !1, e.createUndoCommand(), !0) } }), x = o.extend({ init: function (e) { this.editor = e }, keydown: function (e) { !c.webkit || e.isDefaultPrevented() || !e.ctrlKey || 65 != e.keyCode || e.altKey || e.shiftKey || (this.editor.options.immutables && this._toSelectableImmutables(), this._selectEditorBody()) }, _selectEditorBody: function () { var e = this.editor, t = e.getRange(); t.selectNodeContents(e.body), e.selectRange(t) }, _toSelectableImmutables: function () { for (var t = this.editor, n = t.body, i = r.Immutables.immutable, o = s.emptyTextNode, a = n.firstChild, l = n.lastChild; o(a);)a = a.nextSibling; for (; o(l);)l = l.previousSibling; a && i(a) && e(u).prependTo(n), l && i(l) && e(u).appendTo(n) }, keyup: e.noop }), C = o.extend({ init: function (e) { this.handlers = e, this.typingInProgress = !1 }, isCharacter: function (e) { return e >= 48 && e <= 90 || e >= 96 && e <= 111 || e >= 186 && e <= 192 || e >= 219 && e <= 222 || 229 == e }, toolFromShortcut: function (t, n) { var i, o, r = String.fromCharCode(n.keyCode), a = this._getShortcutModifier(n, navigator.platform); for (i in t) if (o = e.extend({ ctrl: !1, alt: !1, shift: !1 }, t[i].options), (o.key == r || o.key == n.keyCode) && o.ctrl == a && o.alt == n.altKey && o.shift == n.shiftKey) return i }, _getShortcutModifier: function (e, t) { var n = t.toUpperCase().indexOf("MAC") >= 0; return n ? e.metaKey : e.ctrlKey }, toolsFromShortcut: function (t, n) { var i, o, r, a = String.fromCharCode(n.keyCode), s = [], l = function (e) { return e == a || e == n.keyCode || e == n.charCode }; for (i in t) o = e.extend({ ctrl: !1, alt: !1, shift: !1 }, t[i].options), r = e.isArray(o.key) ? e.grep(o.key, l).length > 0 : l(o.key), r && o.ctrl == n.ctrlKey && o.alt == n.altKey && o.shift == n.shiftKey && s.push(t[i]); return s }, isTypingKey: function (e) { var t = e.keyCode; return this.isCharacter(t) && !e.ctrlKey && !e.altKey || 32 == t || 13 == t || 8 == t || 46 == t && !e.shiftKey && !e.ctrlKey && !e.altKey }, isModifierKey: function (e) { var t = e.keyCode; return 17 == t && !e.shiftKey && !e.altKey || 16 == t && !e.ctrlKey && !e.altKey || 18 == t && !e.ctrlKey && !e.shiftKey }, isSystem: function (e) { return 46 == e.keyCode && e.ctrlKey && !e.altKey && !e.shiftKey }, startTyping: function (e) { this.onEndTyping = e, this.typingInProgress = !0 }, stopTyping: function () { this.typingInProgress && this.onEndTyping && this.onEndTyping(), this.typingInProgress = !1 }, endTyping: function (t) { var n = this; n.clearTimeout(), t ? n.stopTyping() : n.timeout = window.setTimeout(e.proxy(n.stopTyping, n), 1e3) }, isTypingInProgress: function () { return this.typingInProgress }, clearTimeout: function () { window.clearTimeout(this.timeout) }, notify: function (e, t) { var n, i = this.handlers; for (n = 0; n < i.length && !i[n][t](e); n++); }, keydown: function (e) { this.notify(e, "keydown") }, keyup: function (e) { this.notify(e, "keyup") } }); h(r, { TypingHandler: w, SystemHandler: y, BackspaceHandler: k, SelectAllHandler: x, Keyboard: C }) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/exportpdf.min", ["editor/command.min"], e) }(function () { !function (e) { var t = window.kendo, n = t.ui.editor, i = n.Command, o = n.EditorUtils, r = o.registerTool, a = n.Tool, s = n.ToolTemplate, l = e.extend, d = i.extend({ init: function (e) { this.async = !0, i.fn.init.call(this, e) }, exec: function () { var e = this, t = e.lockRange(!0), n = e.editor; n._destroyResizings(), n.saveAsPDF().then(function () { e.releaseRange(t), n._initializeColumnResizing(), n._initializeRowResizing(), n._initializeTableResizing() }) } }); l(n, { ExportPdfCommand: d }), r("pdf", new a({ command: d, template: new s({ template: o.buttonTemplate, title: "Export PDF" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/print.min", ["editor/command.min"], e) }(function () { !function (e) { var t = window.kendo, n = t.ui.editor, i = n.Command, o = n.EditorUtils, r = o.registerTool, a = n.Tool, s = n.ToolTemplate, l = e.extend, d = i.extend({ init: function (e) { i.fn.init.call(this, e), this.managesUndoRedo = !0 }, exec: function () { var e = this.editor; t.support.browser.msie ? e.document.execCommand("print", !1, null) : e.window.print && e.window.print() } }); l(n, { PrintCommand: d }), r("print", new a({ command: d, template: new s({ template: o.buttonTemplate, title: "Print" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/plugins/formatpainter.min", ["editor/command.min"], e) }(function () { !function (e) { var t = window.kendo, n = t.ui.editor, i = n.Tool, o = n.Command, r = n.ToolTemplate, a = n.EditorUtils, s = n.Dom, l = n.RangeUtils, d = a.registerTool, c = o.extend({ init: function (e) { o.fn.init.call(this, e) }, exec: function () { var e = this.lockRange(!0); this.inlineStyles = [], this.blockStyles = [], this.collectStyles(e), this.editor.inlineStyles = this.inlineStyles, this.editor.blockStyles = this.blockStyles, this.releaseRange(e) }, collectStyles: function (e) { var t, n = l.nodes(e); for (t = 1 === n.length ? n[0].parentNode : e.startContainer; t && !s.is(t, "body") && "editor" !== t.getAttribute("data-role");)s.isBlock(t) ? (this.populateStyles(t, "blockStyles"), t = s.is(t, "li") ? t.parentNode : null) : (this.populateStyles(t, "inlineStyles"), t = t.parentNode) }, populateStyles: function (e, t) { var n, i, o, r, a, s = e.style, l = e.attributes, d = { tags: [e.tagName], attr: { style: {} } }; for (a = 0; s && a < s.length; a++)i = s[a], n = s[i], d.attr.style[i] = n; for (a = 0; l && a < l.length; a++)o = l[a].nodeName, r = l[a].nodeValue, "style" !== o && ("class" === o ? d.attr.className = r : d.attr[o] = r); this[t].push(d) } }), u = o.extend({ init: function (e) { o.fn.init.call(this, e) }, exec: function () { var e, t = this.lockRange(!0), n = l.getMarkers(t), i = this.editor, o = i.inlineStyles, r = i.blockStyles; (o && 0 !== o.length || r && 0 !== r.length) && (3 === n.length && (this.marker.removeCaret(t), this.marker.caret = null), this.removeEmptyElementsFromRange(t), e = l.nodes(t), this.cleanInlineParents(e), s.normalize(t.commonAncestorContainer), 2 === n.length ? (t.setStartAfter(n[0]), t.setEndBefore(n[1])) : (t.setStartBefore(e[0]), t.setEndAfter(e[0])), e = l.nodes(t), e && r && r.length && this.applyBlockStyles(e, r), e && o && o.length && this.applyInlineStyles(e, o), this.releaseRange(t)) }, removeEmptyElementsFromRange: function (e) { var t, n = function (e) { return s.isInline(e) && !e.firstChild && !s.isMarker(e) }, i = l.getAll(e, n); if (i && i.length > 0) for (t = 0; t < i.length; t++)i[t].parentNode.removeChild(i[t]) }, cleanInlineParents: function (e) { var t, n, i, o, r, a, l; for (t = 0; t < e.length; t++)if (n = e[t], i = n.parentNode, !this.immutableParent(n)) for (; i && s.isInline(i);) { for (o = i.childNodes, r = 0; r < o.length; r++)a = o[r], s.isMarker(a) || a === n || (l = i.cloneNode(!0), l.innerHTML = "", s.wrap(a, l)); s.unwrap(i), i = n.parentNode } }, applyBlockStyles: function (e, t) { var n, i, o, r, a, l, d, c, u, h, p, f, g, m, v, _ = t[0].tags[0], b = t[0].attr, w = this.editor.document; for (n = 0, i = e.length; n < i; n++)if (o = e[n], !s.isWhitespace(o) && !this.immutableParent(o)) if (a = s.blockParentOrBody(o), "BODY" !== a.tagName && a.tagName !== _) { if ("LI" !== a.tagName && "TD" !== a.tagName && "TH" !== a.tagName) { for (d = [], c = [], u = o.previousSibling, h = o.nextSibling; u;)s.isMarker(u) || d.push(u), u = u.previousSibling; if (d.length) for (p = a.cloneNode(!0), p.innerHTML = "", s.insertBefore(p, d[0]), m = 0; m < d.length; m++)g = d[m], s.insertAt(p, g, 0); for (; h;)s.isMarker(h) || c.push(h), h = h.nextSibling; if (c.length) for (f = a.cloneNode(!0), f.innerHTML = "", s.insertBefore(f, c[0]), m = 0; m < c.length; m++)g = c[m], f.appendChild(g); s.unwrap(a) } r = s.create(w, _, b), s.wrap(o, r) } else a.tagName === _ && s.attr(a, b); if (2 === t.length && "LI" !== a.tagName && "LI" === _) { for (v = []; s.is(r, "li");)v.push(r), r = s.prev(r); for (l = s.create(w, t[1].tags[0], t[1].attr), s.insertBefore(l, v[v.length - 1]), l.appendChild(v[0]), n = 1, i = v.length; n < i; n++)s.insertBefore(v[n], l.firstChild) } else 2 === t.length && "LI" !== a.tagName && (l = s.create(w, t[1].tags[0], t[1].attr), s.wrap(r, l)) }, applyInlineStyles: function (e, t) { var n, i, o, r, a, l, d = this.editor.document; for (r = 0; r < t.length; r++)n = t[r], i = s.create(d, n.tags[0], n.attr), o && i.appendChild(o), o = i; if (o) for (r = 0; r < e.length; r++)if (l = e[r], !s.isWhitespace(l) && !this.immutableParent(l)) { for (a = o.cloneNode(!0), s.insertBefore(a, l); a.children && a.children.length;)a = a.children[0]; a.appendChild(l) } }, immutables: function () { return this.editor && this.editor.options.immutables }, immutableParent: function (e) { return this.immutables() && n.Immutables.immutableParent(e) } }), h = i.extend({ init: function (e) { i.fn.init.call(this, e) }, command: function (e) { return new c(e) } }), p = i.extend({ init: function (e) { i.fn.init.call(this, e) }, command: function (e) { return new u(e) } }); e.extend(n, { CopyFormatCommand: c, ApplyFormatCommand: u, CopyFormatTool: h, ApplyFormatTool: p }), d("copyFormat", new h({ template: new r({ template: a.buttonTemplate, title: "Copy format" }) })), d("applyFormat", new p({ template: new r({ template: a.buttonTemplate, title: "Apply format" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/resizing/resizing-utils.min", ["editor/main.min"], e) }(function () { !function (e, t) { function n(e) { var t = e.value, n = e.min, i = e.max; return h(u(p(t), p(i)), p(n)) } function i(t) { return t && !f(t).is("body") && t.scrollHeight > t.clientHeight ? e.support.scrollbar() : 0 } function o(e, t) { return r(e) ? p(e) : p(e) / t * 100 } function r(e) { return typeof e === k && b.test(e) } function a(e) { return typeof e === k && w.test(e) } function s(e) { return p(e) + v } function l(e) { return p(e) + _ } var d = window, c = d.Math, u = c.min, h = c.max, p = d.parseFloat, f = e.jQuery, g = f.extend, m = e.ui.editor, v = "%", _ = "px", b = /(\d+)(\.?)(\d*)%/, w = /(\d+)(\.?)(\d*)px/, k = "string", y = { constrain: n, getScrollBarWidth: i, calculatePercentageRatio: o, inPercentages: r, inPixels: a, toPercentages: s, toPixels: l }; g(m, { ResizingUtils: y }) }(window.kendo) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/resizing/table-element-resizing.min", ["editor/main.min", "kendo.resizable.min", "editor/resizing/resizing-utils.min"], e) }(function () { !function (e, t) { var n = e.jQuery, i = n.extend, o = n.noop, r = n.proxy, a = e.ui.editor, s = e.Class, l = "keydown", d = "mousedown", c = "mouseenter", u = "mouseleave", h = "mousemove", p = "mouseup", f = ",", g = ".", m = ":last-child", v = "table", _ = s.extend({ init: function (e, t) { var o = this; o.options = i({}, o.options, t), o.options.tags = n.isArray(o.options.tags) ? o.options.tags : [o.options.tags], n(e).is(v) && (o.element = e, o._attachEventHandlers()) }, destroy: function () { var e = this, t = e.options.eventNamespace; e.element && (n(e.element).off(t), e.element = null), n(e.options.rootElement).off(l + t), e._destroyResizeHandle() }, options: { tags: [], min: 0, rootElement: null, eventNamespace: "", rtl: !1, handle: { dataAttribute: "", height: 0, width: 0, classNames: {}, template: "" } }, _attachEventHandlers: function () { var e = this, t = e.options; n(e.element).on(h + t.eventNamespace, t.tags.join(f), r(e.detectElementBorderHovering, e)) }, resizingInProgress: function () { var e = this, t = e._resizable; return !!t && !!t.resizing }, resize: o, detectElementBorderHovering: function (e) { var t = this, i = t.options, o = i.handle, r = n(e.currentTarget), a = t.resizeHandle, s = o.dataAttribute; t.resizingInProgress() || (!r.is(m) && t.elementBorderHovered(r, e) ? a ? a.data(s) && a.data(s) !== r[0] && t.showResizeHandle(r, e) : t.showResizeHandle(r, e) : a && t._destroyResizeHandle()) }, elementBorderHovered: o, showResizeHandle: function (e, t) { var n = this; 0 === t.buttons && (n._initResizeHandle(), n.setResizeHandlePosition(e), n.setResizeHandleDimensions(), n.setResizeHandleDataAttributes(e[0]), n._attachResizeHandleEventHandlers(), n._initResizable(e), n._hideResizeMarker(), n.resizeHandle.show()) }, _initResizeHandle: function () { var e = this, t = e.options; e._destroyResizeHandle(), e.resizeHandle = n(t.handle.template).appendTo(t.rootElement) }, setResizeHandlePosition: o, setResizeHandleDimensions: o, setResizeHandleDataAttributes: function (e) { var t = this; t.resizeHandle.data(t.options.handle.dataAttribute, e) }, _attachResizeHandleEventHandlers: function () { var e = this, t = e.options, n = t.eventNamespace, i = t.handle.classNames.marker, o = e.resizeHandle; e.resizeHandle.on(d + n, function () { o.find(g + i).show() }).on(p + n, function () { o.find(g + i).hide() }) }, _hideResizeMarker: function () { var e = this; e.resizeHandle.find(g + e.options.handle.classNames.marker).hide() }, _destroyResizeHandle: function () { var e = this; e.resizeHandle && (e._destroyResizable(), e.resizeHandle.off(e.options.eventNamespace).remove(), e.resizeHandle = null) }, _initResizable: function (t) { var n = this; n.resizeHandle && (n._destroyResizable(), n._resizable = new e.ui.Resizable(t, { draggableElement: n.resizeHandle[0], start: r(n.onResizeStart, n), resize: r(n.onResize, n), resizeend: r(n.onResizeEnd, n) })) }, _destroyResizable: function () { var e = this; e._resizable && (e._resizable.destroy(), e._resizable = null) }, onResizeStart: function () { this._disableKeyboard() }, onResize: function (e) { this.setResizeHandleDragPosition(e) }, setResizeHandleDragPosition: o, onResizeEnd: function (e) { var t = this; t.resize(e), t._destroyResizeHandle(), t._enableKeyboard() }, _enableKeyboard: function () { var e = this.options; n(e.rootElement).off(l + e.eventNamespace) }, _disableKeyboard: function () { var e = this.options; n(e.rootElement).on(l + e.eventNamespace, function (e) { e.preventDefault() }) }, _forceResizing: function (e) { var t = this._resizable; t && t.userEvents && t.userEvents._end(e) } }), b = s.extend({ create: function (e, t) { var i = this, o = t.name, r = t.eventNamespace; n(e.body).on(c + r, v, function (n) { var r = n.currentTarget, a = e[o]; n.stopPropagation(), a ? a.element === r || a.resizingInProgress() || (i._destroyResizing(e, t), i._initResizing(e, r, t)) : i._initResizing(e, r, t) }).on(u + r, v, function (r) { var a, s = e[o]; r.stopPropagation(), !s || s.resizingInProgress() || s.resizeHandle || (a = n(s.element).parents(v)[0], a && (i._destroyResizing(e, t), i._initResizing(e, a, t))) }).on(u + r, function () { var n = e[o]; n && !n.resizingInProgress() && i._destroyResizing(e, t) }).on(p + r, function (r) { var a, s = e[o]; s && s.resizingInProgress() && (a = n(r.target).parents(v)[0], a && (s._forceResizing(r), i._destroyResizing(e, t), i._initResizing(e, a, t))) }) }, dispose: function (e, t) { n(e.body).off(t.eventNamespace) }, _initResizing: function (t, n, i) { var o = i.name, r = i.type; t[o] = new r(n, { rtl: e.support.isRtl(t.element), rootElement: t.body }) }, _destroyResizing: function (e, t) { var n = t.name; e[n] && (e[n].destroy(), e[n] = null) } }); b.current = new b, _.create = function (e, t) { b.current.create(e, t) }, _.dispose = function (e, t) { b.current.dispose(e, t) }, i(a, { TableElementResizing: _ }) }(window.kendo) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/resizing/column-resizing.min", ["editor/main.min", "editor/resizing/resizing-utils.min", "editor/resizing/table-element-resizing.min", "editor/dom.min"], e) }(function () { !function (e, t) { var n = window, i = n.Math, o = i.abs, r = e.jQuery, a = r.extend, s = e.ui.editor, l = s.Dom, d = s.TableElementResizing, c = s.ResizingUtils, u = c.constrain, h = c.calculatePercentageRatio, p = c.getScrollBarWidth, f = c.inPercentages, g = c.toPercentages, m = c.toPixels, v = e._outerWidth, _ = ".kendoEditorColumnResizing", b = "k-column-resize-handle", w = "k-column-resize-marker", k = "body", y = "tbody", x = "thead", C = "td", S = "th", T = "tr", D = "col-index", A = ",", E = "width", I = d.extend({ options: { tags: [C, S], min: 20, rootElement: null, eventNamespace: _, rtl: !1, handle: { dataAttribute: "column", width: 10, height: 0, classNames: { handle: b, marker: w }, template: '
        ' } }, elementBorderHovered: function (e, t) { var n = this, i = n.options, o = i.handle.width, a = e.offset().left + (i.rtl ? 0 : v(e)), s = t.clientX + r(e[0].ownerDocument).scrollLeft(); return s > a - o && s < a + o }, setResizeHandlePosition: function (e) { var t = this, n = r(t.element.tHead || t.element.tBodies[0]), i = t.options, o = i.rtl, a = i.handle.width, s = r(i.rootElement), l = s.is(k) ? 0 : s.scrollTop(), d = s.is(k) ? 0 : s.scrollLeft(), c = o ? 0 : v(e), u = o ? p(s[0]) : 0, h = e.offset().left - (s.offset().left + parseFloat(s.css("borderLeftWidth"))) - parseFloat(e.css("marginLeft")), f = n.offset().top - (s.offset().top + parseFloat(s.css("borderTopWidth"))) - parseFloat(n.css("marginTop")); t.resizeHandle.css({ top: f + l, left: h + c + (d - u) - a / 2, position: "absolute" }) }, setResizeHandleDimensions: function () { var e = this, t = r(e.element).children(x), n = r(e.element).children(y), i = t.length > 0 ? t.height() + n.height() : n.height(); e.resizeHandle.css({ width: e.options.handle.width, height: i }) }, setResizeHandleDragPosition: function (e) { var t = this, n = r(r(e.currentTarget).data(t.options.handle.dataAttribute)), i = t.options, o = r(i.rootElement), a = i.handle ? i.handle.width : 0, s = i.min, l = i.rtl, d = v(n), c = n.offset().left - (o.offset().left + parseFloat(o.css("borderLeftWidth"))) - parseFloat(n.css("marginLeft")), h = v(n.next()), f = r(t.resizeHandle), g = o.is(k) ? 0 : o.scrollLeft(), m = l ? p(o[0]) : 0, _ = f.offset().left - (o.offset().left + parseFloat(o.css("borderLeftWidth"))) - parseFloat(f.css("marginLeft")), b = u({ value: _ + (g - m) + e.x.delta, min: c + (g - m) - (l ? h : 0) + s, max: c + d + (g - m) + (l ? 0 : h) - a - s }); f.css({ left: b }) }, resize: function (e) { var t, n, i, o, a, s = this, d = r(r(e.currentTarget).data(s.options.handle.dataAttribute)), c = s.options, h = c.rtl ? -1 : 1, p = c.min, f = h * e.x.initialDelta; l.reMapTableColumns(s.element, D), o = parseInt(d.attr(D), 10), d.prop("colSpan") > 1 && (d = r(s.element).find("[" + D + "=" + (o + d.prop("colSpan") - 1) + "]").eq(0), o = parseInt(d.attr(D), 10)), a = r(s.element).find("[" + D + "=" + (o + 1) + "]:not([colspan])"), s._setTableComputedWidth(), s._setColumnsComputedWidth(), i = v(d), n = v(a), t = u({ value: i + f, min: p, max: i + n - p }), s._resizeColumn(d[0], t), s._resizeTopAndBottomColumns(d[0], t), s._resizeAdjacentColumns(parseInt(d.attr(D), 10), n, i, i - t), l.clearTableMappings(s.element, D) }, _setTableComputedWidth: function () { var e = this.element; "" === e.style[E] && (e.style[E] = m(v(r(e)))) }, _setColumnsComputedWidth: function () { var e, t = this, n = r(t.element.tHead || t.element.tBodies[0]), i = v(n), o = n.children(T).children(C), a = o.length, s = o.map(function () { return v(r(this)) }); for (e = 0; e < a; e++)o[e].style[E] = f(o[e].style[E]) ? g(h(s[e], i)) : m(s[e]) }, _resizeTopAndBottomColumns: function (e, t) { var n, i = this, o = r(e).attr(D), a = r(i.element).children(y + A + x).children(T).children(i.options.tags.join(A)).filter(function () { var t = this; return r(t).attr(D) === o && t !== e }), s = a.length; for (n = 0; n < s; n++)i._resizeColumn(a[n], t) }, _resizeColumn: function (e, t) { var n = r(this.element.tHead || this.element.tBodies[0]); e.style[E] = f(e.style[E]) ? g(h(t, v(n))) : m(t) }, _resizeAdjacentColumns: function (e, t, n, i) { var o, a = this, s = r(a.element).children(y + A + x).children(T).children(a.options.tags.join(A)).filter(function () { return parseInt(r(this).attr(D), 10) === e + 1 }), l = s.length; for (o = 0; o < l; o++)a._resizeAdjacentColumn(s[o], t, n, i) }, _resizeAdjacentColumn: function (e, t, n, i) { var r = this, a = r.options.min, s = u({ value: t + i, min: a, max: o(n + t - a) }); r._resizeColumn(e, s) } }); I.create = function (e) { d.create(e, { name: "columnResizing", type: I, eventNamespace: _ }) }, I.dispose = function (e) { d.dispose(e, { eventNamespace: _ }) }, a(s, { ColumnResizing: I }) }(window.kendo) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/resizing/row-resizing.min", ["editor/main.min", "editor/resizing/resizing-utils.min", "editor/resizing/table-element-resizing.min"], e) }(function () { !function (e, t) { var n = window.Math, i = n.abs, o = e.jQuery, r = o.extend, a = e.ui.editor, s = a.TableElementResizing, l = a.ResizingUtils, d = l.getScrollBarWidth, c = l.constrain, u = l.calculatePercentageRatio, h = l.inPercentages, p = l.toPercentages, f = l.toPixels, g = e._outerHeight, m = ".kendoEditorRowResizing", v = "k-row-resize-handle", _ = "k-row-resize-marker-wrapper", b = "k-row-resize-marker", w = "body", k = "tr", y = "tbody", x = "thead", C = ",", S = "height", T = s.extend({ options: { tags: [k], min: 20, rootElement: null, eventNamespace: m, rtl: !1, handle: { dataAttribute: "row", width: 0, height: 10, classNames: { handle: v, marker: b }, template: '
        ' } }, elementBorderHovered: function (e, t) { var n = this, i = n.options.handle[S], r = e.offset().top + g(e), a = t.clientY + o(e[0].ownerDocument).scrollTop(); return a > r - i && a < r + i }, setResizeHandlePosition: function (e) { var t = this, n = t.options, i = n.handle[S], r = o(n.rootElement), a = r.is(w) ? 0 : r.scrollTop(), s = r.is(w) ? 0 : r.scrollLeft(), l = n.rtl ? d(r[0]) : 0, c = e.offset().left - (r.offset().left + parseFloat(r.css("borderLeftWidth"))) - parseFloat(e.css("marginLeft")), u = e.offset().top - (r.offset().top + parseFloat(r.css("borderTopWidth"))) - parseFloat(e.css("marginTop")); t.resizeHandle.css({ top: u + g(e) + a - i / 2, left: c + (s - l), position: "absolute" }) }, setResizeHandleDimensions: function () { var e = this, t = o(e.element.tHead || e.element.tBodies[0]); e.resizeHandle.css({ width: t.width(), height: e.options.handle[S] }) }, setResizeHandleDragPosition: function (e) { var t = this, n = t.options, i = n.min, r = o(t.element).children(x), a = o(t.element).children(y), s = r.length > 0 ? r : a, l = o(t.resizeHandle), d = o(e.currentTarget).data(n.handle.dataAttribute), u = o(d), h = o(n.rootElement), p = h.is(w) ? 0 : h.scrollTop(), f = s.offset().top - (h.offset().top + parseFloat(h.css("borderTopWidth"))) - parseFloat(s.css("marginTop")), m = u.offset().top - (h.offset().top + parseFloat(h.css("borderTopWidth"))) - parseFloat(u.css("marginTop")), v = l.offset().top - (Math.max(0, h.offset().top) + parseFloat(h.css("borderTopWidth"))) - parseFloat(l.css("marginTop")), _ = c({ value: v + p + e.y.delta, min: m + p + i, max: f + g(r) + g(a) + p - n.handle[S] - i }); l.css({ top: _ }) }, resize: function (e) { var t = this, n = t.options, r = o(e.currentTarget).data(n.handle.dataAttribute), a = g(o(r)), s = o(t.element), l = g(s), d = s.children(x), u = d.length > 0 ? d.height() : 0, p = s.children(y), m = p.height(), v = r.style[S], _ = c({ value: a + e.y.initialDelta, min: n.min, max: i(u + m - n.min) }); t._setRowsHeightInPixels(), r.style[S] = f(_), t._setTableHeight(l + (_ - a)), h(v) && t._setRowsHeightInPercentages() }, _setRowsHeightInPixels: function () { var e, t = this, n = o(t.element).children(y + C + x).children(k), i = n.length, r = n.map(function () { return g(o(this)) }); for (e = 0; e < i; e++)n[e].style[S] = f(r[e]) }, _setRowsHeightInPercentages: function () { var e, t = this, n = o(t.element).children(x), i = n.length > 0 ? n.height() : 0, r = o(t.element).children(y), a = r.height(), s = o(t.element).children(x + C + y).children(k), l = s.length, d = s.map(function () { return g(o(this)) }); for (e = 0; e < l; e++)s[e].style[S] = p(u(d[e], i + a)) }, _setTableHeight: function (e) { var t = this.element; t.style[S] = h(t.style[S]) ? p(u(e, o(t).parent().height())) : f(e) } }); T.create = function (e) { s.create(e, { name: "rowResizing", type: T, eventNamespace: m }) }, T.dispose = function (e) { s.dispose(e, { eventNamespace: m }) }, r(a, { RowResizing: T }) }(window.kendo) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/resizing/table-resize-handle.min", ["editor/main.min", "kendo.draganddrop.min", "editor/resizing/resizing-utils.min"], e) }(function () { !function (e, t) { var n, i, o, r, a, s, l, d, c, u, h, p, f, g, m, v, _, b, w, k, y, x, C = e.jQuery, S = C.extend, T = C.noop, D = C.proxy, A = e.ui.editor, E = e.Class, I = e.ui.Draggable, M = e.Observable, R = A.ResizingUtils.getScrollBarWidth, F = e._outerWidth, P = e._outerHeight, z = ".kendoEditorTableResizeHandle", B = "k-table-resize-handle", L = "dragStart", H = "drag", N = "dragEnd", O = "halfInside", V = "mouseover", W = "mouseout", U = "body", j = "table", q = "east", G = "north", $ = "northeast", K = "northwest", Y = "south", Q = "southeast", X = "southwest", J = "west", Z = ".", ee = M.extend({ init: function (e) { var t = this; M.fn.init.call(t), t.options = S({}, t.options, e), t.element = C(t.options.template).appendTo(t.options.appendTo)[0], t._attachEventHandlers(), t._addStyles(), t._initDraggable(), t._initPositioningStrategy(), t._initDraggingStrategy(), C(t.element).data(j, t.options.resizableElement) }, destroy: function () { var e = this; C(e.element).off(z).remove(), e.element = null, e._destroyDraggable(), e.unbind() }, options: { appendTo: null, direction: Q, resizableElement: null, rtl: !1, template: "
        " }, events: [L, H, N, V, W], show: function () { this._setPosition() }, _setPosition: function () { var e = this, t = e._positioningStrategy.getPosition(); C(e.element).css({ top: t.top, left: t.left, position: "absolute" }) }, _attachEventHandlers: function () { var e = this; C(e.element).on(V + z, D(e._onMouseOver, e)).on(W + z, D(e._onMouseOut, e)) }, _onMouseOver: function () { this.trigger(V) }, _onMouseOut: function () { this.trigger(W) }, _addStyles: function () { var e = this; C(e.element).children(Z + B).addClass("k-resize-" + e.options.direction) }, _initPositioningStrategy: function () { var e = this, t = e.options; e._positioningStrategy = n.create({ name: t.direction, handle: e.element, resizableElement: t.resizableElement, rootElement: t.rootElement, rtl: t.rtl }) }, _initDraggable: function () { var e = this, t = e.element; !e._draggable && t && (e._draggable = new I(t, { dragstart: D(e._onDragStart, e), drag: D(e._onDrag, e), dragend: D(e._onDragEnd, e) })) }, _onDragStart: function () { this.trigger(L) }, _onDrag: function (e) { var t = this; t.trigger(H, t._draggingStrategy.adjustDragDelta({ deltaX: e.x.delta, deltaY: e.y.delta, initialDeltaX: e.x.initialDelta, initialDeltaY: e.y.initialDelta })) }, _onDragEnd: function () { this.trigger(N) }, _destroyDraggable: function () { var e = this; e._draggable && (e._draggable.destroy(), e._draggable = null) }, _initDraggingStrategy: function () { var e = this; e._draggingStrategy = h.create({ name: e.options.direction }) } }), te = E.extend({ init: function () { this._items = [] }, register: function (e, t) { this._items.push({ name: e, type: t }) }, create: function (e) { var t, n, i, o = this._items, r = o.length, a = e.name ? e.name.toLowerCase() : ""; for (i = 0; i < r; i++)if (n = o[i], n.name.toLowerCase() === a) { t = n; break } if (t) return new t.type(e) } }), ne = te.extend({}); ne.current = new ne, n = E.extend({ init: function (e) { var t = this; t.options = S({}, t.options, e) }, options: { handle: null, offset: O, resizableElement: null, rootElement: null, rtl: !1 }, getPosition: function () { var e = this, t = e.calculatePosition(), n = e.applyHandleOffset(t), i = e.applyScrollOffset(n); return i }, calculatePosition: T, applyHandleOffset: function (e) { var t = this.options, n = C(t.handle); return t.offset === O ? { top: e.top - P(n) / 2, left: e.left - F(n) / 2 } : e }, applyScrollOffset: function (e) { var t = this.options, n = C(t.rootElement), i = t.rtl ? R(n[0]) : 0; return n.is(U) ? e : { top: e.top + (n.scrollTop() || 0), left: e.left + (n.scrollLeft() || 0) - i } } }), n.create = function (e) { return ne.current.create(e) }, i = n.extend({ calculatePosition: function () { var e = C(this.options.resizableElement), t = e.position(); return { top: t.top + P(e) / 2, left: t.left + F(e) } } }), ne.current.register(q, i), o = n.extend({ calculatePosition: function () { var e = C(this.options.resizableElement), t = e.position(); return { top: t.top, left: t.left + F(e) / 2 } } }), ne.current.register(G, o), r = n.extend({ calculatePosition: function () { var e = C(this.options.resizableElement), t = e.position(); return { top: t.top, left: t.left + F(e) } } }), ne.current.register($, r), a = n.extend({ calculatePosition: function () { var e = C(this.options.resizableElement), t = e.position(); return { top: t.top, left: t.left } } }), ne.current.register(K, a), s = n.extend({ calculatePosition: function () { var e = C(this.options.resizableElement), t = e.position(); return { top: t.top + P(e), left: t.left + F(e) / 2 } } }), ne.current.register(Y, s), l = n.extend({ calculatePosition: function () { var e = C(this.options.resizableElement), t = e.position(); return { top: t.top + P(e), left: t.left + F(e) } } }), ne.current.register(Q, l), d = n.extend({ calculatePosition: function () { var e = C(this.options.resizableElement), t = e.position(); return { top: t.top + P(e), left: t.left } } }), ne.current.register(X, d), c = n.extend({ calculatePosition: function () { var e = C(this.options.resizableElement), t = e.position(); return { top: t.top + P(e) / 2, left: t.left } } }), ne.current.register(J, c), u = te.extend({}), u.current = new u, h = E.extend({ init: function (e) { var t = this; t.options = S({}, t.options, e) }, options: { deltaX: { adjustment: null, modifier: null }, deltaY: { adjustment: null, modifier: null } }, adjustDragDelta: function (e) { var t = this.options, n = t.deltaX.adjustment * t.deltaX.modifier, i = t.deltaY.adjustment * t.deltaY.modifier; return { deltaX: e.deltaX * n, deltaY: e.deltaY * i, initialDeltaX: e.initialDeltaX * n, initialDeltaY: e.initialDeltaY * i } } }), h.create = function (e) { return u.current.create(e) }, p = h.extend({ options: { deltaX: { adjustment: 1, modifier: 1 }, deltaY: { adjustment: 0, modifier: 0 } } }), f = p.extend({ options: { deltaX: { modifier: 1 } } }), u.current.register(q, f), g = p.extend({ options: { deltaX: { modifier: -1 } } }), u.current.register(J, g), m = h.extend({ options: { deltaX: { adjustment: 0, modifier: 0 }, deltaY: { adjustment: 1, modifier: 1 } } }), v = m.extend({ options: { deltaY: { modifier: -1 } } }), u.current.register(G, v), _ = m.extend({ options: { deltaY: { modifier: 1 } } }), u.current.register(Y, _), b = h.extend({ options: { deltaX: { adjustment: 1, modifier: 1 }, deltaY: { adjustment: 1, modifier: 1 } } }), w = b.extend({ options: { deltaX: { modifier: 1 }, deltaY: { modifier: -1 } } }), u.current.register($, w), k = b.extend({ options: { deltaX: { modifier: -1 }, deltaY: { modifier: -1 } } }), u.current.register(K, k), y = b.extend({ options: { deltaX: { modifier: 1 }, deltaY: { modifier: 1 } } }), u.current.register(Q, y), x = b.extend({ options: { deltaX: { modifier: -1 }, deltaY: { modifier: 1 } } }), u.current.register(X, x), S(A, { TableResizeHandle: ee }) }(window.kendo) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/resizing/table-resizing.min", ["editor/main.min", "editor/resizing/table-resize-handle.min", "editor/resizing/resizing-utils.min"], e) }(function () { !function (e, t) { function n(e) { return t === e } var i = window, o = i.Math, r = o.min, a = o.max, s = e.jQuery, l = s.contains, d = s.extend, c = s.proxy, u = e.support.browser, h = e.ui.editor, p = e.Class, f = h.TableResizeHandle, g = h.ResizingUtils, m = g.calculatePercentageRatio, v = g.constrain, _ = g.inPercentages, b = g.inPixels, w = g.toPercentages, k = g.toPixels, y = e._outerWidth, x = e._outerHeight, C = ".kendoEditorTableResizing", S = "k-table-resize-handle-wrapper", T = "k-table", D = "k-table-resizing", A = "dragStart", E = "drag", I = "dragEnd", M = "keydown", R = "mousedown", F = "mouseover", P = "mouseout", z = "td", B = "tr", L = "tbody", H = "thead", N = "table", O = ",", V = "width", W = "height", U = "east", j = "north", q = "northeast", G = "northwest", $ = "south", K = "southeast", Y = "southwest", Q = "west", X = ".", J = p.extend({ init: function (e, t) { var n = this; n.options = d({}, n.options, t), n.handles = [], s(e).is(N) && (n.element = e) }, destroy: function () { var e = this; s(e.element).off(C), e.element = null, s(e.options.rootElement).off(M + C), e._destroyResizeHandles() }, options: { appendHandlesTo: null, rtl: !1, rootElement: null, minWidth: 10, minHeight: 10, handles: [{ direction: G }, { direction: j }, { direction: q }, { direction: U }, { direction: K }, { direction: $ }, { direction: Y }, { direction: Q }] }, resize: function (e) { var t = this, n = d({}, { deltaX: 0, deltaY: 0, initialDeltaX: 0, initialDeltaY: 0 }, e); t._resizeWidth(n.deltaX, n.initialDeltaX), t._resizeHeight(n.deltaY, n.initialDeltaY), t.showResizeHandles() }, _resizeWidth: function (e, t) { var i, o, l, d, c = this, u = s(c.element), h = u[0].style[V], p = y(u), f = u.parent().width(), g = c._getMaxDimensionValue(V); 0 !== e && (n(c._initialElementWidth) && (c._initialElementWidth = p), d = v({ value: c._initialElementWidth + t, min: c.options.minWidth, max: g }), _(h) ? (p + e > f ? (o = a(d, f), l = r(d, f)) : (o = r(d, f), l = a(d, f)), i = w(m(o, l))) : i = k(d), c._setColumnsWidth(), u[0].style[V] = i) }, _resizeHeight: function (e, t) { var i, o, l, d, c = this, u = s(c.element), h = u[0].style[W], p = x(u), f = u.parent(), g = f.height(), b = c._getMaxDimensionValue(W), y = c.options.minHeight, C = c._hasRowsInPixels(); 0 !== e && (n(c._initialElementHeight) && (c._initialElementHeight = p), d = v({ value: c._initialElementHeight + t, min: y, max: b }), C && e < 0 && c._setRowsHeightInPercentages(), _(h) ? (p + e > g ? (o = a(d, g), l = r(d, g)) : (o = r(d, g), l = a(d, g)), i = w(m(o, l))) : i = k(d), u[0].style[W] = i, C && e < 0 && c._setRowsHeightInPixels()) }, _getMaxDimensionValue: function (e) { var t = this, n = s(t.element), i = e.toLowerCase(), o = t.options.rtl ? -1 : 1, r = s(t.element).parent(), a = r[0], l = r[i](), d = o * (e === V ? r.scrollLeft() : r.scrollTop()); return a === n.closest(z)[0] ? "" !== a.style[i] || _(t.element.style[i]) ? l + d : 1 / 0 : l + d }, _setColumnsWidth: function () { function e(e) { var t = e.style.width; return "" !== t ? !!_(t) : !!s(e).hasClass(T) } var t, n = this, i = s(n.element), o = i.parent()[0], r = i.closest(z), a = r.closest(B).children(), l = a.length; if (e(i[0]) && o === r[0] && "" === o.style[V]) for (t = 0; t < l; t++)a[t].style[V] = k(s(a[t]).width()) }, _hasRowsInPixels: function () { var e, t = this, n = s(t.element).children(H + O + L).children(B); for (e = 0; e < n.length; e++)if ("" === n[e].style.height || b(n[e].style.height)) return !0; return !1 }, _setRowsHeightInPercentages: function () { var e, t = this, n = s(t.element).children(H), i = n.length > 0 ? n.height() : 0, o = s(t.element).children(L), r = o.height(), a = s(t.element).children(H + O + L).children(B), l = a.length, d = a.map(function () { return x(s(this)) }); for (e = 0; e < l; e++)a[e].style[W] = w(m(d[e], i + r)) }, _setRowsHeightInPixels: function () { var e, t = this, n = s(t.element).children(H + O + L).children(B), i = n.length, o = n.map(function () { return x(s(this)) }); for (e = 0; e < i; e++)n[e].style[W] = k(o[e]) }, showResizeHandles: function () { var e = this; e._initResizeHandles(), e._showResizeHandles() }, _initResizeHandles: function () { var e, t = this, n = t.handles, i = t.options, o = t.options.handles, r = o.length; if (!(n && n.length > 0)) { for (e = 0; e < r; e++)t.handles.push(new f(d({ appendTo: i.appendHandlesTo, resizableElement: t.element, rootElement: i.rootElement, rtl: i.rtl }, o[e]))); t._bindToResizeHandlesEvents() } }, _destroyResizeHandles: function () { var e, t = this, n = t.handles ? t.handles.length : 0; for (e = 0; e < n; e++)t.handles[e].destroy() }, _showResizeHandles: function () { var e, t = this, n = t.handles || [], i = n.length; for (e = 0; e < i; e++)t.handles[e].show() }, _bindToResizeHandlesEvents: function () { var e, t, n = this, i = n.handles || [], o = i.length; for (e = 0; e < o; e++)t = i[e], t.bind(A, c(n._onResizeHandleDragStart, n)), t.bind(E, c(n._onResizeHandleDrag, n)), t.bind(I, c(n._onResizeHandleDragEnd, n)), t.bind(F, c(n._onResizeHandleMouseOver, n)), t.bind(P, c(n._onResizeHandleMouseOut, n)) }, _onResizeHandleDragStart: function () { var e = this, t = s(e.element); t.addClass(D), e._initialElementHeight = x(t), e._initialElementWidth = y(t), e._disableKeyboard() }, _onResizeHandleDrag: function (e) { this.resize(e) }, _onResizeHandleDragEnd: function () { var e = this; s(e.element).removeClass(D), e._enableKeyboard() }, _enableKeyboard: function () { s(this.options.rootElement).off(M + C) }, _disableKeyboard: function () { s(this.options.rootElement).on(M + C, function (e) { e.preventDefault() }) } }), Z = p.extend({ create: function (e) { var t = this; s(e.body).on(R + C, N, function (n) { var i = n.target, o = n.currentTarget, r = e.tableResizing, a = r ? r.element : null; if (r) { if (a && o !== a) { if (l(o, a) && a !== i && l(a, i)) return; a !== i && (e._destroyTableResizing(), t._initResizing(e, o)) } } else t._initResizing(e, o); e._showTableResizeHandles() }).on(R + C, function (t) { var n = e.tableResizing, i = n ? n.element : null, o = t.target, r = s(o).hasClass(S) || s(o).parents(X + S).length > 0; !n || i === o || l(i, o) || r || e._destroyTableResizing() }) }, dispose: function (e) { s(e.body).off(C) }, _initResizing: function (t, n) { u.msie || u.mozilla || (t.tableResizing = new J(n, { appendHandlesTo: t.body, rtl: e.support.isRtl(t.element), rootElement: t.body })) } }); Z.current = new Z, J.create = function (e) { Z.current.create(e) }, J.dispose = function (e) { Z.current.dispose(e); }, d(h, { TableResizing: J }) }(window.kendo) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("editor/table-wizard/table-wizard-command.min", ["editor/plugins/tables.min"], e) }(function () { !function (e, t) { var n = window.kendo, i = n.ui.editor, o = i.EditorUtils, r = i.RangeUtils, a = i.Dom, s = o.registerTool, l = i.ToolTemplate, d = i.Command, c = new i.BlockFormatFinder([{ tags: ["table"] }]), u = new i.BlockFormatFinder([{ tags: ["td", "th"] }]), h = /([a-z]+|%)$/i, p = "col", f = "row", g = "colgroup", m = "scope", v = "col-index", _ = "th", b = "td", w = "thead", k = "headers", y = "table", x = d.extend({ exec: function () { var o = this, r = o.editor, a = o.range = o.lockRange(), s = o._sourceTable = o.options.insertNewTable ? t : o._selectedTable(a), l = o._selectedTableCells = s ? o._selectedCells(a) : t, d = { visible: !1, messages: r.options.messages, closeCallback: e.proxy(o.onDialogClose, o), table: o.parseTable(s, l), dialogOptions: r.options.dialogOptions, isRtl: n.support.isRtl(r.wrapper) }, c = new i.TableWizardDialog(d); c.open() }, onDialogClose: function (e) { var t = this; t.releaseRange(t.range), e && (t.options.insertNewTable ? t.insertTable(t.createNewTable(e)) : t.updateTable(e, t._sourceTable, t._selectedTableCells)) }, releaseRange: function (e) { var t = this, n = t.editor.document; a.windowFromDocument(n).focus(), d.fn.releaseRange.call(t, e) }, insertTable: function (e) { var t = this.range; t.insertNode(e), t.collapse(!0), this.editor.selectRange(t), this._ensureFocusableAfterTable(e) }, _ensureFocusableAfterTable: function (t) { for (var n = e(t).parent().contents(), i = n.length - 1, o = n.get(i); null !== o.nodeValue && (" " === o.nodeValue || "" === o.nodeValue);)i -= 1, o = n.get(i); o === t && a.insertAfter(a.createEmptyNode(this.editor.document, "p"), t) }, updateTable: function (t, n, i) { for (var o, r, s, l, d, c, u, h, p = this, f = e(n.rows).toArray(), g = t.tableProperties, m = g.rows, _ = g.columns, b = n.tHead, w = function (e) { return e[e.length - 1] }; i.length > 1;)i.pop(); if (o = i.length ? w(i).parentNode : w(f), p._deleteTableRows(f, f.length - m), f.length < m) for (l = e(o).index(), d = o.cells.length, c = m - f.length, s = o.parentNode; c;)r = s.insertRow(l + 1), p._insertCells(d - r.cells.length, r), c--; f[0].cells.length > _ && e(f).each(function (e, t) { for (; t.cells.length > _;)t.deleteCell(-1) }), f[0].cells.length < _ && (u = e(w(i) || w(o.cells)).index(), e(f).each(function (e, t) { p._insertCells(_ - t.cells.length, t, u + 1) })), p._updateTableProperties(n, g), h = t.cellProperties, i[0] && a.attr(i[0], { id: h.id || null }), (h.selectAllCells ? e(f).children() : e(i)).each(function (e, t) { p._updateCellProperties(t, h) }), p._updateCaption(n, g), a.reMapTableColumns(n, v), b ? p._updateHeadersWithThead(n, t) : p._updateHeadersNoThead(n, t), p._updateHeaderAssociates(n, g), a.clearTableMappings(n, v) }, _isHeadingRow: function (e) { return a.is(e.cells[0], _) && a.is(e.parentNode, w) }, _isHeadingCell: function (e) { return a.is(e, _) }, cellsWithHeadersAssociated: function (t) { var n, i = e(t.rows).children(), o = [], r = function (e) { return o.indexOf(e) > -1 }; return i.each(function (e, t) { t.id && a.is(t, _) && o.push(t.id) }), n = i.filter(function (e, t) { var n, i = t.getAttribute(k); return !!(i && !a.is(t, _) && (n = i.split(" "), n && n.length > 0)) && n.some(r) }), !!n.length }, _insertCells: function (e, t, n) { n = isNaN(n) ? -1 : n; for (var i, o = 0; o < e; o++)i = t.insertCell(n), i.innerHTML = " " }, _deleteTableRows: function (e, t) { for (var n, i, o = 0; o < t; o++)n = e.pop(), i = n.parentNode, i.removeChild(n), i.rows.length || a.remove(i) }, createNewTable: function (e) { var t, n, i = this, o = i.editor.document, r = e.tableProperties, s = a.create(o, y), l = 0; return i._updateTableProperties(s, r), i._updateCaption(s, r), r.headerRows && r.headerRows > 0 && (t = s.createTHead(), i._createTableRows(e, t, l, !0), l += r.headerRows), n = s.createTBody(), i._createTableRows(e, n, l, !1), a.reMapTableColumns(s, v), "ids" === r.cellsWithHeaders ? a.associateWithIds(s) : "scope" === r.cellsWithHeaders && i._addScopes(s, r.headerRows, r.headerColumns), a.clearTableMappings(s, v), s }, _createTableRows: function (e, t, n, i) { var o, r, a, s, l = this, d = e.tableProperties, c = e.cellProperties, u = d.columns, h = i ? d.headerRows : d.rows, p = c.selectAllCells, f = d.headerColumns; for (o = n; o < h; o++)for (r = t.insertRow(), a = 0; a < u; a++)s = i || f > a ? document.createElement(_) : document.createElement(b), r.appendChild(s), s.innerHTML = " ", 0 === o && 0 === a && c.id && (s.id = c.id), l._updateCellProperties(s, p || 0 === o && 0 === a ? c : {}) }, _updateTableProperties: function (t, n) { var i = this._getStylesData(n); a.attr(t, { cellSpacing: n.cellSpacing || null, cellPadding: n.cellPadding || null, className: n.className || null, id: n.id || null, summary: n.summary || null, style: i || null }), e(t).addClass("k-table") }, _updateCellProperties: function (e, t) { var n = this._getStylesData(t); n.padding = t.cellPadding || null, n.margin = t.cellMargin || null, a.attr(e, { style: n || null, className: t.className || null }) }, _updateCaption: function (e, t) { var n, i; e.caption && !t.captionContent ? e.deleteCaption() : t.captionContent && (n = e.createCaption(), n.innerHTML = t.captionContent, i = this._getAlignmentData(t.captionAlignment), a.attr(n, { style: { textAlign: i.textAlign, verticalAlign: i.verticalAlign } })) }, _updateHeadersNoThead: function (e, t) { var n, i, o, r, s, l = this, d = t.tableProperties, c = e.rows; for (r = 0; r < c.length; r++)for (n = c[r], i = n.cells, s = 0; s < i.length; s++)o = i[s], !l._isHeadingCell(o) && (r < d.headerRows || d.headerColumns > o.getAttribute(v)) ? a.changeTag(o, _, !1) : l._isHeadingCell(o) && r >= d.headerRows && d.headerColumns <= o.getAttribute(v) && a.changeTag(o, b, !1) }, _updateHeadersWithThead: function (e, t) { var n, i, o, r = this, s = t.tableProperties, l = e.tHead, d = 0, c = e.tBodies[0]; if (c || (c = e.createTBody()), s.headerRows && s.headerRows > 0) { for (l || (l = e.createTHead()); l.rows.length < s.headerRows;)l.appendChild(c.rows[0]); for (; l.rows.length > s.headerRows;)c.appendChild(l.rows[0]); r._swapToHeaderCells(l) } else if (l) { for (; l.rows.length > 0;)c.appendChild(l.rows[l.rows.length - 1]); e.deleteTHead() } for (; c.rows.length > d;) { for (n = c.rows[d], o = 0; o < n.cells.length; o++)i = n.cells[o], r._isHeadingCell(i) && s.headerColumns <= i.getAttribute(v) ? a.changeTag(i, b, !1) : !r._isHeadingCell(i) && s.headerColumns > i.getAttribute(v) && a.changeTag(i, _, !1); d += 1 } }, _updateHeaderAssociates: function (e, t) { var n = this; "ids" === t.cellsWithHeaders ? (n.cellsWithHeadersAssociated(e) || n._removeScopes(e), a.associateWithIds(e)) : "scope" === t.cellsWithHeaders ? (n.cellsWithHeadersAssociated(e) && n._removeAssociates(e), n._addScopes(e, t.headerRows, t.headerColumns)) : n.cellsWithHeadersAssociated(e) ? n._removeAssociates(e) : n._removeScopes(e) }, _addScopes: function (e, t, n) { var i, o, r, a, s = e.rows; for (i = 0; i < s.length; i++)for (r = s[i], o = 0; o < r.cells.length; o++)a = r.cells[o], i < t ? a.setAttribute(m, p) : a.getAttribute(v) < n && a.setAttribute(m, f) }, _removeScopes: function (t) { e(t).find(_).removeAttr(m), e(t).find(p).remove(), e(t).find(g).remove() }, _removeAssociates: function (t) { e(t).find("th, td").removeAttr("id headers") }, _swapToHeaderCells: function (t) { var n = e(t).find("td"), i = function (e, t) { a.changeTag(t, _, !1) }; n.each(i) }, _getStylesData: function (e) { var t = this._getAlignmentData(e.alignment), n = "wrapText" in e ? e.wrapText ? "" : "nowrap" : null; return { width: e.width ? e.width + e.widthUnit : null, height: e.height ? e.height + e.heightUnit : null, textAlign: t.textAlign, verticalAlign: t.verticalAlign, backgroundColor: e.bgColor || "", borderWidth: e.borderWidth, borderStyle: e.borderStyle, borderColor: e.borderColor || "", borderCollapse: e.collapseBorders ? "collapse" : null, whiteSpace: n } }, _getAlignmentData: function (e) { var t, n = "", i = n; return e && (e.indexOf(" ") != -1 ? (t = e.split(" "), n = t[0], i = t[1]) : n = e), { textAlign: n, verticalAlign: i } }, parseTable: function (n, i) { var o, r, s, l, d, c, u, h, p, f, g, m, _; return n ? (o = this, r = n.style, s = n.rows, l = n.caption, d = e(l ? l.cloneNode(!0) : t), d.find(".k-marker").remove(), c = n.className, c = c.replace(/^k-table\s|\sk-table$/, ""), c = c.replace(/\sk-table\s/, " "), c = c.replace(/^k-table$/, ""), u = o._getAlignment(n, !0), h = l ? o._getAlignment(l) : t, p = a._getNumberOfHeaderRows(n), f = o.cellsWithHeadersAssociated(n) ? "ids" : e(n).find("th[scope]").length > 0 ? "scope" : "none", a.reMapTableColumns(n, v), g = a._getNumberOfColumns(n), m = a._getNumberOfHeaderColumns(n, p), a.clearTableMappings(n, v), _ = { tableProperties: { width: r.width || n.width ? parseFloat(r.width || n.width) : null, height: r.height || n.height ? parseFloat(r.height || n.height) : null, columns: g, rows: s.length, widthUnit: o._getUnit(r.width), heightUnit: o._getUnit(r.height), cellSpacing: n.cellSpacing, cellPadding: n.cellPadding, alignment: u.textAlign, bgColor: r.backgroundColor || n.bgColor, className: c, id: n.id, borderWidth: r.borderWidth || n.border, borderColor: r.borderColor, borderStyle: r.borderStyle || "", collapseBorders: !!r.borderCollapse, summary: n.summary, captionContent: l ? d.html() : "", captionAlignment: l && h.textAlign ? h.textAlign + " " + h.verticalAlign : "", headerRows: p, headerColumns: m, cellsWithHeaders: f }, selectedCells: [] }, _.rows = o.parseTableRows(s, i, _), _) : { tableProperties: {}, selectedCells: [] } }, parseTableRows: function (t, n, i) { var o, r, a, s, l, d, c, u = this, h = []; for (d = 0; d < t.length; d++)for (o = t[d], r = { cells: [] }, a = o.cells, h.push(r), c = 0; c < a.length; c++)s = a[c], l = u.parseCell(s), e.inArray(s, n) != -1 && i.selectedCells.push(l), r.cells.push(l); return h }, parseCell: function (e) { var t, n = this, i = e.style, o = n._getAlignment(e); return o = o.textAlign ? o.textAlign + " " + o.verticalAlign : "", t = { width: i.width || e.width ? parseFloat(i.width || e.width) : null, height: i.height || e.height ? parseFloat(i.height || e.height) : null, widthUnit: n._getUnit(i.width), heightUnit: n._getUnit(i.height), cellMargin: i.margin, cellPadding: i.padding, alignment: o, bgColor: i.backgroundColor || e.bgColor, className: e.className, id: e.id, borderWidth: i.borderWidth || e.border, borderColor: i.borderColor, borderStyle: i.borderStyle, wrapText: "nowrap" != i.whiteSpace } }, _getAlignment: function (e, t) { var n, i = e.style, o = i.textAlign || e.align || ""; return t ? { textAlign: o } : (n = i.verticalAlign || e.vAlign || "", o && n ? { textAlign: o, verticalAlign: n } : !o && n ? { textAlign: "left", verticalAlign: n } : o && !n ? { textAlign: o, verticalAlign: "top" } : { textAlign: "", verticalAlign: "" }) }, _getUnit: function (e) { var t = (e || "").match(h); return t ? t[0] : "px" }, _selectedTable: function (e) { var t = a.filterBy(r.nodes(e), a.htmlIndentSpace, !0); return c.findSuitable(t)[0] }, _selectedCells: function (e) { var t = a.filterBy(r.nodes(e), a.htmlIndentSpace, !0); return u.findSuitable(t) } }), C = i.Tool.extend({ command: function (e) { return e.insertNewTable = this.options.insertNewTable, new x(e) } }), S = C.extend({ update: function (e, t) { var n = !c.isFormatted(t); n === !0 ? (e.parent().addClass("k-hidden k-state-disabled"), e.attr("disabled", "disabled"), e.addClass("k-state-disabled")) : (e.parent().removeClass("k-hidden k-state-disabled"), e.removeAttr("disabled"), e.removeClass("k-state-disabled")) } }); n.ui.editor.TableWizardTool = C, n.ui.editor.TableWizardCommand = x, s("tableWizard", new S({ command: x, insertNewTable: !1, template: new l({ template: o.buttonTemplate, title: "Table Wizard" }) })) }(window.kendo.jQuery) }, "function" == typeof define && define.amd ? define : function (e, t, n) { (n || t)() }), function (e, define) { define("kendo.tabstrip.min", ["kendo.data.min"], e) }(function () { return function (e, t) { function n(t) { t.children(b).addClass(E), t.children("a").addClass(C).children(b).addClass(E), t.filter(":not([disabled]):not([class*=k-state-disabled])").addClass(N), t.filter("li[disabled]").addClass(H).attr("aria-disabled", "true").removeAttr("disabled"), t.filter(":not([class*=k-state])").children("a").filter(":focus").parent().addClass(O + " " + U), t.attr("role", "tab"), t.filter("." + O).attr("aria-selected", !0), t.each(function () { var t = e(this); t.children("." + C).length || t.contents().filter(function () { return !(this.nodeName.match(v) || 3 == this.nodeType && !c(this.nodeValue)) }).wrapAll("") }) } function i(e) { var t = e.children(".k-item"); t.filter(".k-first:not(:first-child)").removeClass(I), t.filter(".k-last:not(:last-child)").removeClass(S), t.filter(":first-child").addClass(I), t.filter(":last-child").addClass(S) } function o(e, t) { return "" } var r = window.kendo, a = r.ui, s = r.keys, l = e.map, d = e.each, c = r.trim, u = e.extend, h = r.isFunction, p = r.template, f = r._outerWidth, g = r._outerHeight, m = a.Widget, v = /^(a|div)$/i, _ = ".kendoTabStrip", b = "img", w = "href", k = "prev", y = "next", x = "show", C = "k-link", S = "k-last", T = "click", D = "error", A = ":empty", E = "k-image", I = "k-first", M = "select", R = "activate", F = "k-content", P = "contentUrl", z = "mouseenter", B = "mouseleave", L = "contentLoad", H = "k-state-disabled", N = "k-state-default", O = "k-state-active", V = "k-state-focused", W = "k-state-hover", U = "k-tab-on-top", j = ".k-item:not(." + H + ")", q = ".k-item", G = ".k-tabstrip-items > " + j + ":not(." + O + ")", $ = 200, K = { content: p("
        #= content(item) #
        "), itemWrapper: p("<#= tag(item) # class='k-link'#= contentUrl(item) ##= textAttributes(item) #>#= image(item) ##= sprite(item) ##= text(item) #"), item: p("
      • "), image: p(""), sprite: p(""), empty: p("") }, Y = { wrapperCssClass: function (e, t) { var n = "k-item", i = t.index; return n += t.enabled === !1 ? " k-state-disabled" : " k-state-default", 0 === i && (n += " k-first"), i == e.length - 1 && (n += " k-last"), n }, textAttributes: function (e) { return e.url ? " href='" + e.url + "'" : "" }, text: function (e) { return e.encoded === !1 ? e.text : r.htmlEncode(e.text) }, tag: function (e) { return e.url ? "a" : "span" }, contentAttributes: function (e) { return e.active !== !0 ? " style='display:none' aria-hidden='true' aria-expanded='false'" : "" }, content: function (e) { return e.content ? e.content : e.contentUrl ? "" : " " }, contentUrl: function (e) { return e.contentUrl ? r.attr("content-url") + '="' + e.contentUrl + '"' : "" } }, Q = m.extend({ init: function (t, n) { var i, o, a, s = this; m.fn.init.call(s, t, n), s._animations(s.options), n = s.options, s._contentUrls = n.contentUrls || [], s._wrapper(), s._isRtl = r.support.isRtl(s.wrapper), s._tabindex(), s._updateClasses(), s._dataSource(), n.dataSource && s.dataSource.fetch(), s._tabPosition(), s._scrollable(), s._contentUrls.length ? s.wrapper.find(".k-tabstrip-items > .k-item").each(function (t, n) { var i = s._contentUrls[t]; "string" == typeof i && e(n).find(">." + C).data(P, i) }) : s._contentUrls.length = s.tabGroup.find("li.k-item").length, s.wrapper.on(z + _ + " " + B + _, G, s._toggleHover).on("focus" + _, e.proxy(s._active, s)).on("blur" + _, function () { s._current(null) }), s._keyDownProxy = e.proxy(s._keydown, s), n.navigatable && s.wrapper.on("keydown" + _, s._keyDownProxy), s.options.value && (i = s.options.value), s.wrapper.children(".k-tabstrip-items").on(T + _, ".k-state-disabled .k-link", !1).on(T + _, " > " + j, function (t) { var n, i = s.wrapper[0]; if (i !== document.activeElement) if (n = r.support.browser.msie) try { i.setActive() } catch (o) { i.focus() } else i.focus(); s._click(e(t.currentTarget)) && t.preventDefault() }), o = s.tabGroup.children("li." + O), a = s.contentHolder(o.index()), o[0] && a.length > 0 && 0 === a[0].childNodes.length && s.activateTab(o.eq(0)), s.element.attr("role", "tablist"), s.element[0].id && (s._ariaId = s.element[0].id + "_ts_active"), s.value(i), r.notify(s) }, _active: function () { var e = this.tabGroup.children().filter("." + O); e = e[0] ? e : this._endItem("first"), e[0] && this._current(e) }, _endItem: function (e) { return this.tabGroup.children(j)[e]() }, _getItem: function (e) { return this.tabGroup.children(q)[e]() }, _item: function (e, t) { var n; return n = t === k ? "last" : "first", e ? (e = e[t](), e[0] || (e = this.tabGroup.children(q)[n]()), e.hasClass(H) && e.addClass(V), (e.hasClass(H) || e.hasClass(O)) && (this._focused = e), e) : this._endItem(n) }, _current: function (e) { var n = this, i = n._focused, o = n._ariaId; return e === t ? i : (i && (n.tabGroup.children("#" + o).removeAttr("id"), i.removeClass(V)), e && (e.hasClass(O) || e.addClass(V), n.element.removeAttr("aria-activedescendant"), o = e[0].id || o, o && (e.attr("id", o), n.element.attr("aria-activedescendant", o))), n._focused = e, t) }, _keydown: function (e) { var n, i = this, o = e.keyCode, r = i._current(), a = i._isRtl, l = /top|bottom/.test(i.options.tabPosition); if (e.target == e.currentTarget && r) { if (o !== s.DOWN || l) if (o !== s.UP || l) if (o === s.RIGHT && l) n = a ? k : y; else if (o === s.LEFT && l) n = a ? y : k; else if (o == s.ENTER || o == s.SPACEBAR) i._click(r), e.preventDefault(); else { if (o == s.HOME) return i._click(i._getItem("first")), e.preventDefault(), t; if (o == s.END) return i._click(i._getItem("last")), e.preventDefault(), t } else n = k; else n = y; n && (i._click(i._item(r, n)), e.preventDefault()) } }, _dataSource: function () { var t = this; t.dataSource && t._refreshHandler ? t.dataSource.unbind("change", t._refreshHandler) : t._refreshHandler = e.proxy(t.refresh, t), t.dataSource = r.data.DataSource.create(t.options.dataSource).bind("change", t._refreshHandler) }, setDataSource: function (e) { var t = this; t.options.dataSource = e, t._dataSource(), t.dataSource.fetch() }, _animations: function (e) { e && "animation" in e && !e.animation && (e.animation = { open: { effects: {} }, close: { effects: {} } }) }, refresh: function (e) { var t, n, i, o, a = this, s = a.options, l = r.getter(s.dataEncodedField), d = r.getter(s.dataTextField), c = r.getter(s.dataContentField), u = r.getter(s.dataContentUrlField), h = r.getter(s.dataImageUrlField), p = r.getter(s.dataUrlField), f = r.getter(s.dataSpriteCssClass), g = [], m = a.dataSource.view(); for (e = e || {}, i = e.action, i && (m = e.items), t = 0, o = m.length; t < o; t++)n = { text: d(m[t]) }, s.dataEncodedField && (n.encoded = l(m[t])), s.dataContentField && (n.content = c(m[t])), s.dataContentUrlField && (n.contentUrl = u(m[t])), s.dataUrlField && (n.url = p(m[t])), s.dataImageUrlField && (n.imageUrl = h(m[t])), s.dataSpriteCssClass && (n.spriteCssClass = f(m[t])), g[t] = n; if ("add" == e.action) e.index < a.tabGroup.children().length ? a.insertBefore(g, a.tabGroup.children().eq(e.index)) : a.append(g); else if ("remove" == e.action) for (t = 0; t < m.length; t++)a.remove(e.index); else "itemchange" == e.action ? (t = a.dataSource.view().indexOf(m[0]), e.field === s.dataTextField && a.tabGroup.children().eq(t).find(".k-link").text(m[0].get(e.field)), e.field === s.dataUrlField && (a._contentUrls[t] = m[0].get(e.field))) : (a.trigger("dataBinding"), a.remove("li"), a._contentUrls = [], a.append(g), a.trigger("dataBound")) }, value: function (n) { var i = this; return n === t ? i.select().text() : (n != i.value() && i.tabGroup.children().each(function () { r.trim(e(this).text()) == n && i.select(this) }), t) }, items: function () { return this.tabGroup[0].children }, setOptions: function (e) { var t = this, n = t.options.animation; t._animations(e), e.contentUrls && (t._contentUrls = e.contentUrls), e.animation = u(!0, n, e.animation), e.navigatable ? t.wrapper.on("keydown" + _, t._keyDownProxy) : t.wrapper.off("keydown" + _, t._keyDownProxy), m.fn.setOptions.call(t, e) }, events: [M, R, x, D, L, "change", "dataBinding", "dataBound"], options: { name: "TabStrip", dataEncodedField: "", dataTextField: "", dataContentField: "", dataImageUrlField: "", dataUrlField: "", dataSpriteCssClass: "", dataContentUrlField: "", tabPosition: "top", animation: { open: { effects: "expand:vertical fadeIn", duration: 200 }, close: { duration: 200 } }, collapsible: !1, navigatable: !0, contentUrls: !1, scrollable: { distance: $ } }, destroy: function () { var e = this, t = e.scrollWrap; m.fn.destroy.call(e), e._refreshHandler && e.dataSource.unbind("change", e._refreshHandler), e.wrapper.off(_), e.wrapper.children(".k-tabstrip-items").off(_), e._scrollableModeActive && (e._scrollPrevButton.off().remove(), e._scrollNextButton.off().remove()), r.destroy(e.wrapper), t.children(".k-tabstrip").unwrap() }, select: function (t) { var n = this; return 0 === arguments.length ? n.tabGroup.children("li." + O) : (isNaN(t) || (t = n.tabGroup.children().get(t)), t = n.tabGroup.find(t), e(t).each(function (t, i) { i = e(i), i.hasClass(O) || n.trigger(M, { item: i[0], contentElement: n.contentHolder(i.index())[0] }) || n.activateTab(i) }), n) }, enable: function (e, t) { return this._toggleDisabled(e, t !== !1), this }, disable: function (e) { return this._toggleDisabled(e, !1), this }, reload: function (t) { var n, i; return t = this.tabGroup.find(t), n = this, i = n._contentUrls, t.each(function () { var t = e(this), o = t.find("." + C).data(P) || i[t.index()], r = n.contentHolder(t.index()); o && n.ajaxRequest(t, r, null, o) }), n }, append: function (e) { var t = this, n = t._create(e); return d(n.tabs, function (e) { var i = n.contents[e]; t.tabGroup.append(this), "bottom" == t.options.tabPosition ? t.tabGroup.before(i) : t._scrollableModeActive ? t._scrollPrevButton.before(i) : t.wrapper.append(i), t.angular("compile", function () { return { elements: [i] } }) }), i(t.tabGroup), t._updateContentElements(), t.resize(!0), t }, _appendUrlItem: function (e) { this._contentUrls.push(e) }, _moveUrlItem: function (e, t) { this._contentUrls.splice(t, 0, this._contentUrls.splice(e, 1)[0]) }, _removeUrlItem: function (e) { this._contentUrls.splice(e, 1) }, insertBefore: function (t, n) { n = e(t).is(e(n)) ? this.tabGroup.find(n).next() : this.tabGroup.find(n); var o = this, r = o._create(t), a = o.element.find("[id='" + n.attr("aria-controls") + "']"); return d(r.tabs, function (t) { var i = r.contents[t], s = r.newTabsCreated ? o._contentUrls.length - (r.tabs.length - t) : e(i).index() - 1; n.before(this), a.before(i), o._moveUrlItem(s, e(this).index()), o.angular("compile", function () { return { elements: [i] } }) }), i(o.tabGroup), o._updateContentElements(r.newTabsCreated), o.resize(!0), o }, insertAfter: function (t, n) { n = e(t).is(e(n)) ? this.tabGroup.find(n).prev() : this.tabGroup.find(n); var o = this, r = o._create(t), a = o.element.find("[id='" + n.attr("aria-controls") + "']"); return d(r.tabs, function (t) { var i = r.contents[t], s = r.newTabsCreated ? o._contentUrls.length - (r.tabs.length - t) : e(i).index() - 1; n.after(this), a.after(i), o._moveUrlItem(s, e(this).index()), o.angular("compile", function () { return { elements: [i] } }) }), i(o.tabGroup), o._updateContentElements(r.newTabsCreated), o.resize(!0), o }, remove: function (t) { var n, i = this, o = typeof t; return "string" === o ? t = i.tabGroup.find(t) : "number" === o && (t = i.tabGroup.children().eq(t)), n = t.map(function () { var t = e(this).index(), n = i.contentElement(t); return r.destroy(n), i._removeUrlItem(t), n }), t.remove(), n.empty(), n.remove(), i._updateContentElements(), i.resize(!0), i }, _create: function (t) { var i, o, a, s = this, d = !1; return t = t instanceof r.data.ObservableArray ? t.toJSON() : t, e.isPlainObject(t) || e.isArray(t) ? (t = e.isArray(t) ? t : [t], d = !0, i = l(t, function (n, i) { return s._appendUrlItem(t[i].contentUrl || null), e(Q.renderItem({ group: s.tabGroup, item: u(n, { index: i }) })) }), o = l(t, function (t, n) { if ("string" == typeof t.content || t.contentUrl) return e(Q.renderContent({ item: u(t, { index: n }) })) })) : (i = "string" == typeof t && "<" != t[0] ? s.element.find(t) : e(t), o = e(), i.each(function () { if (/k-tabstrip-items/.test(this.parentNode.className)) { var t = s.element.find("[id='" + this.getAttribute("aria-controls") + "']"); a = t } else a = e("
        "); o = o.add(a) }), n(i)), { tabs: i, contents: o, newTabsCreated: d } }, _toggleDisabled: function (t, n) { t = this.tabGroup.find(t), t.each(function () { e(this).toggleClass(N, n).toggleClass(H, !n).attr("aria-disabled", !n) }) }, _updateClasses: function () { var o, r, a, s = this; s.wrapper.addClass("k-widget k-header k-tabstrip"), s.tabGroup = s.wrapper.children("ul").addClass("k-tabstrip-items k-reset"), s.tabGroup[0] || (s.tabGroup = e("