/* * Kendo UI v2015.2.805 (http://www.telerik.com/kendo-ui) * Copyright 2015 Telerik AD. 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(f, define) { define([], f) })(function() { "bundle all"; ! function(e, t, n) { function i() {} function r(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 o(e, t, n) { return e += "", t = t || 2, n = t - e.length, n ? V[t].substring(0, n) + e : e } function a(e) { var t = e.css(mt.support.transitions.css + "box-shadow") || e.css("box-shadow"), n = t ? t.match(Dt) || [0, 0, 0, 0, 0] : [0, 0, 0, 0, 0], i = kt.max(+n[3], +(n[4] || 0)); return { left: -n[1] + i, right: +n[1] + i, bottom: +n[2] + i } } function s(t, n) { var i, r, o, s, l, c, d, u, h = Ct.browser, p = "rtl" == t.css("direction"); return t.parent().hasClass("k-animation-container") ? (d = t.parent(".k-animation-container"), u = d[0].style, d.is(":hidden") && d.show(), i = St.test(u.width) || St.test(u.height), i || d.css({ width: t.outerWidth(), height: t.outerHeight(), boxSizing: "content-box", mozBoxSizing: "content-box", webkitBoxSizing: "content-box" })) : (r = a(t), o = t[0].style.width, s = t[0].style.height, l = St.test(o), c = St.test(s), h.opera && (r.left = r.right = r.bottom = 5), i = l || c, !l && (!n || n && o) && (o = t.outerWidth()), !c && (!n || n && s) && (s = t.outerHeight()), t.wrap(e("
").addClass("k-animation-container").css({ width: o, height: s, marginLeft: r.left * (p ? 1 : -1), paddingLeft: r.left, paddingRight: r.right, paddingBottom: r.bottom })), i && t.css({ width: "100%", height: "100%", boxSizing: "border-box", mozBoxSizing: "border-box", webkitBoxSizing: "border-box" })), h.msie && kt.floor(h.version) <= 7 && (t.css({ zoom: 1 }), t.children(".k-menu").width(t.width())), t.parent() } function l(e) { var t = 1, n = arguments.length; for (t = 1; n > t; t++) c(e, arguments[t]); return e } function c(e, t) { var n, i, r, o, a, s = mt.data.ObservableArray, l = mt.data.LazyObservableArray, d = mt.data.DataSource, u = mt.data.HierarchicalDataSource; for (n in t) i = t[n], r = typeof i, o = r === Mt && null !== i ? i.constructor : null, o && o !== Array && o !== s && o !== l && o !== d && o !== u ? i instanceof Date ? e[n] = new Date(i.getTime()) : P(i.clone) ? e[n] = i.clone() : (a = e[n], e[n] = typeof a === Mt ? a || {} : {}, c(e[n], i)) : r !== Rt && (e[n] = i); return e } function d(e, t, i) { for (var r in t) if (t.hasOwnProperty(r) && t[r].test(e)) return r; return i !== n ? i : e } function u(e) { return e.replace(/([a-z][A-Z])/g, function(e) { return e.charAt(0) + "-" + e.charAt(1).toLowerCase() }) } function h(e) { return e.replace(/\-(\w)/g, function(e, t) { return t.toUpperCase() }) } function p(t, n) { var i, r = {}; return document.defaultView && document.defaultView.getComputedStyle ? (i = document.defaultView.getComputedStyle(t, ""), n && e.each(n, function(e, t) { r[t] = i.getPropertyValue(t) })) : (i = t.currentStyle, n && e.each(n, function(e, t) { r[t] = i[h(t)] })), mt.size(r) || (r = i), r } function f(e) { var t = p(e, ["overflow"]).overflow; return "auto" == t || "scroll" == t } function g(e) { var t, n = 0; for (t in e) e.hasOwnProperty(t) && "toJSON" != t && n++; return n } function m(e, n, i) { n || (n = "offset"); var r = e[n](); return Ct.browser.msie && (Ct.pointers || Ct.msPointers) && !i && (r.top -= t.pageYOffset - document.documentElement.scrollTop, r.left -= t.pageXOffset - document.documentElement.scrollLeft), r } function v(e) { var t = {}; return _t("string" == typeof e ? e.split(" ") : e, function(e) { t[e] = this }), t } function _(e) { return new mt.effects.Element(e) } function w(e, t, n, i) { return typeof e === It && (P(t) && (i = t, t = 400, n = !1), P(n) && (i = n, n = !1), typeof t === Ft && (n = t, t = 400), e = { effects: e, duration: t, reverse: n, complete: i }), vt({ effects: {}, duration: 400, reverse: !1, init: yt, teardown: yt, hide: !1 }, e, { completeCallback: e.complete, complete: yt }) } function b(t, n, i, r, o) { for (var a, s = 0, l = t.length; l > s; s++) a = e(t[s]), a.queue(function() { W.promise(a, w(n, i, r, o)) }); return t } function y(e, t, n, i) { return t && (t = t.split(" "), _t(t, function(t, n) { e.toggleClass(n, i) })), e } function k(e) { return ("" + e).replace(j, "&").replace(G, "<").replace(Y, ">").replace(q, """).replace($, "'") } function x(e, t) { var i; return 0 === t.indexOf("data") && (t = t.substring(4), t = t.charAt(0).toLowerCase() + t.substring(1)), t = t.replace(it, "-$1"), i = e.getAttribute("data-" + mt.ns + t), null === i ? i = n : "null" === i ? i = null : "true" === i ? i = !0 : "false" === i ? i = !1 : At.test(i) ? i = parseFloat(i) : tt.test(i) && !nt.test(i) && (i = Function("return (" + i + ")")()), i } function C(t, i) { var r, o, a = {}; for (r in i) o = x(t, r), o !== n && (et.test(r) && (o = mt.template(e("#" + o).html())), a[r] = o); return a } function S(t, n) { return e.contains(t, n) ? -1 : 1 } function T() { var t = e(this); return e.inArray(t.attr("data-" + mt.ns + "role"), ["slider", "rangeslider"]) > -1 || t.is(":visible") } function D(e, t) { var n = e.nodeName.toLowerCase(); return (/input|select|textarea|button|object/.test(n) ? !e.disabled : "a" === n ? e.href || t : t) && A(e) } function A(t) { return e.expr.filters.visible(t) && !e(t).parents().addBack().filter(function() { return "hidden" === e.css(this, "visibility") }).length } function E(e, t) { return new E.fn.init(e, t) } var I, P, M, z, F, R, H, B, L, N, O, V, U, W, j, G, q, $, Y, Q, K, X, Z, J, et, tt, nt, it, rt, ot, at, st, lt, ct, dt, ut, ht, pt, ft, gt, mt = t.kendo = t.kendo || { cultures: {} }, vt = e.extend, _t = e.each, wt = e.isArray, bt = e.proxy, yt = e.noop, kt = Math, xt = t.JSON || {}, Ct = {}, St = /%/, Tt = /\{(\d+)(:[^\}]+)?\}/g, Dt = /(\d+(?:\.?)\d*)px\s*(\d+(?:\.?)\d*)px\s*(\d+(?:\.?)\d*)px\s*(\d+)?/i, At = /^(\+|-?)\d+(\.?)\d*$/, Et = "function", It = "string", Pt = "number", Mt = "object", zt = "null", Ft = "boolean", Rt = "undefined", Ht = {}, Bt = {}, Lt = [].slice, Nt = t.Globalize; mt.version = "2015.2.805", i.extend = function(e) { var t, n, i = function() {}, r = this, o = e && e.init ? e.init : function() { r.apply(this, arguments) }; i.prototype = r.prototype, n = o.fn = o.prototype = new i; for (t in e) n[t] = null != e[t] && e[t].constructor === Object ? vt(!0, {}, i.prototype[t], e[t]) : e[t]; return n.constructor = o, o.extend = r.extend, o }, i.prototype._initOptions = function(e) { this.options = l({}, this.options, e) }, P = mt.isFunction = function(e) { return "function" == typeof e }, M = function() { this._defaultPrevented = !0 }, z = function() { return this._defaultPrevented === !0 }, F = i.extend({ init: function() { this._events = {} }, bind: function(e, t, i) { var r, o, a, s, l, c = this, d = typeof e === It ? [e] : e, u = typeof t === Et; if (t === n) { for (r in e) c.bind(r, e[r]); return c } for (r = 0, o = d.length; o > r; r++) e = d[r], s = u ? t : t[e], s && (i && (a = s, s = function() { c.unbind(e, s), a.apply(c, arguments) }, s.original = a), l = c._events[e] = c._events[e] || [], l.push(s)); return c }, one: function(e, t) { return this.bind(e, t, !0) }, first: function(e, t) { var n, i, r, o, a = this, s = typeof e === It ? [e] : e, l = typeof t === Et; for (n = 0, i = s.length; i > n; n++) e = s[n], r = l ? t : t[e], r && (o = a._events[e] = a._events[e] || [], o.unshift(r)); return a }, trigger: function(e, t) { var n, i, r = this, o = r._events[e]; if (o) { for (t = t || {}, t.sender = r, t._defaultPrevented = !1, t.preventDefault = M, t.isDefaultPrevented = z, o = o.slice(), n = 0, i = o.length; i > n; n++) o[n].call(r, t); return t._defaultPrevented === !0 } return !1 }, unbind: function(e, t) { var i, r = this, o = r._events[e]; if (e === n) r._events = {}; else if (o) if (t) for (i = o.length - 1; i >= 0; i--)(o[i] === t || o[i].original === t) && o.splice(i, 1); else r._events[e] = []; return r } }), R = /^\w+/, H = /\$\{([^}]*)\}/g, B = /\\\}/g, L = /__CURLY__/g, N = /\\#/g, O = /__SHARP__/g, V = ["", "0", "00", "000", "0000"], I = { paramName: "data", useWithBlock: !0, render: function(e, t) { var n, i, r = ""; for (n = 0, i = t.length; i > n; n++) r += e(t[n]); return r }, compile: function(e, t) { var n, i, o, a = vt({}, this, t), s = a.paramName, l = s.match(R)[0], c = a.useWithBlock, d = "var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;"; if (P(e)) return e; for (d += c ? "with(" + s + "){" : "", d += "$kendoOutput=", i = e.replace(B, "__CURLY__").replace(H, "#=$kendoHtmlEncode($1)#").replace(L, "}").replace(N, "__SHARP__").split("#"), o = 0; i.length > o; o++) d += r(i[o], o % 2 === 0); d += c ? ";}" : ";", d += "return $kendoOutput;", d = d.replace(O, "#"); try { return n = Function(l, d), n._slotCount = Math.floor(i.length / 2), n } catch (u) { throw Error(mt.format("Invalid template:'{0}' Generated code:'{1}'", e, d)) } } }, function() { function e(e) { return a.lastIndex = 0, a.test(e) ? '"' + e.replace(a, function(e) { var t = s[e]; return typeof t === It ? t : "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4) }) + '"' : '"' + e + '"' } function t(o, a) { var s, c, d, u, h, p, f = n, g = a[o]; if (g && typeof g === Mt && typeof g.toJSON === Et && (g = g.toJSON(o)), typeof r === Et && (g = r.call(a, o, g)), p = typeof g, p === It) return e(g); if (p === Pt) return isFinite(g) ? g + "" : zt; if (p === Ft || p === zt) return g + ""; if (p === Mt) { if (!g) return zt; if (n += i, h = [], "[object Array]" === l.apply(g)) { for (u = g.length, s = 0; u > s; s++) h[s] = t(s, g) || zt; return d = 0 === h.length ? "[]" : n ? "[\n" + n + h.join(",\n" + n) + "\n" + f + "]" : "[" + h.join(",") + "]", n = f, d } if (r && typeof r === Mt) for (u = r.length, s = 0; u > s; s++) typeof r[s] === It && (c = r[s], d = t(c, g), d && h.push(e(c) + (n ? ": " : ":") + d)); else for (c in g) Object.hasOwnProperty.call(g, c) && (d = t(c, g), d && h.push(e(c) + (n ? ": " : ":") + d)); return d = 0 === h.length ? "{}" : n ? "{\n" + n + h.join(",\n" + n) + "\n" + f + "}" : "{" + h.join(",") + "}", n = f, d } } var n, i, r, 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", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, l = {}.toString; typeof Date.prototype.toJSON !== Et && (Date.prototype.toJSON = function() { var e = this; return isFinite(e.valueOf()) ? o(e.getUTCFullYear(), 4) + "-" + o(e.getUTCMonth() + 1) + "-" + o(e.getUTCDate()) + "T" + o(e.getUTCHours()) + ":" + o(e.getUTCMinutes()) + ":" + o(e.getUTCSeconds()) + "Z" : null }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() { return this.valueOf() }), typeof xt.stringify !== Et && (xt.stringify = function(e, o, a) { var s; if (n = "", i = "", typeof a === Pt) for (s = 0; a > s; s += 1) i += " "; else typeof a === It && (i = a); if (r = o, o && typeof o !== Et && (typeof o !== Mt || typeof o.length !== Pt)) throw Error("JSON.stringify"); return t("", { "": e }) }) }(), function() { function t(e) { if (e) { if (e.numberFormat) return e; if (typeof e === It) { var t = mt.cultures; return t[e] || t[e.split("-")[0]] || null } return null } return null } function i(e) { return e && (e = t(e)), e || mt.cultures.current } function r(e) { e.groupSizes = e.groupSize, e.percent.groupSizes = e.percent.groupSize, e.currency.groupSizes = e.currency.groupSize } function a(e, t, r) { r = i(r); var a = r.calendars.standard, s = a.days, l = a.months; return t = a.patterns[t] || t, t.replace(d, function(t) { var i, r, c; return "d" === t ? r = e.getDate() : "dd" === t ? r = o(e.getDate()) : "ddd" === t ? r = s.namesAbbr[e.getDay()] : "dddd" === t ? r = s.names[e.getDay()] : "M" === t ? r = e.getMonth() + 1 : "MM" === t ? r = o(e.getMonth() + 1) : "MMM" === t ? r = l.namesAbbr[e.getMonth()] : "MMMM" === t ? r = l.names[e.getMonth()] : "yy" === t ? r = o(e.getFullYear() % 100) : "yyyy" === t ? r = o(e.getFullYear(), 4) : "h" === t ? r = e.getHours() % 12 || 12 : "hh" === t ? r = o(e.getHours() % 12 || 12) : "H" === t ? r = e.getHours() : "HH" === t ? r = o(e.getHours()) : "m" === t ? r = e.getMinutes() : "mm" === t ? r = o(e.getMinutes()) : "s" === t ? r = e.getSeconds() : "ss" === t ? r = o(e.getSeconds()) : "f" === t ? r = kt.floor(e.getMilliseconds() / 100) : "ff" === t ? (r = e.getMilliseconds(), r > 99 && (r = kt.floor(r / 10)), r = o(r)) : "fff" === t ? r = o(e.getMilliseconds(), 3) : "tt" === t ? r = e.getHours() < 12 ? a.AM[0] : a.PM[0] : "zzz" === t ? (i = e.getTimezoneOffset(), c = 0 > i, r = ("" + kt.abs(i / 60)).split(".")[0], i = kt.abs(i) - 60 * r, r = (c ? "+" : "-") + o(r), r += ":" + o(i)) : ("zz" === t || "z" === t) && (r = e.getTimezoneOffset() / 60, c = 0 > r, r = ("" + kt.abs(r)).split(".")[0], r = (c ? "+" : "-") + ("zz" === t ? o(r) : r)), r !== n ? r : t.slice(1, t.length - 1) }) } function s(e, t, r) { r = i(r); var o, a, s, c, d, b, y, k, x, C, S, T, D, A, E, I, P, M, z, F, R, H, B, L = r.numberFormat, N = L.groupSize[0], O = L[m], V = L[g], U = L.decimals, W = L.pattern[0], j = [], G = 0 > e, q = f, $ = f, Y = -1; if (e === n) return f; if (!isFinite(e)) return e; if (!t) return r.name.length ? e.toLocaleString() : "" + e; if (d = u.exec(t)) { if (t = d[1].toLowerCase(), a = "c" === t, s = "p" === t, (a || s) && (L = a ? L.currency : L.percent, N = L.groupSize[0], O = L[m], V = L[g], U = L.decimals, o = L.symbol, W = L.pattern[G ? 0 : 1]), c = d[2], c && (U = +c), "e" === t) return c ? e.toExponential(U) : e.toExponential(); if (s && (e *= 100), e = l(e, U), G = 0 > e, e = e.split(g), b = e[0], y = e[1], G && (b = b.substring(1)), $ = b, k = b.length, k >= N) for ($ = f, C = 0; k > C; C++) C > 0 && (k - C) % N === 0 && ($ += O), $ += b.charAt(C); if (y && ($ += V + y), "n" === t && !G) return $; for (e = f, C = 0, S = W.length; S > C; C++) T = W.charAt(C), e += "n" === T ? $ : "$" === T || "%" === T ? o : T; return e } if (G && (e = -e), (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 j.push(n), w })), t = t.split(";"), G && t[1]) t = t[1], A = !0; else if (0 === e) { if (t = t[2] || t[0], -1 == t.indexOf(v) && -1 == t.indexOf(_)) return t } else t = t[0]; if (F = t.indexOf("%"), R = t.indexOf("$"), s = -1 != F, a = -1 != R, s && (e *= 100), a && "\\" === t[R - 1] && (t = t.split("\\").join(""), a = !1), (a || s) && (L = a ? L.currency : L.percent, N = L.groupSize[0], O = L[m], V = L[g], U = L.decimals, o = L.symbol), D = t.indexOf(m) > -1, D && (t = t.replace(p, f)), E = t.indexOf(g), S = t.length, -1 != E ? (y = ("" + e).split("e"), y = y[1] ? l(e, Math.abs(y[1])) : y[0], y = y.split(g)[1] || f, P = t.lastIndexOf(_) - E, I = t.lastIndexOf(v) - E, M = P > -1, z = I > -1, C = y.length, M || z || (t = t.substring(0, E) + t.substring(E + 1), S = t.length, E = -1, C = 0), M && P > I ? C = P : I > P && (z && C > I ? C = I : M && P > C && (C = P)), C > -1 && (e = l(e, C))) : e = l(e), I = t.indexOf(v), H = P = t.indexOf(_), Y = -1 == I && -1 != P ? P : -1 != I && -1 == P ? I : I > P ? P : I, I = t.lastIndexOf(v), P = t.lastIndexOf(_), B = -1 == I && -1 != P ? P : -1 != I && -1 == P ? I : I > P ? I : P, Y == S && (B = Y), -1 != Y) { if ($ = ("" + e).split(g), b = $[0], y = $[1] || f, k = b.length, x = y.length, G && -1 * e >= 0 && (G = !1), D) if (k === N && E - H > k) b = O + b; else if (k > N) { for ($ = f, C = 0; k > C; C++) C > 0 && (k - C) % N === 0 && ($ += O), $ += b.charAt(C); b = $ } for (e = t.substring(0, Y), G && !A && (e += "-"), C = Y; S > C; C++) { if (T = t.charAt(C), -1 == E) { if (k > B - C) { e += b; break } } else if (-1 != P && C > P && (q = f), k >= E - C && E - C > -1 && (e += b, C = E), E === C) { e += (y ? V : f) + y, C += B - E + 1; continue } T === _ ? (e += T, q = T) : T === v && (e += q) } if (B >= Y && (e += t.substring(B + 1)), a || s) { for ($ = f, C = 0, S = e.length; S > C; C++) T = e.charAt(C), $ += "$" === T || "%" === T ? o : T; e = $ } if (S = j.length) for (C = 0; S > C; C++) e = e.replace(w, j[C]) } return e } var l, c, d = /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", w = "??", b = "en-US", y = {}.toString; mt.cultures["en-US"] = { name: b, numberFormat: { pattern: ["-n"], decimals: 2, ",": ",", ".": ".", groupSize: [3], percent: { pattern: ["-n %", "n %"], decimals: 2, ",": ",", ".": ".", groupSize: [3], symbol: "%" }, currency: { 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 } } }, mt.culture = function(e) { var i, o = mt.cultures; return e === n ? o.current : (i = t(e) || o[b], i.calendar = i.calendars.standard, o.current = i, Nt && !Nt.load && r(i.numberFormat), n) }, mt.findCulture = t, mt.getCulture = i, mt.culture(b), l = function(e, t) { return t = t || 0, e = ("" + e).split("e"), e = Math.round(+(e[0] + "e" + (e[1] ? +e[1] + t : t))), e = ("" + e).split("e"), e = +(e[0] + "e" + (e[1] ? +e[1] - t : -t)), e.toFixed(t) }, c = function(e, t, i) { if (t) { if ("[object Date]" === y.call(e)) return a(e, t, i); if (typeof e === Pt) return s(e, t, i) } return e !== n ? e : "" }, Nt && !Nt.load && (c = function(t, n, i) { return e.isPlainObject(i) && (i = i.name), Nt.format(t, n, i) }), mt.format = function(e) { var t = arguments; return e.replace(Tt, function(e, n, i) { var r = t[parseInt(n, 10) + 1]; return c(r, i ? i.substring(1) : "") }) }, mt._extractFormat = function(e) { return "{0:" === e.slice(0, 3) && (e = e.slice(3, e.length - 1)), e }, mt._activeElement = function() { try { return document.activeElement } catch (e) { return document.documentElement.activeElement } }, mt._round = l, mt.toString = c }(), function() { function t(e, t, n) { return !(e >= t && n >= e) } function i(e) { return e.charAt(0) } function r(t) { return e.map(t, i) } function o(e, t) { t || 23 !== e.getHours() || e.setHours(e.getHours() + 2) } function a(e) { for (var t = 0, n = e.length, i = []; n > t; 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) { if (!e) return null; var l, c, d, u, f, g, m, _, w, b, y, k, x, C = function(e) { for (var t = 0; i[H] === e;) t++, H++; return t > 0 && (H -= 1), t }, S = function(t) { var n = v[t] || RegExp("^\\d{1," + t + "}"), i = e.substr(B, t).match(n); return i ? (i = i[0], B += i.length, parseInt(i, 10)) : null }, T = function(t, n) { for (var i, r, o, a = 0, s = t.length, l = 0, c = 0; s > a; a++) i = t[a], r = i.length, o = e.substr(B, r), n && (o = o.toLowerCase()), o == i && r > l && (l = r, c = a); return l ? (B += l, c + 1) : null }, D = function() { var t = !1; return e.charAt(B) === i[H] && (B++, t = !0), t }, A = a.calendars.standard, E = null, I = null, P = null, M = null, z = null, F = null, R = null, H = 0, B = 0, L = !1, N = new Date, O = A.twoDigitYearMax || 2029, V = N.getFullYear(); for (i || (i = "d"), u = A.patterns[i], u && (i = u), i = i.split(""), d = i.length; d > H; H++) if (l = i[H], L) "'" === l ? L = !1 : D(); else if ("d" === l) { if (c = C("d"), A._lowerDays || (A._lowerDays = s(A.days)), null !== P && c > 2) continue; if (P = 3 > c ? S(2) : T(A._lowerDays[3 == c ? "namesAbbr" : "names"], !0), null === P || t(P, 1, 31)) return null } else if ("M" === l) { if (c = C("M"), A._lowerMonths || (A._lowerMonths = s(A.months)), I = 3 > c ? S(2) : T(A._lowerMonths[3 == c ? "namesAbbr" : "names"], !0), null === I || t(I, 1, 12)) return null; I -= 1 } else if ("y" === l) { if (c = C("y"), E = S(c), null === E) return null; 2 == c && ("string" == typeof O && (O = V + parseInt(O, 10)), E = V - V % 100 + E, E > O && (E -= 100)) } else if ("h" === l) { if (C("h"), M = S(2), 12 == M && (M = 0), null === M || t(M, 0, 11)) return null } else if ("H" === l) { if (C("H"), M = S(2), null === M || t(M, 0, 23)) return null } else if ("m" === l) { if (C("m"), z = S(2), null === z || t(z, 0, 59)) return null } else if ("s" === l) { if (C("s"), F = S(2), null === F || t(F, 0, 59)) return null } else if ("f" === l) { if (c = C("f"), x = e.substr(B, c).match(v[3]), R = S(c), null !== R && (x = x[0].length, 3 > x && (R *= Math.pow(10, 3 - x)), c > 3 && (R = parseInt(("" + R).substring(0, 3), 10))), null === R || t(R, 0, 999)) return null } else if ("t" === l) { if (c = C("t"), _ = A.AM, w = A.PM, 1 === c && (_ = r(_), w = r(w)), f = T(w), !f && !T(_)) return null } else if ("z" === l) { if (g = !0, c = C("z"), "Z" === e.substr(B, 1)) { D(); continue } if (m = e.substr(B, 6).match(c > 2 ? p : h), !m) return null; if (m = m[0].split(":"), b = m[0], y = m[1], !y && b.length > 3 && (B = b.length - 2, y = b.substring(B), b = b.substring(0, B)), b = parseInt(b, 10), t(b, -12, 13)) return null; if (c > 2 && (y = parseInt(y, 10), isNaN(y) || t(y, 0, 59))) return null } else if ("'" === l) L = !0, D(); else if (!D()) return null; return k = null !== M || null !== z || F || null, null === E && null === I && null === P && k ? (E = V, I = N.getMonth(), P = N.getDate()) : (null === E && (E = V), null === P && (P = 1)), f && 12 > M && (M += 12), g ? (b && (M += -b), y && (z += -y), e = new Date(Date.UTC(E, I, P, M, z, F, R))) : (e = new Date(E, I, P, M, z, F, R), o(e, M)), 100 > E && e.setFullYear(E), e.getDate() !== P && g === n ? null : e } function c(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 } var d = /\u00A0/g, u = /[eE][\-+]?[0-9]+/, h = /[+|\-]\d{1,2}/, p = /[+|\-]\d{1,2}:?\d{2}/, f = /^\/Date\((.*?)\)\/$/, g = /[+-]\d*/, m = ["G", "g", "d", "F", "D", "y", "m", "T", "t"], v = { 2: /^\d{1,2}/, 3: /^\d{1,3}/, 4: /^\d{4}/ }, _ = {}.toString; mt.parseDate = function(e, t, n) { var i, r, o, a, s; if ("[object Date]" === _.call(e)) return e; if (i = 0, r = null, e && 0 === e.indexOf("/D") && (r = f.exec(e))) return r = r[1], s = g.exec(r.substring(1)), r = new Date(parseInt(r, 10)), s && (s = c(s[0]), r = mt.timezone.apply(r, 0), r = mt.timezone.convert(r, 0, -1 * s)), r; if (n = mt.getCulture(n), !t) { for (t = [], a = n.calendar.patterns, o = m.length; o > i; i++) t[i] = a[m[i]]; i = 0, t = ["yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM/dd", "ddd MMM dd yyyy HH:mm:ss", "yyyy-MM-ddTHH:mm:ss.fffffffzzz", "yyyy-MM-ddTHH:mm:ss.fffzzz", "yyyy-MM-ddTHH:mm:sszzz", "yyyy-MM-ddTHH:mm:ss.fffffff", "yyyy-MM-ddTHH:mm:ss.fff", "yyyy-MM-ddTHH:mmzzz", "yyyy-MM-ddTHH:mmzz", "yyyy-MM-ddTHH:mm:ss", "yyyy-MM-ddTHH:mm", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "HH:mm:ss", "HH:mm"].concat(t) } for (t = wt(t) ? t : [t], o = t.length; o > i; i++) if (r = l(e, t[i], n)) return r; return r }, mt.parseInt = function(e, t) { var n = mt.parseFloat(e, t); return n && (n = 0 | n), n }, mt.parseFloat = function(e, t, n) { if (!e && 0 !== e) return null; if (typeof e === Pt) return e; e = "" + e, t = mt.getCulture(t); var i, r, o = t.numberFormat, a = o.percent, s = o.currency, l = s.symbol, c = a.symbol, h = e.indexOf("-"); return u.test(e) ? (e = parseFloat(e.replace(o["."], ".")), isNaN(e) && (e = null), e) : h > 0 ? null : (h = h > -1, e.indexOf(l) > -1 || n && n.toLowerCase().indexOf("c") > -1 ? (o = s, i = o.pattern[0].replace("$", l).split("n"), e.indexOf(i[0]) > -1 && e.indexOf(i[1]) > -1 && (e = e.replace(i[0], "").replace(i[1], ""), h = !0)) : e.indexOf(c) > -1 && (r = !0, o = a, l = c), e = e.replace("-", "").replace(l, "").replace(d, " ").split(o[","].replace(d, " ")).join("").replace(o["."], "."), e = parseFloat(e), isNaN(e) ? e = null : h && (e *= -1), e && r && (e /= 100), e) }, Nt && !Nt.load && (mt.parseDate = function(e, t, n) { return "[object Date]" === _.call(e) ? e : Nt.parseDate(e, t, n) }, mt.parseFloat = function(t, i) { return typeof t === Pt ? t : t === n || null === t ? null : (e.isPlainObject(i) && (i = i.name), t = Nt.parseFloat(t, i), isNaN(t) ? null : t) }) }(), function() { var i, r, o, a, s, l, c; Ct._scrollbar = n, Ct.scrollbar = function(e) { if (isNaN(Ct._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), Ct._scrollbar = t = n.offsetWidth - n.scrollWidth, document.body.removeChild(n), t } return Ct._scrollbar }, Ct.isRtl = function(t) { return e(t).closest(".k-rtl").length > 0 }, i = document.createElement("table"); try { i.innerHTML = "", Ct.tbodyInnerHtml = !0 } catch (u) { Ct.tbodyInnerHtml = !1 } Ct.touch = "ontouchstart" in t, Ct.msPointers = t.MSPointerEvent, Ct.pointers = t.PointerEvent, r = Ct.transitions = !1, o = Ct.transforms = !1, a = "HTMLElement" in t ? HTMLElement.prototype : [], Ct.hasHW3D = "WebKitCSSMatrix" in t && "m11" in new t.WebKitCSSMatrix || "MozPerspective" in document.documentElement.style || "msPerspective" in document.documentElement.style, _t(["Moz", "webkit", "O", "ms"], function() { var e, t = "" + this, a = typeof i.style[t + "Transition"] === It; return a || typeof i.style[t + "Transform"] === It ? (e = t.toLowerCase(), o = { css: "ms" != e ? "-" + e + "-" : "", prefix: t, event: "o" === e || "webkit" === e ? e : "" }, a && (r = o, r.event = r.event ? r.event + "TransitionEnd" : "transitionend"), !1) : n }), i = null, Ct.transforms = o, Ct.transitions = r, Ct.devicePixelRatio = t.devicePixelRatio === n ? 1 : t.devicePixelRatio; try { Ct.screenWidth = t.outerWidth || t.screen ? t.screen.availWidth : t.innerWidth, Ct.screenHeight = t.outerHeight || t.screen ? t.screen.availHeight : t.innerHeight } catch (u) { Ct.screenWidth = t.screen.availWidth, Ct.screenHeight = t.screen.availHeight } Ct.detectOS = function(e) { var n, i, r = !1, o = [], 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/ }, c = { tablet: /playbook|ipad|fire/i }, u = { 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) && (o = e.match(s[i]))) { if ("windows" == i && "plugins" in navigator) return !1; r = {}, r.device = i, r.tablet = d(i, c, !1), r.browser = d(e, u, "default"), r.name = d(i, l), r[r.name] = !0, r.majorVersion = o[2], r.minorVersion = o[3].replace("_", "."), n = r.minorVersion.replace(".", "").substr(0, 2), r.flatVersion = r.majorVersion + n + Array(3 - (3 > n.length ? n.length : 2)).join("0"), r.cordova = typeof t.PhoneGap !== Rt || typeof t.cordova !== Rt, r.appMode = t.navigator.standalone || /file|local|wmapp/.test(t.location.protocol) || r.cordova, r.android && (1.5 > Ct.devicePixelRatio && 400 > r.flatVersion || a) && (Ct.screenWidth > 800 || Ct.screenHeight > 800) && (r.tablet = i); break } return r }, s = Ct.mobileOS = Ct.detectOS(navigator.userAgent), Ct.wpDevicePixelRatio = s.wp ? screen.width / 320 : 0, Ct.kineticScrollNeeded = s && (Ct.touch || Ct.msPointers || Ct.pointers), Ct.hasNativeScrolling = !1, (s.ios || s.android && s.majorVersion > 2 || s.wp) && (Ct.hasNativeScrolling = s), Ct.mouseAndTouchPresent = Ct.touch && !(Ct.mobileOS.ios || Ct.mobileOS.android), Ct.detectBrowser = function(e) { var t, n = !1, i = [], r = { webkit: /(chrome)[ \/]([\w.]+)/i, safari: /(webkit)[ \/]([\w.]+)/i, opera: /(opera)(?:.*version|)[ \/]([\w.]+)/i, edge: /(edge)[ \/]([\w.]+)/i, msie: /(msie\s|trident.*? rv:)([\w.]+)/i, mozilla: /(mozilla)(?:.*? rv:([\w.]+)|)/i }; for (t in r) if (r.hasOwnProperty(t) && (i = e.match(r[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 }, Ct.browser = Ct.detectBrowser(navigator.userAgent), Ct.zoomLevel = function() { var e, n, i; try { return e = Ct.browser, n = 0, i = document.documentElement, e.msie && 11 == e.version && i.scrollHeight > i.clientHeight && !Ct.touch && (n = Ct.scrollbar()), Ct.touch ? i.clientWidth / t.innerWidth : e.msie && e.version >= 10 ? ((top || t).document.documentElement.offsetWidth + n) / (top || t).innerWidth : 1 } catch (r) { return 1 } }, Ct.cssBorderSpacing = n !== document.documentElement.style.borderSpacing && !(Ct.browser.msie && 8 > Ct.browser.version), function(t) { var n = "", i = e(document.documentElement), r = parseInt(t.version, 10); t.msie ? n = "ie" : t.mozilla ? n = "ff" : t.safari ? n = "safari" : t.webkit ? n = "webkit" : t.opera && (n = "opera"), n && (n = "k-" + n + " k-" + n + r), Ct.mobileOS && (n += " k-mobile"), i.addClass(n) }(Ct.browser), Ct.eventCapture = document.documentElement.addEventListener, l = document.createElement("input"), Ct.placeholder = "placeholder" in l, Ct.propertyChangeEvent = "onpropertychange" in l, Ct.input = function() { for (var e, t = ["number", "date", "time", "month", "week", "datetime", "datetime-local"], n = t.length, i = "test", r = {}, o = 0; n > o; o++) e = t[o], l.setAttribute("type", e), l.value = i, r[e.replace("-", "")] = "text" !== l.type && l.value !== i; return r }(), l.style.cssText = "float:left;", Ct.cssFloat = !!l.style.cssFloat, l = null, Ct.stableSort = function() { var e, t = 513, n = [{ index: 0, field: "b" }]; for (e = 1; t > e; e++) n.push({ index: e, field: "a" }); return n.sort(function(e, t) { return e.field > t.field ? 1 : t.field > e.field ? -1 : 0 }), 1 === n[0].index }(), Ct.matchesSelector = a.webkitMatchesSelector || a.mozMatchesSelector || a.msMatchesSelector || a.oMatchesSelector || a.matchesSelector || a.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 }, Ct.pushState = t.history && t.history.pushState, c = document.documentMode, Ct.hashChange = "onhashchange" in t && !(Ct.browser.msie && (!c || 8 >= c)) }(), U = { left: { reverse: "right" }, right: { reverse: "left" }, down: { reverse: "up" }, up: { reverse: "down" }, top: { reverse: "bottom" }, bottom: { reverse: "top" }, "in": { reverse: "out" }, out: { reverse: "in" } }, W = {}, e.extend(W, { 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 } }), W.promiseShim = W.promise, "kendoAnimate" in e.fn || vt(e.fn, { kendoStop: function(e, t) { return this.stop(e, t) }, kendoAnimate: function(e, t, n, i) { return b(this, e, t, n, i) }, kendoAddClass: function(e, t) { return mt.toggleClass(this, e, t, !0) }, kendoRemoveClass: function(e, t) { return mt.toggleClass(this, e, t, !1) }, kendoToggleClass: function(e, t, n) { return mt.toggleClass(this, e, t, n) } }), j = /&/g, G = //g, Q = function(e) { return e.target }, Ct.touch && (Q = 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 }, _t(["swipe", "swipeLeft", "swipeRight", "swipeUp", "swipeDown", "doubleTap", "tap"], function(t, n) { e.fn[n] = function(e) { return this.bind(n, e) } })), Ct.touch ? Ct.mobileOS ? (Ct.mousedown = "touchstart", Ct.mouseup = "touchend", Ct.mousemove = "touchmove", Ct.mousecancel = "touchcancel", Ct.click = "touchend", Ct.resize = "orientationchange") : (Ct.mousedown = "mousedown touchstart", Ct.mouseup = "mouseup touchend", Ct.mousemove = "mousemove touchmove", Ct.mousecancel = "mouseleave touchcancel", Ct.click = "click", Ct.resize = "resize") : Ct.pointers ? (Ct.mousemove = "pointermove", Ct.mousedown = "pointerdown", Ct.mouseup = "pointerup", Ct.mousecancel = "pointercancel", Ct.click = "pointerup", Ct.resize = "orientationchange resize") : Ct.msPointers ? (Ct.mousemove = "MSPointerMove", Ct.mousedown = "MSPointerDown", Ct.mouseup = "MSPointerUp", Ct.mousecancel = "MSPointerCancel", Ct.click = "MSPointerUp", Ct.resize = "orientationchange resize") : (Ct.mousemove = "mousemove", Ct.mousedown = "mousedown", Ct.mouseup = "mouseup", Ct.mousecancel = "mouseleave", Ct.click = "click", Ct.resize = "resize"), K = function(e, t) { var n, i, r, o, a = t || "d", s = 1; for (i = 0, r = e.length; r > i; i++) o = e[i], "" !== o && (n = o.indexOf("["), 0 !== n && (-1 == n ? o = "." + o : (s++, o = "." + o.substring(0, n) + " || {})" + o.substring(n))), s++, a += o + (r - 1 > i ? " || {})" : ")")); return Array(s).join("(") + a }, X = /^([a-z]+:)?\/\//i, vt(mt, { ui: mt.ui || {}, fx: mt.fx || _, effects: mt.effects || W, mobile: mt.mobile || {}, data: mt.data || {}, dataviz: mt.dataviz || {}, 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: mt.support || Ct, animate: mt.animate || b, ns: "", attr: function(e) { return "data-" + mt.ns + e }, getShadows: a, wrap: s, deepExtend: l, getComputedStyles: p, isScrollable: f, size: g, toCamelCase: h, toHyphens: u, getOffset: mt.getOffset || m, parseEffects: mt.parseEffects || v, toggleClass: mt.toggleClass || y, directions: mt.directions || U, Observable: F, Class: i, Template: I, template: bt(I.compile, I), render: bt(I.render, I), stringify: bt(xt.stringify, xt), eventTarget: Q, htmlEncode: k, isLocalUrl: function(e) { return e && !X.test(e) }, expr: function(e, t, n) { return e = e || "", typeof t == It && (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 = K(e.split("."), n), e = e.replace(/_\$DOT\$_/g, ".")) : e = n + e, e }, getter: function(e, t) { var n = e + t; return Ht[n] = Ht[n] || Function("d", "return " + mt.expr(e, t)) }, setter: function(e) { return Bt[e] = Bt[e] || Function("d,value", mt.expr(e) + "=value") }, accessor: function(e) { return { get: mt.getter(e), set: mt.setter(e) } }, guid: function() { var e, t, n = ""; for (e = 0; 32 > e; e++) t = 16 * kt.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, "[" + mt.attr("role") + "=$1],").slice(0, -1) }, directiveSelector: function(e) { var t, n = e.split(" "); if (n) for (t = 0; n.length > t; 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) }, logToConsole: function(e) { var i = t.console; !mt.suppressLog && n !== i && i.log && i.log(e) } }), Z = F.extend({ init: function(e, t) { var n, i = this; i.element = mt.jQuery(e).handler(i), i.angular("init", t), F.fn.init.call(i), n = t ? t.dataSource : null, n && (t = vt({}, t, { dataSource: {} })), t = i.options = vt(!0, {}, i.options, t), n && (t.dataSource = n), i.element.attr(mt.attr("role")) || i.element.attr(mt.attr("role"), (t.name || "").toLowerCase()), i.element.data("kendo" + t.prefix + t.name, i), i.bind(i.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, r = n.events.length; r > i; i++) t = n.events[i], n.options[t] && e[t] && n.unbind(t, n.options[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 mt.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() {} }), J = Z.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 } }) } }) } }), mt.dimensions = function(e, t) { var n = e[0]; return t && e.css(t), { width: n.offsetWidth, height: n.offsetHeight } }, mt.notify = yt, et = /template$/i, tt = /^\s*(?:\{(?:.|\r\n|\n)*\}|\[(?:.|\r\n|\n)*\])\s*$/, nt = /^\{(\d+)(:[^\}]+)?\}|^\[[A-Za-z_]*\]$/, it = /([A-Z])/g, mt.initWidget = function(i, r, o) { var a, s, l, c, d, u, h, p, f, g, m, v, _; if (o ? o.roles && (o = o.roles) : o = mt.ui.roles, i = i.nodeType ? i : i[0], u = i.getAttribute("data-" + mt.ns + "role")) { f = -1 === u.indexOf("."), l = f ? o[u] : mt.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 = x(i, "dataSource"), r = e.extend({}, C(i, l.fn.options), r), p && (r.dataSource = typeof p === It ? mt.getter(p)(t) : p), c = 0, d = l.fn.events.length; d > c; c++) s = l.fn.events[c], h = x(i, s), h !== n && (r[s] = mt.getter(h)(t)); return a ? e.isEmptyObject(r) || a.setOptions(r) : a = new l(i, r), a } } }, mt.rolesFromNamespaces = function(e) { var t, n, i = []; for (e[0] || (e = [mt.ui, mt.dataviz.ui]), t = 0, n = e.length; n > t; t++) i[t] = e[t].roles; return vt.apply(null, [{}].concat(i.reverse())) }, mt.init = function(t) { var n = mt.rolesFromNamespaces(Lt.call(arguments, 1)); e(t).find("[data-" + mt.ns + "role]").addBack().each(function() { mt.initWidget(this, {}, n) }) }, mt.destroy = function(t) { e(t).find("[data-" + mt.ns + "role]").addBack().each(function() { var t, n = e(this).data(); for (t in n) 0 === t.indexOf("kendo") && typeof n[t].destroy === Et && n[t].destroy() }) }, mt.resize = function(t, n) { var i, r = e(t).find("[data-" + mt.ns + "role]").addBack().filter(T); r.length && (i = e.makeArray(r), i.sort(S), e.each(i, function() { var t = mt.widgetInstance(e(this)); t && t.resize(n) })) }, mt.parseOptions = C, vt(mt.ui, { Widget: Z, DataBoundWidget: J, roles: {}, progress: function(t, n) { var i, r, o, a, s = t.find(".k-loading-mask"), l = mt.support, c = l.browser; n ? s.length || (i = l.isRtl(t), r = i ? "right" : "left", a = t.scrollLeft(), o = c.webkit && i ? t[0].scrollWidth - t.width() - 2 * a : 0, s = e("
Loading...
").width("100%").height("100%").css("top", t.scrollTop()).css(r, Math.abs(a) + o).prependTo(t)) : s && s.remove() }, plugin: function(t, i, r) { var o, a = t.fn.options.name; i = i || mt.ui, r = r || "", i[a] = t, i.roles[a.toLowerCase()] = t, o = "getKendo" + r + a, a = "kendo" + r + a, e.fn[a] = function(i) { var r, o = this; return typeof i === It ? (r = Lt.call(arguments, 1), this.each(function() { var t, s, l = e.data(this, a); if (!l) throw Error(mt.format("Cannot call method '{0}' of {1} before it is initialized", i, a)); if (t = l[i], typeof t !== Et) throw Error(mt.format("Cannot find method '{0}' of {1}", i, a)); return s = t.apply(l, r), s !== n ? (o = s, !1) : n })) : this.each(function() { new t(this, i) }), o }, e.fn[a].widget = t, e.fn[o] = function() { return this.data(a) } } }), rt = { bind: function() { return this }, nullObject: !0, options: {} }, ot = Z.extend({ init: function(e, t) { Z.fn.init.call(this, e, t), this.element.autoApplyNS(), this.wrapper = this.element, this.element.addClass("km-widget") }, destroy: function() { Z.fn.destroy.call(this), this.element.kendoDestroy() }, options: { prefix: "Mobile" }, events: [], view: function() { var e = this.element.closest(mt.roleSelector("view splitview modalview drawer")); return mt.widgetInstance(e, mt.mobile.ui) || rt }, viewHasNativeScrolling: function() { var e = this.view(); return e && e.options.useNativeScrolling }, container: function() { var e = this.element.closest(mt.roleSelector("view layout modalview drawer splitview")); return mt.widgetInstance(e.eq(0), mt.mobile.ui) || rt } }), vt(mt.mobile, { init: function(e) { mt.init(e, mt.mobile.ui, mt.ui, mt.dataviz.ui) }, appLevelNativeScrolling: function() { return mt.mobile.application && mt.mobile.application.options && mt.mobile.application.options.useNativeScrolling }, roles: {}, ui: { Widget: ot, DataBoundWidget: J.extend(ot.prototype), roles: {}, plugin: function(e) { mt.ui.plugin(e, mt.mobile.ui, "Mobile") } } }), l(mt.dataviz, { init: function(e) { mt.init(e, mt.dataviz.ui) }, ui: { roles: {}, themes: {}, views: [], plugin: function(e) { mt.ui.plugin(e, mt.dataviz.ui) } }, roles: {} }), mt.touchScroller = function(t, n) { return e(t).map(function(t, i) { return i = e(i), Ct.kineticScrollNeeded && mt.mobile.ui.Scroller && !i.data("kendoMobileScroller") ? (i.kendoMobileScroller(n), i.data("kendoMobileScroller")) : !1 })[0] }, mt.preventDefault = function(e) { e.preventDefault() }, mt.widgetInstance = function(e, n) { var i, r, o, a, s = e.data(mt.ns + "role"), l = []; if (s) { if ("content" === s && (s = "scroller"), n) if (n[0]) for (i = 0, r = n.length; r > i; i++) l.push(n[i].roles[s]); else l.push(n.roles[s]); else l = [mt.ui.roles[s], mt.dataviz.ui.roles[s], mt.mobile.ui.roles[s]]; for (s.indexOf(".") >= 0 && (l = [mt.getter(s)(t)]), i = 0, r = l.length; r > i; i++) if (o = l[i], o && (a = e.data("kendo" + o.fn.options.prefix + o.fn.options.name))) return a } }, mt.onResize = function(n) { var i = n; return Ct.mobileOS.android && (i = function() { setTimeout(n, 600) }), e(t).on(Ct.resize, i), i }, mt.unbindResize = function(n) { e(t).off(Ct.resize, n) }, mt.attrValue = function(e, t) { return e.data(mt.ns + t) }, mt.days = { Sunday: 0, Monday: 1, Tuesday: 2, Wednesday: 3, Thursday: 4, Friday: 5, Saturday: 6 }, e.extend(e.expr[":"], { kendoFocusable: function(t) { var n = e.attr(t, "tabindex"); return D(t, !isNaN(n) && n > -1) } }), at = ["mousedown", "mousemove", "mouseenter", "mouseleave", "mouseover", "mouseout", "mouseup", "click"], st = "label, input, [data-rel=external]", lt = { setupMouseMute: function() { var t, n = 0, i = at.length, r = document.documentElement; if (!lt.mouseTrap && Ct.eventCapture) for (lt.mouseTrap = !0, lt.bustClick = !1, lt.captureMouse = !1, t = function(t) { lt.captureMouse && ("click" === t.type ? lt.bustClick && !e(t.target).is(st) && (t.preventDefault(), t.stopPropagation()) : t.stopPropagation()) }; i > n; n++) r.addEventListener(at[n], t, !0) }, muteMouse: function(e) { lt.captureMouse = !0, e.data.bustClick && (lt.bustClick = !0), clearTimeout(lt.mouseTrapTimeoutID) }, unMuteMouse: function() { clearTimeout(lt.mouseTrapTimeoutID), lt.mouseTrapTimeoutID = setTimeout(function() { lt.captureMouse = !1, lt.bustClick = !1 }, 400) } }, ct = { down: "touchstart mousedown", move: "mousemove touchmove", up: "mouseup touchend touchcancel", cancel: "mouseleave touchcancel" }, Ct.touch && (Ct.mobileOS.ios || Ct.mobileOS.android) ? ct = { down: "touchstart", move: "touchmove", up: "touchend touchcancel", cancel: "touchcancel" } : Ct.pointers ? ct = { down: "pointerdown", move: "pointermove", up: "pointerup", cancel: "pointercancel pointerleave" } : Ct.msPointers && (ct = { down: "MSPointerDown", move: "MSPointerMove", up: "MSPointerUp", cancel: "MSPointerCancel MSPointerLeave" }), !Ct.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, r = this, o = t.relatedTarget, a = t.handleObj; return (!o || o !== r && !e.contains(r, o)) && (t.type = a.origType, i = a.handler.apply(this, arguments), t.type = n), i } } }), dt = function(e) { return ct[e] || e }, ut = /([^ ]+)/g, mt.applyEventMap = function(e, t) { return e = e.replace(ut, dt), t && (e = e.replace(ut, "$1." + t)), e }, ht = e.fn.on, vt(!0, E, e), E.fn = E.prototype = new e, E.fn.constructor = E, E.fn.init = function(t, n) { return n && n instanceof e && !(n instanceof E) && (n = E(n)), e.fn.init.call(this, t, n, pt) }, E.fn.init.prototype = E.fn, pt = E(document), vt(E.fn, { handler: function(e) { return this.data("handler", e), this }, autoApplyNS: function(e) { return this.data("kendoNS", e || mt.guid()), this }, on: function() { var e, t, n, i, r, o, a = this, s = a.data("kendoNS"); return 1 === arguments.length ? ht.call(a, arguments[0]) : (e = a, t = Lt.call(arguments), typeof t[t.length - 1] === Rt && t.pop(), n = t[t.length - 1], i = mt.applyEventMap(t[0], s), Ct.mouseAndTouchPresent && i.search(/mouse|click/) > -1 && this[0] !== document.documentElement && (lt.setupMouseMute(), r = 2 === t.length ? null : t[1], o = i.indexOf("click") > -1 && i.indexOf("touchend") > -1, ht.call(this, { touchstart: lt.muteMouse, touchend: lt.unMuteMouse }, r, { bustClick: o })), typeof n === It && (e = a.data("handler"), n = e[n], t[t.length - 1] = function(t) { n.call(e, t) }), t[0] = i, ht.apply(a, t), a) }, kendoDestroy: function(e) { return e = e || this.data("kendoNS"), e && this.off("." + e), this } }), mt.jQuery = E, mt.eventMap = ct, mt.timezone = function() { function e(e, t) { var n, i, r, o = 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, d[o] + 1, 1, s[0] - 24, s[1], s[2], 0)), i = u[a.substr(4, 3)], r = n.getUTCDay(), n.setUTCDate(n.getUTCDate() + i - r - (i > r ? 7 : 0))) : a.indexOf(">=") >= 0 && (n = new Date(Date.UTC(e, d[o], a.substr(5), s[0], s[1], s[2], 0)), i = u[a.substr(0, 3)], r = n.getUTCDay(), n.setUTCDate(n.getUTCDate() + i - r + (r > i ? 7 : 0))) : n = new Date(Date.UTC(e, d[o], a, s[0], s[1], s[2], 0)), l[e] = n) } function t(t, n, i) { var r, o, 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 a >= t && (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) : (r = i.split(":"), o = 0, r.length > 1 && (o = 60 * r[0] + +r[1]), [-1e6, "max", "-", "Jan", 1, [0, 0, 0], o, "-"]) } function n(e, t, n) { var i, r, o, 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 && (r = a[i][3], !(r && e > r)); i--); if (o = a[i + 1], !o) throw Error('Timezone "' + n + '" not found on ' + e + "."); return o } function i(e, i, r, o) { typeof e != Pt && (e = Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds())); var a = n(e, i, o); return { zone: a, rule: t(e, r, a[1]) } } function r(e, t) { var n, r, o; return "Etc/UTC" == t || "Etc/GMT" == t ? 0 : (n = i(e, this.zones, this.rules, t), r = n.zone, o = n.rule, mt.parseFloat(o ? r[0] - o[6] : r[0])) } function o(e, t) { var n = i(e, this.zones, this.rules, t), r = n.zone, o = n.rule, a = r[2]; return a.indexOf("/") >= 0 ? a.split("/")[o && +o[6] ? 1 : 0] : a.indexOf("%s") >= 0 ? a.replace("%s", o && "-" != o[7] ? o[7] : "") : a } function a(e, t, n) { var i, r; return typeof t == It && (t = this.offset(e, t)), typeof n == It && (n = this.offset(e, n)), i = e.getTimezoneOffset(), e = new Date(e.getTime() + 6e4 * (t - n)), r = e.getTimezoneOffset(), new Date(e.getTime() + 6e4 * (r - i)) } function s(e, t) { return this.convert(e, e.getTimezoneOffset(), t) } function l(e, t) { return this.convert(e, t, e.getTimezoneOffset()) } function c(e) { return this.apply(new Date(e), "Etc/UTC") } var d = { 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: r, convert: a, apply: s, remove: l, abbr: o, toLocalDate: c } }(), mt.date = function() { function e(e, t) { return 0 === t && 23 === e.getHours() ? (e.setHours(e.getHours() + 2), !0) : !1 } function t(t, n, i) { var r = t.getHours(); i = i || 1, n = (n - t.getDay() + 7 * i) % 7, t.setDate(t.getDate() + n), e(t, r) } function n(e, n, i) { return e = new Date(e), t(e, n, i), e } function i(e) { return new Date(e.getFullYear(), e.getMonth(), 1) } function r(e) { var t = new Date(e.getFullYear(), e.getMonth() + 1, 0), n = i(e), r = Math.abs(t.getTimezoneOffset() - n.getTimezoneOffset()); return r && t.setHours(n.getHours() + r / 60), t } function o(t) { return t = new Date(t.getFullYear(), t.getMonth(), t.getDate(), 0, 0, 0), e(t, 0), t } function a(e) { return Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()) } function s(e) { return e.getTime() - o(e) } function l(e, t, n) { var i, r = s(t), o = s(n); return e && r != o ? (t >= n && (n += m), i = s(e), r > i && (i += m), r > o && (o += m), i >= r && o >= i) : !0 } function c(e, t, n) { var i, r = t.getTime(), o = n.getTime(); return r >= o && (o += m), i = e.getTime(), i >= r && o >= i } function d(t, n) { var i = t.getHours(); return t = new Date(t), u(t, n * m), e(t, i), t } function u(e, t, n) { var i, r = e.getTimezoneOffset(); e.setTime(e.getTime() + t), n || (i = e.getTimezoneOffset() - r, e.setTime(e.getTime() + i * g)) } function h() { return o(new Date) } function p(e) { return o(e).getTime() == h().getTime() } function f(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 g = 6e4, m = 864e5; return { adjustDST: e, dayOfWeek: n, setDayOfWeek: t, getDate: o, isInDateRange: c, isInTimeRange: l, isToday: p, nextDay: function(e) { return d(e, 1) }, previousDay: function(e) { return d(e, -1) }, toUtcTime: a, MS_PER_DAY: m, MS_PER_HOUR: 60 * g, MS_PER_MINUTE: g, setTime: u, addDays: d, today: h, toInvariantTime: f, firstDayOfMonth: i, lastDayOfMonth: r, getMilliseconds: s } }(), mt.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; e.childNodes.length > n; n++) i = e.childNodes[n], 3 != i.nodeType || /\S/.test(i.nodeValue) || (e.removeChild(i), n--), 1 == i.nodeType && mt.stripWhitespace(i) }, ft = t.requestAnimationFrame || t.webkitRequestAnimationFrame || t.mozRequestAnimationFrame || t.oRequestAnimationFrame || t.msRequestAnimationFrame || function(e) { setTimeout(e, 1e3 / 60) }, mt.animationFrame = function(e) { ft.call(t, e) }, gt = [], mt.queueAnimation = function(e) { gt[gt.length] = e, 1 === gt.length && mt.runNextAnimation() }, mt.runNextAnimation = function() { mt.animationFrame(function() { gt[0] && (gt.shift()(), gt[0] && mt.runNextAnimation()) }) }, mt.parseQueryStringParams = function(e) { for (var t = e.split("?")[1] || "", n = {}, i = t.split(/&|=/), r = i.length, o = 0; r > o; o += 2) "" !== i[o] && (n[decodeURIComponent(i[o])] = decodeURIComponent(i[o + 1])); return n }, mt.elementUnderCursor = function(e) { return n !== e.x.client ? document.elementFromPoint(e.x.client, e.y.client) : n }, mt.wheelDeltaY = function(e) { var t, i = e.originalEvent, r = i.wheelDeltaY; return i.wheelDelta ? (r === n || r) && (t = i.wheelDelta) : i.detail && i.axis === i.VERTICAL_AXIS && (t = 10 * -i.detail), t }, mt.throttle = function(e, t) { var i, r, o = 0; return !t || 0 >= t ? e : (r = function() { function r() { e.apply(a, l), o = +new Date } var a = this, s = +new Date - o, l = arguments; return o ? (i && clearTimeout(i), s > t ? r() : i = setTimeout(r, t - s), n) : r() }, r.cancel = function() { clearTimeout(i) }, r) }, mt.caret = function(t, i, r) { var o, a, s, l, c = i !== n; if (r === n && (r = i), t[0] && (t = t[0]), !c || !t.disabled) { try { t.selectionStart !== n ? c ? (t.focus(), t.setSelectionRange(i, r)) : i = [t.selectionStart, t.selectionEnd] : document.selection && (e(t).is(":visible") && t.focus(), o = t.createTextRange(), c ? (o.collapse(!0), o.moveStart("character", i), o.moveEnd("character", r - i), o.select()) : (a = o.duplicate(), o.moveToBookmark(document.selection.createRange().getBookmark()), a.setEndPoint("EndToStart", o), s = a.text.length, l = s + o.text.length, i = [s, l])) } catch (d) { i = [] } return i } }, mt.compileMobileDirective = function(e, n) { var i = t.angular; return e.attr("data-" + mt.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() } ]), mt.widgetInstance(e, mt.mobile.ui) }, mt.antiForgeryTokens = function() { var t = {}, i = e("meta[name=csrf-token],meta[name=_csrf]").attr("content"), r = e("meta[name=csrf-param],meta[name=_csrf_header]").attr("content"); return e("input[name^='__RequestVerificationToken']").each(function() { t[this.name] = this.value }), r !== n && i !== n && (t[r] = i), t }, mt.cycleForm = function(e) { function t(e) { var t = mt.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 != mt.keys.TAB || e.shiftKey || (e.preventDefault(), t(n)) }), n.on("keydown", function(e) { e.keyCode == mt.keys.TAB && e.shiftKey && (e.preventDefault(), t(i)) }) }, function() { function n(t, n, i, r) { var o, a, s = e("
").attr({ action: i, method: "POST", target: r }), l = mt.antiForgeryTokens(); l.fileName = n, o = t.split(";base64,"), l.contentType = o[0].replace("data:", ""), l.base64 = o[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, r, o, a, s = e; if ("string" == typeof e) { for (n = e.split(";base64,"), i = n[0], r = atob(n[1]), o = new Uint8Array(r.length), a = 0; r.length > a; a++) o[a] = r.charCodeAt(a); s = new Blob([o.buffer], { type: i }) } navigator.msSaveBlob(s, t) } function r(e, n) { t.Blob && e instanceof Blob && (e = URL.createObjectURL(e)), o.download = n, o.href = e; var i = document.createEvent("MouseEvents"); i.initMouseEvent("click", !0, !1, t, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), o.dispatchEvent(i) } var o = document.createElement("a"), a = "download" in o; mt.saveAs = function(e) { var t = n; e.forceProxy || (a ? t = r : navigator.msSaveBlob && (t = i)), t(e.dataURI, e.fileName, e.proxyURL, e.proxyTarget) } }() }(jQuery, window), 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 r(e) { var t = p.href; return "#!" === e && t.indexOf("#") > -1 && t.indexOf("#!") < 0 ? null : t.split(e)[1] || "" } function o(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, c = "change", d = "back", u = "same", h = l.support, p = window.location, f = window.history, g = 50, m = l.support.browser.msie, v = /^#*/, _ = window.document, w = 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) } }), b = w.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 o(this.root, e) }, current: function() { var e = p.pathname; return p.search && (e += p.search), o(this.root, e) }, change: function(t) { e(window).bind("popstate.kendo", t) }, stop: function() { e(window).unbind("popstate.kendo") }, normalizeCurrent: function(e) { var t, o = e.root, a = p.pathname, s = r(i(e.hashBang)); o === a + "/" && (t = o), o === a && s && (t = n(s.replace(v, ""), o)), t && f.pushState({}, _.title, t) } }), y = w.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 r(this.prefix) }, normalizeCurrent: function(e) { var t = p.pathname, n = e.root; return e.pushState && n !== t ? (this.replaceLocation(n + this.prefix + o(n, t)), !0) : !1 } }), k = l.Observable.extend({ start: function(t) { if (t = t || {}, this.bind([c, d, 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 b(e.root) : new y(e.hashBang) }, stop: function() { this._started && (this.adapter.stop(), this.unbind(c), this._started = !1) }, change: function(e) { this.bind(c, 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 r = this.adapter; return e = r.normalize(e), this.current === e || this.current === decodeURIComponent(e) ? (this.trigger(u), t) : ((n || !this.trigger(c, { url: e })) && (this.current = e, i.call(this, r), this.historyLength = r.length()), t) }, _checkUrl: function() { var e = this.adapter, n = e.current(), i = e.length(), r = this.historyLength === i, o = n === this.locations[this.locations.length - 2] && r, a = this.backCalled, s = this.current; return null === n || this.current === n || this.current === decodeURIComponent(n) ? !0 : (this.historyLength = i, this.backCalled = !1, this.current = n, o && this.trigger("back", { url: s, to: n }) ? (e.forward(), this.current = s, t) : this.trigger(c, { url: n, backButtonPressed: !a }) ? (o ? e.forward() : (e.back(), this.historyLength--), this.current = s, t) : (o ? this.locations.pop() : this.locations.push(n), t)) } }); l.History = k, l.History.HistoryAdapter = w, l.History.HashAdapter = y, l.History.PushStateAdapter = b, l.absoluteURL = n, l.history = new k }(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, r = i.history, o = i.Observable, a = "init", s = "routeMissing", l = "change", c = "back", d = "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) { var t, r, o = 0, a = i.parseQueryStringParams(e); for (e = n(e), t = this.route.exec(e).slice(1), r = t.length; r > o; o++) void 0 !== t[o] && (t[o] = decodeURIComponent(t[o])); t.push(a), this._callback.apply(null, t) }, worksWith: function(e) { return this.route.test(n(e)) ? (this.callback(e), !0) : !1 } }), m = o.extend({ init: function(e) { e || (e = {}), o.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, d], e) }, destroy: function() { r.unbind(l, this._urlChangedProxy), r.unbind(d, this._sameProxy), r.unbind(c, this._backProxy), this.unbind() }, start: function() { var e, t = this, n = function() { t._same() }, i = function(e) { t._back(e) }, o = function(e) { t._urlChanged(e) }; r.start({ same: n, change: o, back: i, pushState: t.pushState, hashBang: t.hashBang, root: t.root }), e = { url: r.current || "/", preventDefault: $.noop }, t.trigger(a, e) || t._urlChanged(e), this._urlChangedProxy = o, 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(c, { url: e.url, to: e.to }) && e.preventDefault() }, _same: function() { this.trigger(d) }, _urlChanged: function(e) { var t, n, r, o, a = e.url; if (a || (a = "/"), this.trigger(l, { url: e.url, params: i.parseQueryStringParams(e.url), backButtonPressed: e.backButtonPressed })) return void e.preventDefault(); for (t = 0, n = this.routes, o = n.length; o > t; t++) if (r = n[t], r.worksWith(a)) return; this.trigger(s, { url: a, params: i.parseQueryStringParams(a), backButtonPressed: e.backButtonPressed }) && e.preventDefault() } }); i.Router = m }(), function(e, t) { function n(i, o) { var l, c, d, u, h, p, f, g, m = [], v = i.logic || "and", _ = i.filters; for (l = 0, c = _.length; c > l; l++) i = _[l], d = i.field, f = i.value, p = i.operator, i.filters ? i = n(i, o) : (g = i.ignoreCase, d = d.replace(/\./g, "/"), i = a[p], o && (i = s[p]), i && f !== t && (u = e.type(f), "string" === u ? (h = "'{1}'", f = f.replace(/'/g, "''"), g === !0 && (d = "tolower(" + d + ")")) : h = "date" === u ? o ? "{1:yyyy-MM-ddTHH:mm:ss+00:00}" : "datetime'{1:yyyy-MM-ddTHH:mm:ss}'" : "{1}", i.length > 3 ? "substringof" !== i ? h = "{0}({2}," + h + ")" : (h = "{0}(" + h + ",{2})", "doesnotcontain" === p && (o ? (h = "{0}({2},'{1}') eq -1", i = "indexof") : h += " eq false")) : h = "{2} {0} " + h, i = r.format(h, i, f, d))), m.push(i); return i = m.join(" " + v + " "), m.length > 1 && (i = "(" + i + ")"), i } function i(e) { for (var t in e) 0 === t.indexOf("@odata") && delete e[t] } var r = window.kendo, o = e.extend, a = { eq: "eq", neq: "ne", gt: "gt", gte: "ge", lt: "lt", lte: "le", contains: "substringof", doesnotcontain: "substringof", endswith: "endswith", startswith: "startswith" }, s = o({}, a, { contains: "contains" }), l = { 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) } }, c = { read: { dataType: "jsonp" } }; o(!0, r.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, a, s; if (e = e || {}, t = t || "read", s = (this.options || c)[t], s = s ? s.dataType : "json", "read" === t) { i = { $inlinecount: "allpages" }, "json" != s && (i.$format = "json"); for (a in e) l[a] ? l[a](i, e[a], n) : i[a] = e[a] } else { if ("json" !== s) throw Error("Only json dataType can be used for " + t + " operation."); if ("destroy" !== t) { for (a in e) o = e[a], "number" == typeof o && (e[a] = o + ""); i = r.stringify(e) } } return i } } } }), o(!0, r.data, { schemas: { "odata-v4": { type: "json", data: function(t) { return t = e.extend({}, t), i(t), t.value ? t.value : [t] }, total: function(e) { return e["@odata.count"] } } }, transports: { "odata-v4": { 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 = r.data.transports.odata.parameterMap(e, t, !0); return "read" == t && (n.$count = !0, delete n.$inlinecount), n } } } }) }(window.kendo.jQuery), function(e, t) { var n = window.kendo, i = e.isArray, r = e.isPlainObject, o = e.map, a = e.each, s = e.extend, l = n.getter, c = n.Class, d = c.extend({ init: function(t) { var l, c, d, u, h = this, p = t.total, f = t.model, g = t.parse, m = t.errors, v = t.serialize, _ = t.data; f && (r(f) && (l = t.modelBase || n.data.Model, f.fields && a(f.fields, function(t, n) { r(n) && n.field ? e.isFunction(n.field) || (n = s(n, { field: h.getter(n.field) })) : n = { field: h.getter(n) }, f.fields[t] = n }), c = f.id, c && (d = {}, d[h.xpathToMember(c, !0)] = { field: h.getter(c) }, f.fields = s(d, f.fields), f.id = h.xpathToMember(c)), 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, o(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, r, o, a, s, l, c, d = {}, u = e.attributes, h = u.length; for (c = 0; h > c; c++) l = u[c], d["@" + l.nodeName] = l.nodeValue; for (r = e.firstChild; r; r = r.nextSibling) o = r.nodeType, 3 === o || 4 === o ? d["#text"] = r.nodeValue : 1 === o && (n = this.parseDOM(r), a = r.nodeName, s = d[a], i(s) ? s.push(n) : s = s !== t ? [s, n] : n, d[a] = s); return d }, evaluate: function(e, t) { for (var n, r, o, a, s, l = t.split("."); n = l.shift();) if (e = e[n], i(e)) { for (r = [], t = l.join("."), s = 0, o = e.length; o > s; s++) a = this.evaluate(e[s], t), a = i(a) ? a : [a], r.push.apply(r, a); return r } return e }, parse: function(t) { var n, i, r = {}; return n = t.documentElement || e.parseXML(t).documentElement, i = this.parseDOM(n), r[n.nodeName] = i, r }, 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: d, readers: { xml: d } }) }(window.kendo.jQuery), function(e, t) { function n(e, t, n, i) { return function(r) { var o, a = {}; for (o in r) a[o] = r[o]; a.field = i ? n + "." + r.field : n, t == wt && e._notifyChange && e._notifyChange(a), e.trigger(t, a) } } function i(t, n) { if (t === n) return !0; var r, o = e.type(t), a = e.type(n); if (o !== a) return !1; if ("date" === o) return t.getTime() === n.getTime(); if ("object" !== o && "array" !== o) return !1; for (r in t) if (!i(t[r], n[r])) return !1; return !0 } function r(e, t) { var n, i; for (i in e) { if (n = e[i], nt(n) && n.field && n.field === t) return n; if (n === t) return n } return null } function o(e) { this.data = e || [] } function a(e, n) { if (e) { var i = typeof e === pt ? { field: e, dir: n } : e, r = rt(i) ? i : i !== t ? [i] : []; return ot(r, function(e) { return !!e.dir }) } } function s(e) { var t, n, i, r, o = e.filters; if (o) for (t = 0, n = o.length; n > t; t++) i = o[t], r = i.operator, r && typeof r === pt && (i.operator = U[r.toLowerCase()] || r), s(i) } function l(e) { return e && !it(e) ? ((rt(e) || !e.filters) && (e = { logic: "and", filters: rt(e) ? e : [e] }), s(e), e) : t } function c(e) { return rt(e) ? e : [e] } function d(e, n) { var i = typeof e === pt ? { field: e, dir: n } : e, r = rt(i) ? i : i !== t ? [i] : []; return L(r, function(e) { return { field: e.field, dir: e.dir || "asc", aggregates: e.aggregates } }) } function u(e, t) { return e && e.getTime && t && t.getTime ? e.getTime() === t.getTime() : e === t } function h(e, t, n, i, r, o) { var a, s, l, c, d; for (t = t || [], c = t.length, a = 0; c > a; a++) s = t[a], l = s.aggregate, d = s.field, e[d] = e[d] || {}, o[d] = o[d] || {}, o[d][l] = o[d][l] || {}, e[d][l] = W[l.toLowerCase()](e[d][l], n, ct.accessor(d), i, r, o[d][l]) } function p(e) { return "number" == typeof e && !isNaN(e) } function f(e) { return e && e.getTime } function g(e) { var t, n = e.length, i = Array(n); for (t = 0; n > t; t++) i[t] = e[t].toJSON(); return i } function m(e, t, n, i, r) { var o, a, s, l, c; for (l = 0, c = e.length; c > l; l++) { o = e[l]; for (a in t) s = r[a], s && s !== a && (o[s] = t[a](o), delete o[a]) } } function v(e, t, n, i, r) { var o, a, s, l, c; for (l = 0, c = e.length; c > l; l++) { o = e[l]; for (a in t) o[a] = n._parse(a, t[a](o)), s = r[a], s && s !== a && delete o[s] } } function _(e, t, n, i, r) { var o, a, s, l; for (a = 0, l = e.length; l > a; a++) o = e[a], s = i[o.field], s && s != o.field && (o.field = s), o.value = n._parse(o.field, o.value), o.hasSubgroups ? _(o.items, t, n, i, r) : v(o.items, t, n, i, r) } function w(e, t, n, i, r, o) { return function(a) { return a = e(a), a && !it(i) && ("[object Array]" === Lt.call(a) || a instanceof Wt || (a = [a]), n(a, i, new t, r, o)), a || [] } } function b(e, t, n, i) { for (var r, o, a, s = 0; t.length && i && (r = t[s], o = r.items, a = o.length, e && e.field === r.field && e.value === r.value ? (e.hasSubgroups && e.items.length ? b(e.items[e.items.length - 1], r.items, n, i) : (o = o.slice(n, n + i), e.items = e.items.concat(o)), t.splice(s--, 1)) : r.hasSubgroups && o.length ? (b(r, o, n, i), r.items.length || t.splice(s--, 1)) : (o = o.slice(n, n + i), r.items = o, r.items.length || t.splice(s--, 1)), 0 === o.length ? n -= a : (n = 0, i -= o.length), !(++s >= t.length));); t.length > s && t.splice(s, t.length - s) } function y(e) { var t, n, i, r, o, a = []; for (t = 0, n = e.length; n > t; t++) if (o = e.at(t), o.hasSubgroups) a = a.concat(y(o.items)); else for (i = o.items, r = 0; i.length > r; r++) a.push(i.at(r)); return a } function k(e, t) { var n, i, r; if (t) for (n = 0, i = e.length; i > n; n++) r = e.at(n), r.hasSubgroups ? k(r.items, t) : r.items = new jt(r.items, t) } function x(e, t) { for (var n = 0, i = e.length; i > n; n++) if (e[n].hasSubgroups) { if (x(e[n].items, t)) return !0 } else if (t(e[n].items, e[n])) return !0 } function C(e, t, n, i) { for (var r = 0; e.length > r && e[r].data !== t && !S(e[r].data, n, i); r++); } function S(e, t, n) { for (var i = 0, r = e.length; r > i; i++) { if (e[i] && e[i].hasSubgroups) return S(e[i].items, t, n); if (e[i] === t || e[i] === n) return e[i] = n, !0 } } function T(e, n, i, r, o) { var a, s, l, c; for (a = 0, s = e.length; s > a; a++) if (l = e[a], l && !(l instanceof r)) if (l.hasSubgroups === t || o) { for (c = 0; n.length > c; c++) if (n[c] === l) { e[a] = n.at(c), C(i, n, l, e[a]); break } } else T(l.items, n, i, r, o) } function D(e, t) { var n, i, r; for (n = 0, i = e.length; i > n; n++) if (r = e.at(n), r.uid == t.uid) return e.splice(n, 1), r } function A(e, t) { return t ? I(e, function(e) { return e.uid && e.uid == t.uid || e[t.idField] === t.id && t.id !== t._defaultId }) : -1 } function E(e, t) { return t ? I(e, function(e) { return e.uid == t.uid }) : -1 } function I(e, t) { var n, i; for (n = 0, i = e.length; i > n; n++) if (t(e[n])) return n; return -1 } function P(e, t) { var n, i; return e && !it(e) ? (n = e[t], i = nt(n) ? n.from || n.field || t : e[t] || t, dt(i) ? t : i) : t } function M(e, t) { var n, i, r, o = {}; for (r in e) "filters" !== r && (o[r] = e[r]); if (e.filters) for (o.filters = [], n = 0, i = e.filters.length; i > n; n++) o.filters[n] = M(e.filters[n], t); else o.field = P(t.fields, o.field); return o } function z(e, t) { var n, i, r, o, a, s = []; for (n = 0, i = e.length; i > n; n++) { r = {}, o = e[n]; for (a in o) r[a] = o[a]; r.field = P(t.fields, r.field), r.aggregates && rt(r.aggregates) && (r.aggregates = z(r.aggregates, t)), s.push(r) } return s } function F(t, n) { var i, r, o, a, s, l, c, d, u, h; for (t = e(t)[0], i = t.options, r = n[0], o = n[1], a = [], s = 0, l = i.length; l > s; s++) u = {}, d = i[s], c = d.parentNode, c === t && (c = null), d.disabled || c && c.disabled || (c && (u.optgroup = c.label), u[r.field] = d.text, h = d.attributes.value, h = h && h.specified ? d.value : d.text, u[o.field] = h, a.push(u)); return a } function R(t, n) { var i, r, o, a, s, l, c, d = e(t)[0].tBodies[0], u = d ? d.rows : [], h = n.length, p = []; for (i = 0, r = u.length; r > i; i++) { for (s = {}, c = !0, a = u[i].cells, o = 0; h > o; o++) l = a[o], "th" !== l.nodeName.toLowerCase() && (c = !1, s[n[o].field] = l.innerHTML); c || p.push(s) } return p } function H(e) { return function() { var t = this._data, n = Y.fn[e].apply(this, Ht.call(arguments)); return this._data != t && this._attachBubbleHandlers(), n } } function B(t, n) { function i(e, t) { return e.filter(t).add(e.find(t)) } var r, o, a, s, l, c, d, 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 (r = 0, o = h.length; o > r; r++) a = { _loaded: !0 }, s = h.eq(r), c = s[0].firstChild, u = s.children(), t = u.filter("ul"), u = u.filter(":not(ul)"), l = s.attr("data-id"), l && (a.id = l), c && (a[f] = 3 == c.nodeType ? c.nodeValue : u.text()), g && (a[g] = i(u, "a").attr("href")), v && (a[v] = i(u, "img").attr("src")), m && (d = i(u, ".k-sprite").prop("className"), a[m] = d && e.trim(d.replace("k-sprite", ""))), t.length && (a.items = B(t.eq(0), n)), "true" == s.attr("data-hasChildren") && (a.hasChildren = !0), p.push(a); return p } var L, N, O, V, U, W, j, G, q, $, Y, Q, K, X, Z, J, et = e.extend, tt = e.proxy, nt = e.isPlainObject, it = e.isEmptyObject, rt = e.isArray, ot = e.grep, at = e.ajax, st = e.each, lt = e.noop, ct = window.kendo, dt = ct.isFunction, ut = ct.Observable, ht = ct.Class, pt = "string", ft = "function", gt = "create", mt = "read", vt = "update", _t = "destroy", wt = "change", bt = "sync", yt = "get", kt = "error", xt = "requestStart", Ct = "progress", St = "requestEnd", Tt = [gt, mt, vt, _t], Dt = function(e) { return e }, At = ct.getter, Et = ct.stringify, It = Math, Pt = [].push, Mt = [].join, zt = [].pop, Ft = [].splice, Rt = [].shift, Ht = [].slice, Bt = [].unshift, Lt = {}.toString, Nt = ct.support.stableSort, Ot = /^\/Date\((.*?)\)\/$/, Vt = /(\r+|\n+)/g, Ut = /(?=['\\])/g, Wt = ut.extend({ init: function(e, t) { var n = this; n.type = t || Gt, ut.fn.init.call(n), n.length = e.length, n.wrapAll(e, n) }, at: function(e) { return this[e] }, toJSON: function() { var e, t, n = this.length, i = Array(n); for (e = 0; n > e; e++) t = this[e], t instanceof Gt && (t = t.toJSON()), i[e] = t; return i }, parent: lt, wrapAll: function(e, t) { var n, i, r = this, o = function() { return r }; for (t = t || [], n = 0, i = e.length; i > n; n++) t[n] = r.wrap(e[n], o); return t }, wrap: function(e, t) { var n, i = this; return null !== e && "[object Object]" === Lt.call(e) && (n = e instanceof i.type || e instanceof Yt, n || (e = e instanceof Gt ? e.toJSON() : e, e = new i.type(e)), e.parent = t, e.bind(wt, function(e) { i.trigger(wt, { 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 = Pt.apply(this, n), this.trigger(wt, { action: "add", index: t, items: n }), e }, slice: Ht, sort: [].sort, join: Mt, pop: function() { var e = this.length, t = zt.apply(this); return e && this.trigger(wt, { action: "remove", index: e - 1, items: [t] }), t }, splice: function(e, t, n) { var i, r, o, a = this.wrapAll(Ht.call(arguments, 2)); if (i = Ft.apply(this, [e, t].concat(a)), i.length) for (this.trigger(wt, { action: "remove", index: e, items: i }), r = 0, o = i.length; o > r; r++) i[r] && i[r].children && i[r].unbind(wt); return n && this.trigger(wt, { action: "add", index: e, items: a }), i }, shift: function() { var e = this.length, t = Rt.apply(this); return e && this.trigger(wt, { action: "remove", index: 0, items: [t] }), t }, unshift: function() { var e, t = this.wrapAll(arguments); return e = Bt.apply(this, t), this.trigger(wt, { action: "add", index: 0, items: t }), e }, indexOf: function(e) { var t, n, i = this; for (t = 0, n = i.length; n > t; t++) if (i[t] === e) return t; return -1 }, forEach: function(e) { for (var t = 0, n = this.length; n > t; t++) e(this[t], t, this) }, map: function(e) { for (var t = 0, n = [], i = this.length; i > t; t++) n[t] = e(this[t], t, this); return n }, reduce: function(e) { var t, n = 0, i = this.length; for (2 == arguments.length ? t = arguments[1] : i > n && (t = this[n++]); i > n; 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) { for (var t, n = 0, i = [], r = this.length; r > n; n++) t = this[n], e(t, n, this) && (i[i.length] = t); return i }, find: function(e) { for (var t, n = 0, i = this.length; i > n; n++) if (t = this[n], e(t, n, this)) return t }, every: function(e) { for (var t, n = 0, i = this.length; i > n; n++) if (t = this[n], !e(t, n, this)) return !1; return !0 }, some: function(e) { for (var t, n = 0, i = this.length; i > n; n++) if (t = this[n], e(t, n, this)) return !0; return !1 }, remove: function(e) { var t = this.indexOf(e); - 1 !== t && this.splice(t, 1) }, empty: function() { this.splice(0, this.length) } }), jt = Wt.extend({ init: function(e, t) { ut.fn.init.call(this), this.type = t || Gt; for (var n = 0; e.length > n; n++) this[n] = e[n]; this.length = n, this._parent = tt(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 } }), Gt = ut.extend({ init: function(e) { var t, n, i = this, r = function() { return i }; ut.fn.init.call(this); for (n in e) t = e[n], "object" == typeof t && t && !t.getTime && "_" != n.charAt(0) && (t = i.wrap(t, n, r)), i[n] = t; i.uid = ct.guid() }, shouldSerialize: function(e) { return this.hasOwnProperty(e) && "_events" !== e && typeof this[e] !== ft && "uid" !== e }, forEach: function(e) { for (var t in this) this.shouldSerialize(t) && e(this[t], t) }, toJSON: function() { var e, t, n = {}; for (t in this) this.shouldSerialize(t) && (e = this[t], (e instanceof Gt || e instanceof Wt) && (e = e.toJSON()), n[t] = e); return n }, get: function(e) { var t, n = this; return n.trigger(yt, { field: e }), t = "this" === e ? n : ct.getter(e, !0)(n) }, _set: function(e, t) { var n, i, r, o = this, a = e.indexOf(".") >= 0; if (a) for (n = e.split("."), i = ""; n.length > 1;) { if (i += n.shift(), r = ct.getter(i, !0)(o), r instanceof Gt) return r.set(n.join("."), t), a; i += "." } return ct.setter(e)(o, t), a }, set: function(e, t) { var n = this, i = e.indexOf(".") >= 0, r = ct.getter(e, !0)(n); r !== t && (n.trigger("set", { field: e, value: t }) || (i || (t = n.wrap(t, e, function() { return n })), (!n._set(e, t) || e.indexOf("(") >= 0 || e.indexOf("[") >= 0) && n.trigger(wt, { field: e }))) }, parent: lt, wrap: function(e, t, i) { var r, o, a = this, s = Lt.call(e); return null == e || "[object Object]" !== s && "[object Array]" !== s || (r = e instanceof Wt, o = e instanceof Y, "[object Object]" !== s || o || r ? ("[object Array]" === s || r || o) && (r || o || (e = new Wt(e)), e.parent() != i() && e.bind(wt, n(a, wt, t, !1))) : (e instanceof Gt || (e = new Gt(e)), e.parent() != i() && (e.bind(yt, n(a, yt, t, !0)), e.bind(wt, n(a, wt, t, !0)))), e.parent = i), e } }), qt = { number: function(e) { return ct.parseFloat(e) }, date: function(e) { return ct.parseDate(e) }, "boolean": function(e) { return typeof e === pt ? "true" === e.toLowerCase() : null != e ? !!e : e }, string: function(e) { return null != e ? e + "" : e }, "default": function(e) { return e } }, $t = { string: "", number: 0, date: new Date, "boolean": !1, "default": "" }, Yt = Gt.extend({ init: function(n) { var i, r, o = this; if ((!n || e.isEmptyObject(n)) && (n = e.extend({}, o.defaults, n), o._initializers)) for (i = 0; o._initializers.length > i; i++) r = o._initializers[i], n[r] = o.defaults[r](); Gt.fn.init.call(o, n), o.dirty = !1, o.idField && (o.id = o.get(o.idField), o.id === t && (o.id = o._defaultId)) }, shouldSerialize: function(e) { return Gt.fn.shouldSerialize.call(this, e) && "uid" !== e && !("id" !== this.idField && "id" === e) && "dirty" !== e && "_accessors" !== e }, _parse: function(e, t) { var n, i = this, o = e, a = i.fields || {}; return e = a[e], e || (e = r(a, o)), e && (n = e.parse, !n && e.type && (n = qt[e.type.toLowerCase()])), n ? n(t) : t }, _notifyChange: function(e) { var t = e.action; ("add" == t || "remove" == t) && (this.dirty = !0) }, editable: function(e) { return e = (this.fields || {})[e], e ? e.editable !== !1 : !0 }, set: function(e, t, n) { var r = this; r.editable(e) && (t = r._parse(e, t), i(t, r.get(e)) || (r.dirty = !0, Gt.fn.set.call(r, e, t, n))) }, accept: function(e) { var t, n, i = this, r = function() { return i }; for (t in e) n = e[t], "_" != t.charAt(0) && (n = i.wrap(e[t], t, r)), i._set(t, n); i.idField && (i.id = i.get(i.idField)), i.dirty = !1 }, isNew: function() { return this.id === this._defaultId } }); Yt.define = function(e, n) { n === t && (n = e, e = Yt); var i, r, o, a, s, l, c, d, u = et({ 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]" === Lt.call(u.fields)) { for (l = 0, c = u.fields.length; c > l; l++) o = u.fields[l], typeof o === pt ? h[o] = {} : o.field && (h[o.field] = o); u.fields = h } for (r in u.fields) o = u.fields[r], a = o.type || "default", s = null, d = r, r = typeof o.field === pt ? o.field : r, o.nullable || (s = u.defaults[d !== r ? d : r] = o.defaultValue !== t ? o.defaultValue : $t[a.toLowerCase()], "function" == typeof s && f.push(r)), n.id === r && (u._defaultId = s), u.defaults[d !== r ? d : r] = s, o.parse = o.parse || qt[a]; return f.length > 0 && (u._initializers = f), i = e.extend(u), i.define = function(e) { return Yt.define(i, e) }, u.fields && (i.fields = u.fields, i.idField = u.idField), i }, N = { selector: function(e) { return dt(e) ? e : At(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 : n > e ? -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, r, o = e[0](t, n); for (i = 1, r = e.length; r > i; i++) o = o || e[i](t, n); return o } } }, O = et({}, N, { asc: function(e) { var t = this.selector(e); return function(e, n) { var i = t(e), r = t(n); return i && i.getTime && r && r.getTime && (i = i.getTime(), r = r.getTime()), i === r ? e.__position - n.__position : null == i ? -1 : null == r ? 1 : i.localeCompare ? i.localeCompare(r) : i > r ? 1 : -1 } }, desc: function(e) { var t = this.selector(e); return function(e, n) { var i = t(e), r = t(n); return i && i.getTime && r && r.getTime && (i = i.getTime(), r = r.getTime()), i === r ? e.__position - n.__position : null == i ? 1 : null == r ? -1 : r.localeCompare ? r.localeCompare(i) : r > i ? 1 : -1 } }, create: function(e) { return this[e.dir](e.field) } }), L = function(e, t) { var n, i = e.length, r = Array(i); for (n = 0; i > n; n++) r[n] = t(e[n], n, e); return r }, V = function() { function e(e) { return e.replace(Ut, "\\").replace(Vt, "") } function t(t, n, i, r) { var o; return null != i && (typeof i === pt && (i = e(i), o = Ot.exec(i), o ? i = new Date(+o[1]) : r ? (i = "'" + i.toLowerCase() + "'", n = "(" + n + " || '').toLowerCase()") : i = "'" + i + "'"), i.getTime && (n = "(" + n + "?" + n + ".getTime():" + n + ")", i = i.getTime())), n + " " + t + " " + i } return { quote: function(t) { return t && t.getTime ? "new Date(" + t.getTime() + ")" : "string" == typeof t ? "'" + e(t) + "'" : "" + t }, eq: function(e, n, i) { return t("==", e, n, i) }, neq: function(e, n, i) { return t("!=", e, n, i) }, gt: function(e, n, i) { return t(">", e, n, i) }, gte: function(e, n, i) { return t(">=", e, n, i) }, lt: function(e, n, i) { return t("<", e, n, i) }, lte: function(e, n, i) { return t("<=", e, n, i) }, startswith: function(t, n, i) { return i && (t = "(" + t + " || '').toLowerCase()", n && (n = n.toLowerCase())), n && (n = e(n)), t + ".lastIndexOf('" + n + "', 0) == 0" }, endswith: function(t, n, i) { return i && (t = "(" + t + " || '').toLowerCase()", n && (n = n.toLowerCase())), n && (n = e(n)), t + ".indexOf('" + n + "', " + t + ".length - " + (n || "").length + ") >= 0" }, contains: function(t, n, i) { return i && (t = "(" + t + " || '').toLowerCase()", n && (n = n.toLowerCase())), n && (n = e(n)), t + ".indexOf('" + n + "') >= 0" }, doesnotcontain: function(t, n, i) { return i && (t = "(" + t + " || '').toLowerCase()", n && (n = n.toLowerCase())), n && (n = e(n)), t + ".indexOf('" + n + "') == -1" } } }(), o.filterExpr = function(e) { var n, i, r, a, s, l, c = [], d = { and: " && ", or: " || " }, u = [], h = [], p = e.filters; for (n = 0, i = p.length; i > n; n++) r = p[n], s = r.field, l = r.operator, r.filters ? (a = o.filterExpr(r), r = 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 === ft ? (a = "__f[" + u.length + "](d)", u.push(s)) : a = ct.expr(s), typeof l === ft ? (r = "__o[" + h.length + "](" + a + ", " + V.quote(r.value) + ")", h.push(l)) : r = V[(l || "eq").toLowerCase()](a, r.value, r.ignoreCase !== t ? r.ignoreCase : !0)), c.push(r); return { expression: "(" + c.join(d[e.logic]) + ")", fields: u, operators: h } }, U = { "==": "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" }, o.normalizeFilter = l, o.prototype = { toArray: function() { return this.data }, range: function(e, t) { return new o(this.data.slice(e, e + t)) }, skip: function(e) { return new o(this.data.slice(e)) }, take: function(e) { return new o(this.data.slice(0, e)) }, select: function(e) { return new o(L(this.data, e)) }, order: function(e, t) { var n = { dir: t }; return e && (e.compare ? n.compare = e.compare : n.field = e), new o(this.data.slice(0).sort(N.create(n))) }, orderBy: function(e) { return this.order(e, "asc") }, orderByDescending: function(e) { return this.order(e, "desc") }, sort: function(e, t, n) { var i, r, o = a(e, t), s = []; if (n = n || N, o.length) { for (i = 0, r = o.length; r > i; i++) s.push(n.create(o[i])); return this.orderBy({ compare: n.combine(s) }) } return this }, filter: function(e) { var t, n, i, r, a, s, c, d, u = this.data, h = []; if (e = l(e), !e || 0 === e.filters.length) return this; for (r = o.filterExpr(e), s = r.fields, c = r.operators, a = d = Function("d, __f, __o", "return " + r.expression), (s.length || c.length) && (d = function(e) { return a(e, s, c) }), t = 0, i = u.length; i > t; t++) n = u[t], d(n) && h.push(n); return new o(h) }, group: function(e, t) { e = d(e || []), t = t || this.data; var n, i = this, r = new o(i.data); return e.length > 0 && (n = e[0], r = r.groupBy(n).select(function(i) { var r = new o(t).filter([{ field: i.field, operator: "eq", value: i.value, ignoreCase: !1 }]); return { field: i.field, value: i.value, items: e.length > 1 ? new o(i.items).group(e.slice(1), r.toArray()).toArray() : i.items, hasSubgroups: e.length > 1, aggregates: r.aggregate(n.aggregates) } })), r }, groupBy: function(e) { if (it(e) || !this.data.length) return new o([]); var t, n, i, r, a = e.field, s = this._sortForGrouping(a, e.dir || "asc"), l = ct.accessor(a), c = l.get(s[0], a), d = { field: a, value: c, items: [] }, h = [d]; for (i = 0, r = s.length; r > i; i++) t = s[i], n = l.get(t, a), u(c, n) || (c = n, d = { field: a, value: c, items: [] }, h.push(d)), d.items.push(t); return new o(h) }, _sortForGrouping: function(e, t) { var n, i, r = this.data; if (!Nt) { for (n = 0, i = r.length; i > n; n++) r[n].__position = n; for (r = new o(r).sort(e, t, O).toArray(), n = 0, i = r.length; i > n; n++) delete r[n].__position; return r } return this.sort(e, t).toArray() }, aggregate: function(e) { var t, n, i = {}, r = {}; if (e && e.length) for (t = 0, n = this.data.length; n > t; t++) h(i, e, this.data[t], t, n, r); return i } }, W = { sum: function(e, t, n) { var i = n.get(t); return p(e) ? p(i) && (e += i) : e = i, e }, count: function(e) { return (e || 0) + 1 }, average: function(e, n, i, r, o, a) { var s = i.get(n); return a.count === t && (a.count = 0), p(e) ? p(s) && (e += s) : e = s, p(s) && a.count++, r == o - 1 && p(e) && (e /= a.count), e }, max: function(e, t, n) { var i = n.get(t); return p(e) || f(e) || (e = i), i > e && (p(i) || f(i)) && (e = i), e }, min: function(e, t, n) { var i = n.get(t); return p(e) || f(e) || (e = i), e > i && (p(i) || f(i)) && (e = i), e } }, o.process = function(e, n) { n = n || {}; var i, r = new o(e), s = n.group, l = d(s || []).concat(a(n.sort || [])), c = n.filterCallback, u = n.filter, h = n.skip, p = n.take; return u && (r = r.filter(u), c && (r = c(r)), i = r.toArray().length), l && (r = r.sort(l), s && (e = r.toArray())), h !== t && p !== t && (r = r.range(h, p)), s && (r = r.group(s, e)), { total: i, data: r.toArray() } }, j = ht.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) } }), G = ht.extend({ init: function(e) { var t, n = this; e = n.options = et({}, n.options, e), st(Tt, function(t, n) { typeof e[n] === pt && (e[n] = { url: e[n] }) }), n.cache = e.cache ? q.create(e.cache) : { find: lt, add: lt }, t = e.parameterMap, dt(e.push) && (n.push = e.push), n.push || (n.push = Dt), n.parameterMap = dt(t) ? t : function(e) { var n = {}; return st(e, function(e, i) { e in t && (e = t[e], nt(e) && (i = e.value(i), e = e.key)), n[e] = i }), n } }, options: { parameterMap: Dt }, create: function(e) { return at(this.setup(e, gt)) }, read: function(n) { var i, r, o, a = this, s = a.cache; n = a.setup(n, mt), i = n.success || lt, r = n.error || lt, o = s.find(n.data), o !== t ? i(o) : (n.success = function(e) { s.add(n.data, e), i(e) }, e.ajax(n)) }, update: function(e) { return at(this.setup(e, vt)) }, destroy: function(e) { return at(this.setup(e, _t)) }, setup: function(e, t) { e = e || {}; var n, i = this, r = i.options[t], o = dt(r.data) ? r.data(e.data) : r.data; return e = et(!0, {}, r, e), n = et(!0, {}, o, e.data), e.data = i.parameterMap(n, t), dt(e.url) && (e.url = e.url(n)), e } }), q = ht.extend({ init: function() { this._store = {} }, add: function(e, n) { e !== t && (this._store[Et(e)] = n) }, find: function(e) { return this._store[Et(e)] }, clear: function() { this._store = {} }, remove: function(e) { delete this._store[Et(e)] } }), q.create = function(e) { var t = { inmemory: function() { return new q } }; return nt(e) && dt(e.find) ? e : e === !0 ? new q : t[e]() }, $ = ht.extend({ init: function(e) { var t, n, i, r, o, a, s, l, c, d, u, h, p, f = this; e = e || {}; for (t in e) n = e[t], f[t] = typeof n === pt ? At(n) : n; r = e.modelBase || Yt, nt(f.model) && (f.model = i = r.define(f.model)), o = tt(f.data, f), f._dataAccessFunction = o, f.model && (a = tt(f.groups, f), s = tt(f.serialize, f), l = {}, c = {}, d = {}, u = {}, h = !1, i = f.model, i.fields && (st(i.fields, function(e, t) { var n; p = e, nt(t) && t.field ? p = t.field : typeof t === pt && (p = t), nt(t) && t.from && (n = t.from), h = h || n && n !== e || p !== e, c[e] = At(n || p), d[e] = At(e), l[n || p] = e, u[e] = n || p }), !e.serialize && h && (f.serialize = w(s, i, m, d, l, u))), f._dataAccessFunction = o, f.data = w(o, i, v, c, l, u), f.groups = w(a, i, _, c, l, u)) }, errors: function(e) { return e ? e.errors : null }, parse: Dt, data: Dt, total: function(e) { return e.length }, groups: Dt, aggregates: function() { return {} }, serialize: function(e) { return e } }), Y = ut.extend({ init: function(e) { var n, i, r, o = this; e && (i = e.data), e = o.options = et({}, o.options, e), o._map = {}, o._prefetch = {}, o._data = [], o._pristineData = [], o._ranges = [], o._view = [], o._pristineTotal = 0, o._destroyed = [], o._pageSize = e.pageSize, o._page = e.page || (e.pageSize ? 1 : t), o._sort = a(e.sort), o._filter = l(e.filter), o._group = d(e.group), o._aggregate = e.aggregate, o._total = e.total, o._shouldDetachObservableParents = !0, ut.fn.init.call(o), o.transport = Q.create(e, i, o), dt(o.transport.push) && o.transport.push({ pushCreate: tt(o._pushCreate, o), pushUpdate: tt(o._pushUpdate, o), pushDestroy: tt(o._pushDestroy, o) }), null != e.offlineStorage && ("string" == typeof e.offlineStorage ? (r = e.offlineStorage, o._storage = { getItem: function() { return JSON.parse(localStorage.getItem(r)) }, setItem: function(e) { localStorage.setItem(r, Et(o.reader.serialize(e))) } }) : o._storage = e.offlineStorage), o.reader = new ct.data.readers[e.schema.type || "json"](e.schema), n = o.reader.model || {}, o._detachObservableParents(), o._data = o._observe(o._data), o._online = !0, o.bind(["push", kt, wt, xt, bt, St, Ct], e) }, options: { data: null, schema: { modelBase: Yt }, offlineStorage: null, serverSorting: !1, serverPaging: !1, serverFiltering: !1, serverGrouping: !1, serverAggregates: !1, batch: !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 }, _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 y(e); if (!t) for (var n = 0; e.length > n; n++) e.at(n) } return e }, parent: lt, get: function(e) { var t, n, i = this._flatData(this._data); for (t = 0, n = i.length; n > t; t++) if (i[t].id == e) return i[t] }, getByUid: function(e) { var t, n, i = this._flatData(this._data); if (i) for (t = 0, n = i.length; n > t; t++) if (i[t].uid == e) return i[t] }, indexOf: function(e) { return E(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; i._data.length > n; 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 T(e, n._data, n._ranges, n.reader.model || Gt, n._isServerGrouped()), t = new jt(e, n.reader.model), t.parent = function() { return n.parent() }, t }, flatView: function() { var e = this.group() || []; return e.length ? y(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 Gt ? e : new Gt(e) }, insert: function(e, t) { return t || (t = e, e = 0), t instanceof Yt || (t = this._createNewModel(t)), this._isServerGrouped() ? this._data.splice(e, 0, this._wrapInEmptyGroup(t)) : this._data.splice(e, 0, t), t }, pushCreate: function(e) { var t, n, i, r, o, a; rt(e) || (e = [e]), t = [], n = this.options.autoSync, this.options.autoSync = !1; try { for (i = 0; e.length > i; i++) r = e[i], o = this.add(r), t.push(o), a = o.toJSON(), this._isServerGrouped() && (a = this._wrapInEmptyGroup(a)), this._pristineData.push(a) } finally { this.options.autoSync = n } t.length && this.trigger("push", { type: "create", items: t }) }, pushUpdate: function(e) { var t, n, i, r, o; for (rt(e) || (e = [e]), t = [], n = 0; e.length > n; n++) i = e[n], r = this._createNewModel(i), o = this.get(r.id), o ? (t.push(o), o.accept(i), o.trigger(wt), this._updatePristineForModel(o, 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) { var t, n, i, r, o, a; rt(e) || (e = [e]), t = [], n = this.options.autoSync, this.options.autoSync = !1; try { for (i = 0; e.length > i; i++) r = e[i], o = this._createNewModel(r), a = !1, this._eachItem(this._data, function(e) { var n, i; for (n = 0; e.length > n; n++) if (i = e.at(n), i.id === o.id) { t.push(i), e.splice(n, 1), a = !0; break } }), a && (this._removePristineForModel(o), this._destroyed.pop()) } finally { this.options.autoSync = n } return t }, remove: function(e) { var n, i = this, r = i._isServerGrouped(); return this._eachItem(i._data, function(o) { return n = D(o, e), n && r ? (n.isNew && n.isNew() || i._destroyed.push(n), !0) : t }), this._removeModelFromRanges(e), this._updateRangesLength(), e }, destroyed: function() { return this._destroyed }, created: function() { var e, t, n = [], i = this._flatData(this._data); for (e = 0, t = i.length; t > e; e++) i[e].isNew && i[e].isNew() && n.push(i[e]); return n }, updated: function() { var e, t, n = [], i = this._flatData(this._data); for (e = 0, t = i.length; t > e; e++) i[e].isNew && !i[e].isNew() && i[e].dirty && n.push(i[e]); return n }, sync: function() { var t, n = this, i = [], r = [], o = n._destroyed, a = (n._flatData(n._data), e.Deferred().resolve().promise()); if (n.online()) { if (!n.reader.model) return a; i = n.created(), r = n.updated(), t = [], n.options.batch && n.transport.submit ? t = n._sendSubmit(i, r, o) : (t.push.apply(t, n._send("create", i)), t.push.apply(t, n._send("update", r)), t.push.apply(t, n._send("destroy", o))), a = e.when.apply(null, t).then(function() { var e, t; for (e = 0, t = arguments.length; t > e; e++) n._accept(arguments[e]); n._storeData(!0), n._change({ action: "sync" }), n.trigger(bt) }) } else n._storeData(!0), n._change({ action: "sync" }); return a }, cancelChanges: function(e) { var t = this; e instanceof ct.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), t._change()) }, hasChanges: function() { var e, t, n = this._flatData(this._data); if (this._destroyed.length) return !0; for (e = 0, t = n.length; t > e; e++) if (n[e].isNew && n[e].isNew() || n[e].dirty) return !0; return !1 }, _accept: function(t) { var n, i = this, r = t.models, o = t.response, a = 0, s = i._isServerGrouped(), l = i._pristineData, c = t.type; if (i.trigger(St, { response: o, type: c }), o && !it(o)) { if (o = i.reader.parse(o), i._handleCustomErrors(o)) return; o = i.reader.data(o), rt(o) || (o = [o]) } else o = e.map(r, function(e) { return e.toJSON() }); for ("destroy" === c && (i._destroyed = []), a = 0, n = r.length; n > a; a++) "destroy" !== c ? (r[a].accept(o[a]), "create" === c ? l.push(s ? i._wrapInEmptyGroup(r[a]) : o[a]) : "update" === c && i._updatePristineForModel(r[a], o[a])) : i._removePristineForModel(r[a]) }, _updatePristineForModel: function(e, t) { this._executeOnPristineForModel(e, function(e, n) { ct.deepExtend(n[e], t) }) }, _executeOnPristineForModel: function(e, n) { this._eachPristineItem(function(i) { var r = A(i, e); return r > -1 ? (n(r, i), !0) : t }) }, _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) { this._eachItem(this._pristineData, e) }, _eachItem: function(e, t) { e && e.length && (this._isServerGrouped() ? x(e, t) : t(e)) }, _pristineForModel: function(e) { var n, i, r = function(r) { return i = A(r, e), i > -1 ? (n = r[i], !0) : t }; return this._eachPristineItem(r), n }, _cancelModel: function(e) { var t = this._pristineForModel(e); this._eachItem(this._data, function(n) { var i = E(n, e); i >= 0 && (!t || e.isNew() && !t.__state__ ? n.splice(i, 1) : n[i].accept(t)) }) }, _submit: function(t, n) { var i = this; i.trigger(xt, { type: "submit" }), i.transport.submit(et({ success: function(n, i) { var r = e.grep(t, function(e) { return e.type == i })[0]; r && r.resolve({ response: n, models: r.models, type: i }) }, error: function(e, n, r) { for (var o = 0; t.length > o; o++) t[o].reject(e); i.error(e, n, r) } }, n)) }, _sendSubmit: function(t, n, i) { var r = this, o = []; return r.options.batch && (t.length && o.push(e.Deferred(function(e) { e.type = "create", e.models = t })), n.length && o.push(e.Deferred(function(e) { e.type = "update", e.models = n })), i.length && o.push(e.Deferred(function(e) { e.type = "destroy", e.models = i })), r._submit(o, { data: { created: r.reader.serialize(g(t)), updated: r.reader.serialize(g(n)), destroyed: r.reader.serialize(g(i)) } })), o }, _promise: function(t, n, i) { var r = this; return e.Deferred(function(e) { r.trigger(xt, { type: i }), r.transport[i].call(r.transport, et({ success: function(t) { e.resolve({ response: t, models: n, type: i }) }, error: function(t, n, i) { e.reject(t), r.error(t, n, i) } }, t)) }).promise() }, _send: function(e, t) { var n, i, r = this, o = [], a = r.reader.serialize(g(t)); if (r.options.batch) t.length && o.push(r._promise({ data: { models: a } }, t, e)); else for (n = 0, i = t.length; i > n; n++) o.push(r._promise({ data: a[n] }, [t[n]], e)); return o }, read: function(t) { var n = this, i = n._params(t), r = e.Deferred(); return n._queueRequest(i, function() { var e = n.trigger(xt, { type: "read" }); e ? (n._dequeueRequest(), r.resolve(e)) : (n.trigger(Ct), n._ranges = [], n.trigger("reset"), n.online() ? n.transport.read({ data: i, success: function(e) { n.success(e, i), r.resolve() }, error: function() { var e = Ht.call(arguments); n.error.apply(n, e), r.reject.apply(r, e) } }) : null != n.options.offlineStorage && (n.success(n.offlineData(), i), r.resolve())) }), r.promise() }, _readAggregates: function(e) { return this.reader.aggregates(e) }, success: function(e) { var n, i, r, o, a, s, l, c, d = this, u = d.options; if (d.trigger(St, { response: e, type: "read" }), d.online()) { if (e = d.reader.parse(e), d._handleCustomErrors(e)) return d._dequeueRequest(), t; d._total = d.reader.total(e), d._aggregate && u.serverAggregates && (d._aggregateResult = d._readAggregates(e)), e = d._readData(e) } else { for (e = d._readData(e), n = [], i = {}, r = d.reader.model, o = r ? r.idField : "id", a = 0; this._destroyed.length > a; a++) s = this._destroyed[a][o], i[s] = s; for (a = 0; e.length > a; a++) l = e[a], c = l.__state__, "destroy" == c ? i[l[o]] || this._destroyed.push(this._createNewModel(l)) : n.push(l); e = n, d._total = e.length } d._pristineTotal = d._total, d._pristineData = e.slice(0), d._detachObservableParents(), d._data = d._observe(e), null != d.options.offlineStorage && d._eachItem(d._data, function(e) { var t, n; for (t = 0; e.length > t; t++) n = e.at(t), "update" == n.__state__ && (n.dirty = !0) }), d._storeData(), d._addRange(d._data), d._process(d._data), d._dequeueRequest() }, _detachObservableParents: function() { if (this._data && this._shouldDetachObservableParents) for (var e = 0; this._data.length > e; e++) this._data[e].parent && (this._data[e].parent = lt) }, _storeData: function(e) { function t(e) { var n, i, r, s = []; for (n = 0; e.length > n; n++) i = e.at(n), r = i.toJSON(), o && i.items ? r.items = t(i.items) : (r.uid = i.uid, a && (i.isNew() ? r.__state__ = "create" : i.dirty && (r.__state__ = "update"))), s.push(r); return s } var n, i, r, o = this._isServerGrouped(), a = this.reader.model; if (null != this.options.offlineStorage) { for (n = t(this._data), i = 0; this._destroyed.length > i; i++) r = this._destroyed[i].toJSON(), r.__state__ = "destroy", n.push(r); this.offlineData(n), e && (this._pristineData = n) } }, _addRange: function(e) { var t = this, n = t._skip || 0, i = n + t._flatData(e, !0).length; t._ranges.push({ start: n, end: i, data: e, timestamp: (new Date).getTime() }), t._ranges.sort(function(e, t) { return e.start - t.start }) }, error: function(e, t, n) { this._dequeueRequest(), this.trigger(St, {}), this.trigger(kt, { xhr: e, status: t, errorThrown: n }) }, _params: function(e) { var t = this, n = et({ take: t.take(), skip: t.skip(), page: t.page(), pageSize: t.pageSize(), sort: t._sort, filter: t._filter, group: t._group, aggregate: t._aggregate }, 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 = z(n.group, t.reader.model)) : delete n.group, t.options.serverFiltering ? t.reader.model && n.filter && (n.filter = M(n.filter, t.reader.model)) : delete n.filter, t.options.serverSorting ? t.reader.model && n.sort && (n.sort = z(n.sort, t.reader.model)) : delete n.sort, t.options.serverAggregates ? t.reader.model && n.aggregate && (n.aggregate = z(n.aggregate, t.reader.model)) : delete n.aggregate, n }, _queueRequest: function(e, n) { var i = this; i._requestInProgress ? i._pending = { callback: tt(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(kt, { 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) : !1 }, _observe: function(e) { var t, n = this, i = n.reader.model; return n._shouldDetachObservableParents = !0, e instanceof Wt ? (n._shouldDetachObservableParents = !1, n._shouldWrap(e) && (e.type = n.reader.model, e.wrapAll(e, e))) : (t = n.pageSize() && !n.options.serverPaging ? jt : Wt, e = new t(e, n.reader.model), e.parent = function() { return n.parent() }), n._isServerGrouped() && k(e, i), n._changeHandler && n._data && n._data instanceof Wt ? n._data.unbind(wt, n._changeHandler) : n._changeHandler = tt(n._change, n), e.bind(wt, n._changeHandler) }, _change: function(e) { var t, n, i, r = this, o = e ? e.action : ""; if ("remove" === o) for (t = 0, n = e.items.length; n > t; t++) e.items[t].isNew && e.items[t].isNew() || r._destroyed.push(e.items[t]); !r.options.autoSync || "add" !== o && "remove" !== o && "itemchange" !== o ? (i = parseInt(r._total, 10), p(r._total) || (i = parseInt(r._pristineTotal, 10)), "add" === o ? i += e.items.length : "remove" === o ? i -= e.items.length : "itemchange" === o || "sync" === o || r.options.serverPaging ? "sync" === o && (i = r._pristineTotal = parseInt(r._total, 10)) : i = r._pristineTotal, r._total = i, r._process(r._data, e)) : r.sync() }, _calculateAggregates: function(e, t) { t = t || {}; var n = new o(e), i = t.aggregate, r = t.filter; return r && (n = n.filter(r)), n.aggregate(i) }, _process: function(e, n) { var i, r = this, o = {}; r.options.serverPaging !== !0 && (o.skip = r._skip, o.take = r._take || r._pageSize, o.skip === t && r._page !== t && r._pageSize !== t && (o.skip = (r._page - 1) * r._pageSize)), r.options.serverSorting !== !0 && (o.sort = r._sort), r.options.serverFiltering !== !0 && (o.filter = r._filter), r.options.serverGrouping !== !0 && (o.group = r._group), r.options.serverAggregates !== !0 && (o.aggregate = r._aggregate, r._aggregateResult = r._calculateAggregates(e, o)), i = r._queryProcess(e, o), r.view(i.data), i.total === t || r.options.serverFiltering || (r._total = i.total), n = n || {}, n.items = n.items || r._view, r.trigger(wt, n) }, _queryProcess: function(e, t) { return o.process(e, t) }, _mergeState: function(e) { var n = this; return e !== t && (n._pageSize = e.pageSize, n._page = e.page, n._sort = e.sort, n._filter = e.filter, n._group = e.group, n._aggregate = e.aggregate, n._skip = e.skip, n._take = e.take, n._skip === t && (n._skip = n.skip(), e.skip = n.skip()), n._take === t && n._pageSize !== t && (n._take = n._pageSize, e.take = n._take), e.sort && (n._sort = e.sort = a(e.sort)), e.filter && (n._filter = e.filter = l(e.filter)), e.group && (n._group = e.group = d(e.group)), e.aggregate && (n._aggregate = e.aggregate = c(e.aggregate))), e }, query: function(n) { var i, r, o = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates; return o || (this._data === t || 0 === this._data.length) && !this._destroyed.length ? this.read(this._mergeState(n)) : (r = this.trigger(xt, { type: "read" }), r || (this.trigger(Ct), i = this._queryProcess(this._data, this._mergeState(n)), this.options.serverFiltering || (this._total = i.total !== t ? i.total : this._data.length), this._aggregateResult = this._calculateAggregates(this._data, n), this.view(i.data), this.trigger(St, { type: "read" }), this.trigger(wt, { items: i.data })), e.Deferred().resolve(r).promise()) }, fetch: function(e) { var t = this, n = function(n) { n !== !0 && dt(e) && e.call(t) }; return this._query().then(n) }, _query: function(e) { var t = this; return t.query(et({}, { page: t.page(), pageSize: t.pageSize(), sort: t.sort(), filter: t.filter(), group: t.group(), aggregate: t.aggregate() }, e)) }, next: function(e) { var n = this, i = n.page(), r = n.total(); return e = e || {}, !i || r && i + 1 > n.totalPages() ? t : (n._skip = i * n.take(), i += 1, e.page = i, n._query(e), i) }, prev: function(e) { var n = this, i = n.page(); return e = e || {}, i && 1 !== i ? (n._skip = n._skip - n.take(), i -= 1, e.page = i, n._query(e), i) : t }, page: function(e) { var n, i = this; return e !== t ? (e = It.max(It.min(It.max(e, 1), i.totalPages()), 1), i._query({ page: e }), t) : (n = i.skip(), n !== t ? It.round((n || 0) / (i.take() || 1)) + 1 : t) }, pageSize: function(e) { var n = this; return e !== t ? (n._query({ pageSize: e, page: 1 }), t) : n.take() }, sort: function(e) { var n = this; return e !== t ? (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 }, total: function() { return parseInt(this._total || 0, 10) }, aggregate: function(e) { var n = this; return e !== t ? (n._query({ aggregate: e }), t) : n._aggregate }, aggregates: function() { var e = this._aggregateResult; return it(e) && (e = this._emptyAggregates(this.aggregate())), e }, _emptyAggregates: function(e) { var t, n, i = {}; if (!it(e)) for (t = {}, rt(e) || (e = [e]), n = 0; e.length > n; n++) t[e[n].aggregate] = 0, i[e[n].field] = t; return i }, _wrapInEmptyGroup: function(e) { var t, n, i, r, o = this.group(); for (i = o.length - 1, r = 0; i >= r; i--) n = o[i], t = { value: e.get(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(); return It.ceil((e.total() || 0) / t) }, inRange: function(e, t) { var n = this, i = It.min(e + t, n.total()); return !n.options.serverPaging && n._data.length > 0 ? !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) { var i, r, o, a, s, l, c, d; if (this._currentRequestTimeStamp = this._timeStamp(), this._skipRequestsInProgress = !0, e = It.min(e || 0, this.total()), i = this, r = It.max(It.floor(e / n), 0) * n, o = It.min(r + n, i.total()), a = i._findRange(e, It.min(e + n, i.total())), a.length) { i._pending = t, i._skip = e > i.skip() ? It.min(o, (i.totalPages() - 1) * i.take()) : r, i._take = n, s = i.options.serverPaging, l = i.options.serverSorting, c = i.options.serverFiltering, d = i.options.serverAggregates; try { i.options.serverPaging = !0, i._isServerGrouped() || i.group() && i.group().length || (i.options.serverSorting = !0), i.options.serverFiltering = !0, i.options.serverPaging = !0, i.options.serverAggregates = !0, s && (i._detachObservableParents(), i._data = a = i._observe(a)), i._process(a) } finally { i.options.serverPaging = s, i.options.serverSorting = l, i.options.serverFiltering = c, i.options.serverAggregates = d } } else n !== t && (i._rangeExists(r, o) ? e > r && i.prefetch(o, n, function() { i.range(e, n) }) : i.prefetch(r, n, function() { e > r && o < i.total() && !i._rangeExists(o, It.min(o + n, i.total())) ? i.prefetch(o, n, function() { i.range(e, n) }) : i.range(e, n) })) }, _findRange: function(e, n) { var i, r, o, s, l, c, u, h, p, f, g, m, v = this, _ = v._ranges, w = [], b = v.options, y = b.serverSorting || b.serverPaging || b.serverFiltering || b.serverGrouping || b.serverAggregates; for (r = 0, g = _.length; g > r; r++) if (i = _[r], e >= i.start && i.end >= e) { for (f = 0, o = r; g > o; o++) if (i = _[o], p = v._flatData(i.data, !0), p.length && e + f >= i.start && (c = i.data, u = i.end, y || (m = d(v.group() || []).concat(a(v.sort() || [])), h = v._queryProcess(i.data, { sort: m, filter: v.filter() }), p = c = h.data, h.total !== t && (u = h.total)), s = 0, e + f > i.start && (s = e + f - i.start), l = p.length, u > n && (l -= u - n), f += l - s, w = v._mergeGroups(w, c, s, l), i.end >= n && f == n - e)) return w; break } return [] }, _mergeGroups: function(e, t, n, i) { if (this._isServerGrouped()) { var r, o = t.toJSON(); return e.length && (r = e[e.length - 1]), b(r, o, n, i), e.concat(o) } return e.concat(t.slice(n, i)) }, skip: function() { var e = this; return e._skip === t ? e._page !== t ? (e._page - 1) * (e.take() || 1) : t : e._skip }, take: function() { return this._take || this._pageSize }, _prefetchSuccessHandler: function(e, t, n, i) { var r = this, o = r._timeStamp(); return function(a) { var s, l, c, d = !1, u = { start: e, end: t, data: [], timestamp: r._timeStamp() }; if (r._dequeueRequest(), r.trigger(St, { response: a, type: "read" }), a = r.reader.parse(a), c = r._readData(a), c.length) { for (s = 0, l = r._ranges.length; l > s; s++) if (r._ranges[s].start === e) { d = !0, u = r._ranges[s]; break } d || r._ranges.push(u) } u.data = r._observe(c), u.end = u.start + r._flatData(u.data, !0).length, r._ranges.sort(function(e, t) { return e.start - t.start }), r._total = r.reader.total(a), (i || o >= r._currentRequestTimeStamp || !r._skipRequestsInProgress) && (n && c.length ? n() : r.trigger(wt, {})) } }, prefetch: function(e, t, n) { var i = this, r = It.min(e + t, i.total()), o = { 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, r) ? n && n() : (clearTimeout(i._timeout), i._timeout = setTimeout(function() { i._queueRequest(o, function() { i.trigger(xt, { type: "read" }) ? i._dequeueRequest() : i.transport.read({ data: i._params(o), success: i._prefetchSuccessHandler(e, r, n), error: function() { var e = Ht.call(arguments); i.error.apply(i, e) } }) }) }, 100)) }, _multiplePrefetch: function(e, t, n) { var i = this, r = It.min(e + t, i.total()), o = { 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, r) ? n && n() : i.trigger(xt, { type: "read" }) || i.transport.read({ data: i._params(o), success: i._prefetchSuccessHandler(e, r, n, !0) }) }, _rangeExists: function(e, t) { var n, i, r = this, o = r._ranges; for (n = 0, i = o.length; i > n; n++) if (e >= o[n].start && o[n].end >= t) return !0; return !1 }, _removeModelFromRanges: function(e) { var t, n, i, r, o; for (r = 0, o = this._ranges.length; o > r && (i = this._ranges[r], this._eachItem(i.data, function(i) { t = D(i, e), t && (n = !0) }), !n); r++); }, _updateRangesLength: function() { var e, t, n, i, r = 0; for (n = 0, i = this._ranges.length; i > n; n++) e = this._ranges[n], e.start = e.start - r, t = this._flatData(e.data, !0).length, r = e.end - t, e.end = e.start + t } }), Q = {}, Q.create = function(t, n, i) { var r, o = t.transport ? e.extend({}, t.transport) : null; return o ? (o.read = typeof o.read === pt ? { url: o.read } : o.read, i && (o.dataSource = i), t.type && (ct.data.transports = ct.data.transports || {}, ct.data.schemas = ct.data.schemas || {}, ct.data.transports[t.type] && !nt(ct.data.transports[t.type]) ? r = new ct.data.transports[t.type](et(o, { data: n })) : o = et(!0, {}, ct.data.transports[t.type], o), t.schema = et(!0, {}, ct.data.schemas[t.type], t.schema)), r || (r = dt(o.read) ? o : new G(o))) : r = new j({ data: t.data || [] }), r }, Y.create = function(e) { (rt(e) || e instanceof Wt) && (e = { data: e }); var n, i, r, o = e || {}, a = o.data, s = o.fields, l = o.table, c = o.select, d = {}; if (a || !s || o.transport || (l ? a = R(l, s) : c && (a = F(c, s), o.group === t && a[0] && a[0].optgroup !== t && (o.group = "optgroup"))), ct.data.Model && s && (!o.schema || !o.schema.model)) { for (n = 0, i = s.length; i > n; n++) r = s[n], r.type && (d[r.field] = r); it(d) || (o.schema = et(!0, o.schema, { model: { fields: d } })) } return o.data = a, c = null, o.select = null, l = null, o.table = null, o instanceof Y ? o : new Y(o) }, K = Yt.define({ idField: "id", init: function(e) { var t = this, n = t.hasChildren || e && e.hasChildren, i = "items", r = {}; ct.data.Model.fn.init.call(t, e), typeof t.children === pt && (i = t.children), r = { schema: { data: i, model: { hasChildren: n, id: t.idField, fields: t.fields } } }, typeof t.children !== pt && et(r, t.children), r.data = e, n || (n = r.schema.data), typeof n === pt && (n = ct.getter(n)), dt(n) && (t.hasChildren = !!n.call(t, t)), t._childrenOptions = r, t.hasChildren && t._initChildren(), t._loaded = !(!e || !e[i] && !e._loaded) }, _initChildren: function() { var e, t, n, i = this; i.children instanceof X || (e = i.children = new X(i._childrenOptions), t = e.transport, n = t.parameterMap, t.parameterMap = function(e, t) { return e[i.idField || "id"] = i.id, n && (e = n(e, t)), e }, e.parent = function() { return i }, e.bind(wt, function(e) { e.node = e.node || i, i.trigger(wt, e) }), e.bind(kt, function(e) { var t = i.parent(); t && (e.node = e.node || i, t.trigger(kt, 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, r = {}, o = "_query"; return this.hasChildren ? (this._initChildren(), n = this.children, r[this.idField || "id"] = this.id, this._loaded || (n._data = t, o = "read"), n.one(wt, tt(this._childrenLoaded, this)), i = n[o](r)) : 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 Yt.fn.shouldSerialize.call(this, e) && "children" !== e && "_loaded" !== e && "hasChildren" !== e && "_childrenOptions" !== e } }), X = Y.extend({ init: function(e) { var t = K.define({ children: e }); Y.fn.init.call(this, et(!0, {}, { schema: { modelBase: t, model: t } }, e)), this._attachBubbleHandlers() }, _attachBubbleHandlers: function() { var e = this; e._data.bind(kt, function(t) { e.trigger(kt, t) }) }, remove: function(e) { var t, n = e.parentNode(), i = this; return n && n._initChildren && (i = n.children), t = Y.fn.remove.call(i, e), n && !i.data().length && (n.hasChildren = !1), t }, success: H("success"), data: H("data"), insert: function(e, t) { var n = this.parent(); return n && n._initChildren && (n.hasChildren = !0, n._initChildren()), Y.fn.insert.call(this, e, t) }, _find: function(e, t) { var n, i, r, o, a; if (r = Y.fn[e].call(this, t)) return r; if (o = this._flatData(this._data)) for (n = 0, i = o.length; i > n; n++) if (a = o[n].children, a instanceof X && (r = a[e](t))) return r }, get: function(e) { return this._find("get", e) }, getByUid: function(e) { return this._find("getByUid", e) } }), X.create = function(e) { e = e && e.push ? { data: e } : e; var t = e || {}, n = t.data, i = t.fields, r = t.list; return n && n._dataSource ? n._dataSource : (n || !i || t.transport || r && (n = B(r, i)), t.data = n, t instanceof X ? t : new X(t)) }, Z = ct.Observable.extend({ init: function(e, t, n) { ct.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 ? ((this.dataOffset > e || 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 = It.max(It.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, r = It.max(It.floor(e / i), 0) * i, o = this.dataSource; return t && (r += i), o.inRange(e, i) ? (this.offset = e, this._recalculate(), this._goToRange(e), !0) : this.prefetch ? (o.prefetch(r, i, function() { n.offset = e, n._recalculate(), n._goToRange(e, !0) }), !1) : !0 }, 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 } }), J = ct.Observable.extend({ init: function(e, t) { var n = this; ct.Observable.fn.init.call(n), this.dataSource = e, this.batchSize = t, this._total = 0, this.buffer = new Z(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, r = e * this.batchSize, o = this.batchSize, a = []; for (i.offset > r && i.at(i.offset - 1), n = 0; o > n && (t = i.at(r + n), null !== t); n++) a.push(t); return a }, total: function() { return this._total }, destroy: function() { this.buffer.destroy(), this.unbind() } }), et(!0, ct.data, { readers: { json: $ }, Query: o, DataSource: Y, HierarchicalDataSource: X, Node: K, ObservableObject: Gt, ObservableArray: Wt, LazyObservableArray: jt, LocalTransport: j, RemoteTransport: G, Cache: q, DataReader: $, Model: Yt, Buffer: Z, BatchBuffer: J }) }(window.kendo.jQuery), 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 = P(i.dataBinding, i), i._dataBound = P(i.dataBound, i), i._itemChange = P(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, r = e.removedItems || i.items(); for (t = 0, n = r.length; n > t; t++) c(r[t]) }, _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, r, o, s, l = this.widget, c = e.addedItems || l.items(), d = l[n], u = (d.group() || [], C.data.HierarchicalDataSource); if (!(u && d instanceof u) && c.length) for (o = e.addedDataItems || d.flatView(), s = this.bindings[t]._parents(), i = 0, r = o.length; r > i; i++) a(c[i], o[i], this._ns(e.ns), [o[i]].concat(s)) }, refresh: function(e) { var r, o = this, a = o.widget; e = e || {}, e.action || (o.destroy(), a.bind("dataBinding", o._dataBinding), a.bind("dataBound", o._dataBound), a.bind("itemChange", o._itemChange), r = o.bindings[t].get(), a[n] instanceof C.data.DataSource && a[n] != r && (r instanceof C.data.DataSource ? a[i](r) : r && r._dataSource ? a[i](r._dataSource) : (a[n].data(r), o.bindings.value && (a instanceof C.ui.Select || a instanceof C.ui.MultiSelect) && a.value(p(o.bindings.value.get(), a.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, n) { var i = C.initWidget(e, {}, n); return i ? new y(i) : t } function r(e) { var t, n, i, o, a, s, l, c = {}; for (l = e.match(k), t = 0, n = l.length; n > t; t++) i = l[t], o = i.indexOf(":"), a = i.substring(0, o), s = i.substring(o + 1), "{" == s.charAt(0) && (s = r(s)), c[a] = s; return c } function o(e, t, n) { var i, r = {}; for (i in e) r[i] = new n(t, e[i]); return r } function a(e, t, n, s) { var c, d, u, h = e.getAttribute("data-" + C.ns + "role"), p = e.getAttribute("data-" + C.ns + "bind"), v = e.children, _ = [], w = !0, y = {}; if (s = s || [t], (h || p) && l(e), h && (u = i(e, n)), p && (p = r(p.replace(x, "")), u || (y = C.parseOptions(e, { textField: "", valueField: "", template: "", valueUpdate: L, valuePrimitive: !1, autoBind: !0 }), y.roles = n, u = new b(e, y)), u.source = t, d = o(p, s, f), y.template && (d.template = new m(s, "", y.template)), d.click && (p.events = p.events || {}, p.events.click = p.click, d.click.destroy(), delete d.click), d.source && (w = !1), p.attr && (d.attr = o(p.attr, s, f)), p.style && (d.style = o(p.style, s, f)), p.events && (d.events = o(p.events, s, g)), p.css && (d.css = o(p.css, s, f)), u.bind(d)), u && (e.kendoBindingTarget = u), w && v) { for (c = 0; v.length > c; c++) _[c] = v[c]; for (c = 0; _.length > c; c++) a(_[c], t, n, s) } } function s(t, n) { var i, r, o, s = C.rolesFromNamespaces([].slice.call(arguments, 2)); for (n = C.observable(n), t = e(t), i = 0, r = t.length; r > i; i++) o = t[i], 1 === o.nodeType && a(o, n, s) } function l(e) { var t = e.kendoBindingTarget; t && (t.destroy(), B ? delete e.kendoBindingTarget : e.removeAttribute ? e.removeAttribute("kendoBindingTarget") : e.kendoBindingTarget = null) } function c(e) { l(e), d(e) } function d(e) { var t, n, i = e.children; if (i) for (t = 0, n = i.length; n > t; t++) c(i[t]) } function u(t) { var n, i; for (t = e(t), n = 0, i = t.length; i > n; n++) c(t[n]) } 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, r = [], o = 0; if (!t) return e; if (e instanceof D) { for (n = e.length; n > o; o++) i = e[o], r[o] = i.get ? i.get(t) : i[t]; e = r } else e instanceof T && (e = e.get(t)); return e } var f, g, m, v, _, w, b, y, k, x, C = window.kendo, S = C.Observable, T = C.data.ObservableObject, D = C.data.ObservableArray, A = {}.toString, E = {}, I = C.Class, P = e.proxy, M = "value", z = "source", F = "events", R = "checked", H = "css", B = !0, L = "change"; ! function() { var e = document.createElement("a"); try { delete e.test } catch (t) { B = !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(L, 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, r = this; if ("this" === r.path) r.trigger(L, e); else for (t in r.dependencies) if (0 === t.indexOf(i) && (n = t.charAt(i.length), !n || "." === n || "[" === n)) { r.trigger(L, 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, r = e.path, o = n; if (!e.observable) return o; for (e.start(e.source), o = n.get(r); o === t && n;) n = e.parents[++i], n instanceof T && (o = n.get(r)); if (o === t) for (n = e.source; o === t && n;) n = n.parent(), n instanceof T && (o = n.get(r)); return "function" == typeof o && (i = r.lastIndexOf("."), i > 0 && (n = n.get(r.substring(0, i))), e.start(n), o = n !== e.source ? o.call(n, e.source) : o.call(n), e.stop(n)), n && n !== e.source && (e.currentSource = n, n.unbind(L, e._change).bind(L, e._change)), e.stop(e.source), o }, 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(L, this._change), this.currentSource && this.currentSource.unbind(L, 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 P(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(L, 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], r = this.classes[t] = i.get(); r ? 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], r = this.handlers[t]; r && n.off(t, r), r = this.handlers[t] = i.get(), n.on(t, i.source, r) }, 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 = P(this.change, this), this.eventName = i.valueUpdate || L, e(this.element).on(this.eventName, this._change), this._initChange = !1 }, change: function() { this._initChange = this.eventName != L, this.bindings[M].set(this.parsedValue()), this._initChange = !1 }, refresh: function() { var e, t; this._initChange || (e = this.bindings[M].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, r, o, s, l = this.container(), c = l.cloneNode(!1), d = l.children[t]; if (e(c).html(C.render(this.template(), n)), c.children.length) for (i = this.bindings.source._parents(), r = 0, o = n.length; o > r; r++) s = c.children[0], l.insertBefore(s, d || null), a(s, n[r], this.options.roles, [n[r]].concat(i)) }, remove: function(e, t) { var n, i, r = this.container(); for (n = 0; t.length > n; n++) i = r.children[e], c(i), r.removeChild(i) }, render: function() { var t, n, i, r = this.bindings.source.get(), o = this.container(), s = this.template(); if (r instanceof C.data.DataSource && (r = r.view()), r instanceof D || "[object Array]" === A.call(r) || (r = [r]), this.bindings.template) { if (d(o), e(o).html(this.bindings.template.render(r)), o.children.length) for (t = this.bindings.source._parents(), n = 0, i = r.length; i > n; n++) a(o.children[n], r[n], this.options.roles, [r[n]].concat(t)) } else e(o).html(C.render(s, r)) } }), E.input = { checked: _.extend({ init: function(t, n, i) { _.fn.init.call(this, t, n, i), this._change = P(this.change, this), e(this.element).change(this._change) }, change: function() { var e, t, n, i = this.element, r = this.value(); if ("radio" == i.type) r = this.parsedValue(), this.bindings[R].set(r); else if ("checkbox" == i.type) if (e = this.bindings[R].get(), e instanceof D) { if (r = this.parsedValue(), r instanceof Date) { for (n = 0; e.length > n; n++) if (e[n] instanceof Date && +e[n] === +r) { t = n; break } } else t = e.indexOf(r); t > -1 ? e.splice(t, 1) : e.push(r) } else this.bindings[R].set(r) }, refresh: function() { var e, t, n = this.bindings[R].get(), i = n, r = this.dataType(), o = this.element; if ("checkbox" == o.type) if (i instanceof D) { if (e = -1, n = this.parsedValue(), n instanceof Date) { for (t = 0; i.length > t; t++) if (i[t] instanceof Date && +i[t] === +n) { e = t; break } } else e = i.indexOf(n); o.checked = e >= 0 } else o.checked = i; else "radio" == o.type && null != n && ("date" == r ? n = C.toString(n, "yyyy-MM-dd") : "datetime-local" == r && (n = C.toString(n, "yyyy-MM-ddTHH:mm:ss")), o.value === "" + n && (o.checked = !0)) }, value: function() { var e = this.element, t = e.value; return "checkbox" == e.type && (t = e.checked), t }, destroy: function() { e(this.element).off(L, this._change) } }) }, E.select = { source: E.source.extend({ refresh: function(n) { var i = this, r = i.bindings.source.get(); r instanceof D || r instanceof C.data.DataSource ? (n = n || {}, "add" == n.action ? i.add(n.index, n.items) : "remove" == n.action ? i.remove(n.index, n.items) : ("itemchange" == n.action || n.action === t) && (i.render(), i.bindings.value && i.bindings.value && (i.element.value = p(i.bindings.value.get(), e(i.element).data("valueField"))))) : i.render() } }), value: _.extend({ init: function(t, n, i) { _.fn.init.call(this, t, n, i), this._change = P(this.change, this), e(this.element).change(this._change) }, parsedValue: function() { var e, t, n, i, r = this.dataType(), o = []; for (n = 0, i = this.element.options.length; i > n; n++) t = this.element.options[n], t.selected && (e = t.attributes.value, e = e && e.specified ? t.value : t.text, o.push(this._parseValue(e, r))); return o }, change: function() { var e, n, i, r, o, a, s = [], l = this.options.valueField || this.options.textField, c = this.options.valuePrimitive; if (s = this.parsedValue(), l) for (e = this.bindings.source.get(), e instanceof C.data.DataSource && (e = e.view()), n = 0; s.length > n; n++) for (r = 0, o = e.length; o > r; r++) if (a = c ? this._parseValue(s[n], this.dataType()) === e[r].get(l) : "" + this._parseValue(e[r].get(l), this.dataType()) === s[n]) { s[n] = e[r]; break } i = this.bindings[M].get(), i instanceof D ? i.splice.apply(i, [0, i.length].concat(s)) : this.bindings[M].set(c || !(i instanceof T || null === i || i === t) && l ? s[0].get(l) : s[0]) }, refresh: function() { var e, t, n, i = this.element, r = i.options, o = this.bindings[M].get(), a = o, s = this.options.valueField || this.options.textField, l = !1, c = this.dataType(); for (a instanceof D || (a = new D([o])), i.selectedIndex = -1, n = 0; a.length > n; n++) for (o = a[n], s && o instanceof T && (o = o.get(s)), "date" == c ? o = C.toString(a[n], "yyyy-MM-dd") : "datetime-local" == c && (o = C.toString(a[n], "yyyy-MM-ddTHH:mm:ss")), e = 0; r.length > e; e++) t = r[e].value, "" === t && "" !== o && (t = r[e].text), null != o && t == "" + o && (r[e].selected = !0, l = !0) }, destroy: function() { e(this.element).off(L, 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 = P(this.change, this), this.widget.bind(L, this._change) }, change: function() { this.bindings[R].set(this.value()) }, refresh: function() { this.widget.check(this.bindings[R].get() === !0) }, value: function() { var e = this.element, t = e.value; return ("on" == t || "off" == t) && (t = e.checked), t }, destroy: function() { this.widget.unbind(L, 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(L, this._change); var r = this.bindings.value.get(); this._valueIsObservableObject = !i.valuePrimitive && (null == r || r instanceof T), this._valueIsObservableArray = r instanceof D, this._initChange = !1 }, change: function() { var e, t, n, i, r, o, a, s = this.widget.value(), l = this.options.dataValueField || this.options.dataTextField, c = "[object Array]" === A.call(s), d = this._valueIsObservableObject, u = []; if (this._initChange = !0, l) if (this.bindings.source && (a = this.bindings.source.get()), "" === s && (d || this.options.valuePrimitive)) s = null; else { for ((!a || a instanceof C.data.DataSource) && (a = this.widget.dataSource.flatView()), c && (t = s.length, u = s.slice(0)), r = 0, o = a.length; o > r; r++) if (n = a[r], i = n.get(l), c) { for (e = 0; t > e; e++) if (i == u[e]) { u[e] = n; break } } else if (i == s) { s = d ? n : i; break } u[0] && (s = this._valueIsObservableArray ? u : d || !l ? u[0] : u[0].get(l)) } this.bindings.value.set(s), this._initChange = !1 }, refresh: function() { var e, n, i, r, o, a, s, l, c; if (!this._initChange) { if (e = this.widget, n = e.options, i = n.dataTextField, r = n.dataValueField || i, o = this.bindings.value.get(), a = n.text || "", s = 0, c = [], o === t && (o = null), r) if (o instanceof D) { for (l = o.length; l > s; s++) c[s] = o[s].get(r); o = c } else o instanceof T && (a = o.get(i), o = o.get(r)); n.autoBind !== !1 || n.cascadeFrom || !e.listView || e.listView.isBound() ? e.value(o) : (i !== r || a || (a = o), a || !o && 0 !== o || !n.valuePrimitive ? e._preselect(o, a) : e.value(o)) } this._initChange = !1 }, destroy: function() { this.widget.unbind(L, 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(L, this._change), this._initChange = !1 }, change: function() { var e, n, i, r, o, a, s, l, c, d = this, u = d.bindings[M].get(), h = d.options.valuePrimitive, p = h ? d.widget.value() : d.widget.dataItems(), f = this.options.dataValueField || this.options.dataTextField; if (p = p.slice(0), d._initChange = !0, u instanceof D) { for (e = [], n = p.length, i = 0, r = 0, o = u[i], a = !1; o !== t;) { for (c = !1, r = 0; n > r; r++) if (h ? a = p[r] == o : (l = p[r], l = l.get ? l.get(f) : l, a = l == (o.get ? o.get(f) : o)), a) { p.splice(r, 1), n -= 1, c = !0; break } c ? i += 1 : (e.push(o), w(u, i, 1), s = i), o = u[i] } w(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 d.bindings[M].set(p); d._initChange = !1 }, refresh: function() { if (!this._initChange) { var e, n, i = this.options, r = this.widget, o = i.dataValueField || i.dataTextField, a = this.bindings.value.get(), s = a, l = 0, c = []; if (a === t && (a = null), o) if (a instanceof D) { for (e = a.length; e > l; l++) n = a[l], c[l] = n.get ? n.get(o) : n; a = c } else a instanceof T && (a = a.get(o)); i.autoBind !== !1 || i.valuePrimitive === !0 || r.listView.isBound() ? r.value(a) : r._preselect(s, a) } }, destroy: function() { this.widget.unbind(L, this._change) } }) }, scheduler: { source: n("source", "dataSource", "setDataSource").extend({ dataBound: function(e) { var t, n, i, r, o = this.widget, s = e.addedItems || o.items(); if (s.length) for (i = e.addedDataItems || o.dataItems(), r = this.bindings.source._parents(), t = 0, n = i.length; n > t; t++) a(s[t], i[t], this._ns(e.ns), [i[t]].concat(r)) } }) } }, w = function(e, t, n, i) { var r, o, a, s, l; if (i = i || [], n = n || 0, r = i.length, o = e.length, a = [].slice.call(e, t + n), s = a.length, r) { for (r = t + r, l = 0; r > t; t++) e[t] = i[l], l++; e.length = r } else if (n) for (e.length = t, n += t; n > t;) delete e[--n]; if (s) { for (s = t + s, l = 0; s > t; t++) e[t] = a[l], l++; e.length = s } for (t = e.length; o > t;) delete e[t], t++ }, b = I.extend({ init: function(e, t) { this.target = e, this.options = t, this.toDestroy = [] }, bind: function(e) { var t, n, i, r, o, a, s = this instanceof y, l = this.binders(); for (t in e) t == M ? n = !0 : t == z ? i = !0 : t != F || s ? t == R ? o = !0 : t == H ? a = !0 : this.applyBinding(t, e, l) : r = !0; i && this.applyBinding(z, e, l), n && this.applyBinding(M, e, l), o && this.applyBinding(R, e, l), r && !s && this.applyBinding(F, e, l), a && !s && this.applyBinding(H, e, l) }, binders: function() { return E[this.target.nodeName.toLowerCase()] || {} }, applyBinding: function(e, t, n) { var i, r = n[e] || E[e], o = this.toDestroy, a = t[e]; if (r) if (r = new r(this.target, t, this.options), o.push(r), a instanceof f) r.bind(a), o.push(a); else for (i in a) r.bind(a, i), o.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; t > e; e++) n[e].destroy() } }), y = b.extend({ binders: function() { return E.widget[this.target.options.name.toLowerCase()] || {} }, applyBinding: function(e, t, n) { var i, r = n[e] || E.widget[e], o = this.toDestroy, a = t[e]; if (!r) throw Error("The " + e + " binding is not supported by the " + this.target.options.name + " widget"); if (r = new r(this.target, t, this.target.options), o.push(r), a instanceof f) r.bind(a), o.push(a); else for (i in a) r.bind(a, i), o.push(a[i]) } }), k = /[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; e.length > n; 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), function(e, t) { function n(e) { return parseInt(e, 10) } function i(e, t) { return n(e.css(t)) } function r(e) { var t, n = []; for (t in e) n.push(t); return n } function o(e) { for (var t in e) - 1 != U.indexOf(t) && -1 == W.indexOf(t) && delete e[t]; return e } function a(e, t) { var n, i, r, o, a = [], s = {}; for (i in t) n = i.toLowerCase(), o = P && -1 != U.indexOf(n), !E.hasHW3D && o && -1 == W.indexOf(n) ? delete t[i] : (r = t[i], o ? a.push(i + "(" + r + ")") : s[i] = r); return a.length && (s[st] = a.join(" ")), s } function s(e, t) { var i, r, o; return P ? (i = e.css(st), i == Q ? "scale" == t ? 1 : 0 : (r = i.match(RegExp(t + "\\s*\\(([\\d\\w\\.]+)")), o = 0, r ? o = n(r[1]) : (r = i.match(H) || [0, 0, 0, 0, 0], t = t.toLowerCase(), L.test(t) ? o = parseFloat(r[3] / r[2]) : "translatey" == t ? o = parseFloat(r[4] / r[2]) : "scale" == t ? o = parseFloat(r[2]) : "rotate" == t && (o = parseFloat(Math.atan2(r[2], r[1])))), o)) : parseFloat(e.css(t)) } function l(e) { return e.charAt(0).toUpperCase() + e.substring(1) } function c(e, t) { var n = f.extend(t), i = n.prototype.directions; S[l(e)] = n, S.Element.prototype[e] = function(e, t, i, r) { return new n(this.element, e, t, i, r) }, T(i, function(t, i) { S.Element.prototype[e + l(i)] = function(e, t, r) { return new n(this.element, i, e, t, r) } }) } function d(e, n, i, r) { c(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, o) { var a, s, l = this, c = "out" === this._direction, d = l.element.data(n), u = !(isNaN(d) || d == i); a = u ? d : t !== this._startValue ? this._startValue : c ? i : r, s = t !== this._endValue ? this._endValue : c ? r : i, this._reverse ? (e[n] = s, o[n] = a) : (e[n] = a, o[n] = s), l._shouldHide = o[n] === r } }) } function u(e, t) { var n = C.directions[t].vertical, i = e[n ? Z : X]() / 2 + "px"; return _[t].replace("$size", i) } var h, p, f, g, m, v, _, w, b, y, k, x, C = window.kendo, S = C.effects, T = e.each, D = e.extend, A = e.proxy, E = C.support, I = E.browser, P = E.transforms, M = E.transitions, z = { scale: 0, scalex: 0, scaley: 0, scale3d: 0 }, F = { translate: 0, translatex: 0, translatey: 0, translate3d: 0 }, R = t !== document.documentElement.style.zoom && !P, H = /matrix3?d?\s*\(.*,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?,\s*([\d\.\-]+)\w*?/i, B = /^(-?[\d\.\-]+)?[\w\s]*,?\s*(-?[\d\.\-]+)?[\w\s]*/i, L = /translatex?$/i, N = /(zoom|fade|expand)(\w+)/, O = /(zoom|fade|expand)/, V = /[xy]$/i, U = ["perspective", "rotate", "rotatex", "rotatey", "rotatez", "rotate3d", "scale", "scalex", "scaley", "scalez", "scale3d", "skew", "skewx", "skewy", "translate", "translatex", "translatey", "translatez", "translate3d", "matrix", "matrix3d"], W = ["rotate", "scale", "scalex", "scaley", "skew", "skewx", "skewy", "translate", "translatex", "translatey", "matrix"], j = { rotate: "deg", scale: "", skew: "px", translate: "px" }, G = P.css, q = Math.round, $ = "", Y = "px", Q = "none", K = "auto", X = "width", Z = "height", J = "hidden", et = "origin", tt = "abortId", nt = "overflow", it = "translate", rt = "position", ot = "completeCallback", at = G + "transition", st = G + "transform", lt = G + "backface-visibility", ct = G + "perspective", dt = "1500px", ut = "perspective(" + dt + ")", ht = { 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 = ht, D(e.fn, { kendoStop: function(e, t) { return M ? S.stopQueue(this, e || !1, t || !1) : this.stop(e, t) } }), P && !M && (T(W, function(n, i) { e.fn[i] = function(n) { if (t === n) return s(this, i); var r = e(this)[0], o = i + "(" + n + j[i.replace(V, "")] + ")"; return -1 == r.style.cssText.indexOf(st) ? e(this).css(st, o) : r.style.cssText = r.style.cssText.replace(RegExp(i + "\\(.*?\\)", "i"), o), this }, e.fx.step[i] = function(t) { e(t.elem)[i](t.now) } }), h = e.fx.prototype.cur, e.fx.prototype.cur = function() { return -1 != W.indexOf(this.prop) ? parseFloat(e(this.elem)[this.prop]()) : h.apply(this, arguments) }), C.toggleClass = function(e, t, n, i) { return t && (t = t.split(" "), M && (n = D({ exclusive: "all", duration: 400, ease: "ease-out" }, n), e.css(at, n.exclusive + " " + n.duration + "ms " + n.ease), setTimeout(function() { e.css(at, "").css(Z) }, 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 r = !O.test(i), o = i.replace(N, function(e, t, n) { return t + ":" + n.toLowerCase() }), a = o.split(":"), s = a[1], l = {}; a.length > 1 && (l.direction = t && r ? ht[s].reverse : s), n[a[0]] = l }) : T(e, function(e) { var i = this.direction; i && t && !O.test(e) && (this.direction = ht[i].reverse), n[e] = this }), n }, M && D(S, { transition: function(t, n, i) { var o, s, l, c, d = 0, u = t.data("keys") || []; i = D({ duration: 200, ease: "ease-out", complete: null, exclusive: "all" }, i), l = !1, c = function() { l || (l = !0, s && (clearTimeout(s), s = null), t.removeData(tt).dequeue().css(at, "").css(at), i.complete.call(t)) }, i.duration = e.fx ? e.fx.speeds[i.duration] || i.duration : i.duration, o = a(t, n), e.merge(u, r(o)), t.data("keys", e.unique(u)).height(), t.css(at, i.exclusive + " " + i.duration + "ms " + i.ease).css(at), t.css(o).css(st), M.event && (t.one(M.event, c), 0 !== i.duration && (d = 500)), s = setTimeout(c, i.duration + d), t.data(tt, s), t.data(ot, c) }, stopQueue: function(e, t, n) { var i, r = e.data("keys"), o = !n && r, a = e.data(ot); return o && (i = C.getComputedStyles(e[0], r)), a && a(), o && 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, r, s, l, c, d, u = this, h = t.length, p = u.element, f = u.options, g = e.Deferred(), m = {}, v = {}; for (u.effects = t, g.then(e.proxy(u, "complete")), p.data("animating", !0), i = 0; h > i; i++) for (n = t[i], n.setReverse(f.reverse), n.setOptions(f), u.addRestoreProperties(n.restore), n.prepare(m, v), l = n.children(), r = 0, c = l.length; c > r; r++) l[r].duration(f.duration).run(); for (d in f.effects) D(v, f.effects[d].properties); for (p.is(":visible") || D(m, { display: p.data("olddisplay") || "block" }), P && !f.reset && (s = p.data("targetTransform"), s && (m = D(s, m))), m = a(p, m), P && !M && (m = o(m)), p.css(m).css(st), i = 0; h > i; 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, r = e.length; r > i; 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; t > e; e++) n = this.restore[e], i.css(n, i.data(n)) }, complete: function() { var t = this, n = 0, i = t.element, r = t.options, o = t.effects, a = o.length; for (i.removeData("animating").dequeue(), r.hide && i.data("olddisplay", i.css("display")).hide(), this.restoreCallback(), R && !P && setTimeout(e.proxy(this, "restoreCallback"), 0); a > n; n++) o[n].teardown(); r.completeCallback && r.completeCallback(i) } }), S.promise = function(e, t) { var n, i, r, o = [], a = new p(e, t), s = C.parseEffects(t.effects); t.effects = s; for (r in s) n = S[l(r)], n && (i = new n(e, s[r].direction), o.push(i)); o[0] ? a.run(o) : (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, r, a) { var s = a.transition !== !1; delete a.transition, M && "transition" in S && s ? S.transition(n, r, a) : P ? n.animate(o(r), { queue: !1, show: !1, hide: !1, duration: a.duration, complete: a.complete }) : n.each(function() { var n = e(this), o = {}; T(U, function(e, a) { var s, l, c, d, u, h, p, f = r ? r[a] + " " : null; f && (l = r, a in z && r[a] !== t ? (s = f.match(B), P && D(l, { scale: +s[0] })) : a in F && r[a] !== t && (c = n.css(rt), d = "absolute" == c || "fixed" == c, n.data(it) || (d ? n.data(it, { top: i(n, "top") || 0, left: i(n, "left") || 0, bottom: i(n, "bottom"), right: i(n, "right") }) : n.data(it, { top: i(n, "marginTop") || 0, left: i(n, "marginLeft") || 0 })), u = n.data(it), s = f.match(B), s && (h = a == it + "y" ? 0 : +s[1], p = a == it + "y" ? +s[1] : +s[2], d ? (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 })))), !P && "scale" != a && a in l && delete l[a], l && D(o, l)) }), I.msie && delete o.scale, n.animate(o, { 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, r = i.element, s = 0, l = i.restore, c = l.length, d = e.Deferred(), u = {}, h = {}, p = i.children(), f = p.length; for (d.then(e.proxy(i, "_complete")), r.data("animating", !0), s = 0; c > s; s++) t = l[s], r.data(t) || r.data(t, r.css(t)); for (s = 0; f > s; s++) p[s].duration(i._duration).run(); return i.prepare(u, h), r.is(":visible") || D(u, { display: r.data("olddisplay") || "block" }), P && (n = r.data("targetTransform"), n && (u = D(n, u))), u = a(r, u), P && !M && (u = o(u)), r.css(u).css(st), i.setup(), r.data("targetTransform", h), S.animate(r, h, { duration: i._duration, complete: d.resolve }), d.promise() }, stop: function() { var t = 0, n = this.children(), i = n.length; for (t = 0; i > t; 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; t > e; 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(), R && !P && 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"], c("slideIn", { directions: g, divisor: function(e) { return this.options.divisor = e, this }, prepare: function(e, t) { var n, i = this, r = i.element, o = ht[i._direction], a = -o.modifier * (o.vertical ? r.outerHeight() : r.outerWidth()), s = a / (i.options && i.options.divisor || 1) + Y, l = "0px"; i._reverse && (n = e, e = t, t = n), P ? (e[o.transition] = s, t[o.transition] = l) : (e[o.property] = s, t[o.property] = l) } }), c("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, r = e._direction, o = [C.fx(e.element).slideIn(r).setReverse(t)]; return n && o.push(C.fx(n).slideIn(ht[r].reverse).divisor(i).setReverse(!t)), o } }), d("fade", "opacity", 1, 0), d("zoom", "scale", 1, .01), c("slideMargin", { prepare: function(e, t) { var n, i = this, r = i.element, o = i.options, a = r.data(et), s = o.offset, l = i._reverse; l || null !== a || r.data(et, parseFloat(r.css("margin-" + o.axis))), n = r.data(et) || 0, t["margin-" + o.axis] = l ? n : n + s } }), c("slideTo", { prepare: function(e, t) { var n = this, i = n.element, r = n.options, o = r.offset.split(","), a = n._reverse; P ? (t.translatex = a ? 0 : o[0], t.translatey = a ? 0 : o[1]) : (t.left = a ? 0 : o[0], t.top = a ? 0 : o[1]), i.css("left") } }), c("expand", { directions: ["horizontal", "vertical"], restore: [nt], prepare: function(e, n) { var i = this, r = i.element, o = i.options, a = i._reverse, s = "vertical" === i._direction ? Z : X, l = r[0].style[s], c = r.data(s), d = parseFloat(c || l), u = q(r.css(s, K)[s]()); e.overflow = J, d = o && o.reset ? u || d : d || u, n[s] = (a ? 0 : d) + Y, e[s] = (a ? d : 0) + Y, c === t && r.data(s, l) }, shouldHide: function() { return this._reverse }, teardown: function() { var e = this, t = e.element, n = "vertical" === e._direction ? Z : X, i = t.data(n); (i == K || i === $) && setTimeout(function() { t.css(n, K).css(n) }, 0) } }), v = { position: "absolute", marginLeft: 0, marginTop: 0, scale: 1 }, c("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, r = S.box(i), o = S.box(n.options.target), a = s(i, "scale"), l = S.fillScale(o, r), c = S.transformOrigin(o, r); D(e, v), t.scale = 1, i.css(st, "scale(1)").css(st), i.css(st, "scale(" + a + ")"), e.top = r.top, e.left = r.left, e.transformOrigin = c.x + Y + " " + c.y + Y, 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)" }, w = { 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)" } }, c("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, r = i ? ht[n._direction].reverse : n._direction, o = w[r]; e.zIndex = 1, n._clipInHalf && (e.clip = u(n._container, C.directions[r].reverse)), e[lt] = J, t[st] = ut + (i ? o.start : o.end), e[st] = ut + (i ? o.end : o.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 } }), c("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 ? ht[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 } }), c("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", r = C.directions[i].reverse, o = t._reverse, a = n.face.clone(!0).removeAttr("id"), s = n.back.clone(!0).removeAttr("id"), l = t.element; return o && (e = i, i = r, r = e), [C.fx(n.face).staticPage(i, l).face(!0).setReverse(o), C.fx(n.back).staticPage(r, l).setReverse(o), C.fx(a).turningPage(i, l).face(!0).clipInHalf(!0).temporary().setReverse(o), C.fx(s).turningPage(r, l).clipInHalf(!0).temporary().setReverse(o)] }, prepare: function(e, t) { e[ct] = dt, e.transformStyle = "preserve-3d", e.opacity = .999, t.opacity = 1 }, teardown: function() { this.element.find(".temp-page").remove() } }), c("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", r = C.directions[i].reverse, o = t._reverse, a = t.element; return o && (e = i, i = r, r = e), [C.fx(n.face).turningPage(i, a).face(!0).setReverse(o), C.fx(n.back).turningPage(r, a).setReverse(o)] }, prepare: function(e) { e[ct] = dt, e.transformStyle = "preserve-3d" } }), b = !E.mobileOS.android, y = ".km-touch-scrollbar, .km-actionsheet-wrapper", c("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(y))) { var n = this.container; n.removeClass("k-fx-end").removeClass(this._containerClass()).off(M.event, this.completeProxy), this._previous.hide().removeClass("k-fx-current"), this.element.removeClass("k-fx-next"), b && n.css(nt, ""), this.isAbsolute || this._both().css(rt, ""), this.deferred.resolve(), delete this.deferred } }, run: function() { if (this._additionalEffects && this._additionalEffects[0]) return this.compositeRun(); var t, n = this, i = n.element, r = n._previous, o = i.parents().filter(r.parents()).first(), a = n._both(), s = e.Deferred(), l = i.css(rt); return o.length || (o = i.parent()), this.container = o, this.deferred = s, this.isAbsolute = "absolute" == l, this.isAbsolute || a.css(rt, "absolute"), b && (t = o.css(nt), o.css(nt, "hidden")), M ? (i.addClass("k-fx-hidden"), o.addClass(this._containerClass()), this.completeProxy = e.proxy(this, "complete"), o.on(M.event, this.completeProxy), C.animationFrame(function() { i.removeClass("k-fx-hidden").addClass("k-fx-next"), r.css("display", "").addClass("k-fx-current"), n._before(r, i), C.animationFrame(function() { o.removeClass("k-fx-start").addClass("k-fx-end"), n._after(r, i) }) })) : this.complete(), s.promise() }, stop: function() { this.complete() } }), k = 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 = k.extend({ init: function(e) { var t = this; D(t, e), k.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, r) { return r = 1.70158, n * ((e = e / i - 1) * e * ((r + 1) * e + r) + 1) + t } }), S.Animation = k, S.Transition = x, S.createEffect = c, S.box = function(t) { t = e(t); var n = t.offset(); return n.width = t.outerWidth(), n.height = t.outerHeight(), 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), function(e) { function t(e) { if (!e) return {}; var t = e.match(v) || []; return { type: t[1], direction: t[3], reverse: "reverse" === t[5] } } var n = window.kendo, i = n.Observable, r = "SCRIPT", o = "init", a = "show", s = "hide", l = "transitionStart", c = "transitionEnd", d = "attach", u = "detach", h = /unrecognized expression/, p = i.extend({ init: function(e, t) { var r = this; t = t || {}, i.fn.init.call(r), r.content = e, r.id = n.guid(), r.tagName = t.tagName || "div", r.model = t.model, r._wrap = t.wrap !== !1, this._evalTemplate = t.evalTemplate || !1, r._fragments = {}, r.bind([o, a, s, l, c], t) }, render: function(t) { var i = this, r = !i.element; return r && (i.element = i._createElement()), t && e(t).append(i.element), r && (n.bind(i.element, i.model), i.trigger(o)), t && (i._eachFragment(d), i.trigger(a)), i.element }, clone: function() { return new f(this) }, triggerBeforeShow: function() { return !0 }, triggerBeforeHide: function() { return !0 }, showStart: function() { this.element.css("display", "") }, showEnd: function() {}, hideEnd: function() { this.hide() }, beforeTransition: function(e) { this.trigger(l, { type: e }) }, afterTransition: function(e) { this.trigger(c, { type: e }) }, hide: function() { this._eachFragment(u), this.element.detach(), this.trigger(s) }, destroy: function() { var e = this.element; e && (n.unbind(e), n.destroy(e), e.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, i, o, a = this, s = "<" + a.tagName + " />"; try { i = e(document.getElementById(a.content) || a.content), i[0].tagName === r && (i = i.html()) } catch (l) { h.test(l.message) && (i = a.content) } return "string" == typeof i ? (i = i.replace(/^\s+|\s+$/g, ""), a._evalTemplate && (i = n.template(i)(a.model || {})), t = e(s).append(i), a._wrap || (t = t.contents())) : (t = i, a._evalTemplate && (o = e(n.template(e("
    ").append(t.clone(!0)).html())(a.model || {})), e.contains(document, t[0]) && t.replaceWith(o), t = o), a._wrap && (t = t.wrapAll(s).parent())), t } }), f = n.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 }), g = p.extend({ init: function(e, t) { p.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 _(i), t.bind("accepted", function(e) { e.view.render(i) }), t } }), m = p.extend({ attach: function(e, t) { e.element.find(t).replaceWith(this.render()) }, detach: function() {} }), v = /^(\w+)(:(\w+))?( (\w+))?$/, _ = i.extend({ init: function(e) { i.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, i, r) { if (!e.triggerBeforeShow() || this.view && !this.view.triggerBeforeHide()) return this.trigger("after"), !1; r = r || e.id; var o = this, a = e === o.view ? e.clone() : o.view, s = o.history, l = s[s.length - 2] || {}, c = l.id === r, d = i || (c ? s[s.length - 1].transition : e.transition), u = t(d); return o.running && o.effect.stop(), "none" === d && (d = null), o.trigger("accepted", { view: e }), o.view = e, o.previous = a, o.running = !0, c ? s.pop() : s.push({ id: r, transition: d }), a ? (d && n.effects.enabled ? (e.element.addClass("k-fx-hidden"), e.showStart(), c && !i && (u.reverse = !u.reverse), o.effect = n.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), o.effect.run().then(function() { o.end() })) : (e.showStart(), o.end()), !0) : (e.showStart(), e.showEnd(), o.after(), !0) } }); n.ViewContainer = _, n.Fragment = m, n.Layout = g, n.View = p, n.ViewClone = f }(window.kendo.jQuery), function(e) { function t() { this.node = null } function n() {} function i(e, t, n) { this.nodeName = e, this.attr = t || {}, this.children = n || [] } function r(e) { this.nodeValue = e } function o(e) { this.html = e } function a(e) { return new o(e) } function s(e, t, n) { return new i(e, t, n) } function l(e) { return new r(e) } function c(e) { this.root = e, this.children = [] } t.prototype = { remove: function() { this.node.parentNode.removeChild(this.node) }, attr: {} }, n.prototype = { nodeName: "#null", attr: { style: {} }, children: [], remove: function() {} }; var d = new n; i.prototype = new t, i.prototype.appendTo = function(e) { var t, n = document.createElement(this.nodeName), i = this.children; for (t = 0; i.length > t; t++) i[t].render(n, d); return e.appendChild(n), n }, i.prototype.render = function(e, t) { var n, i, r, o, a, s; if (t.nodeName !== this.nodeName) t.remove(), n = this.appendTo(e); else { if (n = t.node, r = this.children, o = r.length, a = t.children, s = a.length, Math.abs(s - o) > 2) return void this.render({ appendChild: function(n) { e.replaceChild(n, t.node) } }, d); for (i = 0; o > i; i++) r[i].render(n, a[i] || d); for (i = o; s > i; i++) a[i].remove() } this.node = n, this.syncAttributes(t.attr), this.removeAttributes(t.attr) }, i.prototype.syncAttributes = function(e) { var t, n, i, r = this.attr; for (t in r) n = r[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) }, r.prototype = new t, r.prototype.nodeName = "#text", r.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.nodeValue = this.nodeValue)), this.node = n }, o.prototype = { nodeName: "#html", attr: {}, remove: function() { for (var e = 0; this.nodes.length > e; e++) this.nodes[e].parentNode.removeChild(this.nodes[e]) }, render: function(e, t) { var n, i; if (t.nodeName !== this.nodeName || t.html !== this.html) for (t.remove(), n = e.lastChild, e.insertAdjacentHTML("beforeend", 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) } }, c.prototype = { html: a, element: s, text: l, render: function(e) { var t, n, i = this.children; for (t = 0, n = e.length; n > t; t++) e[t].render(this.root, i[t] || d); for (t = n; i.length > t; t++) i[t].remove(); this.children = e } }, e.dom = { html: a, text: l, element: s, Tree: c } }(window.kendo), function(e, t) { function n(e) { var t = Math.floor(e / 26) - 1; return (t >= 0 ? n(t) : "") + String.fromCharCode(65 + e % 26) } function i(e, t) { return n(t) + (e + 1) } function r(e, t) { return n(t) + "$" + (e + 1) } function o(e) { return ((e.freezePane || {}).rowSplit || 1) - 1 } function a(e) { return 6 > e.length && (e = e.replace(/(\w)/g, function(e, t) { return t + t })), e = e.substring(1).toUpperCase(), 8 > e.length && (e = "FF" + e), e } var s = '\r\n', l = t.template('\r\n${creator}${lastModifiedBy}${created}${modified}'), c = t.template('\r\nMicrosoft Excel0falseWorksheets${sheets.length}# for (var idx = 0; idx < sheets.length; idx++) { ## if (sheets[idx].options.title) { #${sheets[idx].options.title}# } else { #Sheet${idx+1}# } ## } #falsefalsefalse14.0300'), d = t.template('\r\n# for (var idx = 1; idx <= count; idx++) { ## } #'), u = t.template('\r\n# for (var idx = 0; idx < sheets.length; idx++) { ## if (sheets[idx].options.title) { ## } else { ## } ## } ## if (definedNames.length) { # # for (var di = 0; di < definedNames.length; di++) { # # } ## } #'), h = t.template('\r\n# if (freezePane) { ## } ## if (columns) { ## for (var ci = 0; ci < columns.length; ci++) { ## var column = columns[ci]; ## if (column.width) { ## } ## } ## } ## for (var ri = 0; ri < data.length; ri++) { ## var row = data[ri]; ## for (var ci = 0; ci < row.data.length; ci++) { ## var cell = row.data[ci];## if (cell.value != null) { #${cell.value}# } ## } ## } ## if (filter) { ## } ## if (mergeCells.length) { ## for (var ci = 0; ci < mergeCells.length; ci++) { ## } ## } #'), p = t.template('\r\n# for (var idx = 1; idx <= count; idx++) { ## } #'), f = t.template('\r\n# for (var index in indexes) { #${index.substring(1)}# } #'), g = t.template('# for (var fi = 0; fi < formats.length; fi++) { ## var format = formats[fi]; ## } ## for (var fi = 0; fi < fonts.length; fi++) { ## var font = fonts[fi]; ## if (font.bold) { ## } ## if (font.italic) { ## } ## if (font.underline) { ## } ## if (font.color) { ## } else { ## } ## if (font.fontSize) { ## } else { ## } ## if (font.fontName) { ## } else { ## } ## } ## for (var fi = 0; fi < fills.length; fi++) { ## var fill = fills[fi]; ## if (fill.background) { ## } ## } ## for (var si = 0; si < styles.length; si++) { ## var style = styles[si]; ## if (style.hAlign || style.vAlign || style.wrap) { ## } ## } #'), m = t.timezone.remove(new Date(1900, 0, 0), "Etc/UTC"), v = t.Class.extend({ init: function(e, t, n) { this.options = e, this._strings = t, this._styles = n, this._mergeCells = [] }, toXML: function(e) { var t, n, r = this.options.rows || [], a = this.options.filter, s = {}; for (this._maxCellIndex = 0, t = [], n = 0; r.length > n; n++) t.push(this._row(r, s, r[n], n)); return h({ freezePane: this.options.freezePane, columns: this.options.columns, data: t, index: e, mergeCells: this._mergeCells, filter: a ? { from: i(o(this.options), a.from), to: i(o(this.options), a.to) } : null }) }, _row: function(e, t, n, r) { var o, a, s, l, c, d; for (this._cellIndex && this._cellIndex > this._maxCellIndex && (this._maxCellIndex = this._cellIndex), this._cellIndex = 0, a = [], s = n.cells, l = 0, c = s.length; c > l; l++) o = this._cell(s[l], t, r), o && a.push.apply(a, o); for (; this._maxCellIndex > this._cellIndex;) d = t[this._cellIndex], d && (d.rowSpan -= 1), a.push({ ref: i(r, this._cellIndex) }), this._cellIndex++; return { data: a } }, _lookupString: function(e) { var t = "$" + e, n = this._strings.indexes[t]; return void 0 !== n ? e = n : (e = this._strings.indexes[t] = this._strings.uniqueCount, this._strings.uniqueCount++), this._strings.count++, e }, _lookupStyle: function(n) { var i, r = t.stringify(n); return "{}" == r ? 0 : (i = e.inArray(r, this._styles), 0 > i && (i = this._styles.push(r) - 1), i + 1) }, _cell: function(e, n, r) { var o, a, s, l, c, d, u, h, p, f, g, v; if (!e) return void this._cellIndex++; for (o = e.value, a = { bold: e.bold, color: e.color, background: e.background, italic: e.italic, underline: e.underline, fontName: e.fontName, fontSize: e.fontSize, format: e.format, hAlign: e.hAlign, vAlign: e.vAlign, wrap: e.wrap }, s = this.options.columns || [], l = s[this._cellIndex], l && l.autoWidth && (l.width = Math.max(l.width || 0, ("" + o).length)), c = typeof o, "string" === c ? (o = this._lookupString(o), c = "s") : "number" === c ? c = "n" : "boolean" === c ? (c = "b", o = +o) : o && o.getTime ? (c = null, o = (t.timezone.remove(o, "Etc/UTC") - m) / t.date.MS_PER_DAY + 1, a.format || (a.format = "mm-dd-yy")) : (c = null, o = ""), a = this._lookupStyle(a), d = [], p = n[this._cellIndex] || {}; p.rowSpan > 1;) { for (p.rowSpan -= 1, u = p.colSpan; u > 0;) d.push({ ref: i(r, this._cellIndex) }), u--, this._cellIndex++; p = n[this._cellIndex] || {} } if (h = i(r, this._cellIndex), d.push({ value: o, type: c, style: a, ref: h }), f = e.colSpan || 1, g = e.rowSpan || 1, f > 1 || g > 1) { for (g > 1 && (n[this._cellIndex] = { colSpan: f, rowSpan: g }), v = 1; f > v; v++) this._cellIndex++, d.push({ ref: i(r, this._cellIndex) }); this._mergeCells.push(h + ":" + i(r + g - 1, this._cellIndex)) } return this._cellIndex++, d } }), _ = { 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 }, w = t.Class.extend({ init: function(t) { this.options = t || {}, this._strings = { indexes: {}, count: 0, uniqueCount: 0 }, this._styles = [], this._sheets = e.map(this.options.sheets || [], e.proxy(function(e) { return new v(e, this._strings, this._styles) }, this)) }, toDataURL: function() { var n, i, h, m, v, w, b, y, k, x, C, S, T, D; if ("undefined" == typeof JSZip) throw Error("JSZip not found. Check http://docs.telerik.com/kendo-ui/framework/excel/introduction#requirements for more details."); for (n = new JSZip, i = n.folder("docProps"), i.file("core.xml", l({ 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() })), h = this._sheets.length, i.file("app.xml", c({ sheets: this._sheets })), m = n.folder("_rels"), m.file(".rels", s), v = n.folder("xl"), w = v.folder("_rels"), w.file("workbook.xml.rels", p({ count: h })), v.file("workbook.xml", u({ sheets: this._sheets, definedNames: e.map(this._sheets, function(e, t) { var n = e.options, i = n.filter; return i ? { localSheetId: t, name: n.title || "Sheet" + (t + 1), from: r(o(n), i.from), to: r(o(n), i.to) } : void 0 }) })), b = v.folder("worksheets"), y = new Date, k = 0; h > k; k++) b.file(t.format("sheet{0}.xml", k + 1), this._sheets[k].toXML(k)); return x = e.map(this._styles, e.parseJSON), C = function(e) { return e.underline || e.bold || e.italic || e.color || e.fontName || e.fontSize }, S = e.map(x, function(e) { return e.color && (e.color = a(e.color)), C(e) ? e : void 0 }), T = e.map(x, function(e) { return e.format && void 0 === _[e.format] ? e : void 0 }), D = e.map(x, function(e) { return e.background ? (e.background = a(e.background), e) : void 0 }), v.file("styles.xml", g({ fonts: S, fills: D, formats: T, styles: e.map(x, function(t) { var n = {}; return C(t) && (n.fontId = e.inArray(t, S) + 1), t.background && (n.fillId = e.inArray(t, D) + 2), n.hAlign = t.hAlign, n.vAlign = t.vAlign, n.wrap = t.wrap, t.format && (n.numFmtId = void 0 !== _[t.format] ? _[t.format] : 165 + e.inArray(t, T)), n }) })), v.file("sharedStrings.xml", f(this._strings)), n.file("[Content_Types].xml", d({ count: h })), "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," + n.generate({ compression: "DEFLATE" }) } }); t.ooxml = { Workbook: w, Worksheet: v } }(kendo.jQuery, kendo), function(e, t) { t.ExcelExporter = t.Class.extend({ init: function(n) { var i, r, o; n.columns = this._trimColumns(n.columns || []), this.allColumns = e.map(this._leafColumns(n.columns || []), this._prepareColumn), this.columns = e.grep(this.allColumns, function(e) { return !e.hidden }), this.options = n, i = n.dataSource, i instanceof t.data.DataSource ? (this.dataSource = new i.constructor(e.extend({}, i.options, { page: n.allPages ? 0 : i.page(), filter: i.filter(), pageSize: n.allPages ? i.total() : i.pageSize(), sort: i.sort(), group: i.group(), aggregate: i.aggregate() })), r = i.data(), r.length > 0 && (this.dataSource._data = r, o = this.dataSource.transport, i._isServerGrouped() && o.options.data && (o.options.data = null))) : this.dataSource = t.data.DataSource.create(i) }, _trimColumns: function(t) { var n = this; return e.grep(t, function(e) { var t = !!e.field; return !t && e.columns && (t = n._trimColumns(e.columns).length > 0), t }) }, _leafColumns: function(e) { var t, n = []; for (t = 0; e.length > t; t++) e[t].columns ? n = n.concat(this._leafColumns(e[t].columns)) : n.push(e[t]); return n }, workbook: function() { return e.Deferred(e.proxy(function(t) { this.dataSource.fetch().then(e.proxy(function() { var e = { sheets: [{ columns: this._columns(), rows: this._rows(), freezePane: this._freezePane(), filter: this._filter() }] }; t.resolve(e, this.dataSource.view()) }, this)) }, this)).promise() }, _prepareColumn: function(n) { var i, r; if (n.field) return i = function(e) { return e.get(n.field) }, r = null, n.values && (r = {}, e.each(n.values, function() { r[this.value] = this.text }), i = function(e) { return r[e.get(n.field)] }), e.extend({}, n, { value: i, values: r, groupHeaderTemplate: t.template(n.groupHeaderTemplate || "${title}: ${value}"), groupFooterTemplate: n.groupFooterTemplate ? t.template(n.groupFooterTemplate) : null, footerTemplate: n.footerTemplate ? t.template(n.footerTemplate) : null }) }, _filter: function() { if (!this.options.filterable) return null; var e = this._depth(); return { from: e, to: e + this.columns.length - 1 } }, _dataRow: function(t, n, i) { var r, o, a, s, l, c, d, u, h, p; for (this._hierarchical() && (n = this.dataSource.level(t) + 1), r = [], o = 0; n > o; o++) r[o] = { background: "#dfdfdf", color: "#333" }; if (i && t.items) return a = e.grep(this.allColumns, function(e) { return e.field == t.field })[0], s = a && a.title ? a.title : t.field, l = a ? a.groupHeaderTemplate : null, c = s + ": " + t.value, d = e.extend({ title: s, field: t.field, value: a && a.values ? a.values[t.value] : t.value, aggregates: t.aggregates }, t.aggregates[t.field]), l && (c = l(d)), r.push({ value: c, background: "#dfdfdf", color: "#333", colSpan: this.columns.length + i - n }), u = this._dataRows(t.items, n + 1), u.unshift({ type: "group-header", cells: r }), u.concat(this._footer(t)); for (h = [], p = 0; this.columns.length > p; p++) h[p] = this._cell(t, this.columns[p]); return this._hierarchical() && (h[0].colSpan = i - n + 1), [{ type: "data", cells: r.concat(h) }] }, _dataRows: function(e, t) { var n, i = this._depth(), r = []; for (n = 0; e.length > n; n++) r.push.apply(r, this._dataRow(e[n], t, i)); return r }, _footer: function(t) { var n = [], i = !1, r = e.map(this.columns, e.proxy(function(n) { return n.groupFooterTemplate ? (i = !0, { background: "#dfdfdf", color: "#333", value: n.groupFooterTemplate(e.extend({}, this.dataSource.aggregates(), t.aggregates, t.aggregates[n.field])) }) : { background: "#dfdfdf", color: "#333" } }, this)); return i && n.push({ type: "group-footer", cells: e.map(Array(this.dataSource.group().length), function() { return { background: "#dfdfdf", color: "#333" } }).concat(r) }), n }, _isColumnVisible: function(e) { return this._visibleColumns([e]).length > 0 && (e.field || e.columns) }, _visibleColumns: function(t) { var n = this; return e.grep(t, function(e) { var t = !e.hidden; return t && e.columns && (t = n._visibleColumns(e.columns).length > 0), t }) }, _headerRow: function(t, n) { var i = e.map(t.cells, function(e) { return { background: "#7a7a7a", color: "#fff", value: e.title, colSpan: e.colSpan > 1 ? e.colSpan : 1, rowSpan: t.rowSpan > 1 && !e.colSpan ? t.rowSpan : 1 } }); return this._hierarchical() && (i[0].colSpan = this._depth() + 1), { type: "header", cells: e.map(Array(n.length), function() { return { background: "#7a7a7a", color: "#fff" } }).concat(i) } }, _prependHeaderRows: function(e) { var t, n = this.dataSource.group(), i = [{ rowSpan: 1, cells: [], index: 0 }]; for (this._prepareHeaderRows(i, this.options.columns), t = i.length - 1; t >= 0; t--) e.unshift(this._headerRow(i[t], n)) }, _prepareHeaderRows: function(e, t, n, i) { var r, o, a, s = i || e[e.length - 1], l = e[s.index + 1], c = 0; for (a = 0; t.length > a; a++) r = t[a], this._isColumnVisible(r) && (o = { title: r.title || r.field, colSpan: 0 }, s.cells.push(o), r.columns && r.columns.length && (l || (l = { rowSpan: 0, cells: [], index: e.length }, e.push(l)), o.colSpan = this._trimColumns(this._visibleColumns(r.columns)).length, this._prepareHeaderRows(e, r.columns, o, l), c += o.colSpan - 1, s.rowSpan = e.length - s.index)); n && (n.colSpan += c) }, _rows: function() { var t, n, i = this.dataSource.group(), r = this._dataRows(this.dataSource.view(), 0); return this.columns.length && (this._prependHeaderRows(r), t = !1, n = e.map(this.columns, e.proxy(function(n) { if (n.footerTemplate) { t = !0; var i = this.dataSource.aggregates(); return { background: "#dfdfdf", color: "#333", value: n.footerTemplate(e.extend({}, i, i[n.field])) } } return { background: "#dfdfdf", color: "#333" } }, this)), t && r.push({ type: "footer", cells: e.map(Array(i.length), function() { return { background: "#dfdfdf", color: "#333" } }).concat(n) })), r }, _headerDepth: function(e) { var t, n, i = 1, r = 0; for (t = 0; e.length > t; t++) e[t].columns && (n = this._headerDepth(e[t].columns), n > r && (r = n)); return i + r }, _freezePane: function() { var t = this._visibleColumns(this.options.columns || []), n = this._visibleColumns(this._trimColumns(this._leafColumns(e.grep(t, function(e) { return e.locked })))).length; return { rowSplit: this._headerDepth(t), colSplit: n ? n + this.dataSource.group().length : 0 } }, _cell: function(e, t) { return { value: t.value(e) } }, _hierarchical: function() { return this.options.hierarchy && this.dataSource.level }, _depth: function() { var e, t, n, i = this.dataSource, r = 0; if (this._hierarchical()) { for (e = i.view(), t = 0; e.length > t; t++) n = i.level(e[t]), n > r && (r = n); r++ } else r = i.group().length; return r }, _columns: function() { var t = this._depth(), n = e.map(Array(t), function() { return { width: 20 } }); return n.concat(e.map(this.columns, function(e) { return { width: parseInt(e.width, 10), autoWidth: e.width ? !1 : !0 } })) } }), 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" }, 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 }); i.workbook().then(e.proxy(function(e, i) { if (!this.trigger("excelExport", { workbook: e, data: i })) { var r = new t.ooxml.Workbook(e); t.saveAs({ dataURI: r.toDataURL(), fileName: e.fileName || n.fileName, proxyURL: n.proxyURL, forceProxy: n.forceProxy }) } }, this)) } } }(kendo.jQuery, kendo), function(e) { var t = kendo.data.RemoteTransport.extend({ init: function(e) { var t, n = e && e.signalr ? e.signalr : {}, i = n.promise; if (!i) throw Error('The "promise" option must be set.'); if ("function" != typeof i.done || "function" != typeof i.fail) throw Error('The "promise" option must be a Promise.'); if (this.promise = i, t = n.hub, !t) throw Error('The "hub" option must be set.'); if ("function" != typeof t.on || "function" != typeof t.invoke) throw Error('The "hub" option is not a valid SignalR hub proxy.'); this.hub = t, kendo.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(t, n) { var i, r, o = this.hub, a = this.options.signalr.server; if (!a || !a[n]) throw Error(kendo.format('The "server.{0}" option must be set.', n)); i = [a[n]], r = this.parameterMap(t.data, n), e.isEmptyObject(r) || i.push(r), this.promise.done(function() { o.invoke.apply(o, i).done(t.success).fail(t.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, kendo.data, { transports: { signalr: t } }) }(window.kendo.jQuery), function(e, t, n) { function i(e, r) { var a, d; if (null == e || "none" == e) return null; if (e instanceof s) return e; if (e = e.toLowerCase(), a = o.exec(e)) return e = "transparent" == a[1] ? new l(1, 1, 1, 0) : i(u.namedColors[a[1]], r), e.match = [a[1]], e; if ((a = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\b/i.exec(e)) ? d = new c(n(a[1], 16), n(a[2], 16), n(a[3], 16), 1) : (a = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\b/i.exec(e)) ? d = new c(n(a[1] + a[1], 16), n(a[2] + a[2], 16), n(a[3] + a[3], 16), 1) : (a = /^rgb\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/.exec(e)) ? d = new c(n(a[1], 10), n(a[2], 10), n(a[3], 10), 1) : (a = /^rgba\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9.]+)\s*\)/.exec(e)) ? d = new c(n(a[1], 10), n(a[2], 10), n(a[3], 10), t(a[4])) : (a = /^rgb\(\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9]*\.?[0-9]+)%\s*\)/.exec(e)) ? d = new l(t(a[1]) / 100, t(a[2]) / 100, t(a[3]) / 100, 1) : (a = /^rgba\(\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9]*\.?[0-9]+)%\s*,\s*([0-9.]+)\s*\)/.exec(e)) && (d = new l(t(a[1]) / 100, t(a[2]) / 100, t(a[3]) / 100, t(a[4]))), d) d.match = a; else if (!r) throw Error("Cannot parse color: " + e); return d } function r(e, t, n) { for (n || (n = "0"), e = e.toString(16); t > e.length;) e = "0" + e; return e } var o, a, s, l, c, d, u = function(e) { var t, n, i, r, o, a = this, s = u.formats; if (1 === arguments.length) for (e = a.resolveColor(e), r = 0; s.length > r; r++) t = s[r].re, n = s[r].process, i = t.exec(e), i && (o = n(i), a.r = o[0], a.g = o[1], a.b = o[2]); else a.r = arguments[0], a.g = arguments[1], a.b = arguments[2]; a.r = a.normalizeByte(a.r), a.g = a.normalizeByte(a.g), a.b = a.normalizeByte(a.b) }; u.prototype = { toHex: function() { var e = this, t = e.padDigit, n = e.r.toString(16), i = e.g.toString(16), r = e.b.toString(16); return "#" + t(n) + t(i) + t(r) }, resolveColor: function(e) { return e = e || "black", "#" == e.charAt(0) && (e = e.substr(1, 6)), e = e.replace(/ /g, ""), e = e.toLowerCase(), e = u.namedColors[e] || e }, normalizeByte: function(e) { return 0 > e || isNaN(e) ? 0 : e > 255 ? 255 : e }, padDigit: function(e) { return 1 === e.length ? "0" + e : e }, brightness: function(e) { var t = this, n = Math.round; return t.r = n(t.normalizeByte(t.r * e)), t.g = n(t.normalizeByte(t.g * e)), t.b = n(t.normalizeByte(t.b * e)), t }, percBrightness: function() { var e = this; return Math.sqrt(.241 * e.r * e.r + .691 * e.g * e.g + .068 * e.b * e.b) } }, u.formats = [{ re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, process: function(e) { return [n(e[1], 10), n(e[2], 10), n(e[3], 10)] } }, { re: /^(\w{2})(\w{2})(\w{2})$/, process: function(e) { return [n(e[1], 16), n(e[2], 16), n(e[3], 16)] } }, { re: /^(\w{1})(\w{1})(\w{1})$/, process: function(e) { return [n(e[1] + e[1], 16), n(e[2] + e[2], 16), n(e[3] + e[3], 16)] } }], u.namedColors = { aqua: "00ffff", azure: "f0ffff", beige: "f5f5dc", black: "000000", blue: "0000ff", brown: "a52a2a", coral: "ff7f50", cyan: "00ffff", darkblue: "00008b", darkcyan: "008b8b", darkgray: "a9a9a9", darkgreen: "006400", darkorange: "ff8c00", darkred: "8b0000", dimgray: "696969", fuchsia: "ff00ff", gold: "ffd700", goldenrod: "daa520", gray: "808080", green: "008000", greenyellow: "adff2f", indigo: "4b0082", ivory: "fffff0", khaki: "f0e68c", lightblue: "add8e6", lightgrey: "d3d3d3", lightgreen: "90ee90", lightpink: "ffb6c1", lightyellow: "ffffe0", lime: "00ff00", limegreen: "32cd32", linen: "faf0e6", magenta: "ff00ff", maroon: "800000", mediumblue: "0000cd", navy: "000080", olive: "808000", orange: "ffa500", orangered: "ff4500", orchid: "da70d6", pink: "ffc0cb", plum: "dda0dd", purple: "800080", red: "ff0000", royalblue: "4169e1", salmon: "fa8072", silver: "c0c0c0", skyblue: "87ceeb", slateblue: "6a5acd", slategray: "708090", snow: "fffafa", steelblue: "4682b4", tan: "d2b48c", teal: "008080", tomato: "ff6347", turquoise: "40e0d0", violet: "ee82ee", wheat: "f5deb3", white: "ffffff", whitesmoke: "f5f5f5", yellow: "ffff00", yellowgreen: "9acd32" }, o = ["transparent"]; for (a in u.namedColors) u.namedColors.hasOwnProperty(a) && o.push(a); o = RegExp("^(" + o.join("|") + ")(\\W|$)", "i"), s = kendo.Class.extend({ 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 + ", " + t((+this.a).toFixed(3)) + ")" }, toDisplay: function() { return kendo.support.browser.msie && 9 > kendo.support.browser.version ? this.toCss() : this.toCssRgba() }, equals: function(e) { return e === this || null !== e && this.toCssRgba() == i(e).toCssRgba() }, diff: function(e) { if (null == e) return 0 / 0; var t = this.toBytes(); return e = e.toBytes(), Math.sqrt(Math.pow(.3 * (t.r - e.r), 2) + Math.pow(.59 * (t.g - e.g), 2) + Math.pow(.11 * (t.b - e.b), 2)) }, clone: function() { var e = this.toBytes(); return e === this && (e = new c(e.r, e.g, e.b, e.a)), e } }), l = s.extend({ init: function(e, t, n, i) { this.r = e, this.g = t, this.b = n, this.a = i }, toHSV: function() { var e, t, n = this.r, i = this.g, r = this.b, o = Math.min(n, i, r), a = Math.max(n, i, r), s = a, l = a - o; return 0 === l ? new d(0, 0, s, this.a) : (0 !== a ? (t = l / a, e = n == a ? (i - r) / l : i == a ? 2 + (r - n) / l : 4 + (n - i) / l, e *= 60, 0 > e && (e += 360)) : (t = 0, e = -1), new d(e, t, s, this.a)) }, toBytes: function() { return new c(255 * this.r, 255 * this.g, 255 * this.b, this.a) } }), c = l.extend({ init: function(e, t, n, i) { this.r = Math.round(e), this.g = Math.round(t), this.b = Math.round(n), this.a = i }, toRGB: function() { return new l(this.r / 255, this.g / 255, this.b / 255, this.a) }, toHSV: function() { return this.toRGB().toHSV() }, toHex: function() { return r(this.r, 2) + r(this.g, 2) + r(this.b, 2) }, toBytes: function() { return this } }), d = s.extend({ init: function(e, t, n, i) { this.h = e, this.s = t, this.v = n, this.a = i }, toRGB: function() { var e, t, n, i, r, o, a, s, c = this.h, d = this.s, u = this.v; if (0 === d) t = n = i = u; else switch (c /= 60, e = Math.floor(c), r = c - e, o = u * (1 - d), a = u * (1 - d * r), s = u * (1 - d * (1 - r)), e) { case 0: t = u, n = s, i = o; break; case 1: t = a, n = u, i = o; break; case 2: t = o, n = u, i = s; break; case 3: t = o, n = a, i = u; break; case 4: t = s, n = o, i = u; break; default: t = u, n = o, i = a } return new l(t, n, i, this.a) }, toBytes: function() { return this.toRGB().toBytes() } }), u.fromBytes = function(e, t, n, i) { return new c(e, t, n, null != i ? i : 1) }, u.fromRGB = function(e, t, n, i) { return new l(e, t, n, null != i ? i : 1) }, u.fromHSV = function(e, t, n, i) { return new d(e, t, n, null != i ? i : 1) }, kendo.Color = u, kendo.parseColor = i }(window.kendo.jQuery, parseFloat, parseInt), function(e) { function t(e) { return typeof e !== F } function n(e, t) { var n = i(t); return A.round(e * n) / n } function i(e) { return e ? A.pow(10, e) : 1 } function r(e, t, n) { return A.max(A.min(e, n), t) } function o(e) { return e * P } function a(e) { return e / P } function s(e) { return "number" == typeof e && !isNaN(e) } function l(e, n) { return t(e) ? e : n } function c(e) { return e * e } function d(e) { var t, n = []; for (t in e) n.push(t + e[t]); return n.sort().join("") } function u(e) { var t, n = 2166136261; for (t = 0; e.length > t; ++t) n += (n << 1) + (n << 4) + (n << 7) + (n << 8) + (n << 24), n ^= e.charCodeAt(t); return n >>> 0 } function h(e) { return u(d(e)) } function p(e) { var t, n = e.length, i = M, r = z; for (t = 0; n > t; t++) r = A.max(r, e[t]), i = A.min(i, e[t]); return { min: i, max: r } } function f(e) { return p(e).min } function g(e) { return p(e).max } function m(e) { return _(e).min } function v(e) { return _(e).max } function _(e) { var t, n, i, r = M, o = z; for (t = 0, n = e.length; n > t; t++) i = e[t], null !== i && isFinite(i) && (r = A.min(r, i), o = A.max(o, i)); return { min: r === M ? void 0 : r, max: o === z ? void 0 : o } } function w(e) { return e ? e[e.length - 1] : void 0 } function b(e, t) { return e.push.apply(e, t), e } function y(e) { return E.template(e, { useWithBlock: !1, paramName: "d" }) } function k(e, n) { return t(n) && null !== n ? " " + e + "='" + n + "' " : "" } function x(e) { var t, n = ""; for (t = 0; e.length > t; t++) n += k(e[t][0], e[t][1]); return n } function C(e) { var n, i, r = ""; for (n = 0; e.length > n; n++) i = e[n][1], t(i) && (r += e[n][0] + ":" + i + ";"); return "" !== r ? r : void 0 } function S(e) { return "string" != typeof e && (e += "px"), e } function T(e) { var t, n, i = []; if (e) for (t = E.toHyphens(e).split("-"), n = 0; t.length > n; n++) i.push("k-pos-" + t[n]); return i.join(" ") } function D(e) { return "" === e || null === e || "none" === e || "transparent" === e || !t(e) } var A = Math, E = window.kendo, I = E.deepExtend, P = A.PI / 180, M = Number.MAX_VALUE, z = -Number.MAX_VALUE, F = "undefined", R = Date.now; R || (R = function() { return (new Date).getTime() }), I(E, { util: { MAX_NUM: M, MIN_NUM: z, append: b, arrayLimits: p, arrayMin: f, arrayMax: g, defined: t, deg: a, hashKey: u, hashObject: h, isNumber: s, isTransparent: D, last: w, limitValue: r, now: R, objectKey: d, round: n, rad: o, renderAttr: k, renderAllAttr: x, renderPos: T, renderSize: S, renderStyle: C, renderTemplate: y, sparseArrayLimits: _, sparseArrayMin: m, sparseArrayMax: v, sqr: c, valueOrDefault: l } }), E.dataviz.util = E.util }(window.kendo.jQuery), function() { function e(e) { var n, i, r, a, s, l, c, d = "", u = 0; for (e = t(e); e.length > u;) n = e.charCodeAt(u++), i = e.charCodeAt(u++), r = e.charCodeAt(u++), a = n >> 2, s = (3 & n) << 4 | i >> 4, l = (15 & i) << 2 | r >> 6, c = 63 & r, isNaN(i) ? l = c = 64 : isNaN(r) && (c = 64), d = d + o.charAt(a) + o.charAt(s) + o.charAt(l) + o.charAt(c); return d } function t(e) { var t, n, i = ""; for (t = 0; e.length > t; t++) n = e.charCodeAt(t), 128 > n ? i += r(n) : 2048 > n ? (i += r(192 | n >>> 6), i += r(128 | 63 & n)) : 65536 > n && (i += r(224 | n >>> 12), i += r(128 | n >>> 6 & 63), i += r(128 | 63 & n)); return i } var n = window.kendo, i = n.deepExtend, r = String.fromCharCode, o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; i(n.util, { encodeBase64: e, encodeUTF8: t }) }(window.kendo.jQuery), function(e) { var t = Math, n = window.kendo, i = n.deepExtend, r = e.inArray, o = { 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 = r(e, t); return -1 != n && t.splice(n, 1), this }, trigger: function(e, t) { var n, i, r = this._observers; if (r && !this._suspended) for (i = 0; r.length > i; i++) n = r[i], n[e] && n[e](t); return this }, optionsChange: function(e) { this.trigger("optionsChange", e) }, geometryChange: function(e) { this.trigger("geometryChange", e) }, suspend: function() { return this._suspended = (this._suspended || 0) + 1, this }, resume: function() { return this._suspended = t.max((this._suspended || 0) - 1, 0), this }, _observerField: function(e, t) { this[e] && this[e].removeObserver(this), this[e] = t, t.addObserver(this) } }; i(n, { mixins: { ObserversMixin: o } }) }(window.kendo.jQuery), function(e) { function t(e) { return null === e ? null : e instanceof m ? e : new m(e) } function n(e) { return e && w.isFunction(e.matrix) ? e.matrix() : e } function i(e, t, n, i) { var r = 0, o = 0; return i && (r = v.atan2(i.c * n, i.a * t), 0 !== i.b && (o = v.atan2(i.d * n, i.b * t))), { x: r, y: o } } function r(e, t) { for (; t > e;) e += 90; return e } function o(e, t) { var n, i, r; for (n = 0; t.length > n; n++) i = t[n], r = i.charAt(0).toUpperCase() + i.substring(1, i.length), e["set" + r] = a(i), e["get" + r] = s(i) } function a(e) { return function(t) { return this[e] !== t && (this[e] = t, this.geometryChange()), this } } function s(e) { return function() { return this[e] } } function l(e, t, n) { e > t && (t += 360); var i = v.abs(t - e); return n || (i = 360 - i), i } function c(e, t, n, i, r, o) { var a = D((r - e) / n, 3), s = D((o - t) / i, 3); return D(T(v.atan2(s, a))) } function d(e, t, n, i, r, o, a, s) { var d, u, h, p, f, g, m, w, b, y, k, x, C, S, T, D, A, E; if (t !== i) b = n - e, y = i - t, k = _(r, 2), x = _(o, 2), C = (x * b * (e + n) + k * y * (t + i)) / (2 * k * y), S = C - i, T = -(b * x) / (k * y), f = 1 / k + _(T, 2) / x, g = 2 * (T * S / x - n / k), m = _(n, 2) / k + _(S, 2) / x - 1, w = v.sqrt(_(g, 2) - 4 * f * m), d = (-g - w) / (2 * f), u = C + T * d, h = (-g + w) / (2 * f), p = C + T * h; else { if (e === n) return !1; g = -2 * i, m = _((n - e) * o / (2 * r), 2) + _(i, 2) - _(o, 2), w = v.sqrt(_(g, 2) - 4 * m), d = h = (e + n) / 2, u = (-g - w) / 2, p = (-g + w) / 2 } return D = c(d, u, r, o, e, t), A = c(d, u, r, o, n, i), E = l(D, A, s), (a && 180 >= E || !a && E > 180) && (d = h, u = p, D = c(d, u, r, o, e, t), A = c(d, u, r, o, n, i)), { center: new P(d, u), startAngle: D, endAngle: A } } var u, h, p, f, g, m, v = Math, _ = v.pow, w = window.kendo, b = w.Class, y = w.deepExtend, k = w.mixins.ObserversMixin, x = w.util, C = x.defined, S = x.rad, T = x.deg, D = x.round, A = v.PI / 2, E = x.MIN_NUM, I = x.MAX_NUM, P = b.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 P(this.x, this.y) }, rotate: function(e, n) { return this.transform(t().rotate(e, n)) }, 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 C(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 = n(e), i = this.x, r = this.y; return this.x = t.a * i + t.c * r + t.e, this.y = t.b * i + t.d * r + 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 v.sqrt(t * t + n * n) }, round: function(e) { return this.x = D(this.x, e), this.y = D(this.y, e), this.geometryChange(), this }, toArray: function(e) { var t = C(e), n = t ? D(this.x, e) : this.x, i = t ? D(this.y, e) : this.y; return [n, i] } }); o(P.fn, ["x", "y"]), y(P.fn, k), P.fn.toString = function(e, t) { var n = this.x, i = this.y; return C(e) && (n = D(n, e), i = D(i, e)), t = t || " ", n + t + i }, P.create = function(e, t) { return C(e) ? e instanceof P ? e : 1 === arguments.length && 2 === e.length ? new P(e[0], e[1]) : new P(e, t) : void 0 }, P.min = function() { var e, t, n = x.MAX_NUM, i = x.MAX_NUM; for (e = 0; arguments.length > e; e++) t = arguments[e], n = v.min(t.x, n), i = v.min(t.y, i); return new P(n, i) }, P.max = function() { var e, t, n = x.MIN_NUM, i = x.MIN_NUM; for (e = 0; arguments.length > e; e++) t = arguments[e], n = v.max(t.x, n), i = v.max(t.y, i); return new P(n, i) }, P.minPoint = function() { return new P(E, E) }, P.maxPoint = function() { return new P(I, I) }, P.ZERO = new P(0, 0), u = b.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 u(this.width, this.height) }, toArray: function(e) { var t = C(e), n = t ? D(this.width, e) : this.width, i = t ? D(this.height, e) : this.height; return [n, i] } }), o(u.fn, ["width", "height"]), y(u.fn, k), u.create = function(e, t) { return C(e) ? e instanceof u ? e : 1 === arguments.length && 2 === e.length ? new u(e[0], e[1]) : new u(e, t) : void 0 }, u.ZERO = new u(0, 0), h = b.extend({ init: function(e, t) { this.setOrigin(e || new P), this.setSize(t || new u) }, clone: function() { return new h(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", P.create(e)), this.geometryChange(), this }, getOrigin: function() { return this.origin }, setSize: function(e) { return this._observerField("size", u.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), r = this.bottomLeft().transformCopy(e); return h.fromPoints(t, n, i, r) }, transformCopy: function(e) { return h.fromPoints(this.topLeft().transform(e), this.bottomRight().transform(e)) } }), y(h.fn, k), h.fromPoints = function() { var e = P.min.apply(this, arguments), t = P.max.apply(this, arguments), n = new u(t.x - e.x, t.y - e.y); return new h(e, n) }, h.union = function(e, t) { return h.fromPoints(P.min(e.topLeft(), t.topLeft()), P.max(e.bottomRight(), t.bottomRight())) }, h.intersect = function(e, t) { return e = { left: e.topLeft().x, top: e.topLeft().y, right: e.bottomRight().x, bottom: e.bottomRight().y }, t = { left: t.topLeft().x, top: t.topLeft().y, right: t.bottomRight().x, bottom: t.bottomRight().y }, t.right >= e.left && e.right >= t.left && t.bottom >= e.top && e.bottom >= t.top ? h.fromPoints(new P(v.max(e.left, t.left), v.max(e.top, t.top)), new P(v.min(e.right, t.right), v.min(e.bottom, t.bottom))) : void 0 }, p = b.extend({ init: function(e, t) { this.setCenter(e || new P), this.setRadius(t || 0) }, setCenter: function(e) { return this._observerField("center", P.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 p(this.center.clone(), this.radius) }, pointAt: function(e) { return this._pointAt(S(e)) }, bbox: function(e) { var t, n, r, o, a = P.maxPoint(), s = P.minPoint(), l = i(this.center, this.radius, this.radius, e); for (t = 0; 4 > t; t++) n = this._pointAt(l.x + t * A).transformCopy(e), r = this._pointAt(l.y + t * A).transformCopy(e), o = new P(n.x, r.y), a = P.min(a, o), s = P.max(s, o); return h.fromPoints(a, s) }, _pointAt: function(e) { var t = this.center, n = this.radius; return new P(t.x - n * v.cos(e), t.y - n * v.sin(e)) } }), o(p.fn, ["radius"]), y(p.fn, k), f = b.extend({ init: function(e, t) { this.setCenter(e || new P), t = t || {}, this.radiusX = t.radiusX, this.radiusY = t.radiusY || t.radiusX, this.startAngle = t.startAngle, this.endAngle = t.endAngle, this.anticlockwise = t.anticlockwise || !1 }, clone: function() { return new f(this.center, { radiusX: this.radiusX, radiusY: this.radiusY, startAngle: this.startAngle, endAngle: this.endAngle, anticlockwise: this.anticlockwise }) }, setCenter: function(e) { return this._observerField("center", P.create(e)), this.geometryChange(), this }, getCenter: function() { return this.center }, MAX_INTERVAL: 45, pointAt: function(e) { var t = this.center, n = S(e); return new P(t.x + this.radiusX * v.cos(n), t.y + this.radiusY * v.sin(n)) }, curvePoints: function() { var e, t, n, i = this.startAngle, r = this.anticlockwise ? -1 : 1, o = [this.pointAt(i)], a = i, s = this._arcInterval(), l = s.endAngle - s.startAngle, c = v.ceil(l / this.MAX_INTERVAL), d = l / c; for (e = 1; c >= e; e++) t = a + r * d, n = this._intervalCurvePoints(a, t), o.push(n.cp1, n.cp2, n.p2), a = t; return o }, bbox: function(e) { for (var t, n, o = this, a = o._arcInterval(), s = a.startAngle, l = a.endAngle, c = i(this.center, this.radiusX, this.radiusY, e), d = T(c.x), u = T(c.y), p = o.pointAt(s).transformCopy(e), f = o.pointAt(l).transformCopy(e), g = P.min(p, f), m = P.max(p, f), v = r(d, s), _ = r(u, s); l > v || l > _;) l > v && (t = o.pointAt(v).transformCopy(e), v += 90), l > _ && (n = o.pointAt(_).transformCopy(e), _ += 90), p = new P(t.x, n.y), g = P.min(g, p), m = P.max(m, p); return h.fromPoints(g, m) }, _arcInterval: function() { var e, t = this.startAngle, n = this.endAngle, i = this.anticlockwise; return i && (e = t, t = n, n = e), (t > n || i && t === n) && (n += 360), { startAngle: t, endAngle: n } }, _intervalCurvePoints: function(e, t) { var n = this, i = n.pointAt(e), r = n.pointAt(t), o = n._derivativeAt(e), a = n._derivativeAt(t), s = (S(t) - S(e)) / 3, l = new P(i.x + s * o.x, i.y + s * o.y), c = new P(r.x - s * a.x, r.y - s * a.y); return { p1: i, cp1: l, cp2: c, p2: r } }, _derivativeAt: function(e) { var t = this, n = S(e); return new P(-t.radiusX * v.sin(n), t.radiusY * v.cos(n)) } }), o(f.fn, ["radiusX", "radiusY", "startAngle", "endAngle", "anticlockwise"]), y(f.fn, k), f.fromPoints = function(e, t, n, i, r, o) { var a = d(e.x, e.y, t.x, t.y, n, i, r, o); return new f(a.center, { startAngle: a.startAngle, endAngle: a.endAngle, radiusX: n, radiusY: i, anticlockwise: 0 === o }) }, g = b.extend({ init: function(e, t, n, i, r, o) { this.a = e || 0, this.b = t || 0, this.c = n || 0, this.d = i || 0, this.e = r || 0, this.f = o || 0 }, multiplyCopy: function(e) { return new g(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.a, t = this.b, n = this.c, i = this.d, r = this.e, o = this.f, a = e * i - t * n; return 0 === a ? null : new g(i / a, -t / a, -n / a, e / a, (n * o - i * r) / a, (t * r - e * o) / a) }, clone: function() { return new g(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 : !1 }, round: function(e) { return this.a = D(this.a, e), this.b = D(this.b, e), this.c = D(this.c, e), this.d = D(this.d, e), this.e = D(this.e, e), this.f = D(this.f, e), this }, toArray: function(e) { var t, n = [this.a, this.b, this.c, this.d, this.e, this.f]; if (C(e)) for (t = 0; n.length > t; t++) n[t] = D(n[t], e); return n } }), g.fn.toString = function(e, t) { return this.toArray(e).join(t || ",") }, g.translate = function(e, t) { return new g(1, 0, 0, 1, e, t) }, g.unit = function() { return new g(1, 0, 0, 1, 0, 0) }, g.rotate = function(e, t, n) { var i = new g; return i.a = v.cos(S(e)), i.b = v.sin(S(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 }, g.scale = function(e, t) { return new g(e, 0, 0, t, 0, 0) }, g.IDENTITY = g.unit(), m = b.extend({ init: function(e) { this._matrix = e || g.unit() }, clone: function() { return new m(this._matrix.clone()) }, equals: function(e) { return e && e._matrix.equals(this._matrix) }, _optionsChange: function() { this.optionsChange({ field: "transform", value: this }) }, translate: function(e, t) { return this._matrix = this._matrix.multiplyCopy(g.translate(e, t)), this._optionsChange(), this }, scale: function(e, t, n) { return C(t) || (t = e), n && (n = P.create(n), this._matrix = this._matrix.multiplyCopy(g.translate(n.x, n.y))), this._matrix = this._matrix.multiplyCopy(g.scale(e, t)), n && (this._matrix = this._matrix.multiplyCopy(g.translate(-n.x, -n.y))), this._optionsChange(), this }, rotate: function(e, t) { return t = P.create(t) || P.ZERO, this._matrix = this._matrix.multiplyCopy(g.rotate(e, t.x, t.y)), this._optionsChange(), this }, multiply: function(e) { var t = n(e); return this._matrix = this._matrix.multiplyCopy(t), this._optionsChange(), this }, matrix: function() { return this._matrix } }), y(m.fn, k), y(w, { geometry: { Arc: f, Circle: p, Matrix: g, Point: P, Rect: h, Size: u, Transformation: m, transform: t, toMatrix: n } }), w.dataviz.geometry = w.geometry }(window.kendo.jQuery), function(e) { var t, n, i, r = e.noop, o = Object.prototype.toString, a = window.kendo, s = a.Class, l = a.ui.Widget, c = a.deepExtend, d = a.util, u = d.defined, h = l.extend({ init: function(e, t) { this.options = c({}, this.options, t), l.fn.init.call(this, e, this.options), this._click = this._handler("click"), this._mouseenter = this._handler("mouseenter"), this._mouseleave = this._handler("mouseleave"), this._visual = new a.drawing.Group, this.options.width && this.element.css("width", this.options.width), this.options.height && this.element.css("height", this.options.height) }, options: { name: "Surface" }, events: ["click", "mouseenter", "mouseleave", "resize"], draw: function(e) { this._visual.children.push(e) }, clear: function() { this._visual.children = [] }, destroy: function() { this._visual = null, l.fn.destroy.call(this) }, exportVisual: function() { return this._visual }, 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._resize() }, eventTarget: function(t) { for (var n, i = e(t.touch ? t.touch.initialTouch : t.target); !n && i.length > 0 && (n = i[0]._kendoNode, !i.is(this.element) && 0 !== i.length);) i = i.parent(); return n ? n.srcElement : void 0 }, _resize: r, _handler: function(e) { var t = this; return function(n) { var i = t.eventTarget(n); i && t.trigger(e, { element: i, originalEvent: n }) } } }); a.ui.plugin(h), h.create = function(e, t) { return i.current.create(e, t) }, t = s.extend({ init: function(e) { this.childNodes = [], this.parent = null, e && (this.srcElement = e, this.observe()) }, destroy: function() { var e, t; for (this.srcElement && this.srcElement.removeObserver(this), e = this.childNodes, t = 0; e.length > t; t++) this.childNodes[t].destroy(); this.parent = null }, load: r, 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 = e + t; for (n = e; i > n; n++) this.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() } }), n = s.extend({ init: function(e, t) { var n, i; this.prefix = t || ""; for (n in e) i = e[n], i = this._wrap(i, n), this[n] = i }, get: function(e) { return a.getter(e, !0)(this) }, set: function(e, t) { var n, i = a.getter(e, !0)(this); i !== t && (n = this._set(e, this._wrap(t, e)), n || this.optionsChange({ field: this.prefix + e, value: t })) }, _set: function(e, t) { var i, r, o, s = e.indexOf(".") >= 0; if (s) for (i = e.split("."), r = ""; i.length > 1;) { if (r += i.shift(), o = a.getter(r, !0)(this), o || (o = new n({}, r + "."), o.addObserver(this), this[r] = o), o instanceof n) return o.set(i.join("."), t), s; r += "." } return this._clear(e), a.setter(e)(this, t), s }, _clear: function(e) { var t = a.getter(e, !0)(this); t && t.removeObserver && t.removeObserver(this) }, _wrap: function(e, t) { var i = o.call(e); return null !== e && u(e) && "[object Object]" === i && (e instanceof n || e instanceof s || (e = new n(e, this.prefix + t + ".")), e.addObserver(this)), e } }), c(n.fn, a.mixins.ObserversMixin), i = function() { this._items = [] }, i.prototype = { register: function(e, t, n) { var i = this._items, r = i[0], o = { name: e, type: t, order: n }; !r || r.order > n ? i.unshift(o) : i.push(o) }, create: function(e, t) { var n, i, r = this._items, o = r[0]; if (t && t.type) for (n = t.type.toLowerCase(), i = 0; r.length > i; i++) if (r[i].name === n) { o = r[i]; break } return o ? new o.type(e, t) : void a.logToConsole("Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\n- The browser does not support SVG, VML and Canvas. User agent: " + navigator.userAgent + "\n- The Kendo UI scripts are not fully loaded") } }, i.current = new i, c(a, { drawing: { DASH_ARRAYS: { 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] }, Color: a.Color, BaseNode: t, OptionsStore: n, Surface: h, SurfaceFactory: i } }), a.dataviz.drawing = a.drawing }(window.kendo.jQuery), function() { var e = window.kendo, t = e.deepExtend, n = e.util.defined, i = "gradient", r = { extend: function(e) { e.fill = this.fill, e.stroke = this.stroke }, fill: function(e, t) { var r, o = this.options; return n(e) ? (e && e.nodeType != i ? (r = { color: e }, n(t) && (r.opacity = t), o.set("fill", r)) : o.set("fill", e), this) : o.get("fill") }, stroke: function(e, t, i) { return n(e) ? (this.options.set("stroke.color", e), n(t) && this.options.set("stroke.width", t), n(i) && this.options.set("stroke.opacity", i), this) : this.options.get("stroke") } }, o = { extend: function(e, t) { e.traverse = function(e) { var n, i, r = this[t]; for (n = 0; r.length > n; n++) i = r[n], i.traverse ? i.traverse(e) : e(i); return this } } }; t(e.drawing, { mixins: { Paintable: r, Traversable: o } }) }(window.kendo.jQuery), function(e) { function t(e, t) { return d.current.measure(e, t) } var n = document, i = window.kendo, r = i.Class, o = i.deepExtend, a = i.util, s = a.defined, l = 1, c = r.extend({ init: function(e) { this._size = e, this._length = 0, this._map = {} }, put: function(e, t) { var n = this, i = n._map, r = { key: e, value: t }; i[e] = r, n._head ? (n._tail.newer = r, r.older = n._tail, n._tail = r) : n._head = n._tail = r, n._length >= n._size ? (i[n._head.key] = null, n._head = n._head.newer, n._head.older = null) : n._length++ }, get: function(e) { var t = this, n = t._map[e]; return n ? (n === t._head && n !== t._tail && (t._head = n.newer, t._head.older = null), n !== t._tail && (n.older && (n.older.newer = n.newer, n.newer.older = n.older), n.older = t._tail, n.newer = null, t._tail.newer = n, t._tail = n), n.value) : void 0 } }), d = r.extend({ init: function() { this._cache = new c(1e3) }, measure: function(t, i) { var r, o, c, d, u, h = a.objectKey(i), p = a.hashKey(t + h), f = this._cache.get(p); if (f) return f; r = { width: 0, height: 0, baseline: 0 }, o = this._measureBox, c = this._baselineMarker.cloneNode(!1); for (d in i) u = i[d], s(u) && (o.style[d] = u); return e(o).text(t), o.appendChild(c), n.body.appendChild(o), (t + "").length && (r.width = o.offsetWidth - l, r.height = o.offsetHeight, r.baseline = c.offsetTop + l), this._cache.put(p, r), o.parentNode.removeChild(o), r } }); d.fn._baselineMarker = e("
    ")[0], d.fn._measureBox = e("
    ")[0], d.current = new d, o(i.drawing, { util: { TextMetrics: d, LRUCache: c, measureText: t } }) }(window.kendo.jQuery), function(e) { function t(e, t, n) { var i, r, o, a; for (r = 0; e.length > r; r++) o = e[r], o.visible() && (a = t ? o.bbox(n) : o.rawBBox(), a && (i = i ? $.union(i, a) : a)); return i } function n(e, t) { var n, i, r, o; for (i = 0; e.length > i; i++) r = e[i], r.visible() && (o = r.clippedBBox(t), o && (n = n ? $.union(n, o) : o)); return n } function i(e, t) { e.origin.x -= t, e.origin.y -= t, e.size.width += 2 * t, e.size.height += 2 * t } function r(e, t) { for (var n = 0; t.length > n; n++) e[t[n]] = o(t[n]) } function o(e) { var t = "_" + e; return function(e) { return rt(e) ? (this._observerField(t, e), this.geometryChange(), this) : this[t] } } function a(e, t) { for (var n = 0; t.length > n; n++) e[t[n]] = s(t[n]) } function s(e) { var t = "_" + e; return function(e) { return rt(e) ? (this._observerField(t, q.create(e)), this.geometryChange(), this) : this[t] } } function l(e, t) { for (var n = 0; t.length > n; n++) e[t[n]] = c(t[n]) } function c(e) { return function(t) { return rt(t) ? (this.options.set(e, t), this) : this.options.get(e) } } function d() { return "kdef" + gt++ } function u(e, t, n) { k(e, t, n, "x", "width") } function h(e, t, n) { k(e, t, n, "y", "height") } function p(e) { y(b(e), "x", "y", "width") } function f(e) { y(b(e), "y", "x", "height") } function g(e, t) { return v(e, t, "x", "y", "width") } function m(e, t) { return v(e, t, "y", "x", "height") } function v(e, t, n, i, r) { var o, a, s, l, c = [], d = w(e, t, r), u = t.origin.clone(); for (l = 0; d.length > l; l++) for (s = d[l], o = s[0], u[i] = o.bbox.origin[i], S(u, o.bbox, o.element), o.bbox.origin[n] = u[n], y(s, n, i, r), c.push([]), a = 0; s.length > a; a++) c[l].push(s[a].element); return c } function _(e, t) { var n, i, r = e.clippedBBox(), o = r.size, a = t.size; (o.width > a.width || o.height > a.height) && (n = J.min(a.width / o.width, a.height / o.height), i = e.transform() || G.transform(), i.scale(n, n), e.transform(i)) } function w(e, t, n) { var i, r, o, a, s = t.size[n], l = 0, c = [], d = [], u = function() { d.push({ element: i, bbox: o }) }; for (a = 0; e.length > a; a++) i = e[a], o = i.clippedBBox(), o && (r = o.size[n], l + r > s ? d.length ? (c.push(d), d = [], u(), l = r) : (u(), c.push(d), d = [], l = 0) : (u(), l += r)); return d.length && c.push(d), c } function b(e) { var t, n, i, r = []; for (i = 0; e.length > i; i++) t = e[i], n = t.clippedBBox(), n && r.push({ element: t, bbox: n }); return r } function y(e, t, n, i) { var r, o, a, s, l; if (e.length > 1) for (r = e[0].bbox, o = new q, l = 1; e.length > l; l++) a = e[l].element, s = e[l].bbox, o[t] = r.origin[t] + r.size[i], o[n] = s.origin[n], S(o, s, a), s.origin[t] = o[t], r = s } function k(e, t, n, i, r) { var o, a, s; for (n = n || "start", s = 0; e.length > s; s++) o = e[s].clippedBBox(), o && (a = o.origin.clone(), a[i] = x(o.size[r], t, n, i, r), S(a, o, e[s])) } function x(e, t, n, i, r) { var o; return o = n == mt ? t.origin[i] : n == vt ? t.origin[i] + t.size[r] - e : t.origin[i] + (t.size[r] - e) / 2 } function C(e, t, n) { var i = n.transform() || G.transform(), r = i.matrix(); r.e += e, r.f += t, n.transform(i) } function S(e, t, n) { C(e.x - t.origin.x, e.y - t.origin.y, n) } var T, D, A, E, I, P, M, z, F, R, H, B, L, N, O, V, U = window.kendo, W = U.Class, j = U.deepExtend, G = U.geometry, q = G.Point, $ = G.Rect, Y = G.Size, Q = G.Matrix, K = G.toMatrix, X = U.drawing, Z = X.OptionsStore, J = Math, et = J.pow, tt = U.util, nt = tt.append, it = tt.arrayLimits, rt = tt.defined, ot = tt.last, at = tt.valueOrDefault, st = U.mixins.ObserversMixin, lt = e.inArray, ct = [].push, dt = [].pop, ut = [].splice, ht = [].shift, pt = [].slice, ft = [].unshift, gt = 1, mt = "start", vt = "end", _t = "horizontal", wt = W.extend({ nodeType: "Element", init: function(e) { this._initOptions(e) }, _initOptions: function(e) { var t, n; e = e || {}, t = e.transform, n = e.clip, t && (e.transform = G.transform(t)), n && !n.id && (n.id = d()), this.options = new Z(e), this.options.addObserver(this) }, transform: function(e) { return rt(e) ? void this.options.set("transform", G.transform(e)) : this.options.get("transform") }, parentTransform: function() { for (var e, t, n = this; n.parent;) n = n.parent, e = n.transform(), e && (t = e.matrix().multiplyCopy(t || Q.unit())); return t ? G.transform(t) : void 0 }, currentTransform: function(e) { var t, n, i = this.transform(), r = K(i); return rt(e) || (e = this.parentTransform()), t = K(e), n = r && t ? t.multiplyCopy(r) : r || t, n ? G.transform(n) : void 0 }, visible: function(e) { return rt(e) ? (this.options.set("visible", e), this) : this.options.get("visible") !== !1 }, clip: function(e) { var t = this.options; return rt(e) ? (e && !e.id && (e.id = d()), t.set("clip", e), this) : t.get("clip") }, opacity: function(e) { return rt(e) ? (this.options.set("opacity", e), this) : at(this.options.get("opacity"), 1) }, clippedBBox: function(e) { var t, n = this._clippedBBox(e); return n ? (t = this.clip(), t ? $.intersect(n, t.bbox(e)) : n) : void 0 }, _clippedBBox: function(e) { return this.bbox(e) } }); j(wt.fn, st), T = W.extend({ init: function(e) { 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 = ct.apply(this, e); return this._add(e), t }, slice: pt, pop: function() { var e = this.length, t = dt.apply(this); return e && this._remove([t]), t }, splice: function(e, t) { var n = pt.call(arguments, 2), i = this._splice(e, t, n); return this._change(), i }, shift: function() { var e = this.length, t = ht.apply(this); return e && this._remove([t]), t }, unshift: function() { var e = arguments, t = ft.apply(this, e); return this._add(e), t }, indexOf: function(e) { var t, n, i = this; for (t = 0, n = i.length; n > t; t++) if (i[t] === e) return t; return -1 }, _splice: function(e, t, n) { var i = ut.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) { for (var t = 0; e.length > t; t++) e[t].addObserver(this) }, _clearObserver: function(e) { for (var t = 0; e.length > t; t++) e[t].removeObserver(this) }, _change: function() {} }), j(T.fn, st), D = wt.extend({ nodeType: "Group", init: function(e) { wt.fn.init.call(this, e), this.children = [] }, childrenChange: function(e, t, n) { this.trigger("childrenChange", { action: e, items: t, index: n }) }, append: function() { return nt(this.children, arguments), this._reparent(arguments, this), this.childrenChange("add", arguments), this }, insertAt: function(e, t) { return this.children.splice(t, 0, e), e.parent = this, this.childrenChange("add", [e], t), this }, remove: function(e) { var t = lt(e, this.children); return t >= 0 && (this.children.splice(t, 1), e.parent = null, this.childrenChange("remove", [e], t)), this }, removeAt: function(e) { if (e >= 0 && this.children.length > e) { 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 t(this.children, !0, this.currentTransform(e)) }, rawBBox: function() { return t(this.children, !1) }, _clippedBBox: function(e) { return n(this.children, this.currentTransform(e)) }, currentTransform: function(e) { return wt.fn.currentTransform.call(this, e) || null }, _reparent: function(e, t) { var n, i, r; for (n = 0; e.length > n; n++) i = e[n], r = i.parent, r && r != this && r.remove && r.remove(i), i.parent = t } }), X.mixins.Traversable.extend(D.fn, "children"), A = wt.extend({ nodeType: "Text", init: function(e, t, n) { wt.fn.init.call(this, n), this.content(e), this.position(t || new G.Point), this.options.font || (this.options.font = "12px sans-serif"), rt(this.options.fill) || this.fill("#000") }, content: function(e) { return rt(e) ? (this.options.set("content", e), this) : this.options.get("content") }, measure: function() { var e = X.util.measureText(this.content(), { font: this.options.get("font") }); return e }, rect: function() { var e = this.measure(), t = this.position().clone(); return new G.Rect(t, [e.width, e.height]) }, bbox: function(e) { var t = K(this.currentTransform(e)); return this.rect().bbox(t) }, rawBBox: function() { return this.rect().bbox() } }), X.mixins.Paintable.extend(A.fn), a(A.fn, ["position"]), E = wt.extend({ nodeType: "Circle", init: function(e, t) { wt.fn.init.call(this, t), this.geometry(e || new G.Circle), rt(this.options.stroke) || this.stroke("#000") }, bbox: function(e) { var t = K(this.currentTransform(e)), n = this._geometry.bbox(t), r = this.options.get("stroke.width"); return r && i(n, r / 2), n }, rawBBox: function() { return this._geometry.bbox() } }), X.mixins.Paintable.extend(E.fn), r(E.fn, ["geometry"]), I = wt.extend({ nodeType: "Arc", init: function(e, t) { wt.fn.init.call(this, t), this.geometry(e || new G.Arc), rt(this.options.stroke) || this.stroke("#000") }, bbox: function(e) { var t = K(this.currentTransform(e)), n = this.geometry().bbox(t), r = this.options.get("stroke.width"); return r && i(n, r / 2), n }, rawBBox: function() { return this.geometry().bbox() }, toPath: function() { var e, t = new z, n = this.geometry().curvePoints(); if (n.length > 0) for (t.moveTo(n[0].x, n[0].y), e = 1; n.length > e; e += 3) t.curveTo(n[e], n[e + 1], n[e + 2]); return t } }), X.mixins.Paintable.extend(I.fn), r(I.fn, ["geometry"]), P = T.extend({ _change: function() { this.geometryChange() } }), M = W.extend({ init: function(e, t, n) { this.anchor(e || new q), this.controlIn(t), this.controlOut(n) }, bboxTo: function(e, t) { var n, i = this.anchor().transformCopy(t), r = e.anchor().transformCopy(t); return n = this.controlOut() && e.controlIn() ? this._curveBoundingBox(i, this.controlOut().transformCopy(t), e.controlIn().transformCopy(t), r) : this._lineBoundingBox(i, r) }, _lineBoundingBox: function(e, t) { return $.fromPoints(e, t) }, _curveBoundingBox: function(e, t, n, i) { var r = [e, t, n, i], o = this._curveExtremesFor(r, "x"), a = this._curveExtremesFor(r, "y"), s = it([o.min, o.max, e.x, i.x]), l = it([a.min, a.max, e.y, i.y]); return $.fromPoints(new q(s.min, l.min), new q(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: this._calculateCurveAt(n.min, t, e), max: this._calculateCurveAt(n.max, t, e) } }, _calculateCurveAt: function(e, t, n) { var i = 1 - e; return et(i, 3) * n[0][t] + 3 * et(i, 2) * e * n[1][t] + 3 * et(e, 2) * i * n[2][t] + et(e, 3) * n[3][t] }, _curveExtremes: function(e, t, n, i) { var r, o, a = e - 3 * t + 3 * n - i, s = -2 * (e - 2 * t + n), l = e - t, c = J.sqrt(s * s - 4 * a * l), d = 0, u = 1; return 0 === a ? 0 !== s && (d = u = -l / s) : isNaN(c) || (d = (-s + c) / (2 * a), u = (-s - c) / (2 * a)), r = J.max(J.min(d, u), 0), (0 > r || r > 1) && (r = 0), o = J.min(J.max(d, u), 1), (o > 1 || 0 > o) && (o = 1), { min: r, max: o } } }), a(M.fn, ["anchor", "controlIn", "controlOut"]), j(M.fn, st), z = wt.extend({ nodeType: "Path", init: function(e) { wt.fn.init.call(this, e), this.segments = new P, this.segments.addObserver(this), rt(this.options.stroke) || (this.stroke("#000"), rt(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 = rt(t) ? new q(e, t) : e, i = new M(n); return this.segments.push(i), this }, curveTo: function(e, t, n) { var i, r; return this.segments.length > 0 && (i = ot(this.segments), r = new M(n, t), this.suspend(), i.controlOut(e), this.resume(), this.segments.push(r)), this }, arc: function(e, t, n, i, r) { var o, a, s, l, c; return this.segments.length > 0 && (o = ot(this.segments), a = o.anchor(), s = tt.rad(e), l = new q(a.x - n * J.cos(s), a.y - i * J.sin(s)), c = new G.Arc(l, { startAngle: e, endAngle: t, radiusX: n, radiusY: i, anticlockwise: r }), this._addArcSegments(c)), this }, arcTo: function(e, t, n, i, r) { var o, a, s; return this.segments.length > 0 && (o = ot(this.segments), a = o.anchor(), s = G.Arc.fromPoints(a, e, t, n, i, r), this._addArcSegments(s)), this }, _addArcSegments: function(e) { var t, n; for (this.suspend(), t = e.curvePoints(), n = 1; t.length > n; n += 3) this.curveTo(t[n], t[n + 1], t[n + 2]); this.resume(), this.geometryChange() }, close: function() { return this.options.closed = !0, this.geometryChange(), this }, bbox: function(e) { var t = K(this.currentTransform(e)), n = this._bbox(t), r = this.options.get("stroke.width"); return r && i(n, r / 2), n }, rawBBox: function() { return this._bbox() }, _bbox: function(e) { var t, n, i, r, o = this.segments, a = o.length; if (1 === a) n = o[0].anchor().transformCopy(e), t = new $(n, Y.ZERO); else if (a > 0) for (i = 1; a > i; i++) r = o[i - 1].bboxTo(o[i], e), t = t ? $.union(t, r) : r; return t } }), X.mixins.Paintable.extend(z.fn), z.fromRect = function(e, t) { return new z(t).moveTo(e.topLeft()).lineTo(e.topRight()).lineTo(e.bottomRight()).lineTo(e.bottomLeft()).close() }, z.fromPoints = function(e, t) { var n, i, r; if (e) { for (n = new z(t), i = 0; e.length > i; i++) r = q.create(e[i]), r && (0 === i ? n.moveTo(r) : n.lineTo(r)); return n } }, z.fromArc = function(e, t) { var n = new z(t), i = e.startAngle, r = e.pointAt(i); return n.moveTo(r.x, r.y), n.arc(i, e.endAngle, e.radiusX, e.radiusY, e.anticlockwise), n }, F = wt.extend({ nodeType: "MultiPath", init: function(e) { wt.fn.init.call(this, e), this.paths = new P, this.paths.addObserver(this), rt(this.options.stroke) || this.stroke("#000") }, moveTo: function(e, t) { var n = new z; return n.moveTo(e, t), this.paths.push(n), this }, lineTo: function(e, t) { return this.paths.length > 0 && ot(this.paths).lineTo(e, t), this }, curveTo: function(e, t, n) { return this.paths.length > 0 && ot(this.paths).curveTo(e, t, n), this }, arc: function(e, t, n, i, r) { return this.paths.length > 0 && ot(this.paths).arc(e, t, n, i, r), this }, arcTo: function(e, t, n, i, r) { return this.paths.length > 0 && ot(this.paths).arcTo(e, t, n, i, r), this }, close: function() { return this.paths.length > 0 && ot(this.paths).close(), this }, bbox: function(e) { return t(this.paths, !0, this.currentTransform(e)) }, rawBBox: function() { return t(this.paths, !1) }, _clippedBBox: function(e) { return n(this.paths, this.currentTransform(e)) } }), X.mixins.Paintable.extend(F.fn), R = wt.extend({ nodeType: "Image", init: function(e, t, n) { wt.fn.init.call(this, n), this.src(e), this.rect(t || new G.Rect) }, src: function(e) { return rt(e) ? (this.options.set("src", e), this) : this.options.get("src") }, bbox: function(e) { var t = K(this.currentTransform(e)); return this._rect.bbox(t) }, rawBBox: function() { return this._rect.bbox() } }), r(R.fn, ["rect"]), H = W.extend({ init: function(e, t, n) { this.options = new Z({ offset: e, color: t, opacity: rt(n) ? n : 1 }), this.options.addObserver(this) } }), l(H.fn, ["offset", "color", "opacity"]), j(H.fn, st), H.create = function(e) { if (rt(e)) { var t; return t = e instanceof H ? e : e.length > 1 ? new H(e[0], e[1], e[2]) : new H(e.offset, e.color, e.opacity) } }, B = T.extend({ _change: function() { this.optionsChange({ field: "stops" }) } }), L = W.extend({ nodeType: "gradient", init: function(e) { this.stops = new B(this._createStops(e.stops)), this.stops.addObserver(this), this._userSpace = e.userSpace, this.id = d() }, userSpace: function(e) { return rt(e) ? (this._userSpace = e, this.optionsChange(), this) : this._userSpace }, _createStops: function(e) { var t, n = []; for (e = e || [], t = 0; e.length > t; t++) n.push(H.create(e[t])); return n }, addStop: function(e, t, n) { this.stops.push(new H(e, t, n)) }, removeStop: function(e) { var t = this.stops.indexOf(e); t >= 0 && this.stops.splice(t, 1) } }), j(L.fn, st, { optionsChange: function(e) { this.trigger("optionsChange", { field: "gradient" + (e ? "." + e.field : ""), value: this }) }, geometryChange: function() { this.optionsChange() } }), N = L.extend({ init: function(e) { e = e || {}, L.fn.init.call(this, e), this.start(e.start || new q), this.end(e.end || new q(1, 0)) } }), a(N.fn, ["start", "end"]), O = L.extend({ init: function(e) { e = e || {}, L.fn.init.call(this, e), this.center(e.center || new q), this._radius = rt(e.radius) ? e.radius : 1, this._fallbackFill = e.fallbackFill }, radius: function(e) { return rt(e) ? (this._radius = e, this.geometryChange(), this) : this._radius }, fallbackFill: function(e) { return rt(e) ? (this._fallbackFill = e, this.optionsChange(), this) : this._fallbackFill } }), a(O.fn, ["center"]), V = D.extend({ init: function(e, t) { D.fn.init.call(this, U.deepExtend({}, this._defaults, t)), this._rect = e, this._fieldMap = {} }, _defaults: { alignContent: mt, justifyContent: mt, alignItems: mt, spacing: 0, orientation: _t, lineSpacing: 0, wrap: !0 }, rect: function(e) { return e ? (this._rect = e, this) : this._rect }, _initMap: function() { var e = this.options, t = this._fieldMap; e.orientation == _t ? (t.sizeField = "width", t.groupsSizeField = "height", t.groupAxis = "x", t.groupsAxis = "y") : (t.sizeField = "height", t.groupsSizeField = "width", t.groupAxis = "y", t.groupsAxis = "x") }, reflow: function() { var e, t, n, i, r, o, a, s, l, c, d, u, h, p, f, g, m, v, _, w, b, y, k, C, T, D; if (this._rect && 0 !== this.children.length) { for (this._initMap(), this.options.transform && this.transform(null), e = this.options, t = this._fieldMap, n = this._rect, i = this._initGroups(), r = i.groups, o = i.groupsSize, a = t.sizeField, s = t.groupsSizeField, l = t.groupAxis, c = t.groupsAxis, d = x(o, n, e.alignContent, c, s), u = new q, h = new q, p = new G.Size, w = 0; r.length > w; w++) { for (v = r[w], u[l] = f = x(v.size, n, e.justifyContent, l, a), u[c] = d, p[a] = v.size, p[s] = v.lineSize, _ = new $(u, p), b = 0; v.bboxes.length > b; b++) m = v.elements[b], g = v.bboxes[b], h[l] = f, h[c] = x(g.size[s], _, e.alignItems, c, s), S(h, g, m), f += g.size[a] + e.spacing; d += v.lineSize + e.lineSpacing }!e.wrap && v.size > n.size[a] && (y = n.size[a] / _.size[a], k = _.topLeft().scale(y, y), C = _.size[s] * y, T = x(C, n, e.alignContent, c, s), D = G.transform(), "x" === l ? D.translate(n.origin.x - k.x, T - k.y) : D.translate(T - k.x, n.origin.y - k.y), D.scale(y, y), this.transform(D)) } }, _initGroups: function() { var e, t, n, i = this.options, r = this.children, o = i.lineSpacing, a = this._fieldMap.sizeField, s = -o, l = [], c = this._newGroup(), d = function() { l.push(c), s += c.lineSize + o }; for (n = 0; r.length > n; n++) t = r[n], e = r[n].clippedBBox(), t.visible() && e && (i.wrap && c.size + e.size[a] + i.spacing > this._rect.size[a] ? 0 === c.bboxes.length ? (this._addToGroup(c, e, t), d(), c = this._newGroup()) : (d(), c = this._newGroup(), this._addToGroup(c, e, t)) : this._addToGroup(c, e, t)); return c.bboxes.length && d(), { groups: l, groupsSize: s } }, _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: [] } } }), j(X, { align: u, Arc: I, Circle: E, Element: wt, ElementsArray: T, fit: _, Gradient: L, GradientStop: H, Group: D, Image: R, Layout: V, LinearGradient: N, MultiPath: F, Path: z, RadialGradient: O, Segment: M, stack: p, Text: A, vAlign: h, vStack: f, vWrap: m, wrap: g }) }(window.kendo.jQuery), function(e) { function t(e) { var t = []; return e.replace(g, function(e, n) { t.push(parseFloat(n)) }), t } function n(e, t, n) { var i, r = t ? 0 : 1; for (i = 0; e.length > i; i += 2) e.splice(i + r, 0, n) } function i(e, t) { return e && t ? t.scaleCopy(2).translate(-e.x, -e.y) : void 0 } function r(e, t, n) { var i = 1 / 3; return t = t.clone().scale(2 / 3), { controlOut: t.clone().translateWith(e.scaleCopy(i)), controlIn: t.translateWith(n.scaleCopy(i)) } } var o = window.kendo, a = o.drawing, s = o.geometry, l = o.Class, c = s.Point, d = o.deepExtend, u = e.trim, h = o.util, p = h.last, f = /([a-df-z]{1})([^a-df-z]*)(z)?/gi, g = /[,\s]?([+\-]?(?:\d*\.\d+|\d+)(?:[eE][+\-]?\d+)?)/g, m = "m", v = "z", _ = l.extend({ parse: function(e, n) { var i, r = new a.MultiPath(n), o = new c; return e.replace(f, function(e, n, a, s) { var l = n.toLowerCase(), c = l === n, d = t(u(a)); if (l === m && (c ? (o.x += d[0], o.y += d[1]) : (o.x = d[0], o.y = d[1]), r.moveTo(o.x, o.y), d.length > 2 && (l = "l", d.splice(0, 2))), w[l]) w[l](r, { parameters: d, position: o, isRelative: c, previousCommand: i }), s && s.toLowerCase() === v && r.close(); else if (l !== m) throw Error("Error while parsing SVG path. Unsupported command: " + l); i = l }), r } }), w = { l: function(e, t) { var n, i, r = t.parameters, o = t.position; for (n = 0; r.length > n; n += 2) i = new c(r[n], r[n + 1]), t.isRelative && i.translateWith(o), e.lineTo(i.x, i.y), o.x = i.x, o.y = i.y }, c: function(e, t) { var n, i, r, o, a = t.parameters, s = t.position; for (o = 0; a.length > o; o += 6) n = new c(a[o], a[o + 1]), i = new c(a[o + 2], a[o + 3]), r = new c(a[o + 4], a[o + 5]), t.isRelative && (i.translateWith(s), n.translateWith(s), r.translateWith(s)), e.curveTo(n, i, r), s.x = r.x, s.y = r.y }, v: function(e, t) { var i = t.isRelative ? 0 : t.position.x; n(t.parameters, !0, i), this.l(e, t) }, h: function(e, t) { var i = t.isRelative ? 0 : t.position.y; n(t.parameters, !1, i), this.l(e, t) }, a: function(e, t) { var n, i, r, o, a, s, l = t.parameters, d = t.position; for (n = 0; l.length > n; n += 7) i = l[n], r = l[n + 1], o = l[n + 3], a = l[n + 4], s = new c(l[n + 5], l[n + 6]), t.isRelative && s.translateWith(d), e.arcTo(s, i, r, o, a), d.x = s.x, d.y = s.y }, s: function(e, t) { var n, r, o, a, s, l = t.parameters, d = t.position, u = t.previousCommand; for (("s" == u || "c" == u) && (a = p(p(e.paths).segments).controlIn()), s = 0; l.length > s; s += 4) o = new c(l[s], l[s + 1]), r = new c(l[s + 2], l[s + 3]), t.isRelative && (o.translateWith(d), r.translateWith(d)), n = a ? i(a, d) : d.clone(), a = o, e.curveTo(n, o, r), d.x = r.x, d.y = r.y }, q: function(e, t) { var n, i, o, a, s = t.parameters, l = t.position; for (a = 0; s.length > a; a += 4) o = new c(s[a], s[a + 1]), i = new c(s[a + 2], s[a + 3]), t.isRelative && (o.translateWith(l), i.translateWith(l)), n = r(l, o, i), e.curveTo(n.controlOut, n.controlIn, i), l.x = i.x, l.y = i.y }, t: function(e, t) { var n, o, a, s, l, d = t.parameters, u = t.position, h = t.previousCommand; for (("q" == h || "t" == h) && (s = p(p(e.paths).segments), o = s.controlIn().clone().translateWith(u.scaleCopy(-1 / 3)).scale(1.5)), l = 0; d.length > l; l += 2) a = new c(d[l], d[l + 1]), t.isRelative && a.translateWith(u), o = o ? i(o, u) : u.clone(), n = r(u, o, a), e.curveTo(n.controlOut, n.controlIn, a), u.x = a.x, u.y = a.y } }; _.current = new _, a.Path.parse = function(e, t) { return _.current.parse(e, t) }, d(a, { PathParser: _ }) }(window.kendo.jQuery), function(e) { function t(e) { var t, n, i, r; try { t = e.getScreenCTM ? e.getScreenCTM() : null } catch (o) {} t && (n = -t.e % 1, i = -t.f % 1, r = e.style, (0 !== n || 0 !== i) && (r.left = n + "px", r.top = i + "px")) } function n() { var e = document.getElementsByTagName("base")[0], t = "", n = document.location.href, i = n.indexOf("#"); return e && !d.support.browser.msie && (-1 !== i && (n = n.substring(0, i)), t = n), t } function i(e) { return "url(" + n() + "#" + e + ")" } function r(e) { var t, n, i, r = new F({ encodeText: !0 }), o = e.clippedBBox(); return o && (t = o.getOrigin(), n = new p.Group, n.transform(h.transform().translate(-t.x, -t.y)), n.children.push(e), e = n), r.load([e]), i = "" + r.render() + "", r.destroy(), i } function o(t, n) { var i = r(t); return n && n.raw || (i = "data:image/svg+xml;base64," + g.encodeBase64(i)), e.Deferred().resolve(i).promise() } function a(e, t) { return "clip" == e || "fill" == e && (!t || t.nodeType == C) } function s(e) { if (!e || !e.indexOf || e.indexOf("&") < 0) return e; var t = s._element; return t.innerHTML = e, t.textContent || t.innerText } var l, c = document, d = window.kendo, u = d.deepExtend, h = d.geometry, p = d.drawing, f = p.BaseNode, g = d.util, m = g.defined, v = g.isTransparent, _ = g.renderAttr, w = g.renderAllAttr, b = g.renderTemplate, y = e.inArray, k = "butt", x = p.DASH_ARRAYS, C = "gradient", S = "none", T = ".kendo", D = "solid", A = " ", E = "http://www.w3.org/2000/svg", I = "transform", P = "undefined", M = p.Surface.extend({ init: function(e, n) { p.Surface.fn.init.call(this, e, n), this._root = new F(this.options), Q(this.element[0], this._template(this)), this._rootElement = this.element[0].firstElementChild, t(this._rootElement), this._root.attachTo(this._rootElement), this.element.on("click" + T, this._click), this.element.on("mouseover" + T, this._mouseenter), this.element.on("mouseout" + T, this._mouseleave), this.resize() }, type: "svg", destroy: function() { this._root && (this._root.destroy(), this._root = null, this._rootElement = null, this.element.off(T)), p.Surface.fn.destroy.call(this) }, translate: function(e) { var t = d.format("{0} {1} {2} {3}", 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) { p.Surface.fn.draw.call(this, e), this._root.load([e]) }, clear: function() { p.Surface.fn.clear.call(this), this._root.clear() }, svg: function() { return "" + this._template(this) }, exportVisual: function() { var e, t = this._visual, n = this._offset; return n && (e = new p.Group, e.children.push(t), e.transform(h.transform().translate(-n.x, -n.y)), t = e), t }, _resize: function() { this._offset && this.translate(this._offset) }, _template: b("#= d._root.render() #") }), z = f.extend({ init: function(e) { f.fn.init.call(this, e), this.definitions = {} }, destroy: function() { this.element && (this.element._kendoNode = null, this.element = null), this.clearDefinitions(), f.fn.destroy.call(this) }, load: function(e, t) { var n, i, r, o, a = this, s = a.element; for (o = 0; e.length > o; o++) i = e[o], r = i.children, n = new Y[i.nodeType](i), m(t) ? a.insertAt(n, t) : a.append(n), n.createDefinitions(), r && r.length > 0 && n.load(r), s && n.attachTo(s, t) }, root: function() { for (var e = this; e.parent;) e = e.parent; return e }, attachTo: function(e, t) { var n, i = c.createElement("div"); Q(i, "" + this.render() + ""), n = i.firstChild.firstChild, n && (m(t) ? e.insertBefore(n, e.childNodes[t] || null) : e.appendChild(n), this.setElement(n)) }, setElement: function(e) { var t, n, i = this.childNodes; for (this.element && (this.element._kendoNode = null), this.element = e, this.element._kendoNode = this, n = 0; i.length > n; n++) t = e.childNodes[n], i[n].setElement(t) }, clear: function() { var e, t; for (this.clearDefinitions(), this.element && (this.element.innerHTML = ""), e = this.childNodes, t = 0; e.length > t; t++) e[t].destroy(); this.childNodes = [] }, removeSelf: function() { if (this.element) { var e = this.element.parentNode; e && e.removeChild(this.element), this.element = null } f.fn.removeSelf.call(this) }, template: b("#= d.renderChildren() #"), render: function() { return this.template(this) }, renderChildren: function() { var e, t = this.childNodes, n = ""; for (e = 0; t.length > e; e++) n += t[e].render(); return n }, optionsChange: function(e) { var t = e.field, n = e.value; "visible" === t ? this.css("display", n ? "" : S) : l[t] && a(t, n) ? this.updateDefinition(t, n) : "opacity" === t && this.attr("opacity", n), f.fn.optionsChange.call(this, e) }, attr: function(e, t) { this.element && this.element.setAttribute(e, t) }, allAttr: function(e) { for (var t = 0; e.length > t; t++) this.attr(e[t][0], e[t][1]) }, css: function(e, t) { this.element && (this.element.style[e] = t) }, allCss: function(e) { for (var t = 0; e.length > t; t++) this.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([I, "matrix(" + e.matrix().toString(6) + ")"]), t }, renderTransform: function() { return w(this.mapTransform(this.srcElement.transform())) }, transformChange: function(e) { e ? this.allAttr(this.mapTransform(e)) : this.removeAttr(I) }, mapStyle: function() { var e = this.srcElement.options, t = [ ["cursor", e.cursor] ]; return e.visible === !1 && t.push(["display", S]), t }, renderStyle: function() { return _("style", g.renderStyle(this.mapStyle())) }, renderOpacity: function() { return _("opacity", this.srcElement.options.opacity) }, createDefinitions: function() { var e, t, n, i, r = this.srcElement, o = this.definitions; if (r) { n = r.options; for (t in l) e = n.get(t), e && a(t, e) && (o[t] = e, i = !0); i && this.definitionChange({ action: "add", definitions: o }) } }, definitionChange: function(e) { this.parent && this.parent.definitionChange(e) }, updateDefinition: function(e, t) { var n = this.definitions, r = n[e], o = l[e], a = {}; r && (a[e] = r, this.definitionChange({ action: "remove", definitions: a }), delete n[e]), t ? (a[e] = t, this.definitionChange({ action: "add", definitions: a }), n[e] = t, this.attr(o, i(t.id))) : r && this.removeAttr(o) }, clearDefinitions: function() { var e, t = this.definitions; for (e in t) { this.definitionChange({ action: "remove", definitions: t }), this.definitions = {}; break } }, renderDefinitions: function() { return w(this.mapDefinitions()) }, mapDefinitions: function() { var e, t = this.definitions, n = []; for (e in t) n.push([l[e], i(t[e].id)]); return n } }), F = z.extend({ init: function(e) { z.fn.init.call(this), this.options = e, this.defs = new R }, attachTo: function(e) { this.element = e, this.defs.attachTo(e.firstElementChild) }, clear: function() { f.fn.clear.call(this) }, template: b("#=d.defs.render()##= d.renderChildren() #"), definitionChange: function(e) { this.defs.definitionChange(e) } }), R = z.extend({ init: function() { z.fn.init.call(this), this.definitionMap = {} }, attachTo: function(e) { this.element = e }, template: b("#= d.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 = H : "fill" == e && (t instanceof p.LinearGradient ? n = q : t instanceof p.RadialGradient && (n = $)), new n(t) }, addDefinitions: function(e) { for (var t in e) this.addDefinition(t, e[t]) }, addDefinition: function(e, t) { var n, i = this.definitionMap, r = t.id, o = this.element, a = i[r]; a ? a.count++ : (n = this.createDefinition(e, t), i[r] = { element: n, count: 1 }, this.append(n), o && n.attachTo(this.element)) }, removeDefinitions: function(e) { for (var t in e) this.removeDefinition(e[t]) }, removeDefinition: function(e) { var t = this.definitionMap, n = e.id, i = t[n]; i && (i.count--, 0 === i.count && (this.remove(y(i.element, this.childNodes), 1), delete t[n])) } }), H = z.extend({ init: function(e) { z.fn.init.call(this), this.srcElement = e, this.id = e.id, this.load([e]) }, template: b("#= d.renderChildren()#") }), B = z.extend({ template: b("#= d.renderChildren() #"), optionsChange: function(e) { e.field == I && this.transformChange(e.value), z.fn.optionsChange.call(this, e) } }), L = z.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 I: this.transformChange(e.value); break; default: var t = this.attributeMap[e.field]; t && this.attr(t, e.value) } z.fn.optionsChange.call(this, e) }, attributeMap: { "fill.opacity": "fill-opacity", "stroke.color": "stroke", "stroke.width": "stroke-width", "stroke.opacity": "stroke-opacity" }, content: function() { this.element && (this.element.textContent = this.srcElement.content()) }, renderData: function() { return this.printPath(this.srcElement) }, printPath: function(e) { var t, n, i, r, o, a = e.segments, s = a.length; if (s > 0) { for (t = [], o = 1; s > o; o++) i = this.segmentType(a[o - 1], a[o]), i !== r && (r = i, t.push(i)), t.push("L" === i ? this.printPoints(a[o].anchor()) : this.printPoints(a[o - 1].controlOut(), a[o].controlIn(), a[o].anchor())); return n = "M" + this.printPoints(a[0].anchor()) + A + t.join(A), e.options.closed && (n += "Z"), n } }, printPoints: function() { var e, t = arguments, n = t.length, i = []; for (e = 0; n > e; e++) i.push(t[e].toString(3)); return i.join(A) }, segmentType: function(e, t) { return e.controlOut() && t.controlIn() ? "C" : "L" }, mapStroke: function(e) { var t = []; return e && !v(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]), m(e.opacity) && t.push(["stroke-opacity", e.opacity]), m(e.dashType) && t.push(["stroke-dasharray", this.renderDashType(e)])) : t.push(["stroke", S]), t }, renderStroke: function() { return w(this.mapStroke(this.srcElement.options.stroke)) }, renderDashType: function(e) { var t, n, i, r = e.width || 1, o = e.dashType; if (o && o != D) { for (t = x[o.toLowerCase()], n = [], i = 0; t.length > i; i++) n.push(t[i] * r); return n.join(" ") } }, renderLinecap: function(e) { var t = e.dashType, n = e.lineCap; return t && t != D ? k : n }, mapFill: function(e) { var t = []; return e && e.nodeType == C || (e && !v(e.color) ? (t.push(["fill", e.color]), m(e.opacity) && t.push(["fill-opacity", e.opacity])) : t.push(["fill", S])), t }, renderFill: function() { return w(this.mapFill(this.srcElement.options.fill)) }, template: b("") }), N = L.extend({ renderData: function() { return this.printPath(this.srcElement.toPath()) } }), O = L.extend({ renderData: function() { var e, t, n = this.srcElement.paths; if (n.length > 0) { for (e = [], t = 0; n.length > t; t++) e.push(this.printPath(n[t])); return e.join(" ") } } }), V = L.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: b("") }), U = L.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", g.renderStyle(this.mapStyle())), this.geometryChange()) : "content" === e.field && L.fn.content.call(this, this.srcElement.content()), L.fn.optionsChange.call(this, e) }, mapStyle: function() { var e = L.fn.mapStyle.call(this), t = this.srcElement.options.font; return e.push(["font", d.htmlEncode(t)]), e }, pos: function() { var e = this.srcElement.position(), t = this.srcElement.measure(); return e.clone().setY(e.y + t.baseline) }, content: function() { var e = this.srcElement.content(), t = this.root().options; return t && t.encodeText && (e = s(e), e = d.htmlEncode(e)), e }, template: b("#= d.content() #") }), W = L.extend({ geometryChange: function() { this.allAttr(this.mapPosition()), this.invalidate() }, optionsChange: function(e) { "src" === e.field && this.allAttr(this.mapSource()), L.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 w(this.mapPosition()) }, mapSource: function() { return [ ["xlink:href", this.srcElement.src()] ] }, renderSource: function() { return w(this.mapSource()) }, template: b("") }), j = z.extend({ template: b(""), renderOffset: function() { return _("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) } }), G = z.extend({ init: function(e) { z.fn.init.call(this, e), this.id = e.id, this.loadStops() }, loadStops: function() { var e, t, n = this.srcElement, i = n.stops, r = this.element; for (t = 0; i.length > t; t++) e = new j(i[t]), this.append(e), r && e.attachTo(r) }, optionsChange: function(e) { "gradient.stops" == e.field ? (f.fn.clear.call(this), this.loadStops()) : e.field == C && this.allAttr(this.mapCoordinates()) }, renderCoordinates: function() { return w(this.mapCoordinates()) }, mapSpace: function() { return ["gradientUnits", this.srcElement.userSpace() ? "userSpaceOnUse" : "objectBoundingBox"] } }), q = G.extend({ template: b("#= d.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 } }), $ = G.extend({ template: b("#= d.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 } }), Y = { Group: B, Text: U, Path: L, MultiPath: O, Circle: V, Arc: N, Image: W }, Q = function(e, t) { e.innerHTML = t }; ! function() { var e = "", t = c.createElement("div"), n = typeof DOMParser != P; t.innerHTML = e, n && t.firstChild.namespaceURI != E && (Q = function(e, t) { var n = new DOMParser, i = n.parseFromString(t, "text/xml"), r = c.adoptNode(i.documentElement); e.innerHTML = "", e.appendChild(r) }) }(), s._element = document.createElement("span"), l = { clip: "clip-path", fill: "fill" }, d.support.svg = function() { return c.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") }(), d.support.svg && p.SurfaceFactory.current.register("svg", M, 10), u(p, { exportSVG: o, svg: { ArcNode: N, CircleNode: V, ClipNode: H, DefinitionNode: R, GradientStopNode: j, GroupNode: B, ImageNode: W, LinearGradientNode: q, MultiPathNode: O, Node: z, PathNode: L, RadialGradientNode: $, RootNode: F, Surface: M, TextNode: U, _exportGroup: r } }) }(window.kendo.jQuery), function(e) { function t(t, n) { var i, r, o, a, s, l, c = { width: "800px", height: "600px", cors: "Anonymous" }, d = t.clippedBBox(); return d && (i = d.getOrigin(), r = new b.Group, r.transform(w.transform().translate(-i.x, -i.y)), r.children.push(t), t = r, o = d.getSize(), c.width = o.width + "px", c.height = o.height + "px"), n = p(c, n), a = e("
    ").css({ display: "none", width: n.width, height: n.height }).appendTo(document.body), s = new T(a, n), s.draw(t), l = s.image(), l.always(function() { s.destroy(), a.remove() }), l } function n(e, t) { var n, i, r; for (r = 0; t.length > r; r++) i = t[r], n = h.parseColor(i.color()), n.a *= i.opacity(), e.addColorStop(i.offset(), n.toCssRgba()) } var i, r, o, a, s, l, c, d, u = document, h = window.kendo, p = h.deepExtend, f = h.util, g = f.defined, m = f.isTransparent, v = f.renderTemplate, _ = f.valueOrDefault, w = h.geometry, b = h.drawing, y = b.BaseNode, k = "butt", x = b.DASH_ARRAYS, C = 1e3 / 60, S = "solid", T = b.Surface.extend({ init: function(t, n) { b.Surface.fn.init.call(this, t, n), this.element[0].innerHTML = this._template(this); var r = this.element[0].firstElementChild; r.width = e(t).width(), r.height = e(t).height(), this._rootElement = r, this._root = new i(r) }, destroy: function() { b.Surface.fn.destroy.call(this), this._root && (this._root.destroy(), this._root = null) }, type: "canvas", draw: function(e) { b.Surface.fn.draw.call(this, e), this._root.load([e], void 0, this.options.cors) }, clear: function() { b.Surface.fn.clear.call(this), this._root.clear() }, image: function() { var t, n = this._root, i = this._rootElement, r = []; return n.traverse(function(e) { e.loading && r.push(e.loading) }), t = e.Deferred(), e.when.apply(e, r).done(function() { n._invalidate(); try { var e = i.toDataURL(); t.resolve(e) } catch (r) { t.reject(r) } }).fail(function(e) { t.reject(e) }), t.promise() }, _resize: function() { this._rootElement.width = this._size.width, this._rootElement.height = this._size.height, this._root.invalidate() }, _template: v("") }), D = y.extend({ init: function(e) { y.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(), y.fn.clear.call(this) }, clearClip: function() { this.clip && (this.clip.removeObserver(this), delete this.clip) }, setClip: function(e) { this.clip && (e.beginPath(), r.fn.renderPoints(e, this.clip), e.clip()) }, optionsChange: function(e) { "clip" == e.field && (this.clearClip(), this.initClip()), y.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)) } }, load: function(e, t, n) { var i, r, o, a, s = this; for (a = 0; e.length > a; a++) r = e[a], o = r.children, i = new d[r.nodeType](r, n), o && o.length > 0 && i.load(o, t, n), g(t) ? s.insertAt(i, t) : s.append(i); s.invalidate() }, setOpacity: function(e) { if (this.srcElement) { var t = this.srcElement.opacity(); g(t) && this.globalAlpha(e, t) } }, globalAlpha: function(e, t) { t && e.globalAlpha && (t *= e.globalAlpha), e.globalAlpha = t }, visible: function() { var e = this.srcElement; return !e || e && e.options.visible !== !1 } }), A = D.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; t.length > n; n++) i = t[n], i.visible() && i.renderTo(e); e.restore() } } }); b.mixins.Traversable.extend(A.fn, "childNodes"), i = A.extend({ init: function(t) { A.fn.init.call(this), this.canvas = t, this.ctx = t.getContext("2d"), this.invalidate = h.throttle(e.proxy(this._invalidate, this), C) }, destroy: function() { A.fn.destroy.call(this), this.canvas = null, this.ctx = null }, _invalidate: function() { this.ctx && (this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height), this.renderTo(this.ctx)) } }), b.mixins.Traversable.extend(i.fn, "childNodes"), r = D.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) : m(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 i, r, o, a, s = this.srcElement.rawBBox(); t instanceof b.LinearGradient ? (r = t.start(), o = t.end(), i = e.createLinearGradient(r.x, r.y, o.x, o.y)) : t instanceof b.RadialGradient && (a = t.center(), i = e.createRadialGradient(a.x, a.y, 0, a.x, a.y, t.radius())), n(i, t.stops), e.save(), t.userSpace() || e.transform(s.width(), 0, 0, s.height(), s.origin.x, s.origin.y), e.fillStyle = i, e.fill(), e.restore() }, setStroke: function(e) { var t = this.srcElement.options.stroke; return t && !m(t.color) && t.width > 0 ? (e.strokeStyle = t.color, e.lineWidth = _(t.width, 1), e.save(), this.globalAlpha(e, t.opacity), e.stroke(), e.restore(), !0) : void 0 }, dashType: function() { var e = this.srcElement.options.stroke; return e && e.dashType ? e.dashType.toLowerCase() : void 0 }, setLineDash: function(e) { var t, n = this.dashType(); n && n != S && (t = x[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 !== S ? e.lineCap = k : 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) { var n, i, r, o, a, s, l = t.segments; if (0 !== l.length) { for (n = l[0], i = n.anchor(), e.moveTo(i.x, i.y), r = 1; l.length > r; r++) n = l[r], i = n.anchor(), o = l[r - 1], a = o.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() } } }), o = r.extend({ renderPoints: function(e) { var t, n = this.srcElement.paths; for (t = 0; n.length > t; t++) r.fn.renderPoints(e, n[t]) } }), a = r.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) } }), s = r.extend({ renderPoints: function(e) { var t = this.srcElement.toPath(); r.fn.renderPoints.call(this, e, t) } }), l = r.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, 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() } }), c = r.extend({ init: function(t, n) { var i, o; r.fn.init.call(this, t), this.onLoad = e.proxy(this.onLoad, this), this.onError = e.proxy(this.onError, this), this.loading = e.Deferred(), i = this.img = new Image, n && !/^data:/i.test(t.src()) && (i.crossOrigin = n), o = i.src = t.src(), i.complete ? this.onLoad() : (i.onload = this.onLoad, i.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(t) { "src" === t.field ? (this.loading = e.Deferred(), this.img.src = this.srcElement.src()) : r.fn.optionsChange.call(this, t) }, 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()) } }), d = { Group: A, Text: l, Path: r, MultiPath: o, Circle: a, Arc: s, Image: c }, h.support.canvas = function() { return !!u.createElement("canvas").getContext }(), h.support.canvas && b.SurfaceFactory.current.register("canvas", T, 20), p(h.drawing, { exportImage: t, canvas: { ArcNode: s, CircleNode: a, GroupNode: A, ImageNode: c, MultiPathNode: o, Node: D, PathNode: r, RootNode: i, Surface: T, TextNode: l } }) }(window.kendo.jQuery), function(e) { function t() { if (u.namespaces && !u.namespaces.kvml) { u.namespaces.add("kvml", "urn:schemas-microsoft-com:vml"); var e = u.styleSheets.length > 30 ? u.styleSheets[0] : u.createStyleSheet(); e.addRule(".kvml", "behavior:url(#default#VML)") } } function n(e) { var t = u.createElement("kvml:" + e); return t.className = "kvml", t } function i(e) { var t, n = e.length, i = []; for (t = 0; n > t; t++) i.push(e[t].scaleCopy(M).toString(0, ",")); return i.join(" ") } function r(e, t) { var n, r, a, s, l, c = e.segments, d = c.length; if (d > 0) { for (n = [], l = 1; d > l; l++) a = o(c[l - 1], c[l]), a !== s && (s = a, n.push(a)), n.push("l" === a ? i([c[l].anchor()]) : i([c[l - 1].controlOut(), c[l].controlIn(), c[l].anchor()])); return r = "m " + i([c[0].anchor()]) + " " + n.join(" "), e.options.closed && (r += " x"), t !== !0 && (r += " e"), r } } function o(e, t) { return e.controlOut() && t.controlIn() ? "c" : "l" } function a(e) { return 0 === e.indexOf("fill") || 0 === e.indexOf(F) } function s(e, t, n) { var i, r = n * E(t.opacity(), 1); return i = e ? l(e, t.color(), r) : l(t.color(), "#fff", 1 - r) } function l(e, t, n) { var i = new x(e), r = new x(t), o = c(i.r, r.r, n), a = c(i.g, r.g, n), s = c(i.b, r.b, n); return new x(o, a, s).toHex() } function c(e, t, n) { return h.round(n * t + (1 - n) * e) } var d, u = document, h = Math, p = h.atan2, f = h.ceil, g = h.sqrt, m = window.kendo, v = m.deepExtend, _ = e.noop, w = m.drawing, b = w.BaseNode, y = m.geometry, k = y.toMatrix, x = m.Color, C = m.util, S = C.isTransparent, T = C.defined, D = C.deg, A = C.round, E = C.valueOrDefault, I = "none", P = ".kendo", M = 100, z = M * M, F = "gradient", R = 4, H = w.Surface.extend({ init: function(e, n) { w.Surface.fn.init.call(this, e, n), t(), this.element.empty(), this._root = new L, this._root.attachTo(this.element[0]), this.element.on("click" + P, this._click), this.element.on("mouseover" + P, this._mouseenter), this.element.on("mouseout" + P, this._mouseleave) }, type: "vml", destroy: function() { this._root && (this._root.destroy(), this._root = null, this.element.off(P)), w.Surface.fn.destroy.call(this) }, draw: function(e) { w.Surface.fn.draw.call(this, e), this._root.load([e], void 0, null) }, clear: function() { w.Surface.fn.clear.call(this), this._root.clear() } }), B = b.extend({ init: function(e) { b.fn.init.call(this, e), this.createElement(), this.attachReference() }, observe: _, destroy: function() { this.element && (this.element._kendoNode = null, this.element = null), b.fn.destroy.call(this) }, clear: function() { var e, t; for (this.element && (this.element.innerHTML = ""), e = this.childNodes, t = 0; e.length > t; t++) e[t].destroy(); this.childNodes = [] }, removeSelf: function() { this.element && (this.element.parentNode.removeChild(this.element), this.element = null), b.fn.removeSelf.call(this) }, createElement: function() { this.element = u.createElement("div") }, attachReference: function() { this.element._kendoNode = this }, load: function(e, t, n, i) { var r, o, a, s, l, c; for (i = E(i, 1), this.srcElement && (i *= E(this.srcElement.options.opacity, 1)), r = 0; e.length > r; r++) o = e[r], a = o.children, s = o.currentTransform(n), l = i * E(o.options.opacity, 1), c = new at[o.nodeType](o, s, l), a && a.length > 0 && c.load(a, t, s, i), T(t) ? this.insertAt(c, t) : this.append(c), c.attachTo(this.element, t) }, attachTo: function(e, t) { T(t) ? e.insertBefore(this.element, e.children[t] || null) : e.appendChild(this.element) }, optionsChange: function(e) { "visible" == e.field && this.css("display", e.value !== !1 ? "" : I) }, setStyle: function() { this.allCss(this.mapStyle()) }, mapStyle: function() { var e = []; return this.srcElement && this.srcElement.options.visible === !1 && e.push(["display", I]), e }, mapOpacityTo: function(e, t) { var n = E(this.opacity, 1); n *= E(t, 1), e.push(["opacity", n]) }, attr: function(e, t) { this.element && (this.element[e] = t) }, allAttr: function(e) { for (var t = 0; e.length > t; t++) this.attr(e[t][0], e[t][1]) }, css: function(e, t) { this.element && (this.element.style[e] = t) }, allCss: function(e) { for (var t = 0; e.length > t; t++) this.css(e[t][0], e[t][1]) } }), L = B.extend({ createElement: function() { B.fn.createElement.call(this), this.allCss([ ["width", "100%"], ["height", "100%"], ["position", "relative"], ["visibility", "visible"] ]) }, attachReference: _ }), N = m.Class.extend({ init: function(e, t) { this.srcElement = e, this.observer = t, e.addObserver(this) }, geometryChange: function() { this.observer.optionsChange({ field: "clip", value: this.srcElement }) }, clear: function() { this.srcElement.removeObserver(this) } }), O = B.extend({ init: function(e) { B.fn.init.call(this, e), e && this.initClip() }, observe: function() { b.fn.observe.call(this) }, mapStyle: function() { var e = B.fn.mapStyle.call(this); return this.srcElement && this.srcElement.clip() && e.push(["clip", this.clipRect()]), e }, optionsChange: function(e) { "clip" == e.field && (this.clearClip(), this.initClip(), this.setClip()), B.fn.optionsChange.call(this, e) }, clear: function() { this.clearClip(), B.fn.clear.call(this) }, initClip: function() { this.srcElement.clip() && (this.clip = new N(this.srcElement.clip(), this), this.clip.observer = this) }, clearClip: function() { this.clip && (this.clip.clear(), this.clip = null, this.css("clip", this.clipRect())) }, setClip: function() { this.clip && this.css("clip", this.clipRect()) }, clipRect: function() { var e, t, n, i = d, r = this.srcElement.clip(); return r && (e = this.clipBBox(r), t = e.topLeft(), n = e.bottomRight(), i = m.format("rect({0}px {1}px {2}px {3}px)", t.y, n.x, n.y, t.x)), i }, clipBBox: function(e) { var t = this.srcElement.rawBBox().topLeft(), n = e.rawBBox(); return n.origin.translate(-t.x, -t.y), n } }), V = O.extend({ createElement: function() { B.fn.createElement.call(this), this.setStyle() }, attachTo: function(e, t) { this.css("display", I), B.fn.attachTo.call(this, e, t), this.srcElement.options.visible !== !1 && this.css("display", "") }, _attachTo: function(e) { var t = document.createDocumentFragment(); t.appendChild(this.element), e.appendChild(t) }, mapStyle: function() { var e = O.fn.mapStyle.call(this); return e.push(["position", "absolute"]), e.push(["white-space", "nowrap"]), e }, optionsChange: function(e) { "transform" === e.field && this.refreshTransform(), "opacity" === e.field && this.refreshOpacity(), O.fn.optionsChange.call(this, e) }, refreshTransform: function(e) { var t, n = this.srcElement.currentTransform(e), i = this.childNodes, r = i.length; for (this.setClip(), t = 0; r > t; t++) i[t].refreshTransform(n) }, currentOpacity: function() { var e = E(this.srcElement.options.opacity, 1); return this.parent && this.parent.currentOpacity && (e *= this.parent.currentOpacity()), e }, refreshOpacity: function() { var e, t = this.childNodes, n = t.length, i = this.currentOpacity(); for (e = 0; n > e; e++) t[e].refreshOpacity(i) }, initClip: function() { if (O.fn.initClip.call(this), this.clip) { var e = this.clip.srcElement.bbox(this.srcElement.currentTransform()); e && (this.css("width", e.width() + e.origin.x), this.css("height", e.height() + e.origin.y)) } }, clipBBox: function(e) { return e.bbox(this.srcElement.currentTransform()) }, clearClip: function() { O.fn.clearClip.call(this) } }), U = B.extend({ init: function(e, t) { this.opacity = t, B.fn.init.call(this, e) }, createElement: function() { this.element = n("stroke"), this.setOpacity() }, optionsChange: function(e) { 0 === e.field.indexOf("stroke") && this.setStroke() }, refreshOpacity: function(e) { this.opacity = e, this.setStroke() }, setStroke: function() { this.allAttr(this.mapStroke()) }, setOpacity: function() { this.setStroke() }, mapStroke: function() { var e, t = this.srcElement.options.stroke, n = []; return t && !S(t.color) && 0 !== t.width ? (n.push(["on", "true"]), n.push(["color", t.color]), n.push(["weight", (t.width || 1) + "px"]), this.mapOpacityTo(n, t.opacity), T(t.dashType) && n.push(["dashstyle", t.dashType]), T(t.lineJoin) && n.push(["joinstyle", t.lineJoin]), T(t.lineCap) && (e = t.lineCap.toLowerCase(), "butt" === e && (e = "butt" === e ? "flat" : e), n.push(["endcap", e]))) : n.push(["on", "false"]), n } }), W = B.extend({ init: function(e, t, n) { this.opacity = n, B.fn.init.call(this, e) }, createElement: function() { this.element = n("fill"), this.setFill() }, optionsChange: function(e) { a(e.field) && this.setFill() }, refreshOpacity: function(e) { this.opacity = e, this.setOpacity() }, setFill: function() { this.allAttr(this.mapFill()) }, setOpacity: function() { this.setFill() }, attr: function(e, t) { var n, i = this.element; if (i) { for (n = e.split("."); n.length > 1;) i = i[n.shift()]; i[n[0]] = t } }, mapFill: function() { var e = this.srcElement.fill(), t = [ ["on", "false"] ]; return e && (e.nodeType == F ? t = this.mapGradient(e) : S(e.color) || (t = this.mapFillColor(e))), t }, mapFillColor: function(e) { var t = [ ["on", "true"], ["color", e.color] ]; return this.mapOpacityTo(t, e.opacity), t }, mapGradient: function(e) { var t, n = this.srcElement.options, i = n.fallbackFill || e.fallbackFill && e.fallbackFill(); return t = e instanceof w.LinearGradient ? this.mapLinearGradient(e) : e instanceof w.RadialGradient && e.supportVML ? this.mapRadialGradient(e) : i ? this.mapFillColor(i) : [ ["on", "false"] ] }, mapLinearGradient: function(e) { var t = e.start(), n = e.end(), i = C.deg(p(n.y - t.y, n.x - t.x)), r = [ ["on", "true"], ["type", F], ["focus", 0], ["method", "none"], ["angle", 270 - i] ]; return this.addColors(r), r }, mapRadialGradient: function(e) { var t = this.srcElement.rawBBox(), n = e.center(), i = (n.x - t.origin.x) / t.width(), r = (n.y - t.origin.y) / t.height(), o = [ ["on", "true"], ["type", "gradienttitle"], ["focus", "100%"], ["focusposition", i + " " + r], ["method", "none"] ]; return this.addColors(o), o }, addColors: function(e) { var t, n, i = this.srcElement.options, r = E(this.opacity, 1), o = [], a = i.fill.stops, l = i.baseColor, c = this.element.colors ? "colors.value" : "colors", d = s(l, a[0], r), u = s(l, a[a.length - 1], r); for (n = 0; a.length > n; n++) t = a[n], o.push(h.round(100 * t.offset()) + "% " + s(l, t, r)); e.push([c, o.join(",")], ["color", d], ["color2", u]) } }), j = B.extend({ init: function(e, t) { this.transform = t, B.fn.init.call(this, e) }, createElement: function() { this.element = n("skew"), this.setTransform() }, optionsChange: function(e) { "transform" === e.field && this.refresh(this.srcElement.currentTransform()) }, refresh: function(e) { this.transform = e, this.setTransform() }, transformOrigin: function() { return "-0.5,-0.5" }, setTransform: function() { this.allAttr(this.mapTransform()) }, mapTransform: function() { var e = this.transform, t = [], n = k(e); return n ? (n.round(R), t.push(["on", "true"], ["matrix", [n.a, n.c, n.b, n.d, 0, 0].join(",")], ["offset", n.e + "px," + n.f + "px"], ["origin", this.transformOrigin()])) : t.push(["on", "false"]), t } }), G = O.extend({ init: function(e, t, n) { this.fill = this.createFillNode(e, t, n), this.stroke = new U(e, n), this.transform = this.createTransformNode(e, t), O.fn.init.call(this, e) }, attachTo: function(e, t) { this.fill.attachTo(this.element), this.stroke.attachTo(this.element), this.transform.attachTo(this.element), B.fn.attachTo.call(this, e, t) }, createFillNode: function(e, t, n) { return new W(e, t, n) }, createTransformNode: function(e, t) { return new j(e, t) }, createElement: function() { this.element = n("shape"), this.setCoordsize(), this.setStyle() }, optionsChange: function(e) { a(e.field) ? this.fill.optionsChange(e) : 0 === e.field.indexOf("stroke") ? this.stroke.optionsChange(e) : "transform" === e.field ? this.transform.optionsChange(e) : "opacity" === e.field && (this.fill.setOpacity(), this.stroke.setOpacity()), O.fn.optionsChange.call(this, e) }, refreshTransform: function(e) { this.transform.refresh(this.srcElement.currentTransform(e)) }, refreshOpacity: function(e) { e *= E(this.srcElement.options.opacity, 1), this.fill.refreshOpacity(e), this.stroke.refreshOpacity(e) }, mapStyle: function(e, t) { var n, i = O.fn.mapStyle.call(this); return e && t || (e = t = M), i.push(["position", "absolute"], ["width", e + "px"], ["height", t + "px"]), n = this.srcElement.options.cursor, n && i.push(["cursor", n]), i }, setCoordsize: function() { this.allAttr([ ["coordorigin", "0 0"], ["coordsize", z + " " + z] ]) } }), q = B.extend({ createElement: function() { this.element = n("path"), this.setPathData() }, geometryChange: function() { this.setPathData() }, setPathData: function() { this.attr("v", this.renderData()) }, renderData: function() { return r(this.srcElement) } }), $ = G.extend({ init: function(e, t, n) { this.pathData = this.createDataNode(e), G.fn.init.call(this, e, t, n) }, attachTo: function(e, t) { this.pathData.attachTo(this.element), G.fn.attachTo.call(this, e, t) }, createDataNode: function(e) { return new q(e) }, geometryChange: function() { this.pathData.geometryChange(), G.fn.geometryChange.call(this) } }), Y = q.extend({ renderData: function() { var e, t, n, i = this.srcElement.paths; if (i.length > 0) { for (e = [], t = 0; i.length > t; t++) n = i.length - 1 > t, e.push(r(i[t], n)); return e.join(" ") } } }), Q = $.extend({ createDataNode: function(e) { return new Y(e) } }), K = j.extend({ transformOrigin: function() { var e = this.srcElement.geometry().bbox(), t = e.center(), n = -f(t.x) / f(e.width()), i = -f(t.y) / f(e.height()); return n + "," + i } }), X = G.extend({ createElement: function() { this.element = n("oval"), this.setStyle() }, createTransformNode: function(e, t) { return new K(e, t) }, geometryChange: function() { G.fn.geometryChange.call(this), this.setStyle(), this.refreshTransform() }, mapStyle: function() { var e = this.srcElement.geometry(), t = e.radius, n = e.center, i = f(2 * t), r = G.fn.mapStyle.call(this, i, i); return r.push(["left", f(n.x - t) + "px"], ["top", f(n.y - t) + "px"]), r } }), Z = q.extend({ renderData: function() { return r(this.srcElement.toPath()) } }), J = $.extend({ createDataNode: function(e) { return new Z(e) } }), et = q.extend({ createElement: function() { q.fn.createElement.call(this), this.attr("textpathok", !0) }, renderData: function() { var e = this.srcElement.rect(), t = e.center(); return "m " + i([new y.Point(e.topLeft().x, t.y)]) + " l " + i([new y.Point(e.bottomRight().x, t.y)]) } }), tt = B.extend({ createElement: function() { this.element = n("textpath"), this.attr("on", !0), this.attr("fitpath", !1), this.setStyle(), this.setString() }, optionsChange: function(e) { "content" === e.field ? this.setString() : this.setStyle(), B.fn.optionsChange.call(this, e) }, mapStyle: function() { return [ ["font", this.srcElement.options.font] ] }, setString: function() { this.attr("string", this.srcElement.content()) } }), nt = $.extend({ init: function(e, t, n) { this.path = new tt(e), $.fn.init.call(this, e, t, n) }, createDataNode: function(e) { return new et(e) }, attachTo: function(e, t) { this.path.attachTo(this.element), $.fn.attachTo.call(this, e, t) }, optionsChange: function(e) { ("font" === e.field || "content" === e.field) && (this.path.optionsChange(e), this.pathData.geometryChange(e)), $.fn.optionsChange.call(this, e) } }), it = q.extend({ renderData: function() { var e = this.srcElement.rect(), t = (new w.Path).moveTo(e.topLeft()).lineTo(e.topRight()).lineTo(e.bottomRight()).lineTo(e.bottomLeft()).close(); return r(t) } }), rt = j.extend({ init: function(e, t, n) { this.opacity = n, j.fn.init.call(this, e, t) }, createElement: function() { this.element = n("fill"), this.attr("type", "frame"), this.attr("rotate", !0), this.setOpacity(), this.setSrc(), this.setTransform() }, optionsChange: function(e) { "src" === e.field && this.setSrc(), j.fn.optionsChange.call(this, e) }, geometryChange: function() { this.refresh() }, refreshOpacity: function(e) { this.opacity = e, this.setOpacity() }, setOpacity: function() { var e = []; this.mapOpacityTo(e, this.srcElement.options.opacity), this.allAttr(e) }, setSrc: function() { this.attr("src", this.srcElement.src()) }, mapTransform: function() { var e, t, n, i, r, o, a, s, l = this.srcElement, c = l.rawBBox(), d = c.center(), u = M / 2, h = M, f = c.width() / h, m = c.height() / h, v = 0, _ = this.transform; return _ ? (n = k(_), i = g(n.a * n.a + n.b * n.b), r = g(n.c * n.c + n.d * n.d), f *= i, m *= r, o = D(p(n.b, n.d)), a = D(p(-n.c, n.a)), v = (o + a) / 2, 0 !== v ? (s = l.bbox().center(), e = (s.x - u) / h, t = (s.y - u) / h) : (e = (d.x * i + n.e - u) / h, t = (d.y * r + n.f - u) / h)) : (e = (d.x - u) / h, t = (d.y - u) / h), f = A(f, R), m = A(m, R), e = A(e, R), t = A(t, R), v = A(v, R), [ ["size", f + "," + m], ["position", e + "," + t], ["angle", v] ] } }), ot = $.extend({ createFillNode: function(e, t, n) { return new rt(e, t, n) }, createDataNode: function(e) { return new it(e) }, optionsChange: function(e) { ("src" === e.field || "transform" === e.field) && this.fill.optionsChange(e), $.fn.optionsChange.call(this, e) }, geometryChange: function() { this.fill.geometryChange(), $.fn.geometryChange.call(this) }, refreshTransform: function(e) { $.fn.refreshTransform.call(this, e), this.fill.refresh(this.srcElement.currentTransform(e)) } }), at = { Group: V, Text: nt, Path: $, MultiPath: Q, Circle: X, Arc: J, Image: ot }; m.support.vml = function() { var e = m.support.browser; return e.msie && 9 > e.version }(), d = "inherit", m.support.browser.msie && 8 > m.support.browser.version && (d = "rect(auto auto auto auto)"), m.support.vml && w.SurfaceFactory.current.register("vml", H, 30), v(w, { vml: { ArcDataNode: Z, ArcNode: J, CircleTransformNode: K, CircleNode: X, FillNode: W, GroupNode: V, ImageNode: ot, ImageFillNode: rt, ImagePathDataNode: it, MultiPathDataNode: Y, MultiPathNode: Q, Node: B, PathDataNode: q, PathNode: $, RootNode: L, StrokeNode: U, Surface: H, TextNode: nt, TextPathNode: tt, TextPathDataNode: et, TransformNode: j } }) }(window.kendo.jQuery), function(e, t, n) { "use strict"; function i(n, i) { function o(t) { var n = new st.Group, i = t.getBoundingClientRect(); return M(n, [1, 0, 0, 1, -i.left, -i.top]), pt._clipbox = !1, pt._matrix = lt.Matrix.unit(), pt._stackingContext = { element: t, group: n }, e(t).addClass("k-pdf-export"), tt(t, n), e(t).removeClass("k-pdf-export"), n } function a(t) { return null != t ? ("string" == typeof t && (t = kendo.template(t.replace(/^\s+|\s+$/g, ""))), "function" == typeof t ? function(n) { var i = t(n); return i ? e(i)[0] : void 0 } : function() { return e(t).clone()[0] }) : void 0 } function s(n, i, r, o, s, l, c) { function d() { function e() { setTimeout(function() { n({ pages: k, container: C }) }, 10) } var t, i; ("-" != r || s) && u(x), t = g(), x.parentNode.insertBefore(t, x), t.appendChild(x), _ ? (i = k.length, k.forEach(function(t, n) { var r = _({ element: t, pageNum: n + 1, totalPages: k.length }); r && (t.appendChild(r), h(r, function() { 0 === --i && e() })) })) : e() } function u(n) { var i, o, a, l, c = b(n), d = t(y(c, "padding-bottom")), h = t(y(c, "border-bottom-width")), p = S; for (S += d + h, i = !0, o = n.firstChild; o; o = o.nextSibling) if (1 == o.nodeType) { if (i = !1, a = e(o), a.is(r)) { f(o); continue } if (!s) { u(o); continue } if (!/^(?:static|relative)$/.test(y(b(o), "position"))) continue; l = m(o), 1 == l ? f(o) : l && (a.data("kendoChart") || /^(?:img|tr|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(o.tagName)) ? f(o) : u(o) } else 3 == o.nodeType && s && (v(o, i), i = !1); S = p } function p(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 f(e) { var t, n; return 1 == e.nodeType && e !== x && p(e) ? f(e.parentNode) : (t = g(), n = w.createRange(), n.setStartBefore(x), n.setEndBefore(e), t.appendChild(n.extractContents()), void x.parentNode.insertBefore(t, x)) } function g() { var t = w.createElement("KENDO-PDF-PAGE"); return e(t).css({ display: "block", boxSizing: "content-box", width: o || "auto", padding: l.top + "px " + l.right + "px " + l.bottom + "px " + l.left + "px", position: "relative", height: s || "auto", overflow: s || o ? "hidden" : "visible", clear: "both" }), c && c.pageClassName && (t.className = c.pageClassName), k.push(t), t } function m(e) { var t, n, i = e.getBoundingClientRect(); return 0 === i.width || 0 === i.height ? 0 : (t = x.getBoundingClientRect().top, n = s - S, i.height > n ? 3 : i.top - t > n ? 1 : i.bottom - t > n ? 2 : 0) } function v(e, t) { var n, i, r, o, a; /\S/.test(e.data) && (n = e.data.length, i = w.createRange(), i.selectNodeContents(e), r = m(i), r && (o = e, 1 == r ? f(t ? e.parentNode : e) : (! function s(t, n, r) { return i.setEnd(e, n), t == n || n == r ? n : m(i) ? s(t, t + n >> 1, n) : s(n, n + r >> 1, r) }(0, n >> 1, n), !/\S/.test("" + i) && t ? f(e.parentNode) : (o = e.splitText(i.endOffset), a = g(), i.setStartBefore(x), a.appendChild(i.extractContents()), x.parentNode.insertBefore(a, x))), v(o))) } var _ = a(c.template), w = i.ownerDocument, k = [], x = e(i).clone(!0, !0)[0], C = w.createElement("KENDO-PDF-DOCUMENT"), S = 0; e(x).find("tfoot").each(function() { this.parentNode.appendChild(this) }), e(x).find("ol").each(function() { e(this).children().each(function(e) { this.setAttribute("kendo-split-index", e) }) }), e(C).css({ display: "block", position: "absolute", boxSizing: "content-box", left: "-10000px", top: "-10000px" }), o && (e(C).css({ width: o, paddingLeft: l.left, paddingRight: l.right }), e(x).css({ overflow: "hidden" })), C.appendChild(x), i.parentNode.insertBefore(C, i), c.beforePageBreak ? setTimeout(function() { c.beforePageBreak(C, d) }, 15) : setTimeout(d, 15) } i || (i = {}); var l = e.Deferred(); if (n = e(n)[0], !n) return l.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 && kendo.pdf.defineFont(r(n.ownerDocument)), h(n, function() { var e, t = i && i.forcePageBreak, r = i && i.paperSize && "auto" != i.paperSize, a = r && kendo.pdf.getPaperOptions(function(e, t) { return e in i ? i[e] : t }), c = r && a.paperSize[0], d = r && a.paperSize[1], u = i.margin && a.margin; t || d ? (u || (u = { left: 0, top: 0, right: 0, bottom: 0 }), e = new st.Group({ pdf: { multiPage: !0, paperSize: r ? a.paperSize : "auto" } }), s(function(t) { if (i.progress) { var n = !1, r = 0; ! function a() { t.pages.length > r ? (e.append(o(t.pages[r])), i.progress({ pageNum: ++r, totalPages: t.pages.length, cancel: function() { n = !0 } }), n ? t.container.parentNode.removeChild(t.container) : setTimeout(a)) : (t.container.parentNode.removeChild(t.container), l.resolve(e)) }() } else t.pages.forEach(function(t) { e.append(o(t)) }), t.container.parentNode.removeChild(t.container), l.resolve(e) }, n, t, c ? c - u.left - u.right : null, d ? d - u.top - u.bottom : null, u, i)) : l.resolve(o(n)) }), l.promise() } function r(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 = y(e.style, "src"); return n ? ot(n).reduce(function(e, t) { var n = at(t); return n && e.push(n), e }, []) : (t = at(e.cssText), t ? [t] : []) } function i(e, i) { var o, a, s, l, c, d, u; for (o = 0; i.length > o; ++o) switch (a = i[o], a.type) { case 3: t(a.styleSheet); break; case 5: s = a.style, l = ot(y(s, "font-family")), c = /^(400|bold)$/i.test(y(s, "font-weight")), d = "italic" == y(s, "font-style"), u = n(a), u.length > 0 && r(e, l, c, d, u[0]) } } function r(e, t, n, i, r) { /^data:/i.test(r) || /^[^\/:]+:\/\//.test(r) || /^\//.test(r) || (r = (e.href + "").replace(/[^\/]*$/, "") + r), t.forEach(function(e) { e = e.replace(/^(['"]?)(.*?)\1$/, "$2"), n && (e += "|bold"), i && (e += "|italic"), o[e] = r }) } var o, a; for (null == e && (e = document), o = {}, a = 0; e.styleSheets.length > a; ++a) t(e.styleSheets[a]); return o } function o(e, t) { return Object.prototype.hasOwnProperty.call(e, t) } function a(e) { return e = "_counter_" + e, pt[e] } function s(e) { var t = [], n = pt; for (e = "_counter_" + e; n;) o(n, e) && t.push(n[e]), n = Object.getPrototypeOf(n); return t.reverse() } function l(e, t) { var n = pt; for (e = "_counter_" + e; n && !o(n, e);) n = Object.getPrototypeOf(n); n || (n = pt._root), n[e] = (n[e] || 0) + (null == t ? 1 : t) } function c(e, t) { e = "_counter_" + e, pt[e] = null == t ? 0 : t } function d(e, n, i) { var r, o, a; for (r = 0; e.length > r;) o = e[r++], a = t(e[r]), isNaN(a) ? n(o, i) : (n(o, a), ++r) } function u(e, t) { var n = kendo.parseColor(e); return n && (n = n.toRGB(), t ? n = n.toCssRgba() : 0 === n.a && (n = null)), n } function h(e, t) { function n(e) { ht[e] || (ht[e] = !0, o.push(e)) } function i() { --r <= 0 && t() } var r, o = []; ! function a(e) { /^img$/i.test(e.tagName) && n(e.src), rt(y(b(e), "background-image")).forEach(function(e) { "url" == e.type && n(e.url) }), e.children && ct.call(e.children).forEach(a) }(e), r = o.length, 0 === r && i(), o.forEach(function(e) { var t = ht[e] = new Image; /^data:/i.test(e) || (t.crossOrigin = "Anonymous"), t.src = e, t.complete ? i() : (t.onload = i, t.onerror = function() { ht[e] = null, i() }) }) } function p(e) { for (var t = { 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" }, n = [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], i = ""; e > 0;) n[0] > e ? n.shift() : (i += t[n[0]], e -= n[0]); return i } function f(e) { var t, i = ""; do t = e % 26, i = String.fromCharCode(97 + t) + i, e = n.floor(e / 26); while (e > 0); return i } function g(e, t, n) { var i, r; pt = Object.create(pt), pt[e.tagName.toLowerCase()] = { element: e, style: t }, i = y(t, "text-decoration"), i && "none" != i && (r = y(t, "color"), i.split(/\s+/g).forEach(function(e) { pt[e] || (pt[e] = r) })), w(t) && (pt._stackingContext = { element: e, group: n }) } function m() { pt = Object.getPrototypeOf(pt) } function v(e) { if (null != pt._clipbox) { var t = e.bbox(pt._matrix); pt._clipbox = pt._clipbox ? lt.Rect.intersect(pt._clipbox, t) : t } } function _() { var e = pt._clipbox; return null == e ? !0 : e ? 0 === e.width() || 0 === e.height() : void 0 } function w(e) { function t(t) { return y(e, t) } return "none" != t("transform") || "static" != t("position") && "auto" != t("z-index") || t("opacity") < 1 ? !0 : void 0 } function b(e, t) { return window.getComputedStyle(e, t || null) } function y(e, t) { return e.getPropertyValue(t) || dt.webkit && e.getPropertyValue("-webkit-" + t) || dt.mozilla && e.getPropertyValue("-moz-" + t) || dt.opera && e.getPropertyValue("-o-" + t) || dt.msie && e.getPropertyValue("-ms-" + t) } function k(e, t, n, i) { e.setProperty(t, n, i), dt.webkit ? e.setProperty("-webkit-" + t, n, i) : dt.mozilla ? e.setProperty("-moz-" + t, n, i) : dt.opera ? e.setProperty("-o-" + t, n, i) : dt.msie && (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 x(e) { if (dt.msie || dt.chrome) { var t = e.getClientRects(); if (2 == t.length && 1 >= t[1].width) return t[0]; if (3 == t.length && 1 >= t[0].width && 1 >= t[2].width) return t[1] } return e.getBoundingClientRect() } function C(e, n) { return n = "border-" + n, { width: t(y(e, n + "-width")), style: y(e, n + "-style"), color: u(y(e, n + "-color"), !0) } } function S(e, t) { var n = e.style.cssText, i = t(); return e.style.cssText = n, i } function T(e, n) { var i = y(e, "border-" + n + "-radius").split(/\s+/g).map(t); return 1 == i.length && i.push(i[0]), R({ x: i[0], y: i[1] }) } function D(e) { var t = e.getBoundingClientRect(); return t = A(t, "border-*-width", e), t = A(t, "padding-*", e) } function A(e, n, i) { var r, o, a, s, l; return "string" == typeof n ? (r = b(i), o = t(y(r, n.replace("*", "top"))), a = t(y(r, n.replace("*", "right"))), s = t(y(r, n.replace("*", "bottom"))), l = t(y(r, n.replace("*", "left")))) : "number" == typeof n && (o = a = s = l = n), { top: e.top + o, right: e.right - a, bottom: e.bottom - s, left: e.left + l, width: e.right - e.left - a - l, height: e.bottom - e.top - s - o } } function E(e) { var n, i, r = y(e, "transform"); return "none" == r ? null : (n = /^\s*matrix\(\s*(.*?)\s*\)\s*$/.exec(r), n ? (i = y(e, "transform-origin"), n = n[1].split(/\s*,\s*/g).map(t), i = i.split(/\s+/g).map(t), { matrix: n, origin: i }) : void 0) } function I(e) { return 180 * e / n.PI % 360 } function P(e) { var i = t(e); return /grad$/.test(e) ? n.PI * i / 200 : /rad$/.test(e) ? i : /turn$/.test(e) ? n.PI * i * 2 : /deg$/.test(e) ? n.PI * i / 180 : void 0 } function M(e, t) { return t = new lt.Matrix(t[0], t[1], t[2], t[3], t[4], t[5]), e.transform(t), t } function z(e, t) { e.clip(t) } function F(e, t, n, i) { for (var r = new lt.Arc([t, n], i).curvePoints(), o = 1; r.length > o;) e.curveTo(r[o++], r[o++], r[o++]) } function R(e) { return (0 >= e.x || 0 >= e.y) && (e.x = e.y = 0), e } function H(e, t, i, r, o) { var a = n.max(0, t.x), s = n.max(0, t.y), l = n.max(0, i.x), c = n.max(0, i.y), d = n.max(0, r.x), u = n.max(0, r.y), h = n.max(0, o.x), p = n.max(0, o.y), f = n.min(e.width / (a + l), e.height / (c + u), e.width / (d + h), e.height / (p + s)); return 1 > f && (a *= f, s *= f, l *= f, c *= f, d *= f, u *= f, h *= f, p *= f), { tl: { x: a, y: s }, tr: { x: l, y: c }, br: { x: d, y: u }, bl: { x: h, y: p } } } function B(e, n, i) { var r, o, a, s, l, c, d, u, h = b(e), p = T(h, "top-left"), f = T(h, "top-right"), g = T(h, "bottom-left"), m = T(h, "bottom-right"); return ("padding" == i || "content" == i) && (r = C(h, "top"), o = C(h, "right"), a = C(h, "bottom"), s = C(h, "left"), p.x -= s.width, p.y -= r.width, f.x -= o.width, f.y -= r.width, m.x -= o.width, m.y -= a.width, g.x -= s.width, g.y -= a.width, "content" == i && (l = t(y(h, "padding-top")), c = t(y(h, "padding-right")), d = t(y(h, "padding-bottom")), u = t(y(h, "padding-left")), p.x -= u, p.y -= l, f.x -= c, f.y -= l, m.x -= c, m.y -= d, g.x -= u, g.y -= d)), "number" == typeof i && (p.x -= i, p.y -= i, f.x -= i, f.y -= i, m.x -= i, m.y -= i, g.x -= i, g.y -= i), L(n, p, f, m, g) } function L(e, t, n, i, r) { var o = H(e, t, n, i, r), a = o.tl, s = o.tr, l = o.br, c = o.bl, d = new st.Path({ fill: null, stroke: null }); return d.moveTo(e.left, e.top + a.y), a.x && F(d, e.left + a.x, e.top + a.y, { startAngle: -180, endAngle: -90, radiusX: a.x, radiusY: a.y }), d.lineTo(e.right - s.x, e.top), s.x && F(d, e.right - s.x, e.top + s.y, { startAngle: -90, endAngle: 0, radiusX: s.x, radiusY: s.y }), d.lineTo(e.right, e.bottom - l.y), l.x && F(d, e.right - l.x, e.bottom - l.y, { startAngle: 0, endAngle: 90, radiusX: l.x, radiusY: l.y }), d.lineTo(e.left + c.x, e.bottom), c.x && F(d, e.left + c.x, e.bottom - c.y, { startAngle: 90, endAngle: 180, radiusX: c.x, radiusY: c.y }), d.close() } function N(e, n) { var i = t(e) + ""; switch (n) { case "decimal-leading-zero": return 2 > i.length && (i = "0" + i), i; case "lower-roman": return p(e); case "upper-roman": return p(e).toUpperCase(); case "lower-latin": case "lower-alpha": return f(e - 1); case "upper-latin": case "upper-alpha": return f(e - 1).toUpperCase(); default: return i } } function O(e, t) { function n(e, t, n) { return n ? (n = n.replace(/^\s*(["'])(.*)\1\s*$/, "$2"), s(e).map(function(e) { return N(e, t) }).join(n)) : N(a(e) || 0, t) } var i, r = ot(t, /^\s+/), o = []; return r.forEach(function(t) { var r; (i = /^\s*(["'])(.*)\1\s*$/.exec(t)) ? o.push(i[2].replace(/\\([0-9a-f]{4})/gi, function(e, t) { return String.fromCharCode(parseInt(t, 16)) })) : (i = /^\s*counter\((.*?)\)\s*$/.exec(t)) ? (r = ot(i[1]), o.push(n(r[0], r[1]))) : (i = /^\s*counters\((.*?)\)\s*$/.exec(t)) ? (r = ot(i[1]), o.push(n(r[0], r[2], r[1]))) : o.push((i = /^\s*attr\((.*?)\)\s*$/.exec(t)) ? e.getAttribute(i[1]) || "" : t) }), o.join("") } function V(e) { var t, n; if (e.cssText) return e.cssText; for (t = [], n = 0; e.length > n; ++n) t.push(e[n] + ": " + y(e, e[n])); return t.join(";\n") } function U(e, n) { function i(n, i) { var o, a = b(e, n); a.content && "normal" != a.content && "none" != a.content && "0px" != a.width && (o = e.ownerDocument.createElement(ut), o.style.cssText = V(a), o.textContent = O(e, a.content), e.insertBefore(o, i), ":before" != n || /absolute|fixed/.test(y(o.style, "position")) || (o.style.marginLeft = t(y(o.style, "margin-left")) - o.offsetWidth + "px"), r.push(o)) } if (e.tagName == ut) return void W(e, n); var r = []; i(":before", e.firstChild), i(":after", null), W(e, n), r.forEach(function(t) { e.removeChild(t) }) } function W(i, r) { function o(e) { var t, n, r, o, a, s; if (/^td$/i.test(i.tagName) && (t = pt.table, t && "collapse" == y(t.style, "border-collapse"))) { if (n = C(t.style, "left").width, r = C(t.style, "top").width, 0 === n && 0 === r) return e; if (o = t.element.getBoundingClientRect(), a = t.element.rows[0].cells[0], s = a.getBoundingClientRect(), s.top == o.top || s.left == o.left) return ct.call(e).map(function(e) { return { left: e.left + n, top: e.top + r, right: e.right + n, bottom: e.bottom + r, height: e.height, width: e.width } }) } return e } function a(e, t, i, o, a, s, l, c) { function d(t, r, o) { var a = n.PI / 2 * t / (t + i), s = { x: r.x - t, y: r.y - i }, l = new st.Path({ fill: { color: e }, stroke: null }).moveTo(0, 0); M(l, o), F(l, 0, r.y, { startAngle: -90, endAngle: -I(a), radiusX: r.x, radiusY: r.y }), s.x > 0 && s.y > 0 ? (l.lineTo(s.x * n.cos(a), r.y - s.y * n.sin(a)), F(l, 0, r.y, { startAngle: -I(a), endAngle: -90, radiusX: s.x, radiusY: s.y, anticlockwise: !0 })) : s.x > 0 ? l.lineTo(s.x, i).lineTo(0, i) : l.lineTo(s.x, i).lineTo(s.x, 0), h.append(l.close()) } if (!(0 >= i)) { var u, h = new st.Group; M(h, c), r.append(h), R(s), R(l), u = new st.Path({ fill: { color: e }, stroke: null }), h.append(u), u.moveTo(s.x ? n.max(s.x, o) : 0, 0).lineTo(t - (l.x ? n.max(l.x, a) : 0), 0).lineTo(t - n.max(l.x, a), i).lineTo(n.max(s.x, o), i).close(), s.x && d(o, s, [-1, 0, 0, 1, s.x, 0]), l.x && d(a, l, [1, 0, 0, 1, t - l.x, 0]) } } function s(t) { var n, o, a = new st.Group; for (z(a, L(t, U, W, $, q)), r.append(a), "A" == i.tagName && i.href && !/^#?$/.test(e(i).attr("href")) && (a._pdfLink = { url: i.href, top: t.top, right: t.right, bottom: t.bottom, left: t.left }), K && (n = new st.Path({ fill: { color: K.toCssRgba() }, stroke: null }), n.moveTo(t.left, t.top).lineTo(t.right, t.top).lineTo(t.right, t.bottom).lineTo(t.left, t.bottom).close(), a.append(n)), o = h.length; --o >= 0;) l(a, t, h[o], g[o % g.length], m[o % m.length], _[o % _.length], w[o % w.length]) } function l(e, n, r, o, a, s, l) { function c(e, n, r, c, d) { function u() { for (; m.origin.x > n.left;) m.origin.x -= r } function h() { for (; m.origin.y > n.top;) m.origin.y -= c } function p() { for (; n.right > m.origin.x;) d(e, m.clone()), m.origin.x += r } var f, g, m, v, _ = r / c, w = n; if ("content-box" == s ? (w = A(w, "border-*-width", i), w = A(w, "padding-*", i)) : "padding-box" == s && (w = A(w, "border-*-width", i)), /^\s*auto(\s+auto)?\s*$/.test(l) || (f = l.split(/\s+/g), r = /%$/.test(f[0]) ? w.width * t(f[0]) / 100 : t(f[0]), c = 1 == f.length || "auto" == f[1] ? r / _ : /%$/.test(f[1]) ? w.height * t(f[1]) / 100 : t(f[1])), g = (a + "").split(/\s+/), 1 == g.length && (g[1] = "50%"), g[0] = /%$/.test(g[0]) ? t(g[0]) / 100 * (w.width - r) : t(g[0]), g[1] = /%$/.test(g[1]) ? t(g[1]) / 100 * (w.height - c) : t(g[1]), m = new lt.Rect([w.left + g[0], w.top + g[1]], [r, c]), "no-repeat" == o) d(e, m); else if ("repeat-x" == o) u(), p(); else if ("repeat-y" == o) for (h(); n.bottom > m.origin.y;) d(e, m.clone()), m.origin.y += c; else if ("repeat" == o) for (u(), h(), v = m.origin.clone(); n.bottom > m.origin.y;) m.origin.x = v.x, p(), m.origin.y += c } if (r && "none" != r) if ("url" == r.type) { if (/^url\(\"data:image\/svg/i.test(r.url)) return; var d = ht[r.url]; d && d.width > 0 && d.height > 0 && c(e, n, d.width, d.height, function(e, t) { e.append(new st.Image(r.url, t)) }) } else { if ("linear" != r.type) return; c(e, n, n.width, n.height, j(r)) } } function c() { function e(e) { S(i, function() { i.style.position = "relative"; var t = i.ownerDocument.createElement(ut); t.style.position = "absolute", t.style.boxSizing = "border-box", "outside" == o ? (t.style.width = "6em", t.style.left = "-6.8em", t.style.textAlign = "right") : t.style.left = "0px", e(t), i.insertBefore(t, i.firstChild), tt(t, r), i.removeChild(t) }) } function t(e) { var t, n = i.parentNode.children, r = i.getAttribute("kendo-split-index"); if (null != r) return e(0 | r, n.length); for (t = 0; n.length > t; ++t) if (n[t] === i) return e(t, n.length) } var n, o, a = y(E, "list-style-type"); if ("none" != a) switch (n = y(E, "list-style-image"), o = y(E, "list-style-position"), a) { case "circle": case "disc": case "square": e(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": e(function(e) { t(function(t) { ++t, "decimal-leading-zero" == a && 2 > (t + "").length && (t = "0" + t), e.innerHTML = t + "." }) }); break; case "lower-roman": case "upper-roman": e(function(e) { t(function(t) { t = p(t + 1), "upper-roman" == a && (t = t.toUpperCase()), e.innerHTML = t + "." }) }); break; case "lower-latin": case "lower-alpha": case "upper-latin": case "upper-alpha": e(function(e) { t(function(t) { t = f(t), /^upper/i.test(a) && (t = t.toUpperCase()), e.innerHTML = t + "." }) }) } } function d(e, t, n) { function o(e) { return { x: e.y, y: e.x } } var l, c, d, u, h, p, f, g; if (0 !== e.width && 0 !== e.height && (s(e), l = V.width > 0 && (t && "ltr" == Q || n && "rtl" == Q), c = N.width > 0 && (n && "ltr" == Q || t && "rtl" == Q), 0 !== P.width || 0 !== V.width || 0 !== N.width || 0 !== O.width)) { if (P.color == N.color && P.color == O.color && P.color == V.color && P.width == N.width && P.width == O.width && P.width == V.width && l && c) return e = A(e, P.width / 2), d = B(i, e, P.width / 2), d.options.stroke = { color: P.color, width: P.width }, void r.append(d); if (0 === U.x && 0 === W.x && 0 === $.x && 0 === q.x && 2 > P.width && 2 > V.width && 2 > N.width && 2 > O.width) return P.width > 0 && r.append(new st.Path({ stroke: { width: P.width, color: P.color } }).moveTo(e.left, e.top + P.width / 2).lineTo(e.right, e.top + P.width / 2)), O.width > 0 && r.append(new st.Path({ stroke: { width: O.width, color: O.color } }).moveTo(e.left, e.bottom - O.width / 2).lineTo(e.right, e.bottom - O.width / 2)), l && r.append(new st.Path({ stroke: { width: V.width, color: V.color } }).moveTo(e.left + V.width / 2, e.top).lineTo(e.left + V.width / 2, e.bottom)), void(c && r.append(new st.Path({ stroke: { width: N.width, color: N.color } }).moveTo(e.right - N.width / 2, e.top).lineTo(e.right - N.width / 2, e.bottom))); u = H(e, U, W, $, q), h = u.tl, p = u.tr, f = u.br, g = u.bl, a(P.color, e.width, P.width, V.width, N.width, h, p, [1, 0, 0, 1, e.left, e.top]), a(O.color, e.width, O.width, N.width, V.width, f, g, [-1, 0, 0, -1, e.right, e.bottom]), a(V.color, e.height, V.width, O.width, P.width, o(g), o(h), [0, -1, 1, 0, e.left, e.bottom]), a(N.color, e.height, N.width, P.width, O.width, o(p), o(f), [0, 1, -1, 0, e.right, e.top]) } } var h, g, m, _, w, k, x, D, E = b(i), P = C(E, "top"), N = C(E, "right"), O = C(E, "bottom"), V = C(E, "left"), U = T(E, "top-left"), W = T(E, "top-right"), q = T(E, "bottom-left"), $ = T(E, "bottom-right"), Q = y(E, "direction"), K = y(E, "background-color"); for (K = u(K), h = rt(y(E, "background-image")), g = ot(y(E, "background-repeat")), m = ot(y(E, "background-position")), _ = ot(y(E, "background-origin")), w = ot(y(E, "background-size")), dt.msie && 10 > dt.version && (m = ot(i.currentStyle.backgroundPosition)), k = A(i.getBoundingClientRect(), "border-*-width", i), function() { var e, n, i, o, a, s, l, c = y(E, "clip"), d = /^\s*rect\((.*)\)\s*$/.exec(c); d && (e = d[1].split(/[ ,]+/g), n = "auto" == e[0] ? k.top : t(e[0]) + k.top, i = "auto" == e[1] ? k.right : t(e[1]) + k.left, o = "auto" == e[2] ? k.bottom : t(e[2]) + k.top, a = "auto" == e[3] ? k.left : t(e[3]) + k.left, s = new st.Group, l = (new st.Path).moveTo(a, n).lineTo(i, n).lineTo(i, o).lineTo(a, o).close(), z(s, l), r.append(s), r = s, v(l)) }(), x = i.getClientRects(), 1 == x.length && (x = [i.getBoundingClientRect()]), x = o(x), D = 0; x.length > D; ++D) d(x[D], 0 === D, D == x.length - 1); return x.length > 0 && "list-item" == y(E, "display") && c(x[0]), function() { function e() { var e = B(i, k, "padding"), t = new st.Group; z(t, e), r.append(t), r = t, v(e) } Y(i) ? e() : /^(hidden|auto|scroll)/.test(y(E, "overflow")) ? e() : /^(hidden|auto|scroll)/.test(y(E, "overflow-x")) ? e() : /^(hidden|auto|scroll)/.test(y(E, "overflow-y")) && e() }(), G(i, r) || Z(i, r), r } function j(e) { return function(i, r) { { var o, a, s, l, c, d, u, h, p, f, g, m, v, _ = r.width(), w = r.height(); r.topLeft() } switch (e.type) { case "linear": switch (o = null != e.angle ? e.angle : n.PI, e.to) { case "top": o = 0; break; case "left": o = -n.PI / 2; break; case "bottom": o = n.PI; break; case "right": o = n.PI / 2; break; case "top left": case "left top": o = -n.atan2(w, _); break; case "top right": case "right top": o = n.atan2(w, _); break; case "bottom left": case "left bottom": o = n.PI + n.atan2(w, _); break; case "bottom right": case "right bottom": o = n.PI - n.atan2(w, _) } e.reverse && (o -= n.PI), o %= 2 * n.PI, 0 > o && (o += 2 * n.PI), a = n.abs(_ * n.sin(o)) + n.abs(w * n.cos(o)), s = n.atan(_ * n.tan(o) / w), l = n.sin(s), c = n.cos(s), d = n.abs(l) + n.abs(c), u = d / 2 * l, h = d / 2 * c, o > n.PI / 2 && 3 * n.PI / 2 >= o && (u = -u, h = -h), p = [], f = 0, g = e.stops.map(function(n, i) { var r, o = n.percent; return o ? o = t(o) / 100 : n.length ? o = t(n.length) / a : 0 === i ? o = 0 : i == e.stops.length - 1 && (o = 1), r = { color: n.color.toCssRgba(), offset: o }, null != o ? (f = o, p.forEach(function(e, t) { var n = e.stop; n.offset = e.left + (f - e.left) * (t + 1) / (p.length + 1) }), p = []) : p.push({ left: f, stop: r }), r }), m = [.5 - u, .5 + h], v = [.5 + u, .5 - h], i.append(st.Path.fromRect(r).stroke(null).fill(new st.LinearGradient({ start: m, end: v, stops: g, userSpace: !1 }))); break; case "radial": window.console && window.console.log && window.console.log("Radial gradients are not yet supported in HTML renderer") } } } function G(t, n) { var i, r, o, a; return t.getAttribute(kendo.attr("role")) && (i = kendo.widgetInstance(e(t)), i && (i.exportDOMVisual || i.exportVisual)) ? (r = i.exportDOMVisual ? i.exportDOMVisual() : i.exportVisual()) ? (o = new st.Group, o.children.push(r), a = t.getBoundingClientRect(), o.transform(lt.transform().translate(a.left, a.top)), n.append(o), !0) : !1 : void 0 } function q(e, t, n) { var i = D(e), r = new lt.Rect([i.left, i.top], [i.width, i.height]), o = new st.Image(t, r); z(o, B(e, i, "content")), n.append(o) } function $(e, n) { var i = b(e), r = b(n), o = t(y(i, "z-index")), a = t(y(r, "z-index")), s = y(i, "position"), l = y(r, "position"); return isNaN(o) && isNaN(a) ? /static|absolute/.test(s) && /static|absolute/.test(l) ? 0 : "static" == s ? -1 : "static" == l ? 1 : 0 : isNaN(o) ? 0 === a ? 0 : a > 0 ? -1 : 1 : isNaN(a) ? 0 === o ? 0 : o > 0 ? 1 : -1 : t(o) - t(a) } function Y(e) { return /^(?:textarea|select|input)$/i.test(e.tagName) } function Q(e) { return e.selectedOptions && e.selectedOptions.length > 0 ? e.selectedOptions[0] : e.options[e.selectedIndex] } function K(e, t) { var i = b(e), r = y(i, "color"), o = e.getBoundingClientRect(); "checkbox" == e.type ? (t.append(st.Path.fromRect(new lt.Rect([o.left + 1, o.top + 1], [o.width - 2, o.height - 2])).stroke(r, 1)), e.checked && t.append((new st.Path).stroke(r, 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 st.Circle(new lt.Circle([(o.left + o.right) / 2, (o.top + o.bottom) / 2], n.min(o.width - 2, o.height - 2) / 2)).stroke(r, 1)), e.checked && t.append(new st.Circle(new lt.Circle([(o.left + o.right) / 2, (o.top + o.bottom) / 2], n.min(o.width - 8, o.height - 8) / 2)).fill(r).stroke(null))) } function X(e, t) { var n, i, r, o, a, s = e.tagName.toLowerCase(); if ("input" == s && ("checkbox" == e.type || "radio" == e.type)) return K(e, t); if (n = e.parentNode, i = e.ownerDocument, r = i.createElement(ut), r.style.cssText = V(b(e)), r.style.display = "inline-block", "input" == s && (r.style.whiteSpace = "pre"), ("select" == s || "textarea" == s) && (r.style.overflow = "auto"), "select" == s) if (e.multiple) for (a = 0; e.options.length > a; ++a) o = i.createElement(ut), o.style.cssText = V(b(e.options[a])), o.style.display = "block", o.textContent = e.options[a].textContent, r.appendChild(o); else o = Q(e), o && (r.textContent = o.textContent); else r.textContent = e.value; n.insertBefore(r, e), r.scrollLeft = e.scrollLeft, r.scrollTop = e.scrollTop, Z(r, t), n.removeChild(r) } function Z(e, t) { var n, i, r, o, a, s, l, c, d; switch (pt._stackingContext.element === e && (pt._stackingContext.group = t), e.tagName.toLowerCase()) { case "img": q(e, e.src, t); break; case "canvas": try { q(e, e.toDataURL("image/png"), t) } catch (u) {} break; case "textarea": case "input": case "select": X(e, t); break; default: for (n = [], i = [], r = [], o = [], a = e.firstChild; a; a = a.nextSibling) switch (a.nodeType) { case 3: /\S/.test(a.data) && J(e, a, t); break; case 1: s = b(a), l = y(s, "display"), c = y(s, "float"), d = y(s, "position"), "static" != d ? o.push(a) : "inline" != l ? "none" != c ? i.push(a) : n.push(a) : r.push(a) } n.sort($).forEach(function(e) { tt(e, t) }), i.sort($).forEach(function(e) { tt(e, t) }), r.sort($).forEach(function(e) { tt(e, t) }), o.sort($).forEach(function(e) { tt(e, t) }) } } function J(e, i, r) { function o() { var e, t, r, o, s, l, h, p = d, f = c.substr(d).search(/\S/); if (d += f, 0 > f || d >= u) return !0; if (m.setStart(i, d), m.setEnd(i, d + 1), e = m.getBoundingClientRect(), t = !1, w && (f = c.substr(d).search(/\s/), f >= 0 && (m.setEnd(i, d + f), r = m.getBoundingClientRect(), r.bottom == e.bottom && (e = r, t = !0, d += f))), !t) { if (f = function g(t, n, r) { m.setEnd(i, n); var o = x(m); return o.bottom != e.bottom && n > t ? g(t, t + n >> 1, n) : o.right != e.right ? (e = o, r > n ? g(n, n + r >> 1, r) : n) : n }(d, n.min(u, d + C), u), f == d) return !0; if (d = f, f = ("" + m).search(/\s+$/), 0 === f) return; f > 0 && (m.setEnd(i, m.startOffset + f), e = m.getBoundingClientRect()) } if (dt.msie && (e = m.getClientRects()[0]), o = "" + m, /^(?:pre|pre-wrap)$/i.test(k)) { if (/\t/.test(o)) { for (s = 0, f = p; m.startOffset > f; ++f) l = c.charCodeAt(f), 9 == l ? s += 8 - s % 8 : 10 == l || 13 == l ? s = 0 : s++; for (; (f = o.search(" ")) >= 0;) h = " ".substr(0, 8 - (s + f) % 8), o = o.substr(0, f) + h + o.substr(f + 1) } } else o = o.replace(/\s+/g, " "); a(o, e) } function a(e, t) { var n, i, o; dt.msie && !isNaN(p) && (n = st.util.measureText(e, { font: f }), i = (t.top + t.bottom - n.height) / 2, t = { top: i, right: t.right, bottom: i + n.height, left: t.left, height: n.height, width: t.right - t.left }), o = new it(e, new lt.Rect([t.left, t.top], [t.width, t.height]), { font: f, fill: { color: g } }), r.append(o), s(t) } function s(e) { function t(t, n) { var i, o; t && (i = h / 12, o = new st.Path({ stroke: { width: i, color: t } }), n -= i, o.moveTo(e.left, n).lineTo(e.right, n), r.append(o)) } t(pt.underline, e.bottom), t(pt["line-through"], e.bottom - e.height / 2.7), t(pt.overline, e.top) } var l, c, d, u, h, p, f, g, m, v, w, k, C; if (!_() && (l = b(e), !(t(y(l, "text-indent")) < -500) && (c = i.data, d = 0, u = c.search(/\S\s*$/) + 1, u && (h = y(l, "font-size"), p = y(l, "line-height"), f = [y(l, "font-style"), y(l, "font-variant"), y(l, "font-weight"), h, y(l, "font-family")].join(" "), h = t(h), p = t(p), 0 !== h)))) for (g = y(l, "color"), m = e.ownerDocument.createRange(), v = y(l, "text-align"), w = "justify" == v, k = y(l, "white-space"), C = e.getBoundingClientRect().width / h * 5, 0 === C && (C = 500); !o();); } function et(e, n, i) { var r, o, a, s, l, c; for ("auto" != i ? (r = pt._stackingContext.group, i = t(i)) : (r = n, i = 0), o = r.children, a = 0; o.length > a && !(null != o[a]._dom_zIndex && o[a]._dom_zIndex > i); ++a); return s = new st.Group, r.insertAt(s, a), s._dom_zIndex = i, r !== n && pt._clipbox && (l = pt._matrix.invert(), c = pt._clipbox.transformCopy(l), z(s, st.Path.fromRect(c))), s } function tt(e, n) { var i, r, o, a, s, u, h, p = b(e), f = y(p, "counter-reset"); f && d(ot(f, /^\s+/), c, 0), i = y(p, "counter-increment"), i && d(ot(i, /^\s+/), l, 1), /^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(e.tagName) || null != pt._clipbox && (r = t(y(p, "opacity")), o = y(p, "visibility"), a = y(p, "display"), 0 !== r && "hidden" != o && "none" != a && (s = E(p), h = y(p, "z-index"), (s || 1 > r) && "auto" == h && (h = 0), u = et(e, n, h), 1 > r && u.opacity(r * u.opacity()), g(e, p, u), s ? S(e, function() { var t, n, i, r; k(e.style, "transform", "none", "important"), k(e.style, "transition", "none", "important"), "static" == y(p, "position") && k(e.style, "position", "relative", "important"), t = e.getBoundingClientRect(), n = t.left + s.origin[0], i = t.top + s.origin[1], r = [1, 0, 0, 1, -n, -i], r = nt(r, s.matrix), r = nt(r, [1, 0, 0, 1, n, i]), r = M(u, r), pt._matrix = pt._matrix.multiplyCopy(r), U(e, u) }) : U(e, u), m())) } function nt(e, t) { var n = e[0], i = e[1], r = e[2], o = e[3], a = e[4], s = e[5], l = t[0], c = t[1], d = t[2], u = t[3], h = t[4], p = t[5]; return [n * l + i * d, n * c + i * u, r * l + o * d, r * c + o * u, a * l + s * d + h, a * c + s * u + p] } var it, rt, ot, at, st = kendo.drawing, lt = kendo.geometry, ct = Array.prototype.slice, dt = kendo.support.browser, ut = "KENDO-PSEUDO-ELEMENT", ht = {}, pt = {}; pt._root = pt, it = st.Text.extend({ nodeType: "Text", init: function(e, t, n) { st.Text.fn.init.call(this, e, t.getOrigin(), n), this._pdfRect = t }, rect: function() { return this._pdfRect }, rawBBox: function() { return this._pdfRect } }), st.drawDOM = i, i.getFontFaces = r, rt = function() { function e(e) { function f() { var t = s.exec(e); t && (e = e.substr(t[1].length)) } function g(t) { f(); var n = t.exec(e); return n ? (e = e.substr(n[1].length), n[1]) : void 0 } function m() { var t, r, o = kendo.parseColor(e, !0); return o ? (e = e.substr(o.match[0].length), o = o.toRGB(), (t = g(i)) || (r = g(n)), { color: o, length: t, percent: r }) : void 0 } function v(t) { var i, o, s, u, h, p, f = [], v = !1; if (g(l)) { for (i = g(a), i ? (i = P(i), g(d)) : (o = g(r), "to" == o ? o = g(r) : o && /^-/.test(t) && (v = !0), s = g(r), g(d)), /-moz-/.test(t) && null == i && null == o && (u = g(n), h = g(n), v = !0, "0%" == u ? o = "left" : "100%" == u && (o = "right"), "0%" == h ? s = "top" : "100%" == h && (s = "bottom"), g(d)); e && !g(c) && (p = m());) f.push(p), g(d); return { type: "linear", angle: i, to: o && s ? o + " " + s : o ? o : s ? s : null, stops: f, reverse: v } } } function _() { if (g(l)) { var e = g(h); return e = e.replace(/^['"]+|["']+$/g, ""), g(c), { type: "url", url: e } } } var w, b = e; return o(p, b) ? p[b] : ((w = g(t)) ? w = v(w) : (w = g(u)) && (w = _()), p[b] = w || { type: "none" }) } var t = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\s*)\(/, n = /^([-0-9.]+%)/, i = /^([-0-9.]+px)/, r = /^(left|right|top|bottom|to|center)\W/, a = /^([-0-9.]+(deg|grad|rad|turn))/, s = /^(\s+)/, l = /^(\()/, c = /^(\))/, d = /^(,)/, u = /^(url)\(/, h = /^(.*?)\)/, p = {}, f = {}; return function(t) { return o(f, t) ? f[t] : f[t] = ot(t).map(e) } }(), ot = function() { var e = {}; return function(t, n) { function i(e) { return h = e.exec(t.substr(c)) } function r(e) { return e.replace(/^\s+|\s+$/g, "") } var a, s, l, c, d, u, h; if (n || (n = /^\s*,\s*/), a = t + n, o(e, a)) return e[a]; for (s = [], l = 0, c = 0, d = 0, u = !1; t.length > c;)!u && i(/^[\(\[\{]/) ? (d++, c++) : !u && i(/^[\)\]\}]/) ? (d--, c++) : !u && i(/^[\"\']/) ? (u = h[0], c++) : "'" == u && i(/^\\\'/) ? c += 2 : '"' == u && i(/^\\\"/) ? c += 2 : "'" == u && i(/^\'/) ? (u = !1, c++) : '"' == u && i(/^\"/) ? (u = !1, c++) : i(n) ? (!u && !d && c > l && (s.push(r(t.substring(l, c))), l = c + h[0].length), c += h[0].length) : c++; return c > l && s.push(r(t.substring(l, c))), e[a] = s } }(), at = function() { var 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 } }() }(window.kendo.jQuery, parseFloat, Math), function(e) { var t = e.noop, n = window.kendo, i = n.Class, r = n.util, o = n.animationFrame, a = n.deepExtend, s = i.extend({ init: function(e, t) { var n = this; n.options = a({}, n.options, t), n.element = e }, options: { duration: 500, easing: "swing" }, setup: t, step: t, play: function() { var t = this, n = t.options, i = e.easing[n.easing], a = n.duration, s = n.delay || 0, l = r.now() + s, c = l + a; 0 === a ? (t.step(1), t.abort()) : setTimeout(function() { var e = function() { var n, s, d, u; t._stopped || (n = r.now(), s = r.limitValue(n - l, 0, a), d = s / a, u = i(d, s, 0, 1, a), t.step(u), c > n ? o(e) : t.abort()) }; e() }, s) }, abort: function() { this._stopped = !0 }, destroy: function() { this.abort() } }), l = function() { this._items = [] }; l.prototype = { register: function(e, t) { this._items.push({ name: e, type: t }) }, create: function(e, t) { var n, i, r, o = this._items; if (t && t.type) for (i = t.type.toLowerCase(), r = 0; o.length > r; r++) if (o[r].name.toLowerCase() === i) { n = o[r]; break } return n ? new n.type(e, t) : void 0 } }, l.current = new l, s.create = function(e, t, n) { return l.current.create(e, t, n) }, a(n.drawing, { Animation: s, AnimationFactory: l }) }(window.kendo.jQuery, Math), function(e) { function t(t) { var n, i = s.ui.validator.ruleResolvers || {}, r = {}; for (n in i) e.extend(!0, r, i[n].resolve(t)); return r } function n(e) { return e.replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">") } function i(e) { return e = (e + "").split("."), e.length > 1 ? e[1].length : 0 } function r(t) { return e(e.parseHTML ? e.parseHTML(t) : t) } function o(t, n) { var i, r, o, a, l = e(); for (o = 0, a = t.length; a > o; o++) i = t[o], u.test(i.className) && (r = i.getAttribute(s.attr("for")), r === n && (l = l.add(i))); return l } var a, s = window.kendo, l = s.ui.Widget, c = ".kendoValidator", d = "k-invalid-msg", u = RegExp(d, "i"), h = "k-invalid", p = "k-valid", f = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i, g = /^(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, m = ":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])", v = ":checkbox:not([disabled],[readonly])", _ = "[type=number],[type=range]", w = "blur", b = "name", y = "form", k = "novalidate", x = e.proxy, C = function(e, t) { return "string" == typeof t && (t = RegExp("^(?:" + t + ")$")), t.test(e) }, S = function(e, t, n) { var i = e.val(); return e.filter(t).length && "" !== i ? C(i, n) : !0 }, T = function(e, t) { return e.length ? null != e[0].attributes[t] : !1 }; s.ui.validator || (s.ui.validator = { rules: {}, messages: {} }), a = l.extend({ init: function(n, i) { var r = this, o = t(n), a = "[" + s.attr("validate") + "!=false]"; i = i || {}, i.rules = e.extend({}, s.ui.validator.rules, o.rules, i.rules), i.messages = e.extend({}, s.ui.validator.messages, o.messages, i.messages), l.fn.init.call(r, n, i), r._errorTemplate = s.template(r.options.errorTemplate), r.element.is(y) && r.element.attr(k, k), r._inputSelector = m + a, r._checkboxSelector = v + a, r._errors = {}, r._attachEvents(), r._isValidated = !1 }, events: ["validate", "change"], 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 !(T(e, "required") && ("" === n || !n || t)) }, pattern: function(e) { return e.filter("[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]").filter("[pattern]").length && "" !== e.val() ? C(e.val(), e.attr("pattern")) : !0 }, min: function(e) { if (e.filter(_ + ",[" + s.attr("type") + "=number]").filter("[min]").length && "" !== e.val()) { var t = parseFloat(e.attr("min")) || 0, n = s.parseFloat(e.val()); return n >= t } return !0 }, max: function(e) { if (e.filter(_ + ",[" + s.attr("type") + "=number]").filter("[max]").length && "" !== e.val()) { var t = parseFloat(e.attr("max")) || 0, n = s.parseFloat(e.val()); return t >= n } return !0 }, step: function(e) { if (e.filter(_ + ",[" + s.attr("type") + "=number]").filter("[step]").length && "" !== e.val()) { var t, n = parseFloat(e.attr("min")) || 0, r = parseFloat(e.attr("step")) || 1, o = parseFloat(e.val()), a = i(r); return a ? (t = Math.pow(10, a), Math.floor((o - n) * t) % (r * t) / Math.pow(100, a) === 0) : (o - n) % r === 0 } return !0 }, email: function(e) { return S(e, "[type=email],[" + s.attr("type") + "=email]", f) }, url: function(e) { return S(e, "[type=url],[" + s.attr("type") + "=url]", g) }, date: function(e) { return e.filter("[type^=date],[" + s.attr("type") + "=date]").length && "" !== e.val() ? null !== s.parseDate(e.val(), e.attr(s.attr("format"))) : !0 } }, validateOnBlur: !0 }, destroy: function() { l.fn.destroy.call(this), this.element.off(c) }, value: function() { return this._isValidated ? 0 === this.errors().length : !1 }, _submit: function(e) { return this.validate() ? !0 : (e.stopPropagation(), e.stopImmediatePropagation(), e.preventDefault(), !1) }, _checkElement: function(e) { var t = this.value(); this.validateInput(e), this.value() !== t && this.trigger("change") }, _attachEvents: function() { var t = this; t.element.is(y) && t.element.on("submit" + c, x(t._submit, t)), t.options.validateOnBlur && (t.element.is(m) ? (t.element.on(w + c, function() { t._checkElement(t.element) }), t.element.is(v) && t.element.on("click" + c, function() { t._checkElement(t.element) })) : (t.element.on(w + c, t._inputSelector, function() { t._checkElement(e(this)) }), t.element.on("click" + c, t._checkboxSelector, function() { t._checkElement(e(this)) }))) }, validate: function() { var e, t, n, i, r = !1, o = this.value(); if (this._errors = {}, this.element.is(m)) r = this.validateInput(this.element); else { for (i = !1, e = this.element.find(this._inputSelector), t = 0, n = e.length; n > t; t++) this.validateInput(e.eq(t)) || (i = !0); r = !i } return this.trigger("validate", { valid: r }), o !== r && this.trigger("change"), r }, validateInput: function(t) { var i, o, a, l, c, u, f, g, m, v; return t = e(t), this._isValidated = !0, i = this, o = i._errorTemplate, a = i._checkValidity(t), l = a.valid, c = "." + d, u = t.attr(b) || "", f = i._findMessageContainer(u).add(t.next(c).filter(function() { var t = e(this); return t.filter("[" + s.attr("for") + "]").length ? t.attr(s.attr("for")) === u : !0 })).hide(), t.removeAttr("aria-invalid"), l ? delete i._errors[u] : (g = i._extractMessage(t, a.key), i._errors[u] = g, m = r(o({ message: n(g) })), v = f.attr("id"), i._decorateMessageContainer(m, u), v && m.attr("id", v), f.replaceWith(m).length || m.insertAfter(t), m.show(), t.attr("aria-invalid", !0)), t.toggleClass(h, !l), t.toggleClass(p, l), l }, hideMessages: function() { var e = this, t = "." + d, n = e.element; n.is(m) ? n.next(t).hide() : n.find(t).hide() }, _findMessageContainer: function(t) { var n, i, r, a = s.ui.validator.messageLocators, l = e(); for (i = 0, r = this.element.length; r > i; i++) l = l.add(o(this.element[i].getElementsByTagName("*"), t)); for (n in a) l = l.add(a[n].locate(this.element, t)); return l }, _decorateMessageContainer: function(e, t) { var n, i = s.ui.validator.messageLocators; e.addClass(d).attr(s.attr("for"), t || ""); for (n in i) i[n].decorate(e, t); e.attr("role", "alert") }, _extractMessage: function(e, t) { var n = this, i = n.options.messages[t], r = e.attr(b); return i = s.isFunction(i) ? i(e) : i, s.format(e.attr(s.attr(t + "-msg")) || e.attr("validationMessage") || e.attr("title") || i || "", r, e.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 } }), s.ui.plugin(a) }(window.kendo.jQuery), function(e) { function t(e, t) { var n = e.x.location, i = e.y.location, r = t.x.location, o = t.y.location, a = n - r, s = i - o; return { center: { x: (n + r) / 2, y: (i + o) / 2 }, distance: Math.sqrt(a * a + s * s) } } function n(e) { var t, n, i, r = [], a = e.originalEvent, s = e.currentTarget, l = 0; if (e.api) r.push({ id: 2, event: e, target: e.target, currentTarget: e.target, location: e, type: "api" }); else if (e.type.match(/touch/)) for (n = a ? a.changedTouches : [], t = n.length; t > l; l++) i = n[l], r.push({ location: i, event: e, target: i.target, currentTarget: s, id: i.identifier, type: "touch" }); else r.push(o.pointers || o.msPointers ? { location: a, event: e, target: e.target, currentTarget: s, id: a.pointerId, type: "pointer" } : { id: 1, event: e, target: e.target, currentTarget: s, location: e, type: "mouse" }); return r } function i(e) { for (var t = r.eventMap.up.split(" "), n = 0, i = t.length; i > n; n++) e(t[n]) } var r = window.kendo, o = r.support, a = window.document, s = r.Class, l = r.Observable, c = e.now, d = e.extend, u = o.mobileOS, h = u && u.android, p = 800, f = o.browser.msie ? 5 : 0, g = "press", m = "hold", v = "select", _ = "start", w = "move", b = "end", y = "cancel", k = "tap", x = "release", C = "gesturestart", S = "gesturechange", T = "gestureend", D = "gesturetap", A = { api: 0, touch: 0, mouse: 9, pointer: 9 }, E = !o.touch || o.mouseAndTouchPresent, I = 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 = c() }, move: function(e) { var t = this, n = e["page" + t.axis], i = c(), r = i - t.timeStamp || 1; (n || !h) && (t.delta = n - t.location, t._updateLocationData(e), t.initialDelta = n - t.startLocation, t.velocity = t.delta / r, 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] } }), P = s.extend({ init: function(e, t, n) { d(this, { x: new I("X", n.location), y: new I("Y", n.location), type: n.type, threshold: e.threshold || A[n.type], userEvents: e, target: t, currentTarget: n.currentTarget, initialTouch: n.target, id: n.id, pressEvent: n, _moved: !1, _finished: !1 }) }, press: function() { this._holdTimeout = setTimeout(e.proxy(this, "_hold"), this.userEvents.minHold), this._trigger(g, this.pressEvent) }, _hold: function() { this._trigger(m, this.pressEvent) }, move: function(e) { var t = this; if (!t._finished) { if (t.x.move(e.location), t.y.move(e.location), !t._moved) { if (t._withinIgnoreThreshold()) return; if (M.current && M.current !== t.userEvents) return t.dispose(); t._start(e) } t._finished || t._trigger(w, e) } }, end: function(e) { var t = this; t.endTime = c(), t._finished || (t._finished = !0, t._trigger(x, e), t._moved ? t._trigger(b, e) : t._trigger(k, e), clearTimeout(t._holdTimeout), t.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 = c(), this._moved = !0, this._trigger(_, e) }, _trigger: function(e, t) { var n = this, i = t.event, r = { touch: n, x: n.x, y: n.y, target: n.target, event: i }; n.userEvents.notify(e, r) && i.preventDefault() }, _withinIgnoreThreshold: function() { var e = this.x.initialDelta, t = this.y.initialDelta; return Math.sqrt(e * e + t * t) <= this.threshold } }), M = l.extend({ init: function(t, n) { var s, c, u, h = this, A = r.guid(); n = n || {}, s = h.filter = n.filter, h.threshold = n.threshold || f, h.minHold = n.minHold || p, h.touches = [], h._maxTouches = n.multiTouch ? 2 : 1, h.allowSelection = n.allowSelection, h.captureUpIfMoved = n.captureUpIfMoved, h.eventNS = A, t = e(t).handler(h), l.fn.init.call(h), d(h, { element: t, surface: e(n.global && E ? a.documentElement : n.surface || t), stopPropagation: n.stopPropagation, pressed: !1 }), h.surface.handler(h).on(r.applyEventMap("move", A), "_move").on(r.applyEventMap("up cancel", A), "_end"), t.on(r.applyEventMap("down", A), s, "_start"), (o.pointers || o.msPointers) && t.css("-ms-touch-action", "pinch-zoom double-tap-zoom"), n.preventDragEvent && t.on(r.applyEventMap("dragstart", A), r.preventDefault), t.on(r.applyEventMap("mousedown", A), s, { root: t }, "_select"), h.captureUpIfMoved && o.eventCapture && (c = h.surface[0], u = e.proxy(h.preventIfMoving, h), i(function(e) { c.addEventListener(e, u, !0) })), h.bind([g, m, k, _, w, b, x, y, C, S, T, D, v], n) }, preventIfMoving: function(e) { this._isMoved() && e.preventDefault() }, destroy: function() { var e, t = this; t._destroyed || (t._destroyed = !0, t.captureUpIfMoved && o.eventCapture && (e = t.surface[0], i(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() { M.current = this }, cancel: function() { this._disposeAll(), this.trigger(y) }, notify: function(e, n) { var i = this, r = i.touches; if (this._isMultiTouch()) { switch (e) { case w: e = S; break; case b: e = T; break; case k: e = D } d(n, { touches: r }, t(r[0], r[1])) } return this.trigger(e, d(n, { 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(v, { event: e })) && e.preventDefault() }, _start: function(t) { var i, r, o = this, a = 0, s = o.filter, l = n(t), c = l.length, d = t.which; if (!(d && d > 1 || o._maxTouchesReached())) for (M.current = null, o.currentTarget = t.currentTarget, o.stopPropagation && t.stopPropagation(); c > a && !o._maxTouchesReached(); a++) r = l[a], i = s ? e(r.currentTarget) : o.element, i.length && (r = new P(o, i, r), o.touches.push(r), r.press(), o._isMultiTouch() && o.notify("gesturestart", {})) }, _move: function(e) { this._eachTouch("move", e) }, _end: function(e) { this._eachTouch("end", e) }, _eachTouch: function(e, t) { var i, r, o, a, s = this, l = {}, c = n(t), d = s.touches; for (i = 0; d.length > i; i++) r = d[i], l[r.id] = r; for (i = 0; c.length > i; i++) o = c[i], a = l[o.id], a && a[e](o) }, _apiCall: function(t, n, i, r) { this[t]({ api: !0, pageX: n, pageY: i, clientX: n, clientY: i, target: e(r || this.element)[0], stopPropagation: e.noop, preventDefault: e.noop }) } }); M.defaultThreshold = function(e) { f = e }, M.minHold = function(e) { p = e }, r.getTouches = n, r.touchDelta = t, r.UserEvents = M }(window.kendo.jQuery), 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 r(e, t) { return Math.min(Math.max(e, t.min), t.max) } function o(e, t) { var n = A(e), r = n.left + i(e, "borderLeftWidth") + i(e, "paddingLeft"), o = n.top + i(e, "borderTopWidth") + i(e, "paddingTop"), a = r + e.width() - t.outerWidth(!0), s = o + e.height() - t.outerHeight(!0); return { x: { min: r, max: a }, y: { min: o, max: s } } } function a(n, i, r) { for (var o, a, s = 0, l = i && i.length, c = r && r.length; n && n.parentNode;) { for (s = 0; l > s; s++) if (o = i[s], o.element[0] === n) return { target: o, targetElement: n }; for (s = 0; c > s; s++) if (a = r[s], e.contains(a.element[0], n) && w.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, r = e[i]; if (x.fn.destroy.call(t), r.length > 1) { for (n = 0; r.length > n; n++) if (r[n] == t) { r.splice(n, 1); break } } else r.length = 0, delete e[i] } function l(e) { var t, n, i, r = b.body; return e[0] === r ? (n = r.scrollTop, i = r.scrollLeft, { top: n, left: i, bottom: n + y.height(), right: i + y.width() }) : (t = e.offset(), t.bottom = t.top + e.height(), t.right = t.left + e.width(), t) } function c(e) { return e === b.body || e === b.documentElement || e === b } function d(t) { if (!t || c(t)) return e(b.body); for (var n = e(t)[0]; !_.isScrollable(n) && !c(n);) n = n.parentNode; return e(n) } function u(e, t, n) { var i = { x: 0, y: 0 }, r = 50; return r > e - n.left ? i.x = -(r - (e - n.left)) : r > n.right - e && (i.x = r - (n.right - e)), r > t - n.top ? i.y = -(r - (t - n.top)) : r > n.bottom - t && (i.y = r - (n.bottom - t)), i } var h, p, f, g, m, v, _ = window.kendo, w = _.support, b = window.document, y = e(window), k = _.Class, x = _.ui.Widget, C = _.Observable, S = _.UserEvents, T = e.proxy, D = e.extend, A = _.getOffset, E = {}, I = {}, P = {}, M = _.elementUnderCursor, z = "keyup", F = "change", R = "dragstart", H = "hold", B = "drag", L = "dragend", N = "dragcancel", O = "hintDestroyed", V = "dragenter", U = "dragleave", W = "drop", j = C.extend({ init: function(t, n) { var i = this, r = t[0]; i.capture = !1, r.addEventListener ? (e.each(_.eventMap.down.split(" "), function() { r.addEventListener(this, T(i._press, i), !0) }), e.each(_.eventMap.up.split(" "), function() { r.addEventListener(this, T(i._release, i), !0) })) : (e.each(_.eventMap.down.split(" "), function() { r.attachEvent(this, T(i._press, i)) }), e.each(_.eventMap.up.split(" "), function() { r.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()) } }), G = 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 || this.min > e }, 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, r = t.getSize(); (0 !== n || t.forcedEnabled) && (t.max = t.virtual ? -t._virtualMin : 0, t.size = r, t.total = i, t.min = Math.min(t.max, r - i), t.minScale = r / n, t.centerOffset = (i - r) / 2, t.enabled = t.forcedEnabled || i > r, e || t.trigger(F, t)) } }), q = C.extend({ init: function(e) { var t = this; C.fn.init.call(t), t.x = new G(D({ horizontal: !0 }, e)), t.y = new G(D({ horizontal: !1 }, e)), t.container = e.container, t.forcedMinScale = e.minScale, t.maxScale = e.maxScale || 100, t.bind(F, 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(F) } }), $ = 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, r = t.movable, o = r[i] + e; n.enabled && ((n.min > o && 0 > e || o > n.max && e > 0) && (e *= t.resistance), r.translateAxis(i, e), t.trigger(F, t)) } }), Y = k.extend({ init: function(e) { var t, n, i, r, o = this; D(o, { elastic: !0 }, e), i = o.elastic ? .5 : 0, r = o.movable, o.x = t = new $({ axis: "x", dimension: o.dimensions.x, resistance: i, movable: r }), o.y = n = new $({ axis: "y", dimension: o.dimensions.y, resistance: i, movable: r }), o.userEvents.bind(["move", "end", "gesturestart", "gesturechange"], { gesturestart: function(e) { o.gesture = e, o.offset = o.dimensions.container.offset() }, gesturechange: function(e) { var i, a, s, l = o.gesture, c = l.center, d = e.center, u = e.distance / l.distance, h = o.dimensions.minScale, p = o.dimensions.maxScale; h >= r.scale && 1 > u && (u += .8 * (1 - u)), r.scale * u >= p && (u = p / r.scale), a = r.x + o.offset.left, s = r.y + o.offset.top, i = { x: (a - c.x) * u + d.x - a, y: (s - c.y) * u + d.y - s }, r.scaleWith(u), t.dragMove(i.x), n.dragMove(i.y), o.dimensions.rescale(r.scale), o.gesture = e, e.preventDefault() }, move: function(e) { e.event.target.tagName.match(/textarea|input/i) || (t.dimension.enabled || n.dimension.enabled ? (t.dragMove(e.x.delta), n.dragMove(e.y.delta), e.preventDefault()) : e.touch.skip()) }, end: function(e) { e.preventDefault() } }) } }), Q = w.transitions.prefix + "Transform"; p = w.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 && 10 > _.support.browser.version ? (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[Q] = e, t._saveCoordinates(e), t.trigger(F)) }, _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, U, W], options: { name: "DropTarget", group: "default" }, destroy: function() { s(I, this) }, _trigger: function(e, n) { var i = this, r = E[i.options.group]; return r ? i.trigger(e, D({}, n.event, { draggable: r, dropTarget: n.dropTarget })) : t }, _over: function(e) { this._trigger(V, e) }, _out: function(e) { this._trigger(U, e) }, _drop: function(e) { var t = this, n = E[t.options.group]; n && (n.dropped = !t._trigger(W, e)) } }), g.destroyGroup = function(e) { var t, n = I[e] || P[e]; if (n) { for (t = 0; n.length > t; t++) x.fn.destroy.call(n[t]); n.length = 0, delete I[e], delete P[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 P ? P[n].push(i) : P[n] = [i] }, destroy: function() { s(P, 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) }), n._afterEndHandler = T(n._afterEnd, n), n._captureEscape = T(n._captureEscape, n) }, events: [H, R, B, L, 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, o = i.options, a = i.boundaries, s = o.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 = r(n.top, a.y), n.left = r(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, r = this, a = r.options, s = a.container, l = a.hint; return this._shouldIgnoreTarget(n.touch.initialTouch) || a.holdToDrag && !r._activated ? (r.userEvents.cancel(), t) : (r.currentTarget = n.target, r.currentTargetOffset = A(r.currentTarget), l && (r.hint && r.hint.stop(!0, !0).remove(), r.hint = _.isFunction(l) ? e(l.call(r, r.currentTarget)) : l, i = A(r.currentTarget), r.hintOffset = i, r.hint.css({ position: "absolute", zIndex: 2e4, left: i.left, top: i.top }).appendTo(b.body), r.angular("compile", function() { r.hint.removeAttr("ng-repeat"); for (var t = e(n.target); !t.data("$$kendoScope") && t.length;) t = t.parent(); return { elements: r.hint.get(), scopeFrom: t.data("$$kendoScope") } })), E[a.group] = r, r.dropped = !1, s && (r.boundaries = o(s, r.hint)), e(b).on(z, r._captureEscape), r._trigger(R, n) && (r.userEvents.cancel(), r._afterEnd()), r.userEvents.capture(), t) }, _hold: function(e) { this.currentTarget = e.target, this._trigger(H, e) ? this.userEvents.cancel() : this._activated = !0 }, _drag: function(n) { var i, r, o = this; n.preventDefault(), i = this._elementUnderCursor(n), o._withDropTarget(i, function(i, r) { if (!i) return h && (h._trigger(U, D(n, { dropTarget: e(h.targetElement) })), h = null), t; if (h) { if (r === h.targetElement) return; h._trigger(U, D(n, { dropTarget: e(h.targetElement) })) } i._trigger(V, D(n, { dropTarget: e(r) })), h = D(i, { targetElement: r }) }), o._trigger(B, D(n, { dropTarget: h, elementUnderCursor: i })), this.options.autoScroll && (this._cursorElement !== i && (this._scrollableParent = d(i), this._cursorElement = i), this._scrollableParent[0] && (r = u(n.x.location, n.y.location, l(this._scrollableParent)), this._scrollCompenstation = e.extend({}, this.hintOffset), this._scrollVelocity = r, 0 === r.y && 0 === r.x ? (clearInterval(this._scrollInterval), this._scrollInterval = null) : this._scrollInterval || (this._scrollInterval = setInterval(e.proxy(this, "_autoScroll"), 50)))), o.hint && o._updateHint(n) }, _autoScroll: function() { var e, t, n, i, r, o, a, s = this._scrollableParent[0], l = this._scrollVelocity, c = this._scrollCompenstation; s && (n = s === b.body, n ? (e = b.body.offsetHeight > y.height(), t = b.body.offsetWidth > y.width()) : (e = s.scrollHeight >= s.offsetHeight, t = s.scrollWidth >= s.offsetWidth), i = s.scrollTop + l.y, r = e && i > 0 && s.scrollHeight > i, o = s.scrollLeft + l.x, a = t && o > 0 && s.scrollWidth > o, r && (s.scrollTop += l.y), a && (s.scrollLeft += l.x), n && (a || r) && (r && (c.top += l.y), a && (c.left += l.x), this.hint.css(c))) }, _end: function(t) { this._withDropTarget(this._elementUnderCursor(t), function(n, i) { n && (n._drop(D({}, t, { dropTarget: e(i) })), h = null) }), this._trigger(L, t), this._cancel(t.event) }, _cancel: function() { var e = this; e._scrollableParent = null, clearInterval(this._scrollInterval), e._activated = !1, e.hint && !e.dropped ? setTimeout(function() { e.hint.stop(!0, !0).animate(e.currentTargetOffset, "fast", e._afterEndHandler) }, 0) : e._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 = M(e), i = this.hint; return i && n(i[0], t) && (i.hide(), t = M(e), t || (t = M(e)), i.show()), t }, _withDropTarget: function(e, t) { var n, i = this.options.group, r = I[i], o = P[i]; (r && r.length || o && o.length) && (n = a(e, r, o), 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(b).off(z, t._captureEscape) } }), _.ui.plugin(g), _.ui.plugin(m), _.ui.plugin(v), _.TapCapture = j, _.containerBoundaries = o, D(_.ui, { Pane: Y, PaneDimensions: q, Movable: f }), _.ui.Draggable.utils = { autoScrollVelocity: u, scrollableViewPort: l, findScrollableParent: d } }(window.kendo.jQuery), function(e, t) { var n = window.kendo, i = n.mobile, r = n.effects, o = i.ui, a = e.proxy, s = e.extend, l = o.Widget, c = n.Class, d = n.ui.Movable, u = n.ui.Pane, h = n.ui.PaneDimensions, p = r.Transition, f = r.Animation, g = Math.abs, m = 500, v = .7, _ = .96, w = 10, b = 55, y = .5, k = 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.dimensions.minScale > this.movable.scale }, done: function() { return .01 > this.dimensions.minScale - this.movable.scale }, 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) } }), P = 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._snapBack() : (t = e.touch.id === E ? 0 : e.touch[n.axis].velocity, n.velocity = Math.max(Math.min(t * n.velocityMultiplier, b), -b), n.tapCapture.captureNext(), f.fn.start.call(n))) }, tick: function() { var e = this, t = e.dimension, n = e.paneAxis.outOfBounds() ? y : e.friction, i = e.velocity *= n, r = e.movable[e.axis] + i; !e.elastic && t.outOfBounds(r) && (r = Math.max(Math.min(r, t.max), t.min), e.velocity = 0), e.movable.moveAxis(e.axis, r) }, _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 }) } }), M = 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) < k && g(this.offset.x) < k }, 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 } } }), z = c.extend({ init: function(t) { var n = this, i = "x" === t.axis, r = e('
    '); s(n, t, { element: r, elementSize: 0, movable: new d(r), scrollMovable: t.movable, alwaysVisible: t.alwaysVisible, size: i ? "width" : "height" }), n.scrollMovable.bind(T, a(n.refresh, n)), n.container.append(r), t.alwaysVisible && n.show() }, refresh: function() { var e = this, t = e.axis, n = e.dimension, i = n.size, r = e.scrollMovable, o = i / n.total, a = Math.round(-r[t] * o), s = Math.round(i * o); o >= 1 ? this.element.css("display", "none") : this.element.css("display", ""), a + s > i ? s = i - a : 0 > a && (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 }) } }), F = l.extend({ init: function(i, r) { var o, c, p, f, m, v, _, w, b, y = this; return l.fn.init.call(y, i, r), i = y.element, (y._native = y.options.useNative && n.support.hasNativeScrolling) ? (i.addClass("km-native-scroller").prepend('
    '), s(y, { scrollElement: i, fixedContainer: i.children().first() }), t) : (i.css("overflow", "hidden").addClass("km-scroll-wrapper").wrapInner('
    ').prepend('
    '), o = i.children().eq(1), c = new n.TapCapture(i), p = new d(o), f = new h({ element: o, container: i, forcedEnabled: y.options.zoom }), m = this.options.avoidScrolling, v = new n.UserEvents(i, { allowSelection: !0, preventDragEvent: !0, captureUpIfMoved: !0, multiTouch: y.options.zoom, start: function(t) { f.refresh(); var n = g(t.x.velocity), i = g(t.y.velocity), r = 2 * n >= i, o = e.contains(y.fixedContainer[0], t.event.target), a = 2 * i >= n; !o && !m(t) && y.enabled && (f.x.enabled && r || f.y.enabled && a) ? v.capture() : v.cancel() } }), _ = new u({ movable: p, dimensions: f, userEvents: v, elastic: y.options.elastic }), w = new I({ movable: p, dimensions: f, userEvents: v, tapCapture: c }), b = new M({ moveTo: function(e) { y.scrollTo(e.x, e.y) } }), p.bind(T, function() { y.scrollTop = -p.y, y.scrollLeft = -p.x, y.trigger(A, { scrollTop: y.scrollTop, scrollLeft: y.scrollLeft }) }), y.options.mousewheelScrolling && i.on("DOMMouseScroll mousewheel", a(this, "_wheelScroll")), s(y, { movable: p, dimensions: f, zoomSnapBack: w, animatedScroller: b, userEvents: v, pane: _, tapCapture: c, pulled: !1, enabled: !0, scrollElement: o, scrollTop: 0, scrollLeft: 0, fixedContainer: i.children().first() }), y._initAxis("x"), y._initAxis("y"), y._wheelEnd = function() { y._wheel = !1, y.userEvents.end(0, y._wheelY) }, f.refresh(), y.options.pullToRefresh && y._initPullToRefresh(), t) }, _wheelScroll: function(e) { 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, r; this._native ? this.scrollTo(e, t) : (i = { x: this.movable.x, y: this.movable.y }, r = { x: e, y: t }, this.animatedScroller.setCoordinates(i, r), 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 / y > 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], r = t.tapCapture, o = t.pane[e], a = new z({ axis: e, movable: n, dimension: i, container: t.element, alwaysVisible: t.options.visibleScrollHints }); i.bind(T, function() { a.refresh() }), o.bind(T, function() { a.show() }), t[e + "inertia"] = new P({ axis: e, paneAxis: o, movable: n, tapCapture: r, userEvents: t.userEvents, dimension: i, elastic: t.options.elastic, friction: t.options.friction || _, velocityMultiplier: t.options.velocityMultiplier || w, end: function() { a.hide(), t.trigger("scrollEnd", { axis: e, scrollTop: t.scrollTop, scrollLeft: t.scrollLeft }) } }) } }); o.plugin(F) }(window.kendo.jQuery), function(e, t) { function n(e) { return e.position().top + 3 } var i = window.kendo, r = i.ui.Widget, o = e.proxy, a = !1, s = ".kendoGroupable", l = "change", c = i.template('', { useWithBlock: !1 }), d = function(t) { return e('
    ').css({ width: t.width(), paddingLeft: t.css("paddingLeft"), paddingRight: t.css("paddingRight"), lineHeight: t.height() + "px", paddingTop: t.css("paddingTop"), paddingBottom: t.css("paddingBottom") }).html(t.attr(i.attr("title")) || t.attr(i.attr("field"))).prepend('') }, u = e('
    '), h = r.extend({ init: function(c, h) { var p, f, g = this, m = i.guid(), v = o(g._intializePositions, g), _ = g._dropCuePositions = []; r.fn.init.call(g, c, h), a = i.support.isRtl(c), f = a ? "right" : "left", g.draggable = p = g.options.draggable || new i.ui.Draggable(g.element, { filter: g.options.draggableElements, hint: d, group: m }), g.groupContainer = e(g.options.groupContainer, g.element).kendoDropTarget({ group: p.options.group, dragenter: function(e) { g._canDrag(e.draggable.currentTarget) && (e.draggable.hint.find(".k-drag-status").removeClass("k-denied").addClass("k-add"), u.css("top", n(g.groupContainer)).css(f, 0).appendTo(g.groupContainer)) }, dragleave: function(e) { e.draggable.hint.find(".k-drag-status").removeClass("k-add").addClass("k-denied"), u.remove() }, drop: function(t) { var n, r = t.draggable.currentTarget, o = r.attr(i.attr("field")), s = r.attr(i.attr("title")), l = g.indicator(o), c = g._dropCuePositions, d = c[c.length - 1]; (r.hasClass("k-group-indicator") || g._canDrag(r)) && (d ? (n = g._dropCuePosition(i.getOffset(u).left + parseInt(d.element.css("marginLeft"), 10) * (a ? -1 : 1) + parseInt(d.element.css("marginRight"), 10)), n && g._canDrop(e(l), n.element, n.left) && (n.before ? n.element.before(l || g.buildIndicator(o, s)) : n.element.after(l || g.buildIndicator(o, s)), g._change())) : (g.groupContainer.append(g.buildIndicator(o, s)), g._change())) } }).kendoDraggable({ filter: "div.k-group-indicator", hint: d, group: p.options.group, dragcancel: o(g._dragCancel, g), dragstart: function(e) { var t = e.currentTarget, i = parseInt(t.css("marginLeft"), 10), r = t.position(), o = a ? r.left - i : r.left + t.outerWidth(); v(), u.css({ top: n(g.groupContainer), left: o }).appendTo(g.groupContainer), this.hint.find(".k-drag-status").removeClass("k-denied").addClass("k-add") }, dragend: function() { g._dragEnd(this) }, drag: o(g._drag, g) }).on("click" + s, ".k-button", function(t) { t.preventDefault(), g._removeIndicator(e(this).parent()) }).on("click" + s, ".k-link", function(t) { var n = e(this).parent(), r = g.buildIndicator(n.attr(i.attr("field")), n.attr(i.attr("title")), "asc" == n.attr(i.attr("dir")) ? "desc" : "asc"); n.before(r).remove(), g._change(), t.preventDefault() }), p.bind(["dragend", "dragcancel", "dragstart", "drag"], { dragend: function() { g._dragEnd(this) }, dragcancel: o(g._dragCancel, g), dragstart: function(e) { var n, i, r; return g.options.allowDrag || g._canDrag(e.currentTarget) ? (v(), _.length ? (n = _[_.length - 1].element, i = parseInt(n.css("marginRight"), 10), r = n.position().left + n.outerWidth() + i) : r = 0, t) : (e.preventDefault(), t) }, drag: o(g._drag, g) }), g.dataSource = g.options.dataSource, g.dataSource && g._refreshHandler ? g.dataSource.unbind(l, g._refreshHandler) : g._refreshHandler = o(g.refresh, g), g.dataSource && (g.dataSource.bind("change", g._refreshHandler), g.refresh()) }, refresh: function() { var t = this, n = t.dataSource; t.groupContainer && t.groupContainer.empty().append(e.map(n.group() || [], function(n) { var r = n.field, o = i.attr("field"), a = t.element.find(t.options.filter).filter(function() { return e(this).attr(o) === r }); return t.buildIndicator(n.field, a.attr(i.attr("title")), n.dir) }).join("")), t._invalidateGroupContainer() }, destroy: function() { var e = this; r.fn.destroy.call(e), e.groupContainer.off(s), 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 }, options: { name: "Groupable", filter: "th", draggableElements: "th", messages: { empty: "Drag a column header and drop it here to group by that column" } }, indicator: function(t) { var n = e(".k-group-indicator", this.groupContainer); return e.grep(n, function(n) { return e(n).attr(i.attr("field")) === t })[0] }, buildIndicator: function(e, t, n) { return c({ field: e.replace(/"/g, "'"), dir: n, title: t, ns: i.ns }) }, descriptors: function() { var t, n, r, o, a, s = this, l = e(".k-group-indicator", s.groupContainer); return t = s.element.find(s.options.filter).map(function() { var t = e(this), r = t.attr(i.attr("aggregates")), s = t.attr(i.attr("field")); if (r && "" !== r) for (n = r.split(","), r = [], o = 0, a = n.length; a > o; o++) r.push({ field: s, aggregate: n[o] }); return r }).toArray(), e.map(l, function(n) { return n = e(n), r = n.attr(i.attr("field")), { field: r, dir: n.attr(i.attr("dir")), aggregates: t || [] } }) }, _removeIndicator: function(e) { var t = this; e.remove(), t._invalidateGroupContainer(), t._change() }, _change: function() { var e = this; e.dataSource && e.dataSource.group(e.descriptors()) }, _dropCuePosition: function(t) { var n, i, r, o, s, l = this._dropCuePositions; if (u.is(":visible") && 0 !== l.length) return t = Math.ceil(t), n = l[l.length - 1], i = n.left, r = n.right, o = parseInt(n.element.css("marginLeft"), 10), s = parseInt(n.element.css("marginRight"), 10), t >= r && !a || i > t && a ? t = { left: n.element.position().left + (a ? -o : n.element.outerWidth() + s), element: n.element, before: !1 } : (t = e.grep(l, function(e) { return t >= e.left && e.right >= t || a && t > e.right })[0], t && (t = { left: a ? t.element.position().left + t.element.outerWidth() + s : t.element.position().left - o, element: t.element, before: !0 })), t }, _drag: function(e) { var t = this._dropCuePosition(e.x.location); t && u.css({ left: t.left, right: "auto" }) }, _canDrag: function(e) { var t = e.attr(i.attr("field")); return "false" != e.attr(i.attr("groupable")) && t && (e.hasClass("k-group-indicator") || !this.indicator(t)) }, _canDrop: function(e, t, n) { var i = e.next(), r = e[0] !== t[0] && (!i[0] || t[0] !== i[0] || !a && n > i.position().left || a && n < i.position().left); return r }, _dragEnd: function(t) { var n = this, r = t.currentTarget.attr(i.attr("field")), o = n.indicator(r); t !== n.options.draggable && !t.dropped && o && n._removeIndicator(e(o)), n._dragCancel() }, _dragCancel: function() { u.remove(), this._dropCuePositions = [] }, _intializePositions: function() { var t, n = this, r = e(".k-group-indicator", n.groupContainer); n._dropCuePositions = e.map(r, function(n) { return n = e(n), t = i.getOffset(n).left, { left: parseInt(t, 10), right: parseInt(t + n.outerWidth(), 10), element: n } }) }, _invalidateGroupContainer: function() { var e = this.groupContainer; e && e.is(":empty") && e.html(this.options.messages.empty) } }); i.ui.plugin(h) }(window.kendo.jQuery), function(e) { function t(t, n) { t = e(t), n ? t.find(".k-drag-status").removeClass("k-add").addClass("k-denied") : t.find(".k-drag-status").removeClass("k-denied").addClass("k-add") } var n = window.kendo, i = n.getOffset, r = n.ui.Widget, o = "change", a = "k-reorderable", s = r.extend({ init: function(s, l) { var c, d = this, u = n.guid() + "-reorderable"; r.fn.init.call(d, s, l), s = d.element.addClass(a), l = d.options, d.draggable = c = l.draggable || new n.ui.Draggable(s, { group: u, filter: l.filter, hint: l.hint }), d.reorderDropCue = e('
    '), s.find(c.options.filter).kendoDropTarget({ group: c.options.group, dragenter: function(e) { var n, r, o, a; d._draggable && (n = this.element, o = !d._dropTargetAllowed(n) || d._isLastDraggable(), t(e.draggable.hint, o), o || (r = i(n), a = r.left, l.inSameContainer && !l.inSameContainer({ source: n, target: d._draggable, sourceIndex: d._index(n), targetIndex: d._index(d._draggable) }) ? d._dropTarget = n : d._index(n) > d._index(d._draggable) && (a += n.outerWidth()), d.reorderDropCue.css({ height: n.outerHeight(), top: r.top, left: a }).appendTo(document.body))) }, dragleave: function(e) { t(e.draggable.hint, !0), d.reorderDropCue.remove(), d._dropTarget = null }, drop: function() { var e, t, n; d._dropTarget = null, d._draggable && (e = this.element, t = d._draggable, n = !1, d._dropTargetAllowed(e) && !d._isLastDraggable() && d.trigger(o, { element: d._draggable, target: e, oldIndex: d._index(t), newIndex: d._index(e), position: i(d.reorderDropCue).left > i(e).left ? "after" : "before" })) } }), c.bind(["dragcancel", "dragend", "dragstart", "drag"], { dragcancel: function() { d.reorderDropCue.remove(), d._draggable = null, d._elements = null }, dragend: function() { d.reorderDropCue.remove(), d._draggable = null, d._elements = null }, dragstart: function(e) { d._draggable = e.currentTarget, d._elements = d.element.find(d.draggable.options.filter) }, drag: function(e) { var t, n; d._dropTarget && !this.hint.find(".k-drag-status").hasClass("k-denied") && (t = i(d._dropTarget).left, n = d._dropTarget.outerWidth(), d.reorderDropCue.css(e.pageX > t + n / 2 ? { left: t + n } : { left: t })) } }) }, options: { name: "Reorderable", filter: "*" }, events: [o], _isLastDraggable: function() { var e, t = this.options.inSameContainer, n = this._draggable[0], i = this._elements.get(), r = !1; if (!t) return !1; for (; !r && i.length > 0;) e = i.pop(), r = n !== e && t({ source: n, target: e, sourceIndex: this._index(n), targetIndex: this._index(e) }); return !r }, _dropTargetAllowed: function(e) { var t = this.options.inSameContainer, n = this.options.dragOverContainers, i = this._draggable; return i[0] === e[0] ? !1 : t && n ? t({ source: i, target: e, sourceIndex: this._index(i), targetIndex: this._index(e) }) ? !0 : n(this._index(i), this._index(e)) : !0 }, _index: function(e) { return this._elements.index(e) }, destroy: function() { var t = this; r.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 } }); n.ui.plugin(s) }(window.kendo.jQuery), function(e, t) { var n = window.kendo, i = n.ui, r = i.Widget, o = e.proxy, a = n.isFunction, s = e.extend, l = "horizontal", c = "vertical", d = "start", u = "resize", h = "resizeend", p = r.extend({ init: function(e, t) { var n = this; r.fn.init.call(n, e, t), n.orientation = n.options.orientation.toLowerCase() != c ? l : c, 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(e, { distance: 1, filter: t.handle, drag: o(n._resize, n), dragcancel: o(n._cancel, n), dragstart: o(n._start, n), dragend: o(n._stop, n) }), n.userEvents = n.draggable.userEvents }, events: [u, h, d], options: { name: "Resizable", orientation: l }, resize: function() {}, _max: function(e) { var n = this, i = n.hint ? n.hint[n._sizingDom]() : 0, r = n.options.max; return a(r) ? r(e) : r !== t ? n._initialElementPosition + r - i : r }, _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, r = e(t.currentTarget); n._initialElementPosition = r.position()[n._position], n._initialMousePosition = t[n._positionMouse].startLocation, i && (n.hint = a(i) ? e(i(r)) : i, n.hint.css({ position: "absolute" }).css(n._position, n._initialElementPosition).appendTo(n.element)), n.trigger(d, t), n._maxPosition = n._max(t), n._minPosition = n._min(t), e(document.body).css("cursor", r.css("cursor")) }, _resize: function(e) { var n, i = this, r = i._maxPosition, o = i._minPosition, a = i._initialElementPosition + (e[i._positionMouse].location - i._initialMousePosition); n = o !== t ? Math.max(o, a) : a, i.position = n = r !== t ? Math.min(r, n) : n, i.hint && i.hint.toggleClass(i.options.invalidClass || "", n == r || n == o).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; r.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, r = n.targetPosition, o = n.position; o === t && (o = r[i]), r[i] = o + e, n.userEvents.move(r.left, r.top) }, end: function() { this.userEvents.end(), this.target = this.position = t } }); n.ui.plugin(p) }(window.kendo.jQuery), 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 r(e) { return e.clone().removeAttr("id").css("visibility", "hidden") } var o = window.kendo, a = o.ui.Widget, s = "start", l = "beforeMove", c = "move", d = "end", u = "change", h = "cancel", p = "sort", f = "remove", g = "receive", m = ">*", v = -1, _ = a.extend({ init: function(e, t) { var n = this; a.fn.init.call(n, e, t), n.options.placeholder || (n.options.placeholder = r), n.options.hint || (n.options.hint = i), n._draggable = n._createDraggable() }, events: [s, l, c, d, u, h], options: { name: "Sortable", hint: null, placeholder: null, filter: m, holdToDrag: !1, disabled: null, container: null, connectWith: null, handler: null, cursorOffset: null, axis: null, ignore: null, autoScroll: !1, cursor: "auto" }, destroy: function() { this._draggable.destroy(), a.fn.destroy.call(this) }, _createDraggable: function() { var t = this, n = t.element, i = t.options; return new o.ui.Draggable(n, { filter: i.filter, hint: o.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 = (t.target || o.elementUnderCursor(t), this.options.disabled), r = this.options.handler, a = this.options.placeholder, l = this.placeholder = e(o.isFunction(a) ? a.call(this, n) : a); i && n.is(i) ? t.preventDefault() : r && !e(t.initialTarget).is(r) ? t.preventDefault() : this.trigger(s, { item: n, draggableEvent: t }) ? t.preventDefault() : (n.css("display", "none"), n.before(l), this._setCursor()) }, _dragcancel: function() { this._cancel(), this.trigger(h, { item: this.draggedElement }), this._resetCursor() }, _drag: function(n) { var i, r, o, a, s, l = this.draggedElement, c = this._findTarget(n), d = { left: n.x.location, top: n.y.location }, u = { x: n.x.delta, y: n.y.delta }, h = this.options.axis, p = { item: l, list: this, draggableEvent: n }; if ("x" === h || "y" === h) return this._movementByAxis(h, d, u[h], p), t; if (c) { if (i = this._getElementCenter(c.element), r = { left: Math.round(d.left - i.left), top: Math.round(d.top - i.top) }, e.extend(p, { target: c.element }), c.appendToBottom) return this._movePlaceholder(c, null, p), t; if (c.appendAfterHidden && this._movePlaceholder(c, "next", p), this._isFloating(c.element) ? 0 > u.x && 0 > r.left ? o = "prev" : u.x > 0 && r.left > 0 && (o = "next") : 0 > u.y && 0 > r.top ? o = "prev" : u.y > 0 && r.top > 0 && (o = "next"), o) { for (s = "prev" === o ? jQuery.fn.prev : jQuery.fn.next, a = s.call(c.element); a.length && !a.is(":visible");) a = s.call(a); a[0] != this.placeholder[0] && this._movePlaceholder(c, o, p) } } }, _dragend: function(n) { var i, r, o, a, s = this.placeholder, l = this.draggedElement, c = this.indexOf(l), h = this.indexOf(s), m = this.options.connectWith; return this._resetCursor(), o = { action: p, item: l, oldIndex: c, newIndex: h, draggableEvent: n }, h >= 0 ? r = this.trigger(d, o) : (i = s.parents(m).getKendoSortable(), o.action = f, a = e.extend({}, o, { action: g, oldIndex: v, newIndex: i.indexOf(s) }), r = !(!this.trigger(d, o) && !i.trigger(d, a))), r || h === c ? (this._cancel(), t) : (s.replaceWith(l), l.show(), this._draggable.dropped = !0, o = { action: this.indexOf(l) != v ? p : f, item: l, oldIndex: c, newIndex: this.indexOf(l), draggableEvent: n }, this.trigger(u, o), i && (a = e.extend({}, o, { action: g, oldIndex: v, newIndex: i.indexOf(l) }), i.trigger(u, a)), t) }, _findTarget: function(n) { var i, r, o = this._findElementUnderCursor(n), a = this.options.connectWith; return e.contains(this.element[0], o) ? (i = this.items(), r = i.filter(o)[0] || i.has(o)[0], r ? { element: e(r), sortable: this } : null) : this.element[0] == o && this._isEmpty() ? { element: this.element, sortable: this, appendToBottom: !0 } : this.element[0] == o && this._isLastHidden() ? (r = this.items().eq(0), { element: r, sortable: this, appendAfterHidden: !0 }) : a ? this._searchConnectedTargets(o, n) : t }, _findElementUnderCursor: function(e) { { var t = o.elementUnderCursor(e), i = e.sender; this.items() } return n(i.hint[0], t) && (i.hint.hide(), t = o.elementUnderCursor(e), t || (t = o.elementUnderCursor(e)), i.hint.show()), t }, _searchConnectedTargets: function(t, n) { var i, r, o, a, s = e(this.options.connectWith); for (a = 0; s.length > a; a++) if (i = s.eq(a).getKendoSortable(), e.contains(s[a], t)) { if (i) return r = i.items(), o = r.filter(t)[0] || r.has(t)[0], o ? (i.placeholder = this.placeholder, { element: e(o), 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 o = i.items().last(), { element: o, sortable: i } } }, _isCursorAfterLast: function(e, t) { var n, i, r = e.items().last(), a = { left: t.x.location, top: t.y.location }; return n = o.getOffset(r), n.top += r.outerHeight(), n.left += r.outerWidth(), i = this._isFloating(r) ? n.left - a.left : n.top - a.top, 0 > i ? !0 : !1 }, _movementByAxis: function(t, n, i, r) { var o, a = "x" === t ? n.left : n.top, s = 0 > i ? this.placeholder.prev() : this.placeholder.next(); s.length && !s.is(":visible") && (s = 0 > i ? s.prev() : s.next()), e.extend(r, { target: s }), o = this._getElementCenter(s), o && (o = "x" === t ? o.left : o.top), s.length && 0 > i && 0 > a - o ? this._movePlaceholder({ element: s, sortable: this }, "prev", r) : s.length && i > 0 && a - o > 0 && this._movePlaceholder({ element: s, sortable: this }, "next", r) }, _movePlaceholder: function(e, t, n) { var i = this.placeholder; e.sortable.trigger(l, n) || (t ? "prev" === t ? e.element.before(i) : "next" === t && e.element.after(i) : e.element.append(i), e.sortable.trigger(c, 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 ? o.getOffset(e) : null; return t && (t.top += e.outerHeight() / 2, t.left += e.outerWidth() / 2), t }, _isFloating: function(e) { return /left|right/.test(e.css("float")) || /inline|table-cell/.test(e.css("display")) }, _cancel: function() { this.draggedElement.show(), this.placeholder.remove() }, _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") } }); o.ui.plugin(_) }(window.kendo.jQuery), function(e, t) { function n(e, t) { if (!e.is(":visible")) return !1; var n = r.getOffset(e), i = t.left + t.width, o = t.top + t.height; return n.right = n.left + e.outerWidth(), n.bottom = n.top + e.outerHeight(), !(n.left > i || t.left > n.right || n.top > o || t.top > n.bottom) } var i, r = window.kendo, o = r.ui.Widget, a = e.proxy, s = Math.abs, l = "aria-selected", c = "k-state-selected", d = "k-state-selecting", u = "k-selectable", h = "change", p = ".kendoSelectable", f = "k-state-unselecting", g = "input,a,textarea,.k-multiselect-wrap,select,button,a.k-button>.k-icon,button.k-button>.k-icon,span.k-icon.k-i-expand,span.k-icon.k-i-collapse", m = r.support.browser.msie, v = !1; ! function(e) { ! function() { e('
    ').on("click", ">*", function() { v = !0 }).find("span").click().end().off() }() }(e), i = o.extend({ init: function(t, n) { var i, s = this; o.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 r.UserEvents(s.element, { global: !0, allowSelection: !0, filter: (v ? "" : "." + u + " ") + s.options.filter, tap: a(s._tap, s) }), 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], options: { name: "Selectable", filter: ">*", multiple: !1, relatedTarget: e.noop }, _isElement: function(e) { var t, n = this.element, i = n.length, r = !1; for (e = e[0], t = 0; i > t; t++) if (n[t] === e) { r = !0; break } return r }, _tap: function(t) { var n, i = e(t.target), r = this, o = t.event.ctrlKey || t.event.metaKey, a = r.options.multiple, s = a && t.event.shiftKey, l = t.event.which, d = t.event.button; !r._isElement(i.closest("." + u)) || l && 3 == l || d && 2 == d || this._allowSelection(t.event.target) && (n = i.hasClass(c), a && o || r.clear(), i = i.add(r.relatedTarget(i)), s ? r.selectRange(r._firstSelectee(), i) : (n && o ? (r._unselect(i), r._notify(h)) : r.value(i), r._lastActive = r._downTarget = i)) }, _start: function(n) { var i, r = this, o = e(n.target), a = o.hasClass(c), s = n.event.ctrlKey || n.event.metaKey; if (this._allowSelection(n.event.target)) { if (r._downTarget = o, !r._isElement(o.closest("." + u))) return r.userEvents.cancel(), t; r.options.useAllItems ? r._items = r.element.find(r.options.filter) : (i = o.closest(r.element), r._items = i.find(r.options.filter)), n.sender.capture(), r._marquee.appendTo(document.body).css({ left: n.x.client + 1, top: n.y.client + 1, width: 0, height: 0 }), s || r.clear(), o = o.add(r.relatedTarget(o)), a && (r._selectElement(o, !0), s && o.addClass(f)) } }, _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() { var e, t = this; t._marquee.remove(), t._unselect(t.element.find(t.options.filter + "." + f)).removeClass(f), e = t.element.find(t.options.filter + "." + d), e = e.add(t.relatedTarget(e)), t.value(e), t._lastActive = t._downTarget, t._items = null }, _invalidateSelectables: function(e, t) { var i, r, o, a, s = this._downTarget[0], l = this._items; for (i = 0, r = l.length; r > i; i++) a = l.eq(i), o = a.add(this.relatedTarget(a)), n(a, e) ? a.hasClass(c) ? t && s !== a[0] && o.removeClass(c).addClass(f) : a.hasClass(d) || a.hasClass(f) || o.addClass(d) : a.hasClass(d) ? o.removeClass(d) : t && a.hasClass(f) && o.removeClass(f).addClass(c) }, value: function(e) { var n = this, i = a(n._selectElement, n); return e ? (e.each(function() { i(this) }), n._notify(h), t) : n.element.find(n.options.filter + "." + c) }, _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), r = !n && this._notify("select", { element: t }); i.removeClass(d), r || (i.addClass(c), this.options.aria && i.attr(l, !0)) }, _notify: function(e, t) { return t = t || {}, this.trigger(e, t) }, _unselect: function(e) { return e.removeClass(c), this.options.aria && e.attr(l, !1), e }, _select: function(t) { this._allowSelection(t.event.target) && (!m || m && !e(r._activeElement()).is(g)) && t.preventDefault() }, _allowSelection: function(t) { return e(t).is(g) ? (this.userEvents.cancel(), this._downTarget = null, !1) : !0 }, resetTouchEvents: function() { this.userEvents.cancel() }, clear: function() { var e = this.element.find(this.options.filter + "." + c); this._unselect(e) }, selectRange: function(t, n) { var i, r, o, a = this; for (a.clear(), a.element.length > 1 && (o = a.options.continuousItems()), o && o.length || (o = a.element.find(a.options.filter)), t = e.inArray(e(t)[0], o), n = e.inArray(e(n)[0], o), t > n && (r = t, t = n, n = r), a.options.useAllItems || (n += a.element.length - 1), i = t; n >= i; i++) a._selectElement(o[i]); a._notify(h) }, destroy: function() { var e = this; o.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 } }, r.ui.plugin(i) }(window.kendo.jQuery), function(e, t) { var n = window.kendo, i = n.ui.Widget, r = e.proxy, o = n.keys, a = "click", s = "k-button", l = "k-button-icon", c = "k-button-icontext", d = ".kendoButton", u = "disabled", h = "k-state-disabled", p = "k-state-focused", f = "k-state-selected", g = i.extend({ init: function(e, t) { var o = this; i.fn.init.call(o, e, t), e = o.wrapper = o.element, t = o.options, e.addClass(s).attr("role", "button"), t.enable = t.enable && !e.attr(u), o.enable(t.enable), o._tabindex(), o._graphics(), e.on(a + d, r(o._click, o)).on("focus" + d, r(o._focus, o)).on("blur" + d, r(o._blur, o)).on("keydown" + d, r(o._keydown, o)).on("keyup" + d, r(o._keyup, o)), n.notify(o) }, destroy: function() { var e = this; e.wrapper.off(d), i.fn.destroy.call(e) }, events: [a], options: { name: "Button", icon: "", spriteCssClass: "", imageUrl: "", enable: !0 }, _isNativeButton: function() { return "button" == this.element.prop("tagName").toLowerCase() }, _click: function(e) { this.options.enable && this.trigger(a, { event: e }) && e.preventDefault() }, _focus: function() { this.options.enable && this.element.addClass(p) }, _blur: function() { this.element.removeClass(p) }, _keydown: function(e) { var t = this; t._isNativeButton() || (e.keyCode == o.ENTER || e.keyCode == o.SPACEBAR) && (e.keyCode == o.SPACEBAR && (e.preventDefault(), t.options.enable && t.element.addClass(f)), t._click(e)) }, _keyup: function() { this.element.removeClass(f) }, _graphics: function() { var t, n, i, r = this, o = r.element, a = r.options, s = a.icon, d = a.spriteCssClass, u = a.imageUrl; (d || u || s) && (i = !0, o.contents().not("span.k-sprite").not("span.k-icon").not("img.k-image").each(function(t, n) { (1 == n.nodeType || 3 == n.nodeType && e.trim(n.nodeValue).length > 0) && (i = !1) }), o.addClass(i ? l : c)), s ? (t = o.children("span.k-icon").first(), t[0] || (t = e('').prependTo(o)), t.addClass("k-i-" + s)) : d ? (t = o.children("span.k-sprite").first(), t[0] || (t = e('').prependTo(o)), t.addClass(d)) : u && (n = o.children("img.k-image").first(), n[0] || (n = e('icon').prependTo(o)), n.attr("src", u)) }, enable: function(e) { var n = this, i = n.element; e === t && (e = !0), e = !!e, n.options.enable = e, i.toggleClass(h, !e).attr("aria-disabled", !e).attr(u, !e); try { i.blur() } catch (r) {} } }); n.ui.plugin(g) }(window.kendo.jQuery), function(e, t) { function n(e, t, n, i, r) { return e({ idx: t, text: n, ns: c.ns, numeric: i, title: r || "" }) } function i(e, t, n) { return k({ className: e.substring(1), text: t, wrapClassName: n || "" }) } function r(e, t, n, i) { e.find(t).parent().attr(c.attr("page"), n).attr("tabindex", -1).toggleClass("k-state-disabled", i) } function o(e, t) { r(e, p, 1, 1 >= t) } function a(e, t) { r(e, g, Math.max(1, t - 1), 1 >= t) } function s(e, t, n) { r(e, m, Math.min(n, t + 1), t >= n) } function l(e, t, n) { r(e, f, n, t >= n) } var c = window.kendo, d = c.ui, u = d.Widget, h = e.proxy, p = ".k-i-seek-w", f = ".k-i-seek-e", g = ".k-i-arrow-w", m = ".k-i-arrow-e", v = "change", _ = ".kendoPager", w = "click", b = "keydown", y = "disabled", k = c.template('#=text#'), x = u.extend({ init: function(t, n) { var r, d, y, k, x = this; u.fn.init.call(x, t, n), n = x.options, x.dataSource = c.data.DataSource.create(n.dataSource), x.linkTemplate = c.template(x.options.linkTemplate), x.selectTemplate = c.template(x.options.selectTemplate), x.currentPageTemplate = c.template(x.options.currentPageTemplate), r = x.page(), d = x.totalPages(), x._refreshHandler = h(x.refresh, x), x.dataSource.bind(v, x._refreshHandler), n.previousNext && (x.element.find(p).length || (x.element.append(i(p, n.messages.first, "k-pager-first")), o(x.element, r, d)), x.element.find(g).length || (x.element.append(i(g, n.messages.previous)), a(x.element, r, d))), n.numeric && (x.list = x.element.find(".k-pager-numbers"), x.list.length || (x.list = e('