laravel-learn-bbs/public/packages/summerblue/administrator/js/base.js
2018-02-13 00:05:19 +08:00

17696 lines
839 KiB
JavaScript
Vendored

/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery.min.map
*/
(function (e, t) {
var n, r, i = typeof t, o = e.document, a = e.location, s = e.jQuery, u = e.$, l = {}, c = [], p = "1.9.1",
f = c.concat, d = c.push, h = c.slice, g = c.indexOf, m = l.toString, y = l.hasOwnProperty, v = p.trim,
b = function (e, t) {
return new b.fn.init(e, t, r)
}, x = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, w = /\S+/g, T = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
N = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, C = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, k = /^[\],:{}\s]*$/,
E = /(?:^|:|,)(?:\s*\[)+/g, S = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
A = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, j = /^-ms-/, D = /-([\da-z])/gi,
L = function (e, t) {
return t.toUpperCase()
}, H = function (e) {
(o.addEventListener || "load" === e.type || "complete" === o.readyState) && (q(), b.ready())
}, q = function () {
o.addEventListener ? (o.removeEventListener("DOMContentLoaded", H, !1), e.removeEventListener("load", H, !1)) : (o.detachEvent("onreadystatechange", H), e.detachEvent("onload", H))
};
b.fn = b.prototype = {
jquery: p, constructor: b, init: function (e, n, r) {
var i, a;
if (!e) return this;
if ("string" == typeof e) {
if (i = "<" === e.charAt(0) && ">" === e.charAt(e.length - 1) && e.length >= 3 ? [null, e, null] : N.exec(e), !i || !i[1] && n) return !n || n.jquery ? (n || r).find(e) : this.constructor(n).find(e);
if (i[1]) {
if (n = n instanceof b ? n[0] : n, b.merge(this, b.parseHTML(i[1], n && n.nodeType ? n.ownerDocument || n : o, !0)), C.test(i[1]) && b.isPlainObject(n)) for (i in n) b.isFunction(this[i]) ? this[i](n[i]) : this.attr(i, n[i]);
return this
}
if (a = o.getElementById(i[2]), a && a.parentNode) {
if (a.id !== i[2]) return r.find(e);
this.length = 1, this[0] = a
}
return this.context = o, this.selector = e, this
}
return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : b.isFunction(e) ? r.ready(e) : (e.selector !== t && (this.selector = e.selector, this.context = e.context), b.makeArray(e, this))
}, selector: "", length: 0, size: function () {
return this.length
}, toArray: function () {
return h.call(this)
}, get: function (e) {
return null == e ? this.toArray() : 0 > e ? this[this.length + e] : this[e]
}, pushStack: function (e) {
var t = b.merge(this.constructor(), e);
return t.prevObject = this, t.context = this.context, t
}, each: function (e, t) {
return b.each(this, e, t)
}, ready: function (e) {
return b.ready.promise().done(e), this
}, slice: function () {
return this.pushStack(h.apply(this, arguments))
}, first: function () {
return this.eq(0)
}, last: function () {
return this.eq(-1)
}, eq: function (e) {
var t = this.length, n = +e + (0 > e ? t : 0);
return this.pushStack(n >= 0 && t > n ? [this[n]] : [])
}, map: function (e) {
return this.pushStack(b.map(this, function (t, n) {
return e.call(t, n, t)
}))
}, end: function () {
return this.prevObject || this.constructor(null)
}, push: d, sort: [].sort, splice: [].splice
}, b.fn.init.prototype = b.fn, b.extend = b.fn.extend = function () {
var e, n, r, i, o, a, s = arguments[0] || {}, u = 1, l = arguments.length, c = !1;
for ("boolean" == typeof s && (c = s, s = arguments[1] || {}, u = 2), "object" == typeof s || b.isFunction(s) || (s = {}), l === u && (s = this, --u); l > u; u++) if (null != (o = arguments[u])) for (i in o) e = s[i], r = o[i], s !== r && (c && r && (b.isPlainObject(r) || (n = b.isArray(r))) ? (n ? (n = !1, a = e && b.isArray(e) ? e : []) : a = e && b.isPlainObject(e) ? e : {}, s[i] = b.extend(c, a, r)) : r !== t && (s[i] = r));
return s
}, b.extend({
noConflict: function (t) {
return e.$ === b && (e.$ = u), t && e.jQuery === b && (e.jQuery = s), b
}, isReady: !1, readyWait: 1, holdReady: function (e) {
e ? b.readyWait++ : b.ready(!0)
}, ready: function (e) {
if (e === !0 ? !--b.readyWait : !b.isReady) {
if (!o.body) return setTimeout(b.ready);
b.isReady = !0, e !== !0 && --b.readyWait > 0 || (n.resolveWith(o, [b]), b.fn.trigger && b(o).trigger("ready").off("ready"))
}
}, isFunction: function (e) {
return "function" === b.type(e)
}, isArray: Array.isArray || function (e) {
return "array" === b.type(e)
}, isWindow: function (e) {
return null != e && e == e.window
}, isNumeric: function (e) {
return !isNaN(parseFloat(e)) && isFinite(e)
}, type: function (e) {
return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? l[m.call(e)] || "object" : typeof e
}, isPlainObject: function (e) {
if (!e || "object" !== b.type(e) || e.nodeType || b.isWindow(e)) return !1;
try {
if (e.constructor && !y.call(e, "constructor") && !y.call(e.constructor.prototype, "isPrototypeOf")) return !1
} catch (n) {
return !1
}
var r;
for (r in e) ;
return r === t || y.call(e, r)
}, isEmptyObject: function (e) {
var t;
for (t in e) return !1;
return !0
}, error: function (e) {
throw Error(e)
}, parseHTML: function (e, t, n) {
if (!e || "string" != typeof e) return null;
"boolean" == typeof t && (n = t, t = !1), t = t || o;
var r = C.exec(e), i = !n && [];
return r ? [t.createElement(r[1])] : (r = b.buildFragment([e], t, i), i && b(i).remove(), b.merge([], r.childNodes))
}, parseJSON: function (n) {
return e.JSON && e.JSON.parse ? e.JSON.parse(n) : null === n ? n : "string" == typeof n && (n = b.trim(n), n && k.test(n.replace(S, "@").replace(A, "]").replace(E, ""))) ? Function("return " + n)() : (b.error("Invalid JSON: " + n), t)
}, parseXML: function (n) {
var r, i;
if (!n || "string" != typeof n) return null;
try {
e.DOMParser ? (i = new DOMParser, r = i.parseFromString(n, "text/xml")) : (r = new ActiveXObject("Microsoft.XMLDOM"), r.async = "false", r.loadXML(n))
} catch (o) {
r = t
}
return r && r.documentElement && !r.getElementsByTagName("parsererror").length || b.error("Invalid XML: " + n), r
}, noop: function () {
}, globalEval: function (t) {
t && b.trim(t) && (e.execScript || function (t) {
e.eval.call(e, t)
})(t)
}, camelCase: function (e) {
return e.replace(j, "ms-").replace(D, L)
}, nodeName: function (e, t) {
return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
}, each: function (e, t, n) {
var r, i = 0, o = e.length, a = M(e);
if (n) {
if (a) {
for (; o > i; i++) if (r = t.apply(e[i], n), r === !1) break
} else for (i in e) if (r = t.apply(e[i], n), r === !1) break
} else if (a) {
for (; o > i; i++) if (r = t.call(e[i], i, e[i]), r === !1) break
} else for (i in e) if (r = t.call(e[i], i, e[i]), r === !1) break;
return e
}, trim: v && !v.call("\ufeff\u00a0") ? function (e) {
return null == e ? "" : v.call(e)
} : function (e) {
return null == e ? "" : (e + "").replace(T, "")
}, makeArray: function (e, t) {
var n = t || [];
return null != e && (M(Object(e)) ? b.merge(n, "string" == typeof e ? [e] : e) : d.call(n, e)), n
}, inArray: function (e, t, n) {
var r;
if (t) {
if (g) return g.call(t, e, n);
for (r = t.length, n = n ? 0 > n ? Math.max(0, r + n) : n : 0; r > n; n++) if (n in t && t[n] === e) return n
}
return -1
}, merge: function (e, n) {
var r = n.length, i = e.length, o = 0;
if ("number" == typeof r) for (; r > o; o++) e[i++] = n[o]; else while (n[o] !== t) e[i++] = n[o++];
return e.length = i, e
}, grep: function (e, t, n) {
var r, i = [], o = 0, a = e.length;
for (n = !!n; a > o; o++) r = !!t(e[o], o), n !== r && i.push(e[o]);
return i
}, map: function (e, t, n) {
var r, i = 0, o = e.length, a = M(e), s = [];
if (a) for (; o > i; i++) r = t(e[i], i, n), null != r && (s[s.length] = r); else for (i in e) r = t(e[i], i, n), null != r && (s[s.length] = r);
return f.apply([], s)
}, guid: 1, proxy: function (e, n) {
var r, i, o;
return "string" == typeof n && (o = e[n], n = e, e = o), b.isFunction(e) ? (r = h.call(arguments, 2), i = function () {
return e.apply(n || this, r.concat(h.call(arguments)))
}, i.guid = e.guid = e.guid || b.guid++, i) : t
}, access: function (e, n, r, i, o, a, s) {
var u = 0, l = e.length, c = null == r;
if ("object" === b.type(r)) {
o = !0;
for (u in r) b.access(e, n, u, r[u], !0, a, s)
} else if (i !== t && (o = !0, b.isFunction(i) || (s = !0), c && (s ? (n.call(e, i), n = null) : (c = n, n = function (e, t, n) {
return c.call(b(e), n)
})), n)) for (; l > u; u++) n(e[u], r, s ? i : i.call(e[u], u, n(e[u], r)));
return o ? e : c ? n.call(e) : l ? n(e[0], r) : a
}, now: function () {
return (new Date).getTime()
}
}), b.ready.promise = function (t) {
if (!n) if (n = b.Deferred(), "complete" === o.readyState) setTimeout(b.ready); else if (o.addEventListener) o.addEventListener("DOMContentLoaded", H, !1), e.addEventListener("load", H, !1); else {
o.attachEvent("onreadystatechange", H), e.attachEvent("onload", H);
var r = !1;
try {
r = null == e.frameElement && o.documentElement
} catch (i) {
}
r && r.doScroll && function a() {
if (!b.isReady) {
try {
r.doScroll("left")
} catch (e) {
return setTimeout(a, 50)
}
q(), b.ready()
}
}()
}
return n.promise(t)
}, b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (e, t) {
l["[object " + t + "]"] = t.toLowerCase()
});
function M(e) {
var t = e.length, n = b.type(e);
return b.isWindow(e) ? !1 : 1 === e.nodeType && t ? !0 : "array" === n || "function" !== n && (0 === t || "number" == typeof t && t > 0 && t - 1 in e)
}
r = b(o);
var _ = {};
function F(e) {
var t = _[e] = {};
return b.each(e.match(w) || [], function (e, n) {
t[n] = !0
}), t
}
b.Callbacks = function (e) {
e = "string" == typeof e ? _[e] || F(e) : b.extend({}, e);
var n, r, i, o, a, s, u = [], l = !e.once && [], c = function (t) {
for (r = e.memory && t, i = !0, a = s || 0, s = 0, o = u.length, n = !0; u && o > a; a++) if (u[a].apply(t[0], t[1]) === !1 && e.stopOnFalse) {
r = !1;
break
}
n = !1, u && (l ? l.length && c(l.shift()) : r ? u = [] : p.disable())
}, p = {
add: function () {
if (u) {
var t = u.length;
(function i(t) {
b.each(t, function (t, n) {
var r = b.type(n);
"function" === r ? e.unique && p.has(n) || u.push(n) : n && n.length && "string" !== r && i(n)
})
})(arguments), n ? o = u.length : r && (s = t, c(r))
}
return this
}, remove: function () {
return u && b.each(arguments, function (e, t) {
var r;
while ((r = b.inArray(t, u, r)) > -1) u.splice(r, 1), n && (o >= r && o--, a >= r && a--)
}), this
}, has: function (e) {
return e ? b.inArray(e, u) > -1 : !(!u || !u.length)
}, empty: function () {
return u = [], this
}, disable: function () {
return u = l = r = t, this
}, disabled: function () {
return !u
}, lock: function () {
return l = t, r || p.disable(), this
}, locked: function () {
return !l
}, fireWith: function (e, t) {
return t = t || [], t = [e, t.slice ? t.slice() : t], !u || i && !l || (n ? l.push(t) : c(t)), this
}, fire: function () {
return p.fireWith(this, arguments), this
}, fired: function () {
return !!i
}
};
return p
}, b.extend({
Deferred: function (e) {
var t = [["resolve", "done", b.Callbacks("once memory"), "resolved"], ["reject", "fail", b.Callbacks("once memory"), "rejected"], ["notify", "progress", b.Callbacks("memory")]],
n = "pending", r = {
state: function () {
return n
}, always: function () {
return i.done(arguments).fail(arguments), this
}, then: function () {
var e = arguments;
return b.Deferred(function (n) {
b.each(t, function (t, o) {
var a = o[0], s = b.isFunction(e[t]) && e[t];
i[o[1]](function () {
var e = s && s.apply(this, arguments);
e && b.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[a + "With"](this === r ? n.promise() : this, s ? [e] : arguments)
})
}), e = null
}).promise()
}, promise: function (e) {
return null != e ? b.extend(e, r) : r
}
}, i = {};
return r.pipe = r.then, b.each(t, function (e, o) {
var a = o[2], s = o[3];
r[o[1]] = a.add, s && a.add(function () {
n = s
}, t[1 ^ e][2].disable, t[2][2].lock), i[o[0]] = function () {
return i[o[0] + "With"](this === i ? r : this, arguments), this
}, i[o[0] + "With"] = a.fireWith
}), r.promise(i), e && e.call(i, i), i
}, when: function (e) {
var t = 0, n = h.call(arguments), r = n.length, i = 1 !== r || e && b.isFunction(e.promise) ? r : 0,
o = 1 === i ? e : b.Deferred(), a = function (e, t, n) {
return function (r) {
t[e] = this, n[e] = arguments.length > 1 ? h.call(arguments) : r, n === s ? o.notifyWith(t, n) : --i || o.resolveWith(t, n)
}
}, s, u, l;
if (r > 1) for (s = Array(r), u = Array(r), l = Array(r); r > t; t++) n[t] && b.isFunction(n[t].promise) ? n[t].promise().done(a(t, l, n)).fail(o.reject).progress(a(t, u, s)) : --i;
return i || o.resolveWith(l, n), o.promise()
}
}), b.support = function () {
var t, n, r, a, s, u, l, c, p, f, d = o.createElement("div");
if (d.setAttribute("className", "t"), d.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", n = d.getElementsByTagName("*"), r = d.getElementsByTagName("a")[0], !n || !r || !n.length) return {};
s = o.createElement("select"), l = s.appendChild(o.createElement("option")), a = d.getElementsByTagName("input")[0], r.style.cssText = "top:1px;float:left;opacity:.5", t = {
getSetAttribute: "t" !== d.className,
leadingWhitespace: 3 === d.firstChild.nodeType,
tbody: !d.getElementsByTagName("tbody").length,
htmlSerialize: !!d.getElementsByTagName("link").length,
style: /top/.test(r.getAttribute("style")),
hrefNormalized: "/a" === r.getAttribute("href"),
opacity: /^0.5/.test(r.style.opacity),
cssFloat: !!r.style.cssFloat,
checkOn: !!a.value,
optSelected: l.selected,
enctype: !!o.createElement("form").enctype,
html5Clone: "<:nav></:nav>" !== o.createElement("nav").cloneNode(!0).outerHTML,
boxModel: "CSS1Compat" === o.compatMode,
deleteExpando: !0,
noCloneEvent: !0,
inlineBlockNeedsLayout: !1,
shrinkWrapBlocks: !1,
reliableMarginRight: !0,
boxSizingReliable: !0,
pixelPosition: !1
}, a.checked = !0, t.noCloneChecked = a.cloneNode(!0).checked, s.disabled = !0, t.optDisabled = !l.disabled;
try {
delete d.test
} catch (h) {
t.deleteExpando = !1
}
a = o.createElement("input"), a.setAttribute("value", ""), t.input = "" === a.getAttribute("value"), a.value = "t", a.setAttribute("type", "radio"), t.radioValue = "t" === a.value, a.setAttribute("checked", "t"), a.setAttribute("name", "t"), u = o.createDocumentFragment(), u.appendChild(a), t.appendChecked = a.checked, t.checkClone = u.cloneNode(!0).cloneNode(!0).lastChild.checked, d.attachEvent && (d.attachEvent("onclick", function () {
t.noCloneEvent = !1
}), d.cloneNode(!0).click());
for (f in{
submit: !0,
change: !0,
focusin: !0
}) d.setAttribute(c = "on" + f, "t"), t[f + "Bubbles"] = c in e || d.attributes[c].expando === !1;
return d.style.backgroundClip = "content-box", d.cloneNode(!0).style.backgroundClip = "", t.clearCloneStyle = "content-box" === d.style.backgroundClip, b(function () {
var n, r, a,
s = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
u = o.getElementsByTagName("body")[0];
u && (n = o.createElement("div"), n.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", u.appendChild(n).appendChild(d), d.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", a = d.getElementsByTagName("td"), a[0].style.cssText = "padding:0;margin:0;border:0;display:none", p = 0 === a[0].offsetHeight, a[0].style.display = "", a[1].style.display = "none", t.reliableHiddenOffsets = p && 0 === a[0].offsetHeight, d.innerHTML = "", d.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", t.boxSizing = 4 === d.offsetWidth, t.doesNotIncludeMarginInBodyOffset = 1 !== u.offsetTop, e.getComputedStyle && (t.pixelPosition = "1%" !== (e.getComputedStyle(d, null) || {}).top, t.boxSizingReliable = "4px" === (e.getComputedStyle(d, null) || {width: "4px"}).width, r = d.appendChild(o.createElement("div")), r.style.cssText = d.style.cssText = s, r.style.marginRight = r.style.width = "0", d.style.width = "1px", t.reliableMarginRight = !parseFloat((e.getComputedStyle(r, null) || {}).marginRight)), typeof d.style.zoom !== i && (d.innerHTML = "", d.style.cssText = s + "width:1px;padding:1px;display:inline;zoom:1", t.inlineBlockNeedsLayout = 3 === d.offsetWidth, d.style.display = "block", d.innerHTML = "<div></div>", d.firstChild.style.width = "5px", t.shrinkWrapBlocks = 3 !== d.offsetWidth, t.inlineBlockNeedsLayout && (u.style.zoom = 1)), u.removeChild(n), n = d = a = r = null)
}), n = s = u = l = r = a = null, t
}();
var O = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, B = /([A-Z])/g;
function P(e, n, r, i) {
if (b.acceptData(e)) {
var o, a, s = b.expando, u = "string" == typeof n, l = e.nodeType, p = l ? b.cache : e,
f = l ? e[s] : e[s] && s;
if (f && p[f] && (i || p[f].data) || !u || r !== t) return f || (l ? e[s] = f = c.pop() || b.guid++ : f = s), p[f] || (p[f] = {}, l || (p[f].toJSON = b.noop)), ("object" == typeof n || "function" == typeof n) && (i ? p[f] = b.extend(p[f], n) : p[f].data = b.extend(p[f].data, n)), o = p[f], i || (o.data || (o.data = {}), o = o.data), r !== t && (o[b.camelCase(n)] = r), u ? (a = o[n], null == a && (a = o[b.camelCase(n)])) : a = o, a
}
}
function R(e, t, n) {
if (b.acceptData(e)) {
var r, i, o, a = e.nodeType, s = a ? b.cache : e, u = a ? e[b.expando] : b.expando;
if (s[u]) {
if (t && (o = n ? s[u] : s[u].data)) {
b.isArray(t) ? t = t.concat(b.map(t, b.camelCase)) : t in o ? t = [t] : (t = b.camelCase(t), t = t in o ? [t] : t.split(" "));
for (r = 0, i = t.length; i > r; r++) delete o[t[r]];
if (!(n ? $ : b.isEmptyObject)(o)) return
}
(n || (delete s[u].data, $(s[u]))) && (a ? b.cleanData([e], !0) : b.support.deleteExpando || s != s.window ? delete s[u] : s[u] = null)
}
}
}
b.extend({
cache: {},
expando: "jQuery" + (p + Math.random()).replace(/\D/g, ""),
noData: {embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", applet: !0},
hasData: function (e) {
return e = e.nodeType ? b.cache[e[b.expando]] : e[b.expando], !!e && !$(e)
},
data: function (e, t, n) {
return P(e, t, n)
},
removeData: function (e, t) {
return R(e, t)
},
_data: function (e, t, n) {
return P(e, t, n, !0)
},
_removeData: function (e, t) {
return R(e, t, !0)
},
acceptData: function (e) {
if (e.nodeType && 1 !== e.nodeType && 9 !== e.nodeType) return !1;
var t = e.nodeName && b.noData[e.nodeName.toLowerCase()];
return !t || t !== !0 && e.getAttribute("classid") === t
}
}), b.fn.extend({
data: function (e, n) {
var r, i, o = this[0], a = 0, s = null;
if (e === t) {
if (this.length && (s = b.data(o), 1 === o.nodeType && !b._data(o, "parsedAttrs"))) {
for (r = o.attributes; r.length > a; a++) i = r[a].name, i.indexOf("data-") || (i = b.camelCase(i.slice(5)), W(o, i, s[i]));
b._data(o, "parsedAttrs", !0)
}
return s
}
return "object" == typeof e ? this.each(function () {
b.data(this, e)
}) : b.access(this, function (n) {
return n === t ? o ? W(o, e, b.data(o, e)) : null : (this.each(function () {
b.data(this, e, n)
}), t)
}, null, n, arguments.length > 1, null, !0)
}, removeData: function (e) {
return this.each(function () {
b.removeData(this, e)
})
}
});
function W(e, n, r) {
if (r === t && 1 === e.nodeType) {
var i = "data-" + n.replace(B, "-$1").toLowerCase();
if (r = e.getAttribute(i), "string" == typeof r) {
try {
r = "true" === r ? !0 : "false" === r ? !1 : "null" === r ? null : +r + "" === r ? +r : O.test(r) ? b.parseJSON(r) : r
} catch (o) {
}
b.data(e, n, r)
} else r = t
}
return r
}
function $(e) {
var t;
for (t in e) if (("data" !== t || !b.isEmptyObject(e[t])) && "toJSON" !== t) return !1;
return !0
}
b.extend({
queue: function (e, n, r) {
var i;
return e ? (n = (n || "fx") + "queue", i = b._data(e, n), r && (!i || b.isArray(r) ? i = b._data(e, n, b.makeArray(r)) : i.push(r)), i || []) : t
}, dequeue: function (e, t) {
t = t || "fx";
var n = b.queue(e, t), r = n.length, i = n.shift(), o = b._queueHooks(e, t), a = function () {
b.dequeue(e, t)
};
"inprogress" === i && (i = n.shift(), r--), o.cur = i, i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, a, o)), !r && o && o.empty.fire()
}, _queueHooks: function (e, t) {
var n = t + "queueHooks";
return b._data(e, n) || b._data(e, n, {
empty: b.Callbacks("once memory").add(function () {
b._removeData(e, t + "queue"), b._removeData(e, n)
})
})
}
}), b.fn.extend({
queue: function (e, n) {
var r = 2;
return "string" != typeof e && (n = e, e = "fx", r--), r > arguments.length ? b.queue(this[0], e) : n === t ? this : this.each(function () {
var t = b.queue(this, e, n);
b._queueHooks(this, e), "fx" === e && "inprogress" !== t[0] && b.dequeue(this, e)
})
}, dequeue: function (e) {
return this.each(function () {
b.dequeue(this, e)
})
}, delay: function (e, t) {
return e = b.fx ? b.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function (t, n) {
var r = setTimeout(t, e);
n.stop = function () {
clearTimeout(r)
}
})
}, clearQueue: function (e) {
return this.queue(e || "fx", [])
}, promise: function (e, n) {
var r, i = 1, o = b.Deferred(), a = this, s = this.length, u = function () {
--i || o.resolveWith(a, [a])
};
"string" != typeof e && (n = e, e = t), e = e || "fx";
while (s--) r = b._data(a[s], e + "queueHooks"), r && r.empty && (i++, r.empty.add(u));
return u(), o.promise(n)
}
});
var I, z, X = /[\t\r\n]/g, U = /\r/g, V = /^(?:input|select|textarea|button|object)$/i, Y = /^(?:a|area)$/i,
J = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
G = /^(?:checked|selected)$/i, Q = b.support.getSetAttribute, K = b.support.input;
b.fn.extend({
attr: function (e, t) {
return b.access(this, b.attr, e, t, arguments.length > 1)
}, removeAttr: function (e) {
return this.each(function () {
b.removeAttr(this, e)
})
}, prop: function (e, t) {
return b.access(this, b.prop, e, t, arguments.length > 1)
}, removeProp: function (e) {
return e = b.propFix[e] || e, this.each(function () {
try {
this[e] = t, delete this[e]
} catch (n) {
}
})
}, addClass: function (e) {
var t, n, r, i, o, a = 0, s = this.length, u = "string" == typeof e && e;
if (b.isFunction(e)) return this.each(function (t) {
b(this).addClass(e.call(this, t, this.className))
});
if (u) for (t = (e || "").match(w) || []; s > a; a++) if (n = this[a], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(X, " ") : " ")) {
o = 0;
while (i = t[o++]) 0 > r.indexOf(" " + i + " ") && (r += i + " ");
n.className = b.trim(r)
}
return this
}, removeClass: function (e) {
var t, n, r, i, o, a = 0, s = this.length, u = 0 === arguments.length || "string" == typeof e && e;
if (b.isFunction(e)) return this.each(function (t) {
b(this).removeClass(e.call(this, t, this.className))
});
if (u) for (t = (e || "").match(w) || []; s > a; a++) if (n = this[a], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(X, " ") : "")) {
o = 0;
while (i = t[o++]) while (r.indexOf(" " + i + " ") >= 0) r = r.replace(" " + i + " ", " ");
n.className = e ? b.trim(r) : ""
}
return this
}, toggleClass: function (e, t) {
var n = typeof e, r = "boolean" == typeof t;
return b.isFunction(e) ? this.each(function (n) {
b(this).toggleClass(e.call(this, n, this.className, t), t)
}) : this.each(function () {
if ("string" === n) {
var o, a = 0, s = b(this), u = t, l = e.match(w) || [];
while (o = l[a++]) u = r ? u : !s.hasClass(o), s[u ? "addClass" : "removeClass"](o)
} else (n === i || "boolean" === n) && (this.className && b._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : b._data(this, "__className__") || "")
})
}, hasClass: function (e) {
var t = " " + e + " ", n = 0, r = this.length;
for (; r > n; n++) if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(X, " ").indexOf(t) >= 0) return !0;
return !1
}, val: function (e) {
var n, r, i, o = this[0];
{
if (arguments.length) return i = b.isFunction(e), this.each(function (n) {
var o, a = b(this);
1 === this.nodeType && (o = i ? e.call(this, n, a.val()) : e, null == o ? o = "" : "number" == typeof o ? o += "" : b.isArray(o) && (o = b.map(o, function (e) {
return null == e ? "" : e + ""
})), r = b.valHooks[this.type] || b.valHooks[this.nodeName.toLowerCase()], r && "set" in r && r.set(this, o, "value") !== t || (this.value = o))
});
if (o) return r = b.valHooks[o.type] || b.valHooks[o.nodeName.toLowerCase()], r && "get" in r && (n = r.get(o, "value")) !== t ? n : (n = o.value, "string" == typeof n ? n.replace(U, "") : null == n ? "" : n)
}
}
}), b.extend({
valHooks: {
option: {
get: function (e) {
var t = e.attributes.value;
return !t || t.specified ? e.value : e.text
}
}, select: {
get: function (e) {
var t, n, r = e.options, i = e.selectedIndex, o = "select-one" === e.type || 0 > i,
a = o ? null : [], s = o ? i + 1 : r.length, u = 0 > i ? s : o ? i : 0;
for (; s > u; u++) if (n = r[u], !(!n.selected && u !== i || (b.support.optDisabled ? n.disabled : null !== n.getAttribute("disabled")) || n.parentNode.disabled && b.nodeName(n.parentNode, "optgroup"))) {
if (t = b(n).val(), o) return t;
a.push(t)
}
return a
}, set: function (e, t) {
var n = b.makeArray(t);
return b(e).find("option").each(function () {
this.selected = b.inArray(b(this).val(), n) >= 0
}), n.length || (e.selectedIndex = -1), n
}
}
},
attr: function (e, n, r) {
var o, a, s, u = e.nodeType;
if (e && 3 !== u && 8 !== u && 2 !== u) return typeof e.getAttribute === i ? b.prop(e, n, r) : (a = 1 !== u || !b.isXMLDoc(e), a && (n = n.toLowerCase(), o = b.attrHooks[n] || (J.test(n) ? z : I)), r === t ? o && a && "get" in o && null !== (s = o.get(e, n)) ? s : (typeof e.getAttribute !== i && (s = e.getAttribute(n)), null == s ? t : s) : null !== r ? o && a && "set" in o && (s = o.set(e, r, n)) !== t ? s : (e.setAttribute(n, r + ""), r) : (b.removeAttr(e, n), t))
},
removeAttr: function (e, t) {
var n, r, i = 0, o = t && t.match(w);
if (o && 1 === e.nodeType) while (n = o[i++]) r = b.propFix[n] || n, J.test(n) ? !Q && G.test(n) ? e[b.camelCase("default-" + n)] = e[r] = !1 : e[r] = !1 : b.attr(e, n, ""), e.removeAttribute(Q ? n : r)
},
attrHooks: {
type: {
set: function (e, t) {
if (!b.support.radioValue && "radio" === t && b.nodeName(e, "input")) {
var n = e.value;
return e.setAttribute("type", t), n && (e.value = n), t
}
}
}
},
propFix: {
tabindex: "tabIndex",
readonly: "readOnly",
"for": "htmlFor",
"class": "className",
maxlength: "maxLength",
cellspacing: "cellSpacing",
cellpadding: "cellPadding",
rowspan: "rowSpan",
colspan: "colSpan",
usemap: "useMap",
frameborder: "frameBorder",
contenteditable: "contentEditable"
},
prop: function (e, n, r) {
var i, o, a, s = e.nodeType;
if (e && 3 !== s && 8 !== s && 2 !== s) return a = 1 !== s || !b.isXMLDoc(e), a && (n = b.propFix[n] || n, o = b.propHooks[n]), r !== t ? o && "set" in o && (i = o.set(e, r, n)) !== t ? i : e[n] = r : o && "get" in o && null !== (i = o.get(e, n)) ? i : e[n]
},
propHooks: {
tabIndex: {
get: function (e) {
var n = e.getAttributeNode("tabindex");
return n && n.specified ? parseInt(n.value, 10) : V.test(e.nodeName) || Y.test(e.nodeName) && e.href ? 0 : t
}
}
}
}), z = {
get: function (e, n) {
var r = b.prop(e, n), i = "boolean" == typeof r && e.getAttribute(n),
o = "boolean" == typeof r ? K && Q ? null != i : G.test(n) ? e[b.camelCase("default-" + n)] : !!i : e.getAttributeNode(n);
return o && o.value !== !1 ? n.toLowerCase() : t
}, set: function (e, t, n) {
return t === !1 ? b.removeAttr(e, n) : K && Q || !G.test(n) ? e.setAttribute(!Q && b.propFix[n] || n, n) : e[b.camelCase("default-" + n)] = e[n] = !0, n
}
}, K && Q || (b.attrHooks.value = {
get: function (e, n) {
var r = e.getAttributeNode(n);
return b.nodeName(e, "input") ? e.defaultValue : r && r.specified ? r.value : t
}, set: function (e, n, r) {
return b.nodeName(e, "input") ? (e.defaultValue = n, t) : I && I.set(e, n, r)
}
}), Q || (I = b.valHooks.button = {
get: function (e, n) {
var r = e.getAttributeNode(n);
return r && ("id" === n || "name" === n || "coords" === n ? "" !== r.value : r.specified) ? r.value : t
}, set: function (e, n, r) {
var i = e.getAttributeNode(r);
return i || e.setAttributeNode(i = e.ownerDocument.createAttribute(r)), i.value = n += "", "value" === r || n === e.getAttribute(r) ? n : t
}
}, b.attrHooks.contenteditable = {
get: I.get, set: function (e, t, n) {
I.set(e, "" === t ? !1 : t, n)
}
}, b.each(["width", "height"], function (e, n) {
b.attrHooks[n] = b.extend(b.attrHooks[n], {
set: function (e, r) {
return "" === r ? (e.setAttribute(n, "auto"), r) : t
}
})
})), b.support.hrefNormalized || (b.each(["href", "src", "width", "height"], function (e, n) {
b.attrHooks[n] = b.extend(b.attrHooks[n], {
get: function (e) {
var r = e.getAttribute(n, 2);
return null == r ? t : r
}
})
}), b.each(["href", "src"], function (e, t) {
b.propHooks[t] = {
get: function (e) {
return e.getAttribute(t, 4)
}
}
})), b.support.style || (b.attrHooks.style = {
get: function (e) {
return e.style.cssText || t
}, set: function (e, t) {
return e.style.cssText = t + ""
}
}), b.support.optSelected || (b.propHooks.selected = b.extend(b.propHooks.selected, {
get: function (e) {
var t = e.parentNode;
return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null
}
})), b.support.enctype || (b.propFix.enctype = "encoding"), b.support.checkOn || b.each(["radio", "checkbox"], function () {
b.valHooks[this] = {
get: function (e) {
return null === e.getAttribute("value") ? "on" : e.value
}
}
}), b.each(["radio", "checkbox"], function () {
b.valHooks[this] = b.extend(b.valHooks[this], {
set: function (e, n) {
return b.isArray(n) ? e.checked = b.inArray(b(e).val(), n) >= 0 : t
}
})
});
var Z = /^(?:input|select|textarea)$/i, et = /^key/, tt = /^(?:mouse|contextmenu)|click/,
nt = /^(?:focusinfocus|focusoutblur)$/, rt = /^([^.]*)(?:\.(.+)|)$/;
function it() {
return !0
}
function ot() {
return !1
}
b.event = {
global: {},
add: function (e, n, r, o, a) {
var s, u, l, c, p, f, d, h, g, m, y, v = b._data(e);
if (v) {
r.handler && (c = r, r = c.handler, a = c.selector), r.guid || (r.guid = b.guid++), (u = v.events) || (u = v.events = {}), (f = v.handle) || (f = v.handle = function (e) {
return typeof b === i || e && b.event.triggered === e.type ? t : b.event.dispatch.apply(f.elem, arguments)
}, f.elem = e), n = (n || "").match(w) || [""], l = n.length;
while (l--) s = rt.exec(n[l]) || [], g = y = s[1], m = (s[2] || "").split(".").sort(), p = b.event.special[g] || {}, g = (a ? p.delegateType : p.bindType) || g, p = b.event.special[g] || {}, d = b.extend({
type: g,
origType: y,
data: o,
handler: r,
guid: r.guid,
selector: a,
needsContext: a && b.expr.match.needsContext.test(a),
namespace: m.join(".")
}, c), (h = u[g]) || (h = u[g] = [], h.delegateCount = 0, p.setup && p.setup.call(e, o, m, f) !== !1 || (e.addEventListener ? e.addEventListener(g, f, !1) : e.attachEvent && e.attachEvent("on" + g, f))), p.add && (p.add.call(e, d), d.handler.guid || (d.handler.guid = r.guid)), a ? h.splice(h.delegateCount++, 0, d) : h.push(d), b.event.global[g] = !0;
e = null
}
},
remove: function (e, t, n, r, i) {
var o, a, s, u, l, c, p, f, d, h, g, m = b.hasData(e) && b._data(e);
if (m && (c = m.events)) {
t = (t || "").match(w) || [""], l = t.length;
while (l--) if (s = rt.exec(t[l]) || [], d = g = s[1], h = (s[2] || "").split(".").sort(), d) {
p = b.event.special[d] || {}, d = (r ? p.delegateType : p.bindType) || d, f = c[d] || [], s = s[2] && RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), u = o = f.length;
while (o--) a = f[o], !i && g !== a.origType || n && n.guid !== a.guid || s && !s.test(a.namespace) || r && r !== a.selector && ("**" !== r || !a.selector) || (f.splice(o, 1), a.selector && f.delegateCount--, p.remove && p.remove.call(e, a));
u && !f.length && (p.teardown && p.teardown.call(e, h, m.handle) !== !1 || b.removeEvent(e, d, m.handle), delete c[d])
} else for (d in c) b.event.remove(e, d + t[l], n, r, !0);
b.isEmptyObject(c) && (delete m.handle, b._removeData(e, "events"))
}
},
trigger: function (n, r, i, a) {
var s, u, l, c, p, f, d, h = [i || o], g = y.call(n, "type") ? n.type : n,
m = y.call(n, "namespace") ? n.namespace.split(".") : [];
if (l = f = i = i || o, 3 !== i.nodeType && 8 !== i.nodeType && !nt.test(g + b.event.triggered) && (g.indexOf(".") >= 0 && (m = g.split("."), g = m.shift(), m.sort()), u = 0 > g.indexOf(":") && "on" + g, n = n[b.expando] ? n : new b.Event(g, "object" == typeof n && n), n.isTrigger = !0, n.namespace = m.join("."), n.namespace_re = n.namespace ? RegExp("(^|\\.)" + m.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, n.result = t, n.target || (n.target = i), r = null == r ? [n] : b.makeArray(r, [n]), p = b.event.special[g] || {}, a || !p.trigger || p.trigger.apply(i, r) !== !1)) {
if (!a && !p.noBubble && !b.isWindow(i)) {
for (c = p.delegateType || g, nt.test(c + g) || (l = l.parentNode); l; l = l.parentNode) h.push(l), f = l;
f === (i.ownerDocument || o) && h.push(f.defaultView || f.parentWindow || e)
}
d = 0;
while ((l = h[d++]) && !n.isPropagationStopped()) n.type = d > 1 ? c : p.bindType || g, s = (b._data(l, "events") || {})[n.type] && b._data(l, "handle"), s && s.apply(l, r), s = u && l[u], s && b.acceptData(l) && s.apply && s.apply(l, r) === !1 && n.preventDefault();
if (n.type = g, !(a || n.isDefaultPrevented() || p._default && p._default.apply(i.ownerDocument, r) !== !1 || "click" === g && b.nodeName(i, "a") || !b.acceptData(i) || !u || !i[g] || b.isWindow(i))) {
f = i[u], f && (i[u] = null), b.event.triggered = g;
try {
i[g]()
} catch (v) {
}
b.event.triggered = t, f && (i[u] = f)
}
return n.result
}
},
dispatch: function (e) {
e = b.event.fix(e);
var n, r, i, o, a, s = [], u = h.call(arguments), l = (b._data(this, "events") || {})[e.type] || [],
c = b.event.special[e.type] || {};
if (u[0] = e, e.delegateTarget = this, !c.preDispatch || c.preDispatch.call(this, e) !== !1) {
s = b.event.handlers.call(this, e, l), n = 0;
while ((o = s[n++]) && !e.isPropagationStopped()) {
e.currentTarget = o.elem, a = 0;
while ((i = o.handlers[a++]) && !e.isImmediatePropagationStopped()) (!e.namespace_re || e.namespace_re.test(i.namespace)) && (e.handleObj = i, e.data = i.data, r = ((b.event.special[i.origType] || {}).handle || i.handler).apply(o.elem, u), r !== t && (e.result = r) === !1 && (e.preventDefault(), e.stopPropagation()))
}
return c.postDispatch && c.postDispatch.call(this, e), e.result
}
},
handlers: function (e, n) {
var r, i, o, a, s = [], u = n.delegateCount, l = e.target;
if (u && l.nodeType && (!e.button || "click" !== e.type)) for (; l != this; l = l.parentNode || this) if (1 === l.nodeType && (l.disabled !== !0 || "click" !== e.type)) {
for (o = [], a = 0; u > a; a++) i = n[a], r = i.selector + " ", o[r] === t && (o[r] = i.needsContext ? b(r, this).index(l) >= 0 : b.find(r, this, null, [l]).length), o[r] && o.push(i);
o.length && s.push({elem: l, handlers: o})
}
return n.length > u && s.push({elem: this, handlers: n.slice(u)}), s
},
fix: function (e) {
if (e[b.expando]) return e;
var t, n, r, i = e.type, a = e, s = this.fixHooks[i];
s || (this.fixHooks[i] = s = tt.test(i) ? this.mouseHooks : et.test(i) ? this.keyHooks : {}), r = s.props ? this.props.concat(s.props) : this.props, e = new b.Event(a), t = r.length;
while (t--) n = r[t], e[n] = a[n];
return e.target || (e.target = a.srcElement || o), 3 === e.target.nodeType && (e.target = e.target.parentNode), e.metaKey = !!e.metaKey, s.filter ? s.filter(e, a) : e
},
props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
fixHooks: {},
keyHooks: {
props: "char charCode key keyCode".split(" "), filter: function (e, t) {
return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), e
}
},
mouseHooks: {
props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
filter: function (e, n) {
var r, i, a, s = n.button, u = n.fromElement;
return null == e.pageX && null != n.clientX && (i = e.target.ownerDocument || o, a = i.documentElement, r = i.body, e.pageX = n.clientX + (a && a.scrollLeft || r && r.scrollLeft || 0) - (a && a.clientLeft || r && r.clientLeft || 0), e.pageY = n.clientY + (a && a.scrollTop || r && r.scrollTop || 0) - (a && a.clientTop || r && r.clientTop || 0)), !e.relatedTarget && u && (e.relatedTarget = u === e.target ? n.toElement : u), e.which || s === t || (e.which = 1 & s ? 1 : 2 & s ? 3 : 4 & s ? 2 : 0), e
}
},
special: {
load: {noBubble: !0}, click: {
trigger: function () {
return b.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : t
}
}, focus: {
trigger: function () {
if (this !== o.activeElement && this.focus) try {
return this.focus(), !1
} catch (e) {
}
}, delegateType: "focusin"
}, blur: {
trigger: function () {
return this === o.activeElement && this.blur ? (this.blur(), !1) : t
}, delegateType: "focusout"
}, beforeunload: {
postDispatch: function (e) {
e.result !== t && (e.originalEvent.returnValue = e.result)
}
}
},
simulate: function (e, t, n, r) {
var i = b.extend(new b.Event, n, {type: e, isSimulated: !0, originalEvent: {}});
r ? b.event.trigger(i, null, t) : b.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault()
}
}, b.removeEvent = o.removeEventListener ? function (e, t, n) {
e.removeEventListener && e.removeEventListener(t, n, !1)
} : function (e, t, n) {
var r = "on" + t;
e.detachEvent && (typeof e[r] === i && (e[r] = null), e.detachEvent(r, n))
}, b.Event = function (e, n) {
return this instanceof b.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault() ? it : ot) : this.type = e, n && b.extend(this, n), this.timeStamp = e && e.timeStamp || b.now(), this[b.expando] = !0, t) : new b.Event(e, n)
}, b.Event.prototype = {
isDefaultPrevented: ot,
isPropagationStopped: ot,
isImmediatePropagationStopped: ot,
preventDefault: function () {
var e = this.originalEvent;
this.isDefaultPrevented = it, e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1)
},
stopPropagation: function () {
var e = this.originalEvent;
this.isPropagationStopped = it, e && (e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0)
},
stopImmediatePropagation: function () {
this.isImmediatePropagationStopped = it, this.stopPropagation()
}
}, b.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (e, t) {
b.event.special[e] = {
delegateType: t, bindType: t, handle: function (e) {
var n, r = this, i = e.relatedTarget, o = e.handleObj;
return (!i || i !== r && !b.contains(r, i)) && (e.type = o.origType, n = o.handler.apply(this, arguments), e.type = t), n
}
}
}), b.support.submitBubbles || (b.event.special.submit = {
setup: function () {
return b.nodeName(this, "form") ? !1 : (b.event.add(this, "click._submit keypress._submit", function (e) {
var n = e.target, r = b.nodeName(n, "input") || b.nodeName(n, "button") ? n.form : t;
r && !b._data(r, "submitBubbles") && (b.event.add(r, "submit._submit", function (e) {
e._submit_bubble = !0
}), b._data(r, "submitBubbles", !0))
}), t)
}, postDispatch: function (e) {
e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && b.event.simulate("submit", this.parentNode, e, !0))
}, teardown: function () {
return b.nodeName(this, "form") ? !1 : (b.event.remove(this, "._submit"), t)
}
}), b.support.changeBubbles || (b.event.special.change = {
setup: function () {
return Z.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (b.event.add(this, "propertychange._change", function (e) {
"checked" === e.originalEvent.propertyName && (this._just_changed = !0)
}), b.event.add(this, "click._change", function (e) {
this._just_changed && !e.isTrigger && (this._just_changed = !1), b.event.simulate("change", this, e, !0)
})), !1) : (b.event.add(this, "beforeactivate._change", function (e) {
var t = e.target;
Z.test(t.nodeName) && !b._data(t, "changeBubbles") && (b.event.add(t, "change._change", function (e) {
!this.parentNode || e.isSimulated || e.isTrigger || b.event.simulate("change", this.parentNode, e, !0)
}), b._data(t, "changeBubbles", !0))
}), t)
}, handle: function (e) {
var n = e.target;
return this !== n || e.isSimulated || e.isTrigger || "radio" !== n.type && "checkbox" !== n.type ? e.handleObj.handler.apply(this, arguments) : t
}, teardown: function () {
return b.event.remove(this, "._change"), !Z.test(this.nodeName)
}
}), b.support.focusinBubbles || b.each({focus: "focusin", blur: "focusout"}, function (e, t) {
var n = 0, r = function (e) {
b.event.simulate(t, e.target, b.event.fix(e), !0)
};
b.event.special[t] = {
setup: function () {
0 === n++ && o.addEventListener(e, r, !0)
}, teardown: function () {
0 === --n && o.removeEventListener(e, r, !0)
}
}
}), b.fn.extend({
on: function (e, n, r, i, o) {
var a, s;
if ("object" == typeof e) {
"string" != typeof n && (r = r || n, n = t);
for (a in e) this.on(a, n, r, e[a], o);
return this
}
if (null == r && null == i ? (i = n, r = n = t) : null == i && ("string" == typeof n ? (i = r, r = t) : (i = r, r = n, n = t)), i === !1) i = ot; else if (!i) return this;
return 1 === o && (s = i, i = function (e) {
return b().off(e), s.apply(this, arguments)
}, i.guid = s.guid || (s.guid = b.guid++)), this.each(function () {
b.event.add(this, e, i, r, n)
})
}, one: function (e, t, n, r) {
return this.on(e, t, n, r, 1)
}, off: function (e, n, r) {
var i, o;
if (e && e.preventDefault && e.handleObj) return i = e.handleObj, b(e.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this;
if ("object" == typeof e) {
for (o in e) this.off(o, n, e[o]);
return this
}
return (n === !1 || "function" == typeof n) && (r = n, n = t), r === !1 && (r = ot), this.each(function () {
b.event.remove(this, e, r, n)
})
}, bind: function (e, t, n) {
return this.on(e, null, t, n)
}, unbind: function (e, t) {
return this.off(e, null, t)
}, delegate: function (e, t, n, r) {
return this.on(t, e, n, r)
}, undelegate: function (e, t, n) {
return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
}, trigger: function (e, t) {
return this.each(function () {
b.event.trigger(e, t, this)
})
}, triggerHandler: function (e, n) {
var r = this[0];
return r ? b.event.trigger(e, n, r, !0) : t
}
}), function (e, t) {
var n, r, i, o, a, s, u, l, c, p, f, d, h, g, m, y, v, x = "sizzle" + -new Date, w = e.document, T = {}, N = 0,
C = 0, k = it(), E = it(), S = it(), A = typeof t, j = 1 << 31, D = [], L = D.pop, H = D.push, q = D.slice,
M = D.indexOf || function (e) {
var t = 0, n = this.length;
for (; n > t; t++) if (this[t] === e) return t;
return -1
}, _ = "[\\x20\\t\\r\\n\\f]", F = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", O = F.replace("w", "w#"),
B = "([*^$|!~]?=)",
P = "\\[" + _ + "*(" + F + ")" + _ + "*(?:" + B + _ + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + O + ")|)|)" + _ + "*\\]",
R = ":(" + F + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + P.replace(3, 8) + ")*)|.*)\\)|)",
W = RegExp("^" + _ + "+|((?:^|[^\\\\])(?:\\\\.)*)" + _ + "+$", "g"), $ = RegExp("^" + _ + "*," + _ + "*"),
I = RegExp("^" + _ + "*([\\x20\\t\\r\\n\\f>+~])" + _ + "*"), z = RegExp(R), X = RegExp("^" + O + "$"), U = {
ID: RegExp("^#(" + F + ")"),
CLASS: RegExp("^\\.(" + F + ")"),
NAME: RegExp("^\\[name=['\"]?(" + F + ")['\"]?\\]"),
TAG: RegExp("^(" + F.replace("w", "w*") + ")"),
ATTR: RegExp("^" + P),
PSEUDO: RegExp("^" + R),
CHILD: RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + _ + "*(even|odd|(([+-]|)(\\d*)n|)" + _ + "*(?:([+-]|)" + _ + "*(\\d+)|))" + _ + "*\\)|)", "i"),
needsContext: RegExp("^" + _ + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + _ + "*((?:-\\d)?\\d*)" + _ + "*\\)|)(?=[^-]|$)", "i")
}, V = /[\x20\t\r\n\f]*[+~]/, Y = /^[^{]+\{\s*\[native code/, J = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
G = /^(?:input|select|textarea|button)$/i, Q = /^h\d$/i, K = /'|\\/g,
Z = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, et = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
tt = function (e, t) {
var n = "0x" + t - 65536;
return n !== n ? t : 0 > n ? String.fromCharCode(n + 65536) : String.fromCharCode(55296 | n >> 10, 56320 | 1023 & n)
};
try {
q.call(w.documentElement.childNodes, 0)[0].nodeType
} catch (nt) {
q = function (e) {
var t, n = [];
while (t = this[e++]) n.push(t);
return n
}
}
function rt(e) {
return Y.test(e + "")
}
function it() {
var e, t = [];
return e = function (n, r) {
return t.push(n += " ") > i.cacheLength && delete e[t.shift()], e[n] = r
}
}
function ot(e) {
return e[x] = !0, e
}
function at(e) {
var t = p.createElement("div");
try {
return e(t)
} catch (n) {
return !1
} finally {
t = null
}
}
function st(e, t, n, r) {
var i, o, a, s, u, l, f, g, m, v;
if ((t ? t.ownerDocument || t : w) !== p && c(t), t = t || p, n = n || [], !e || "string" != typeof e) return n;
if (1 !== (s = t.nodeType) && 9 !== s) return [];
if (!d && !r) {
if (i = J.exec(e)) if (a = i[1]) {
if (9 === s) {
if (o = t.getElementById(a), !o || !o.parentNode) return n;
if (o.id === a) return n.push(o), n
} else if (t.ownerDocument && (o = t.ownerDocument.getElementById(a)) && y(t, o) && o.id === a) return n.push(o), n
} else {
if (i[2]) return H.apply(n, q.call(t.getElementsByTagName(e), 0)), n;
if ((a = i[3]) && T.getByClassName && t.getElementsByClassName) return H.apply(n, q.call(t.getElementsByClassName(a), 0)), n
}
if (T.qsa && !h.test(e)) {
if (f = !0, g = x, m = t, v = 9 === s && e, 1 === s && "object" !== t.nodeName.toLowerCase()) {
l = ft(e), (f = t.getAttribute("id")) ? g = f.replace(K, "\\$&") : t.setAttribute("id", g), g = "[id='" + g + "'] ", u = l.length;
while (u--) l[u] = g + dt(l[u]);
m = V.test(e) && t.parentNode || t, v = l.join(",")
}
if (v) try {
return H.apply(n, q.call(m.querySelectorAll(v), 0)), n
} catch (b) {
} finally {
f || t.removeAttribute("id")
}
}
}
return wt(e.replace(W, "$1"), t, n, r)
}
a = st.isXML = function (e) {
var t = e && (e.ownerDocument || e).documentElement;
return t ? "HTML" !== t.nodeName : !1
}, c = st.setDocument = function (e) {
var n = e ? e.ownerDocument || e : w;
return n !== p && 9 === n.nodeType && n.documentElement ? (p = n, f = n.documentElement, d = a(n), T.tagNameNoComments = at(function (e) {
return e.appendChild(n.createComment("")), !e.getElementsByTagName("*").length
}), T.attributes = at(function (e) {
e.innerHTML = "<select></select>";
var t = typeof e.lastChild.getAttribute("multiple");
return "boolean" !== t && "string" !== t
}), T.getByClassName = at(function (e) {
return e.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>", e.getElementsByClassName && e.getElementsByClassName("e").length ? (e.lastChild.className = "e", 2 === e.getElementsByClassName("e").length) : !1
}), T.getByName = at(function (e) {
e.id = x + 0, e.innerHTML = "<a name='" + x + "'></a><div name='" + x + "'></div>", f.insertBefore(e, f.firstChild);
var t = n.getElementsByName && n.getElementsByName(x).length === 2 + n.getElementsByName(x + 0).length;
return T.getIdNotName = !n.getElementById(x), f.removeChild(e), t
}), i.attrHandle = at(function (e) {
return e.innerHTML = "<a href='#'></a>", e.firstChild && typeof e.firstChild.getAttribute !== A && "#" === e.firstChild.getAttribute("href")
}) ? {} : {
href: function (e) {
return e.getAttribute("href", 2)
}, type: function (e) {
return e.getAttribute("type")
}
}, T.getIdNotName ? (i.find.ID = function (e, t) {
if (typeof t.getElementById !== A && !d) {
var n = t.getElementById(e);
return n && n.parentNode ? [n] : []
}
}, i.filter.ID = function (e) {
var t = e.replace(et, tt);
return function (e) {
return e.getAttribute("id") === t
}
}) : (i.find.ID = function (e, n) {
if (typeof n.getElementById !== A && !d) {
var r = n.getElementById(e);
return r ? r.id === e || typeof r.getAttributeNode !== A && r.getAttributeNode("id").value === e ? [r] : t : []
}
}, i.filter.ID = function (e) {
var t = e.replace(et, tt);
return function (e) {
var n = typeof e.getAttributeNode !== A && e.getAttributeNode("id");
return n && n.value === t
}
}), i.find.TAG = T.tagNameNoComments ? function (e, n) {
return typeof n.getElementsByTagName !== A ? n.getElementsByTagName(e) : t
} : function (e, t) {
var n, r = [], i = 0, o = t.getElementsByTagName(e);
if ("*" === e) {
while (n = o[i++]) 1 === n.nodeType && r.push(n);
return r
}
return o
}, i.find.NAME = T.getByName && function (e, n) {
return typeof n.getElementsByName !== A ? n.getElementsByName(name) : t
}, i.find.CLASS = T.getByClassName && function (e, n) {
return typeof n.getElementsByClassName === A || d ? t : n.getElementsByClassName(e)
}, g = [], h = [":focus"], (T.qsa = rt(n.querySelectorAll)) && (at(function (e) {
e.innerHTML = "<select><option selected=''></option></select>", e.querySelectorAll("[selected]").length || h.push("\\[" + _ + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), e.querySelectorAll(":checked").length || h.push(":checked")
}), at(function (e) {
e.innerHTML = "<input type='hidden' i=''/>", e.querySelectorAll("[i^='']").length && h.push("[*^$]=" + _ + "*(?:\"\"|'')"), e.querySelectorAll(":enabled").length || h.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), h.push(",.*:")
})), (T.matchesSelector = rt(m = f.matchesSelector || f.mozMatchesSelector || f.webkitMatchesSelector || f.oMatchesSelector || f.msMatchesSelector)) && at(function (e) {
T.disconnectedMatch = m.call(e, "div"), m.call(e, "[s!='']:x"), g.push("!=", R)
}), h = RegExp(h.join("|")), g = RegExp(g.join("|")), y = rt(f.contains) || f.compareDocumentPosition ? function (e, t) {
var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode;
return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
} : function (e, t) {
if (t) while (t = t.parentNode) if (t === e) return !0;
return !1
}, v = f.compareDocumentPosition ? function (e, t) {
var r;
return e === t ? (u = !0, 0) : (r = t.compareDocumentPosition && e.compareDocumentPosition && e.compareDocumentPosition(t)) ? 1 & r || e.parentNode && 11 === e.parentNode.nodeType ? e === n || y(w, e) ? -1 : t === n || y(w, t) ? 1 : 0 : 4 & r ? -1 : 1 : e.compareDocumentPosition ? -1 : 1
} : function (e, t) {
var r, i = 0, o = e.parentNode, a = t.parentNode, s = [e], l = [t];
if (e === t) return u = !0, 0;
if (!o || !a) return e === n ? -1 : t === n ? 1 : o ? -1 : a ? 1 : 0;
if (o === a) return ut(e, t);
r = e;
while (r = r.parentNode) s.unshift(r);
r = t;
while (r = r.parentNode) l.unshift(r);
while (s[i] === l[i]) i++;
return i ? ut(s[i], l[i]) : s[i] === w ? -1 : l[i] === w ? 1 : 0
}, u = !1, [0, 0].sort(v), T.detectDuplicates = u, p) : p
}, st.matches = function (e, t) {
return st(e, null, null, t)
}, st.matchesSelector = function (e, t) {
if ((e.ownerDocument || e) !== p && c(e), t = t.replace(Z, "='$1']"), !(!T.matchesSelector || d || g && g.test(t) || h.test(t))) try {
var n = m.call(e, t);
if (n || T.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n
} catch (r) {
}
return st(t, p, null, [e]).length > 0
}, st.contains = function (e, t) {
return (e.ownerDocument || e) !== p && c(e), y(e, t)
}, st.attr = function (e, t) {
var n;
return (e.ownerDocument || e) !== p && c(e), d || (t = t.toLowerCase()), (n = i.attrHandle[t]) ? n(e) : d || T.attributes ? e.getAttribute(t) : ((n = e.getAttributeNode(t)) || e.getAttribute(t)) && e[t] === !0 ? t : n && n.specified ? n.value : null
}, st.error = function (e) {
throw Error("Syntax error, unrecognized expression: " + e)
}, st.uniqueSort = function (e) {
var t, n = [], r = 1, i = 0;
if (u = !T.detectDuplicates, e.sort(v), u) {
for (; t = e[r]; r++) t === e[r - 1] && (i = n.push(r));
while (i--) e.splice(n[i], 1)
}
return e
};
function ut(e, t) {
var n = t && e, r = n && (~t.sourceIndex || j) - (~e.sourceIndex || j);
if (r) return r;
if (n) while (n = n.nextSibling) if (n === t) return -1;
return e ? 1 : -1
}
function lt(e) {
return function (t) {
var n = t.nodeName.toLowerCase();
return "input" === n && t.type === e
}
}
function ct(e) {
return function (t) {
var n = t.nodeName.toLowerCase();
return ("input" === n || "button" === n) && t.type === e
}
}
function pt(e) {
return ot(function (t) {
return t = +t, ot(function (n, r) {
var i, o = e([], n.length, t), a = o.length;
while (a--) n[i = o[a]] && (n[i] = !(r[i] = n[i]))
})
})
}
o = st.getText = function (e) {
var t, n = "", r = 0, i = e.nodeType;
if (i) {
if (1 === i || 9 === i || 11 === i) {
if ("string" == typeof e.textContent) return e.textContent;
for (e = e.firstChild; e; e = e.nextSibling) n += o(e)
} else if (3 === i || 4 === i) return e.nodeValue
} else for (; t = e[r]; r++) n += o(t);
return n
}, i = st.selectors = {
cacheLength: 50,
createPseudo: ot,
match: U,
find: {},
relative: {
">": {dir: "parentNode", first: !0},
" ": {dir: "parentNode"},
"+": {dir: "previousSibling", first: !0},
"~": {dir: "previousSibling"}
},
preFilter: {
ATTR: function (e) {
return e[1] = e[1].replace(et, tt), e[3] = (e[4] || e[5] || "").replace(et, tt), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4)
}, CHILD: function (e) {
return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || st.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && st.error(e[0]), e
}, PSEUDO: function (e) {
var t, n = !e[5] && e[2];
return U.CHILD.test(e[0]) ? null : (e[4] ? e[2] = e[4] : n && z.test(n) && (t = ft(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3))
}
},
filter: {
TAG: function (e) {
return "*" === e ? function () {
return !0
} : (e = e.replace(et, tt).toLowerCase(), function (t) {
return t.nodeName && t.nodeName.toLowerCase() === e
})
}, CLASS: function (e) {
var t = k[e + " "];
return t || (t = RegExp("(^|" + _ + ")" + e + "(" + _ + "|$)")) && k(e, function (e) {
return t.test(e.className || typeof e.getAttribute !== A && e.getAttribute("class") || "")
})
}, ATTR: function (e, t, n) {
return function (r) {
var i = st.attr(r, e);
return null == i ? "!=" === t : t ? (i += "", "=" === t ? i === n : "!=" === t ? i !== n : "^=" === t ? n && 0 === i.indexOf(n) : "*=" === t ? n && i.indexOf(n) > -1 : "$=" === t ? n && i.slice(-n.length) === n : "~=" === t ? (" " + i + " ").indexOf(n) > -1 : "|=" === t ? i === n || i.slice(0, n.length + 1) === n + "-" : !1) : !0
}
}, CHILD: function (e, t, n, r, i) {
var o = "nth" !== e.slice(0, 3), a = "last" !== e.slice(-4), s = "of-type" === t;
return 1 === r && 0 === i ? function (e) {
return !!e.parentNode
} : function (t, n, u) {
var l, c, p, f, d, h, g = o !== a ? "nextSibling" : "previousSibling", m = t.parentNode,
y = s && t.nodeName.toLowerCase(), v = !u && !s;
if (m) {
if (o) {
while (g) {
p = t;
while (p = p[g]) if (s ? p.nodeName.toLowerCase() === y : 1 === p.nodeType) return !1;
h = g = "only" === e && !h && "nextSibling"
}
return !0
}
if (h = [a ? m.firstChild : m.lastChild], a && v) {
c = m[x] || (m[x] = {}), l = c[e] || [], d = l[0] === N && l[1], f = l[0] === N && l[2], p = d && m.childNodes[d];
while (p = ++d && p && p[g] || (f = d = 0) || h.pop()) if (1 === p.nodeType && ++f && p === t) {
c[e] = [N, d, f];
break
}
} else if (v && (l = (t[x] || (t[x] = {}))[e]) && l[0] === N) f = l[1]; else while (p = ++d && p && p[g] || (f = d = 0) || h.pop()) if ((s ? p.nodeName.toLowerCase() === y : 1 === p.nodeType) && ++f && (v && ((p[x] || (p[x] = {}))[e] = [N, f]), p === t)) break;
return f -= i, f === r || 0 === f % r && f / r >= 0
}
}
}, PSEUDO: function (e, t) {
var n, r = i.pseudos[e] || i.setFilters[e.toLowerCase()] || st.error("unsupported pseudo: " + e);
return r[x] ? r(t) : r.length > 1 ? (n = [e, e, "", t], i.setFilters.hasOwnProperty(e.toLowerCase()) ? ot(function (e, n) {
var i, o = r(e, t), a = o.length;
while (a--) i = M.call(e, o[a]), e[i] = !(n[i] = o[a])
}) : function (e) {
return r(e, 0, n)
}) : r
}
},
pseudos: {
not: ot(function (e) {
var t = [], n = [], r = s(e.replace(W, "$1"));
return r[x] ? ot(function (e, t, n, i) {
var o, a = r(e, null, i, []), s = e.length;
while (s--) (o = a[s]) && (e[s] = !(t[s] = o))
}) : function (e, i, o) {
return t[0] = e, r(t, null, o, n), !n.pop()
}
}), has: ot(function (e) {
return function (t) {
return st(e, t).length > 0
}
}), contains: ot(function (e) {
return function (t) {
return (t.textContent || t.innerText || o(t)).indexOf(e) > -1
}
}), lang: ot(function (e) {
return X.test(e || "") || st.error("unsupported lang: " + e), e = e.replace(et, tt).toLowerCase(), function (t) {
var n;
do if (n = d ? t.getAttribute("xml:lang") || t.getAttribute("lang") : t.lang) return n = n.toLowerCase(), n === e || 0 === n.indexOf(e + "-"); while ((t = t.parentNode) && 1 === t.nodeType);
return !1
}
}), target: function (t) {
var n = e.location && e.location.hash;
return n && n.slice(1) === t.id
}, root: function (e) {
return e === f
}, focus: function (e) {
return e === p.activeElement && (!p.hasFocus || p.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
}, enabled: function (e) {
return e.disabled === !1
}, disabled: function (e) {
return e.disabled === !0
}, checked: function (e) {
var t = e.nodeName.toLowerCase();
return "input" === t && !!e.checked || "option" === t && !!e.selected
}, selected: function (e) {
return e.parentNode && e.parentNode.selectedIndex, e.selected === !0
}, empty: function (e) {
for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeName > "@" || 3 === e.nodeType || 4 === e.nodeType) return !1;
return !0
}, parent: function (e) {
return !i.pseudos.empty(e)
}, header: function (e) {
return Q.test(e.nodeName)
}, input: function (e) {
return G.test(e.nodeName)
}, button: function (e) {
var t = e.nodeName.toLowerCase();
return "input" === t && "button" === e.type || "button" === t
}, text: function (e) {
var t;
return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || t.toLowerCase() === e.type)
}, first: pt(function () {
return [0]
}), last: pt(function (e, t) {
return [t - 1]
}), eq: pt(function (e, t, n) {
return [0 > n ? n + t : n]
}), even: pt(function (e, t) {
var n = 0;
for (; t > n; n += 2) e.push(n);
return e
}), odd: pt(function (e, t) {
var n = 1;
for (; t > n; n += 2) e.push(n);
return e
}), lt: pt(function (e, t, n) {
var r = 0 > n ? n + t : n;
for (; --r >= 0;) e.push(r);
return e
}), gt: pt(function (e, t, n) {
var r = 0 > n ? n + t : n;
for (; t > ++r;) e.push(r);
return e
})
}
};
for (n in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0}) i.pseudos[n] = lt(n);
for (n in{submit: !0, reset: !0}) i.pseudos[n] = ct(n);
function ft(e, t) {
var n, r, o, a, s, u, l, c = E[e + " "];
if (c) return t ? 0 : c.slice(0);
s = e, u = [], l = i.preFilter;
while (s) {
(!n || (r = $.exec(s))) && (r && (s = s.slice(r[0].length) || s), u.push(o = [])), n = !1, (r = I.exec(s)) && (n = r.shift(), o.push({
value: n,
type: r[0].replace(W, " ")
}), s = s.slice(n.length));
for (a in i.filter) !(r = U[a].exec(s)) || l[a] && !(r = l[a](r)) || (n = r.shift(), o.push({
value: n,
type: a,
matches: r
}), s = s.slice(n.length));
if (!n) break
}
return t ? s.length : s ? st.error(e) : E(e, u).slice(0)
}
function dt(e) {
var t = 0, n = e.length, r = "";
for (; n > t; t++) r += e[t].value;
return r
}
function ht(e, t, n) {
var i = t.dir, o = n && "parentNode" === i, a = C++;
return t.first ? function (t, n, r) {
while (t = t[i]) if (1 === t.nodeType || o) return e(t, n, r)
} : function (t, n, s) {
var u, l, c, p = N + " " + a;
if (s) {
while (t = t[i]) if ((1 === t.nodeType || o) && e(t, n, s)) return !0
} else while (t = t[i]) if (1 === t.nodeType || o) if (c = t[x] || (t[x] = {}), (l = c[i]) && l[0] === p) {
if ((u = l[1]) === !0 || u === r) return u === !0
} else if (l = c[i] = [p], l[1] = e(t, n, s) || r, l[1] === !0) return !0
}
}
function gt(e) {
return e.length > 1 ? function (t, n, r) {
var i = e.length;
while (i--) if (!e[i](t, n, r)) return !1;
return !0
} : e[0]
}
function mt(e, t, n, r, i) {
var o, a = [], s = 0, u = e.length, l = null != t;
for (; u > s; s++) (o = e[s]) && (!n || n(o, r, i)) && (a.push(o), l && t.push(s));
return a
}
function yt(e, t, n, r, i, o) {
return r && !r[x] && (r = yt(r)), i && !i[x] && (i = yt(i, o)), ot(function (o, a, s, u) {
var l, c, p, f = [], d = [], h = a.length, g = o || xt(t || "*", s.nodeType ? [s] : s, []),
m = !e || !o && t ? g : mt(g, f, e, s, u), y = n ? i || (o ? e : h || r) ? [] : a : m;
if (n && n(m, y, s, u), r) {
l = mt(y, d), r(l, [], s, u), c = l.length;
while (c--) (p = l[c]) && (y[d[c]] = !(m[d[c]] = p))
}
if (o) {
if (i || e) {
if (i) {
l = [], c = y.length;
while (c--) (p = y[c]) && l.push(m[c] = p);
i(null, y = [], l, u)
}
c = y.length;
while (c--) (p = y[c]) && (l = i ? M.call(o, p) : f[c]) > -1 && (o[l] = !(a[l] = p))
}
} else y = mt(y === a ? y.splice(h, y.length) : y), i ? i(null, a, y, u) : H.apply(a, y)
})
}
function vt(e) {
var t, n, r, o = e.length, a = i.relative[e[0].type], s = a || i.relative[" "], u = a ? 1 : 0,
c = ht(function (e) {
return e === t
}, s, !0), p = ht(function (e) {
return M.call(t, e) > -1
}, s, !0), f = [function (e, n, r) {
return !a && (r || n !== l) || ((t = n).nodeType ? c(e, n, r) : p(e, n, r))
}];
for (; o > u; u++) if (n = i.relative[e[u].type]) f = [ht(gt(f), n)]; else {
if (n = i.filter[e[u].type].apply(null, e[u].matches), n[x]) {
for (r = ++u; o > r; r++) if (i.relative[e[r].type]) break;
return yt(u > 1 && gt(f), u > 1 && dt(e.slice(0, u - 1)).replace(W, "$1"), n, r > u && vt(e.slice(u, r)), o > r && vt(e = e.slice(r)), o > r && dt(e))
}
f.push(n)
}
return gt(f)
}
function bt(e, t) {
var n = 0, o = t.length > 0, a = e.length > 0, s = function (s, u, c, f, d) {
var h, g, m, y = [], v = 0, b = "0", x = s && [], w = null != d, T = l,
C = s || a && i.find.TAG("*", d && u.parentNode || u), k = N += null == T ? 1 : Math.random() || .1;
for (w && (l = u !== p && u, r = n); null != (h = C[b]); b++) {
if (a && h) {
g = 0;
while (m = e[g++]) if (m(h, u, c)) {
f.push(h);
break
}
w && (N = k, r = ++n)
}
o && ((h = !m && h) && v--, s && x.push(h))
}
if (v += b, o && b !== v) {
g = 0;
while (m = t[g++]) m(x, y, u, c);
if (s) {
if (v > 0) while (b--) x[b] || y[b] || (y[b] = L.call(f));
y = mt(y)
}
H.apply(f, y), w && !s && y.length > 0 && v + t.length > 1 && st.uniqueSort(f)
}
return w && (N = k, l = T), x
};
return o ? ot(s) : s
}
s = st.compile = function (e, t) {
var n, r = [], i = [], o = S[e + " "];
if (!o) {
t || (t = ft(e)), n = t.length;
while (n--) o = vt(t[n]), o[x] ? r.push(o) : i.push(o);
o = S(e, bt(i, r))
}
return o
};
function xt(e, t, n) {
var r = 0, i = t.length;
for (; i > r; r++) st(e, t[r], n);
return n
}
function wt(e, t, n, r) {
var o, a, u, l, c, p = ft(e);
if (!r && 1 === p.length) {
if (a = p[0] = p[0].slice(0), a.length > 2 && "ID" === (u = a[0]).type && 9 === t.nodeType && !d && i.relative[a[1].type]) {
if (t = i.find.ID(u.matches[0].replace(et, tt), t)[0], !t) return n;
e = e.slice(a.shift().value.length)
}
o = U.needsContext.test(e) ? 0 : a.length;
while (o--) {
if (u = a[o], i.relative[l = u.type]) break;
if ((c = i.find[l]) && (r = c(u.matches[0].replace(et, tt), V.test(a[0].type) && t.parentNode || t))) {
if (a.splice(o, 1), e = r.length && dt(a), !e) return H.apply(n, q.call(r, 0)), n;
break
}
}
}
return s(e, p)(r, t, d, n, V.test(e)), n
}
i.pseudos.nth = i.pseudos.eq;
function Tt() {
}
i.filters = Tt.prototype = i.pseudos, i.setFilters = new Tt, c(), st.attr = b.attr, b.find = st, b.expr = st.selectors, b.expr[":"] = b.expr.pseudos, b.unique = st.uniqueSort, b.text = st.getText, b.isXMLDoc = st.isXML, b.contains = st.contains
}(e);
var at = /Until$/, st = /^(?:parents|prev(?:Until|All))/, ut = /^.[^:#\[\.,]*$/, lt = b.expr.match.needsContext,
ct = {children: !0, contents: !0, next: !0, prev: !0};
b.fn.extend({
find: function (e) {
var t, n, r, i = this.length;
if ("string" != typeof e) return r = this, this.pushStack(b(e).filter(function () {
for (t = 0; i > t; t++) if (b.contains(r[t], this)) return !0
}));
for (n = [], t = 0; i > t; t++) b.find(e, this[t], n);
return n = this.pushStack(i > 1 ? b.unique(n) : n), n.selector = (this.selector ? this.selector + " " : "") + e, n
}, has: function (e) {
var t, n = b(e, this), r = n.length;
return this.filter(function () {
for (t = 0; r > t; t++) if (b.contains(this, n[t])) return !0
})
}, not: function (e) {
return this.pushStack(ft(this, e, !1))
}, filter: function (e) {
return this.pushStack(ft(this, e, !0))
}, is: function (e) {
return !!e && ("string" == typeof e ? lt.test(e) ? b(e, this.context).index(this[0]) >= 0 : b.filter(e, this).length > 0 : this.filter(e).length > 0)
}, closest: function (e, t) {
var n, r = 0, i = this.length, o = [], a = lt.test(e) || "string" != typeof e ? b(e, t || this.context) : 0;
for (; i > r; r++) {
n = this[r];
while (n && n.ownerDocument && n !== t && 11 !== n.nodeType) {
if (a ? a.index(n) > -1 : b.find.matchesSelector(n, e)) {
o.push(n);
break
}
n = n.parentNode
}
}
return this.pushStack(o.length > 1 ? b.unique(o) : o)
}, index: function (e) {
return e ? "string" == typeof e ? b.inArray(this[0], b(e)) : b.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
}, add: function (e, t) {
var n = "string" == typeof e ? b(e, t) : b.makeArray(e && e.nodeType ? [e] : e), r = b.merge(this.get(), n);
return this.pushStack(b.unique(r))
}, addBack: function (e) {
return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
}
}), b.fn.andSelf = b.fn.addBack;
function pt(e, t) {
do e = e[t]; while (e && 1 !== e.nodeType);
return e
}
b.each({
parent: function (e) {
var t = e.parentNode;
return t && 11 !== t.nodeType ? t : null
}, parents: function (e) {
return b.dir(e, "parentNode")
}, parentsUntil: function (e, t, n) {
return b.dir(e, "parentNode", n)
}, next: function (e) {
return pt(e, "nextSibling")
}, prev: function (e) {
return pt(e, "previousSibling")
}, nextAll: function (e) {
return b.dir(e, "nextSibling")
}, prevAll: function (e) {
return b.dir(e, "previousSibling")
}, nextUntil: function (e, t, n) {
return b.dir(e, "nextSibling", n)
}, prevUntil: function (e, t, n) {
return b.dir(e, "previousSibling", n)
}, siblings: function (e) {
return b.sibling((e.parentNode || {}).firstChild, e)
}, children: function (e) {
return b.sibling(e.firstChild)
}, contents: function (e) {
return b.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : b.merge([], e.childNodes)
}
}, function (e, t) {
b.fn[e] = function (n, r) {
var i = b.map(this, t, n);
return at.test(e) || (r = n), r && "string" == typeof r && (i = b.filter(r, i)), i = this.length > 1 && !ct[e] ? b.unique(i) : i, this.length > 1 && st.test(e) && (i = i.reverse()), this.pushStack(i)
}
}), b.extend({
filter: function (e, t, n) {
return n && (e = ":not(" + e + ")"), 1 === t.length ? b.find.matchesSelector(t[0], e) ? [t[0]] : [] : b.find.matches(e, t)
}, dir: function (e, n, r) {
var i = [], o = e[n];
while (o && 9 !== o.nodeType && (r === t || 1 !== o.nodeType || !b(o).is(r))) 1 === o.nodeType && i.push(o), o = o[n];
return i
}, sibling: function (e, t) {
var n = [];
for (; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
return n
}
});
function ft(e, t, n) {
if (t = t || 0, b.isFunction(t)) return b.grep(e, function (e, r) {
var i = !!t.call(e, r, e);
return i === n
});
if (t.nodeType) return b.grep(e, function (e) {
return e === t === n
});
if ("string" == typeof t) {
var r = b.grep(e, function (e) {
return 1 === e.nodeType
});
if (ut.test(t)) return b.filter(t, r, !n);
t = b.filter(t, r)
}
return b.grep(e, function (e) {
return b.inArray(e, t) >= 0 === n
})
}
function dt(e) {
var t = ht.split("|"), n = e.createDocumentFragment();
if (n.createElement) while (t.length) n.createElement(t.pop());
return n
}
var ht = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
gt = / jQuery\d+="(?:null|\d+)"/g, mt = RegExp("<(?:" + ht + ")[\\s/>]", "i"), yt = /^\s+/,
vt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, bt = /<([\w:]+)/,
xt = /<tbody/i, wt = /<|&#?\w+;/, Tt = /<(?:script|style|link)/i, Nt = /^(?:checkbox|radio)$/i,
Ct = /checked\s*(?:[^=]|=\s*.checked.)/i, kt = /^$|\/(?:java|ecma)script/i, Et = /^true\/(.*)/,
St = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, At = {
option: [1, "<select multiple='multiple'>", "</select>"],
legend: [1, "<fieldset>", "</fieldset>"],
area: [1, "<map>", "</map>"],
param: [1, "<object>", "</object>"],
thead: [1, "<table>", "</table>"],
tr: [2, "<table><tbody>", "</tbody></table>"],
col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
_default: b.support.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
}, jt = dt(o), Dt = jt.appendChild(o.createElement("div"));
At.optgroup = At.option, At.tbody = At.tfoot = At.colgroup = At.caption = At.thead, At.th = At.td, b.fn.extend({
text: function (e) {
return b.access(this, function (e) {
return e === t ? b.text(this) : this.empty().append((this[0] && this[0].ownerDocument || o).createTextNode(e))
}, null, e, arguments.length)
}, wrapAll: function (e) {
if (b.isFunction(e)) return this.each(function (t) {
b(this).wrapAll(e.call(this, t))
});
if (this[0]) {
var t = b(e, this[0].ownerDocument).eq(0).clone(!0);
this[0].parentNode && t.insertBefore(this[0]), t.map(function () {
var e = this;
while (e.firstChild && 1 === e.firstChild.nodeType) e = e.firstChild;
return e
}).append(this)
}
return this
}, wrapInner: function (e) {
return b.isFunction(e) ? this.each(function (t) {
b(this).wrapInner(e.call(this, t))
}) : this.each(function () {
var t = b(this), n = t.contents();
n.length ? n.wrapAll(e) : t.append(e)
})
}, wrap: function (e) {
var t = b.isFunction(e);
return this.each(function (n) {
b(this).wrapAll(t ? e.call(this, n) : e)
})
}, unwrap: function () {
return this.parent().each(function () {
b.nodeName(this, "body") || b(this).replaceWith(this.childNodes)
}).end()
}, append: function () {
return this.domManip(arguments, !0, function (e) {
(1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && this.appendChild(e)
})
}, prepend: function () {
return this.domManip(arguments, !0, function (e) {
(1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && this.insertBefore(e, this.firstChild)
})
}, before: function () {
return this.domManip(arguments, !1, function (e) {
this.parentNode && this.parentNode.insertBefore(e, this)
})
}, after: function () {
return this.domManip(arguments, !1, function (e) {
this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
})
}, remove: function (e, t) {
var n, r = 0;
for (; null != (n = this[r]); r++) (!e || b.filter(e, [n]).length > 0) && (t || 1 !== n.nodeType || b.cleanData(Ot(n)), n.parentNode && (t && b.contains(n.ownerDocument, n) && Mt(Ot(n, "script")), n.parentNode.removeChild(n)));
return this
}, empty: function () {
var e, t = 0;
for (; null != (e = this[t]); t++) {
1 === e.nodeType && b.cleanData(Ot(e, !1));
while (e.firstChild) e.removeChild(e.firstChild);
e.options && b.nodeName(e, "select") && (e.options.length = 0)
}
return this
}, clone: function (e, t) {
return e = null == e ? !1 : e, t = null == t ? e : t, this.map(function () {
return b.clone(this, e, t)
})
}, html: function (e) {
return b.access(this, function (e) {
var n = this[0] || {}, r = 0, i = this.length;
if (e === t) return 1 === n.nodeType ? n.innerHTML.replace(gt, "") : t;
if (!("string" != typeof e || Tt.test(e) || !b.support.htmlSerialize && mt.test(e) || !b.support.leadingWhitespace && yt.test(e) || At[(bt.exec(e) || ["", ""])[1].toLowerCase()])) {
e = e.replace(vt, "<$1></$2>");
try {
for (; i > r; r++) n = this[r] || {}, 1 === n.nodeType && (b.cleanData(Ot(n, !1)), n.innerHTML = e);
n = 0
} catch (o) {
}
}
n && this.empty().append(e)
}, null, e, arguments.length)
}, replaceWith: function (e) {
var t = b.isFunction(e);
return t || "string" == typeof e || (e = b(e).not(this).detach()), this.domManip([e], !0, function (e) {
var t = this.nextSibling, n = this.parentNode;
n && (b(this).remove(), n.insertBefore(e, t))
})
}, detach: function (e) {
return this.remove(e, !0)
}, domManip: function (e, n, r) {
e = f.apply([], e);
var i, o, a, s, u, l, c = 0, p = this.length, d = this, h = p - 1, g = e[0], m = b.isFunction(g);
if (m || !(1 >= p || "string" != typeof g || b.support.checkClone) && Ct.test(g)) return this.each(function (i) {
var o = d.eq(i);
m && (e[0] = g.call(this, i, n ? o.html() : t)), o.domManip(e, n, r)
});
if (p && (l = b.buildFragment(e, this[0].ownerDocument, !1, this), i = l.firstChild, 1 === l.childNodes.length && (l = i), i)) {
for (n = n && b.nodeName(i, "tr"), s = b.map(Ot(l, "script"), Ht), a = s.length; p > c; c++) o = l, c !== h && (o = b.clone(o, !0, !0), a && b.merge(s, Ot(o, "script"))), r.call(n && b.nodeName(this[c], "table") ? Lt(this[c], "tbody") : this[c], o, c);
if (a) for (u = s[s.length - 1].ownerDocument, b.map(s, qt), c = 0; a > c; c++) o = s[c], kt.test(o.type || "") && !b._data(o, "globalEval") && b.contains(u, o) && (o.src ? b.ajax({
url: o.src,
type: "GET",
dataType: "script",
async: !1,
global: !1,
"throws": !0
}) : b.globalEval((o.text || o.textContent || o.innerHTML || "").replace(St, "")));
l = i = null
}
return this
}
});
function Lt(e, t) {
return e.getElementsByTagName(t)[0] || e.appendChild(e.ownerDocument.createElement(t))
}
function Ht(e) {
var t = e.getAttributeNode("type");
return e.type = (t && t.specified) + "/" + e.type, e
}
function qt(e) {
var t = Et.exec(e.type);
return t ? e.type = t[1] : e.removeAttribute("type"), e
}
function Mt(e, t) {
var n, r = 0;
for (; null != (n = e[r]); r++) b._data(n, "globalEval", !t || b._data(t[r], "globalEval"))
}
function _t(e, t) {
if (1 === t.nodeType && b.hasData(e)) {
var n, r, i, o = b._data(e), a = b._data(t, o), s = o.events;
if (s) {
delete a.handle, a.events = {};
for (n in s) for (r = 0, i = s[n].length; i > r; r++) b.event.add(t, n, s[n][r])
}
a.data && (a.data = b.extend({}, a.data))
}
}
function Ft(e, t) {
var n, r, i;
if (1 === t.nodeType) {
if (n = t.nodeName.toLowerCase(), !b.support.noCloneEvent && t[b.expando]) {
i = b._data(t);
for (r in i.events) b.removeEvent(t, r, i.handle);
t.removeAttribute(b.expando)
}
"script" === n && t.text !== e.text ? (Ht(t).text = e.text, qt(t)) : "object" === n ? (t.parentNode && (t.outerHTML = e.outerHTML), b.support.html5Clone && e.innerHTML && !b.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : "input" === n && Nt.test(e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : "option" === n ? t.defaultSelected = t.selected = e.defaultSelected : ("input" === n || "textarea" === n) && (t.defaultValue = e.defaultValue)
}
}
b.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function (e, t) {
b.fn[e] = function (e) {
var n, r = 0, i = [], o = b(e), a = o.length - 1;
for (; a >= r; r++) n = r === a ? this : this.clone(!0), b(o[r])[t](n), d.apply(i, n.get());
return this.pushStack(i)
}
});
function Ot(e, n) {
var r, o, a = 0,
s = typeof e.getElementsByTagName !== i ? e.getElementsByTagName(n || "*") : typeof e.querySelectorAll !== i ? e.querySelectorAll(n || "*") : t;
if (!s) for (s = [], r = e.childNodes || e; null != (o = r[a]); a++) !n || b.nodeName(o, n) ? s.push(o) : b.merge(s, Ot(o, n));
return n === t || n && b.nodeName(e, n) ? b.merge([e], s) : s
}
function Bt(e) {
Nt.test(e.type) && (e.defaultChecked = e.checked)
}
b.extend({
clone: function (e, t, n) {
var r, i, o, a, s, u = b.contains(e.ownerDocument, e);
if (b.support.html5Clone || b.isXMLDoc(e) || !mt.test("<" + e.nodeName + ">") ? o = e.cloneNode(!0) : (Dt.innerHTML = e.outerHTML, Dt.removeChild(o = Dt.firstChild)), !(b.support.noCloneEvent && b.support.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || b.isXMLDoc(e))) for (r = Ot(o), s = Ot(e), a = 0; null != (i = s[a]); ++a) r[a] && Ft(i, r[a]);
if (t) if (n) for (s = s || Ot(e), r = r || Ot(o), a = 0; null != (i = s[a]); a++) _t(i, r[a]); else _t(e, o);
return r = Ot(o, "script"), r.length > 0 && Mt(r, !u && Ot(e, "script")), r = s = i = null, o
}, buildFragment: function (e, t, n, r) {
var i, o, a, s, u, l, c, p = e.length, f = dt(t), d = [], h = 0;
for (; p > h; h++) if (o = e[h], o || 0 === o) if ("object" === b.type(o)) b.merge(d, o.nodeType ? [o] : o); else if (wt.test(o)) {
s = s || f.appendChild(t.createElement("div")), u = (bt.exec(o) || ["", ""])[1].toLowerCase(), c = At[u] || At._default, s.innerHTML = c[1] + o.replace(vt, "<$1></$2>") + c[2], i = c[0];
while (i--) s = s.lastChild;
if (!b.support.leadingWhitespace && yt.test(o) && d.push(t.createTextNode(yt.exec(o)[0])), !b.support.tbody) {
o = "table" !== u || xt.test(o) ? "<table>" !== c[1] || xt.test(o) ? 0 : s : s.firstChild, i = o && o.childNodes.length;
while (i--) b.nodeName(l = o.childNodes[i], "tbody") && !l.childNodes.length && o.removeChild(l)
}
b.merge(d, s.childNodes), s.textContent = "";
while (s.firstChild) s.removeChild(s.firstChild);
s = f.lastChild
} else d.push(t.createTextNode(o));
s && f.removeChild(s), b.support.appendChecked || b.grep(Ot(d, "input"), Bt), h = 0;
while (o = d[h++]) if ((!r || -1 === b.inArray(o, r)) && (a = b.contains(o.ownerDocument, o), s = Ot(f.appendChild(o), "script"), a && Mt(s), n)) {
i = 0;
while (o = s[i++]) kt.test(o.type || "") && n.push(o)
}
return s = null, f
}, cleanData: function (e, t) {
var n, r, o, a, s = 0, u = b.expando, l = b.cache, p = b.support.deleteExpando, f = b.event.special;
for (; null != (n = e[s]); s++) if ((t || b.acceptData(n)) && (o = n[u], a = o && l[o])) {
if (a.events) for (r in a.events) f[r] ? b.event.remove(n, r) : b.removeEvent(n, r, a.handle);
l[o] && (delete l[o], p ? delete n[u] : typeof n.removeAttribute !== i ? n.removeAttribute(u) : n[u] = null, c.push(o))
}
}
});
var Pt, Rt, Wt, $t = /alpha\([^)]*\)/i, It = /opacity\s*=\s*([^)]*)/, zt = /^(top|right|bottom|left)$/,
Xt = /^(none|table(?!-c[ea]).+)/, Ut = /^margin/, Vt = RegExp("^(" + x + ")(.*)$", "i"),
Yt = RegExp("^(" + x + ")(?!px)[a-z%]+$", "i"), Jt = RegExp("^([+-])=(" + x + ")", "i"), Gt = {BODY: "block"},
Qt = {position: "absolute", visibility: "hidden", display: "block"}, Kt = {letterSpacing: 0, fontWeight: 400},
Zt = ["Top", "Right", "Bottom", "Left"], en = ["Webkit", "O", "Moz", "ms"];
function tn(e, t) {
if (t in e) return t;
var n = t.charAt(0).toUpperCase() + t.slice(1), r = t, i = en.length;
while (i--) if (t = en[i] + n, t in e) return t;
return r
}
function nn(e, t) {
return e = t || e, "none" === b.css(e, "display") || !b.contains(e.ownerDocument, e)
}
function rn(e, t) {
var n, r, i, o = [], a = 0, s = e.length;
for (; s > a; a++) r = e[a], r.style && (o[a] = b._data(r, "olddisplay"), n = r.style.display, t ? (o[a] || "none" !== n || (r.style.display = ""), "" === r.style.display && nn(r) && (o[a] = b._data(r, "olddisplay", un(r.nodeName)))) : o[a] || (i = nn(r), (n && "none" !== n || !i) && b._data(r, "olddisplay", i ? n : b.css(r, "display"))));
for (a = 0; s > a; a++) r = e[a], r.style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? o[a] || "" : "none"));
return e
}
b.fn.extend({
css: function (e, n) {
return b.access(this, function (e, n, r) {
var i, o, a = {}, s = 0;
if (b.isArray(n)) {
for (o = Rt(e), i = n.length; i > s; s++) a[n[s]] = b.css(e, n[s], !1, o);
return a
}
return r !== t ? b.style(e, n, r) : b.css(e, n)
}, e, n, arguments.length > 1)
}, show: function () {
return rn(this, !0)
}, hide: function () {
return rn(this)
}, toggle: function (e) {
var t = "boolean" == typeof e;
return this.each(function () {
(t ? e : nn(this)) ? b(this).show() : b(this).hide()
})
}
}), b.extend({
cssHooks: {
opacity: {
get: function (e, t) {
if (t) {
var n = Wt(e, "opacity");
return "" === n ? "1" : n
}
}
}
},
cssNumber: {
columnCount: !0,
fillOpacity: !0,
fontWeight: !0,
lineHeight: !0,
opacity: !0,
orphans: !0,
widows: !0,
zIndex: !0,
zoom: !0
},
cssProps: {"float": b.support.cssFloat ? "cssFloat" : "styleFloat"},
style: function (e, n, r, i) {
if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
var o, a, s, u = b.camelCase(n), l = e.style;
if (n = b.cssProps[u] || (b.cssProps[u] = tn(l, u)), s = b.cssHooks[n] || b.cssHooks[u], r === t) return s && "get" in s && (o = s.get(e, !1, i)) !== t ? o : l[n];
if (a = typeof r, "string" === a && (o = Jt.exec(r)) && (r = (o[1] + 1) * o[2] + parseFloat(b.css(e, n)), a = "number"), !(null == r || "number" === a && isNaN(r) || ("number" !== a || b.cssNumber[u] || (r += "px"), b.support.clearCloneStyle || "" !== r || 0 !== n.indexOf("background") || (l[n] = "inherit"), s && "set" in s && (r = s.set(e, r, i)) === t))) try {
l[n] = r
} catch (c) {
}
}
},
css: function (e, n, r, i) {
var o, a, s, u = b.camelCase(n);
return n = b.cssProps[u] || (b.cssProps[u] = tn(e.style, u)), s = b.cssHooks[n] || b.cssHooks[u], s && "get" in s && (a = s.get(e, !0, r)), a === t && (a = Wt(e, n, i)), "normal" === a && n in Kt && (a = Kt[n]), "" === r || r ? (o = parseFloat(a), r === !0 || b.isNumeric(o) ? o || 0 : a) : a
},
swap: function (e, t, n, r) {
var i, o, a = {};
for (o in t) a[o] = e.style[o], e.style[o] = t[o];
i = n.apply(e, r || []);
for (o in t) e.style[o] = a[o];
return i
}
}), e.getComputedStyle ? (Rt = function (t) {
return e.getComputedStyle(t, null)
}, Wt = function (e, n, r) {
var i, o, a, s = r || Rt(e), u = s ? s.getPropertyValue(n) || s[n] : t, l = e.style;
return s && ("" !== u || b.contains(e.ownerDocument, e) || (u = b.style(e, n)), Yt.test(u) && Ut.test(n) && (i = l.width, o = l.minWidth, a = l.maxWidth, l.minWidth = l.maxWidth = l.width = u, u = s.width, l.width = i, l.minWidth = o, l.maxWidth = a)), u
}) : o.documentElement.currentStyle && (Rt = function (e) {
return e.currentStyle
}, Wt = function (e, n, r) {
var i, o, a, s = r || Rt(e), u = s ? s[n] : t, l = e.style;
return null == u && l && l[n] && (u = l[n]), Yt.test(u) && !zt.test(n) && (i = l.left, o = e.runtimeStyle, a = o && o.left, a && (o.left = e.currentStyle.left), l.left = "fontSize" === n ? "1em" : u, u = l.pixelLeft + "px", l.left = i, a && (o.left = a)), "" === u ? "auto" : u
});
function on(e, t, n) {
var r = Vt.exec(t);
return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t
}
function an(e, t, n, r, i) {
var o = n === (r ? "border" : "content") ? 4 : "width" === t ? 1 : 0, a = 0;
for (; 4 > o; o += 2) "margin" === n && (a += b.css(e, n + Zt[o], !0, i)), r ? ("content" === n && (a -= b.css(e, "padding" + Zt[o], !0, i)), "margin" !== n && (a -= b.css(e, "border" + Zt[o] + "Width", !0, i))) : (a += b.css(e, "padding" + Zt[o], !0, i), "padding" !== n && (a += b.css(e, "border" + Zt[o] + "Width", !0, i)));
return a
}
function sn(e, t, n) {
var r = !0, i = "width" === t ? e.offsetWidth : e.offsetHeight, o = Rt(e),
a = b.support.boxSizing && "border-box" === b.css(e, "boxSizing", !1, o);
if (0 >= i || null == i) {
if (i = Wt(e, t, o), (0 > i || null == i) && (i = e.style[t]), Yt.test(i)) return i;
r = a && (b.support.boxSizingReliable || i === e.style[t]), i = parseFloat(i) || 0
}
return i + an(e, t, n || (a ? "border" : "content"), r, o) + "px"
}
function un(e) {
var t = o, n = Gt[e];
return n || (n = ln(e, t), "none" !== n && n || (Pt = (Pt || b("<iframe frameborder='0' width='0' height='0'/>").css("cssText", "display:block !important")).appendTo(t.documentElement), t = (Pt[0].contentWindow || Pt[0].contentDocument).document, t.write("<!doctype html><html><body>"), t.close(), n = ln(e, t), Pt.detach()), Gt[e] = n), n
}
function ln(e, t) {
var n = b(t.createElement(e)).appendTo(t.body), r = b.css(n[0], "display");
return n.remove(), r
}
b.each(["height", "width"], function (e, n) {
b.cssHooks[n] = {
get: function (e, r, i) {
return r ? 0 === e.offsetWidth && Xt.test(b.css(e, "display")) ? b.swap(e, Qt, function () {
return sn(e, n, i)
}) : sn(e, n, i) : t
}, set: function (e, t, r) {
var i = r && Rt(e);
return on(e, t, r ? an(e, n, r, b.support.boxSizing && "border-box" === b.css(e, "boxSizing", !1, i), i) : 0)
}
}
}), b.support.opacity || (b.cssHooks.opacity = {
get: function (e, t) {
return It.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : ""
}, set: function (e, t) {
var n = e.style, r = e.currentStyle, i = b.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : "",
o = r && r.filter || n.filter || "";
n.zoom = 1, (t >= 1 || "" === t) && "" === b.trim(o.replace($t, "")) && n.removeAttribute && (n.removeAttribute("filter"), "" === t || r && !r.filter) || (n.filter = $t.test(o) ? o.replace($t, i) : o + " " + i)
}
}), b(function () {
b.support.reliableMarginRight || (b.cssHooks.marginRight = {
get: function (e, n) {
return n ? b.swap(e, {display: "inline-block"}, Wt, [e, "marginRight"]) : t
}
}), !b.support.pixelPosition && b.fn.position && b.each(["top", "left"], function (e, n) {
b.cssHooks[n] = {
get: function (e, r) {
return r ? (r = Wt(e, n), Yt.test(r) ? b(e).position()[n] + "px" : r) : t
}
}
})
}), b.expr && b.expr.filters && (b.expr.filters.hidden = function (e) {
return 0 >= e.offsetWidth && 0 >= e.offsetHeight || !b.support.reliableHiddenOffsets && "none" === (e.style && e.style.display || b.css(e, "display"))
}, b.expr.filters.visible = function (e) {
return !b.expr.filters.hidden(e)
}), b.each({margin: "", padding: "", border: "Width"}, function (e, t) {
b.cssHooks[e + t] = {
expand: function (n) {
var r = 0, i = {}, o = "string" == typeof n ? n.split(" ") : [n];
for (; 4 > r; r++) i[e + Zt[r] + t] = o[r] || o[r - 2] || o[0];
return i
}
}, Ut.test(e) || (b.cssHooks[e + t].set = on)
});
var cn = /%20/g, pn = /\[\]$/, fn = /\r?\n/g, dn = /^(?:submit|button|image|reset|file)$/i,
hn = /^(?:input|select|textarea|keygen)/i;
b.fn.extend({
serialize: function () {
return b.param(this.serializeArray())
}, serializeArray: function () {
return this.map(function () {
var e = b.prop(this, "elements");
return e ? b.makeArray(e) : this
}).filter(function () {
var e = this.type;
return this.name && !b(this).is(":disabled") && hn.test(this.nodeName) && !dn.test(e) && (this.checked || !Nt.test(e))
}).map(function (e, t) {
var n = b(this).val();
return null == n ? null : b.isArray(n) ? b.map(n, function (e) {
return {name: t.name, value: e.replace(fn, "\r\n")}
}) : {name: t.name, value: n.replace(fn, "\r\n")}
}).get()
}
}), b.param = function (e, n) {
var r, i = [], o = function (e, t) {
t = b.isFunction(t) ? t() : null == t ? "" : t, i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
};
if (n === t && (n = b.ajaxSettings && b.ajaxSettings.traditional), b.isArray(e) || e.jquery && !b.isPlainObject(e)) b.each(e, function () {
o(this.name, this.value)
}); else for (r in e) gn(r, e[r], n, o);
return i.join("&").replace(cn, "+")
};
function gn(e, t, n, r) {
var i;
if (b.isArray(t)) b.each(t, function (t, i) {
n || pn.test(e) ? r(e, i) : gn(e + "[" + ("object" == typeof i ? t : "") + "]", i, n, r)
}); else if (n || "object" !== b.type(t)) r(e, t); else for (i in t) gn(e + "[" + i + "]", t[i], n, r)
}
b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (e, t) {
b.fn[t] = function (e, n) {
return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
}
}), b.fn.hover = function (e, t) {
return this.mouseenter(e).mouseleave(t || e)
};
var mn, yn, vn = b.now(), bn = /\?/, xn = /#.*$/, wn = /([?&])_=[^&]*/, Tn = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
Nn = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, Cn = /^(?:GET|HEAD)$/, kn = /^\/\//,
En = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, Sn = b.fn.load, An = {}, jn = {}, Dn = "*/".concat("*");
try {
yn = a.href
} catch (Ln) {
yn = o.createElement("a"), yn.href = "", yn = yn.href
}
mn = En.exec(yn.toLowerCase()) || [];
function Hn(e) {
return function (t, n) {
"string" != typeof t && (n = t, t = "*");
var r, i = 0, o = t.toLowerCase().match(w) || [];
if (b.isFunction(n)) while (r = o[i++]) "+" === r[0] ? (r = r.slice(1) || "*", (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n)
}
}
function qn(e, n, r, i) {
var o = {}, a = e === jn;
function s(u) {
var l;
return o[u] = !0, b.each(e[u] || [], function (e, u) {
var c = u(n, r, i);
return "string" != typeof c || a || o[c] ? a ? !(l = c) : t : (n.dataTypes.unshift(c), s(c), !1)
}), l
}
return s(n.dataTypes[0]) || !o["*"] && s("*")
}
function Mn(e, n) {
var r, i, o = b.ajaxSettings.flatOptions || {};
for (i in n) n[i] !== t && ((o[i] ? e : r || (r = {}))[i] = n[i]);
return r && b.extend(!0, e, r), e
}
b.fn.load = function (e, n, r) {
if ("string" != typeof e && Sn) return Sn.apply(this, arguments);
var i, o, a, s = this, u = e.indexOf(" ");
return u >= 0 && (i = e.slice(u, e.length), e = e.slice(0, u)), b.isFunction(n) ? (r = n, n = t) : n && "object" == typeof n && (a = "POST"), s.length > 0 && b.ajax({
url: e,
type: a,
dataType: "html",
data: n
}).done(function (e) {
o = arguments, s.html(i ? b("<div>").append(b.parseHTML(e)).find(i) : e)
}).complete(r && function (e, t) {
s.each(r, o || [e.responseText, t, e])
}), this
}, b.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (e, t) {
b.fn[t] = function (e) {
return this.on(t, e)
}
}), b.each(["get", "post"], function (e, n) {
b[n] = function (e, r, i, o) {
return b.isFunction(r) && (o = o || i, i = r, r = t), b.ajax({
url: e,
type: n,
dataType: o,
data: r,
success: i
})
}
}), b.extend({
active: 0,
lastModified: {},
etag: {},
ajaxSettings: {
url: yn,
type: "GET",
isLocal: Nn.test(mn[1]),
global: !0,
processData: !0,
async: !0,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
accepts: {
"*": Dn,
text: "text/plain",
html: "text/html",
xml: "application/xml, text/xml",
json: "application/json, text/javascript"
},
contents: {xml: /xml/, html: /html/, json: /json/},
responseFields: {xml: "responseXML", text: "responseText"},
converters: {"* text": e.String, "text html": !0, "text json": b.parseJSON, "text xml": b.parseXML},
flatOptions: {url: !0, context: !0}
},
ajaxSetup: function (e, t) {
return t ? Mn(Mn(e, b.ajaxSettings), t) : Mn(b.ajaxSettings, e)
},
ajaxPrefilter: Hn(An),
ajaxTransport: Hn(jn),
ajax: function (e, n) {
"object" == typeof e && (n = e, e = t), n = n || {};
var r, i, o, a, s, u, l, c, p = b.ajaxSetup({}, n), f = p.context || p,
d = p.context && (f.nodeType || f.jquery) ? b(f) : b.event, h = b.Deferred(),
g = b.Callbacks("once memory"), m = p.statusCode || {}, y = {}, v = {}, x = 0, T = "canceled", N = {
readyState: 0, getResponseHeader: function (e) {
var t;
if (2 === x) {
if (!c) {
c = {};
while (t = Tn.exec(a)) c[t[1].toLowerCase()] = t[2]
}
t = c[e.toLowerCase()]
}
return null == t ? null : t
}, getAllResponseHeaders: function () {
return 2 === x ? a : null
}, setRequestHeader: function (e, t) {
var n = e.toLowerCase();
return x || (e = v[n] = v[n] || e, y[e] = t), this
}, overrideMimeType: function (e) {
return x || (p.mimeType = e), this
}, statusCode: function (e) {
var t;
if (e) if (2 > x) for (t in e) m[t] = [m[t], e[t]]; else N.always(e[N.status]);
return this
}, abort: function (e) {
var t = e || T;
return l && l.abort(t), k(0, t), this
}
};
if (h.promise(N).complete = g.add, N.success = N.done, N.error = N.fail, p.url = ((e || p.url || yn) + "").replace(xn, "").replace(kn, mn[1] + "//"), p.type = n.method || n.type || p.method || p.type, p.dataTypes = b.trim(p.dataType || "*").toLowerCase().match(w) || [""], null == p.crossDomain && (r = En.exec(p.url.toLowerCase()), p.crossDomain = !(!r || r[1] === mn[1] && r[2] === mn[2] && (r[3] || ("http:" === r[1] ? 80 : 443)) == (mn[3] || ("http:" === mn[1] ? 80 : 443)))), p.data && p.processData && "string" != typeof p.data && (p.data = b.param(p.data, p.traditional)), qn(An, p, n, N), 2 === x) return N;
u = p.global, u && 0 === b.active++ && b.event.trigger("ajaxStart"), p.type = p.type.toUpperCase(), p.hasContent = !Cn.test(p.type), o = p.url, p.hasContent || (p.data && (o = p.url += (bn.test(o) ? "&" : "?") + p.data, delete p.data), p.cache === !1 && (p.url = wn.test(o) ? o.replace(wn, "$1_=" + vn++) : o + (bn.test(o) ? "&" : "?") + "_=" + vn++)), p.ifModified && (b.lastModified[o] && N.setRequestHeader("If-Modified-Since", b.lastModified[o]), b.etag[o] && N.setRequestHeader("If-None-Match", b.etag[o])), (p.data && p.hasContent && p.contentType !== !1 || n.contentType) && N.setRequestHeader("Content-Type", p.contentType), N.setRequestHeader("Accept", p.dataTypes[0] && p.accepts[p.dataTypes[0]] ? p.accepts[p.dataTypes[0]] + ("*" !== p.dataTypes[0] ? ", " + Dn + "; q=0.01" : "") : p.accepts["*"]);
for (i in p.headers) N.setRequestHeader(i, p.headers[i]);
if (p.beforeSend && (p.beforeSend.call(f, N, p) === !1 || 2 === x)) return N.abort();
T = "abort";
for (i in{success: 1, error: 1, complete: 1}) N[i](p[i]);
if (l = qn(jn, p, n, N)) {
N.readyState = 1, u && d.trigger("ajaxSend", [N, p]), p.async && p.timeout > 0 && (s = setTimeout(function () {
N.abort("timeout")
}, p.timeout));
try {
x = 1, l.send(y, k)
} catch (C) {
if (!(2 > x)) throw C;
k(-1, C)
}
} else k(-1, "No Transport");
function k(e, n, r, i) {
var c, y, v, w, T, C = n;
2 !== x && (x = 2, s && clearTimeout(s), l = t, a = i || "", N.readyState = e > 0 ? 4 : 0, r && (w = _n(p, N, r)), e >= 200 && 300 > e || 304 === e ? (p.ifModified && (T = N.getResponseHeader("Last-Modified"), T && (b.lastModified[o] = T), T = N.getResponseHeader("etag"), T && (b.etag[o] = T)), 204 === e ? (c = !0, C = "nocontent") : 304 === e ? (c = !0, C = "notmodified") : (c = Fn(p, w), C = c.state, y = c.data, v = c.error, c = !v)) : (v = C, (e || !C) && (C = "error", 0 > e && (e = 0))), N.status = e, N.statusText = (n || C) + "", c ? h.resolveWith(f, [y, C, N]) : h.rejectWith(f, [N, C, v]), N.statusCode(m), m = t, u && d.trigger(c ? "ajaxSuccess" : "ajaxError", [N, p, c ? y : v]), g.fireWith(f, [N, C]), u && (d.trigger("ajaxComplete", [N, p]), --b.active || b.event.trigger("ajaxStop")))
}
return N
},
getScript: function (e, n) {
return b.get(e, t, n, "script")
},
getJSON: function (e, t, n) {
return b.get(e, t, n, "json")
}
});
function _n(e, n, r) {
var i, o, a, s, u = e.contents, l = e.dataTypes, c = e.responseFields;
for (s in c) s in r && (n[c[s]] = r[s]);
while ("*" === l[0]) l.shift(), o === t && (o = e.mimeType || n.getResponseHeader("Content-Type"));
if (o) for (s in u) if (u[s] && u[s].test(o)) {
l.unshift(s);
break
}
if (l[0] in r) a = l[0]; else {
for (s in r) {
if (!l[0] || e.converters[s + " " + l[0]]) {
a = s;
break
}
i || (i = s)
}
a = a || i
}
return a ? (a !== l[0] && l.unshift(a), r[a]) : t
}
function Fn(e, t) {
var n, r, i, o, a = {}, s = 0, u = e.dataTypes.slice(), l = u[0];
if (e.dataFilter && (t = e.dataFilter(t, e.dataType)), u[1]) for (i in e.converters) a[i.toLowerCase()] = e.converters[i];
for (; r = u[++s];) if ("*" !== r) {
if ("*" !== l && l !== r) {
if (i = a[l + " " + r] || a["* " + r], !i) for (n in a) if (o = n.split(" "), o[1] === r && (i = a[l + " " + o[0]] || a["* " + o[0]])) {
i === !0 ? i = a[n] : a[n] !== !0 && (r = o[0], u.splice(s--, 0, r));
break
}
if (i !== !0) if (i && e["throws"]) t = i(t); else try {
t = i(t)
} catch (c) {
return {state: "parsererror", error: i ? c : "No conversion from " + l + " to " + r}
}
}
l = r
}
return {state: "success", data: t}
}
b.ajaxSetup({
accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},
contents: {script: /(?:java|ecma)script/},
converters: {
"text script": function (e) {
return b.globalEval(e), e
}
}
}), b.ajaxPrefilter("script", function (e) {
e.cache === t && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1)
}), b.ajaxTransport("script", function (e) {
if (e.crossDomain) {
var n, r = o.head || b("head")[0] || o.documentElement;
return {
send: function (t, i) {
n = o.createElement("script"), n.async = !0, e.scriptCharset && (n.charset = e.scriptCharset), n.src = e.url, n.onload = n.onreadystatechange = function (e, t) {
(t || !n.readyState || /loaded|complete/.test(n.readyState)) && (n.onload = n.onreadystatechange = null, n.parentNode && n.parentNode.removeChild(n), n = null, t || i(200, "success"))
}, r.insertBefore(n, r.firstChild)
}, abort: function () {
n && n.onload(t, !0)
}
}
}
});
var On = [], Bn = /(=)\?(?=&|$)|\?\?/;
b.ajaxSetup({
jsonp: "callback", jsonpCallback: function () {
var e = On.pop() || b.expando + "_" + vn++;
return this[e] = !0, e
}
}), b.ajaxPrefilter("json jsonp", function (n, r, i) {
var o, a, s,
u = n.jsonp !== !1 && (Bn.test(n.url) ? "url" : "string" == typeof n.data && !(n.contentType || "").indexOf("application/x-www-form-urlencoded") && Bn.test(n.data) && "data");
return u || "jsonp" === n.dataTypes[0] ? (o = n.jsonpCallback = b.isFunction(n.jsonpCallback) ? n.jsonpCallback() : n.jsonpCallback, u ? n[u] = n[u].replace(Bn, "$1" + o) : n.jsonp !== !1 && (n.url += (bn.test(n.url) ? "&" : "?") + n.jsonp + "=" + o), n.converters["script json"] = function () {
return s || b.error(o + " was not called"), s[0]
}, n.dataTypes[0] = "json", a = e[o], e[o] = function () {
s = arguments
}, i.always(function () {
e[o] = a, n[o] && (n.jsonpCallback = r.jsonpCallback, On.push(o)), s && b.isFunction(a) && a(s[0]), s = a = t
}), "script") : t
});
var Pn, Rn, Wn = 0, $n = e.ActiveXObject && function () {
var e;
for (e in Pn) Pn[e](t, !0)
};
function In() {
try {
return new e.XMLHttpRequest
} catch (t) {
}
}
function zn() {
try {
return new e.ActiveXObject("Microsoft.XMLHTTP")
} catch (t) {
}
}
b.ajaxSettings.xhr = e.ActiveXObject ? function () {
return !this.isLocal && In() || zn()
} : In, Rn = b.ajaxSettings.xhr(), b.support.cors = !!Rn && "withCredentials" in Rn, Rn = b.support.ajax = !!Rn, Rn && b.ajaxTransport(function (n) {
if (!n.crossDomain || b.support.cors) {
var r;
return {
send: function (i, o) {
var a, s, u = n.xhr();
if (n.username ? u.open(n.type, n.url, n.async, n.username, n.password) : u.open(n.type, n.url, n.async), n.xhrFields) for (s in n.xhrFields) u[s] = n.xhrFields[s];
n.mimeType && u.overrideMimeType && u.overrideMimeType(n.mimeType), n.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
try {
for (s in i) u.setRequestHeader(s, i[s])
} catch (l) {
}
u.send(n.hasContent && n.data || null), r = function (e, i) {
var s, l, c, p;
try {
if (r && (i || 4 === u.readyState)) if (r = t, a && (u.onreadystatechange = b.noop, $n && delete Pn[a]), i) 4 !== u.readyState && u.abort(); else {
p = {}, s = u.status, l = u.getAllResponseHeaders(), "string" == typeof u.responseText && (p.text = u.responseText);
try {
c = u.statusText
} catch (f) {
c = ""
}
s || !n.isLocal || n.crossDomain ? 1223 === s && (s = 204) : s = p.text ? 200 : 404
}
} catch (d) {
i || o(-1, d)
}
p && o(s, c, p, l)
}, n.async ? 4 === u.readyState ? setTimeout(r) : (a = ++Wn, $n && (Pn || (Pn = {}, b(e).unload($n)), Pn[a] = r), u.onreadystatechange = r) : r()
}, abort: function () {
r && r(t, !0)
}
}
}
});
var Xn, Un, Vn = /^(?:toggle|show|hide)$/, Yn = RegExp("^(?:([+-])=|)(" + x + ")([a-z%]*)$", "i"),
Jn = /queueHooks$/, Gn = [nr], Qn = {
"*": [function (e, t) {
var n, r, i = this.createTween(e, t), o = Yn.exec(t), a = i.cur(), s = +a || 0, u = 1, l = 20;
if (o) {
if (n = +o[2], r = o[3] || (b.cssNumber[e] ? "" : "px"), "px" !== r && s) {
s = b.css(i.elem, e, !0) || n || 1;
do u = u || ".5", s /= u, b.style(i.elem, e, s + r); while (u !== (u = i.cur() / a) && 1 !== u && --l)
}
i.unit = r, i.start = s, i.end = o[1] ? s + (o[1] + 1) * n : n
}
return i
}]
};
function Kn() {
return setTimeout(function () {
Xn = t
}), Xn = b.now()
}
function Zn(e, t) {
b.each(t, function (t, n) {
var r = (Qn[t] || []).concat(Qn["*"]), i = 0, o = r.length;
for (; o > i; i++) if (r[i].call(e, t, n)) return
})
}
function er(e, t, n) {
var r, i, o = 0, a = Gn.length, s = b.Deferred().always(function () {
delete u.elem
}), u = function () {
if (i) return !1;
var t = Xn || Kn(), n = Math.max(0, l.startTime + l.duration - t), r = n / l.duration || 0, o = 1 - r,
a = 0, u = l.tweens.length;
for (; u > a; a++) l.tweens[a].run(o);
return s.notifyWith(e, [l, o, n]), 1 > o && u ? n : (s.resolveWith(e, [l]), !1)
}, l = s.promise({
elem: e,
props: b.extend({}, t),
opts: b.extend(!0, {specialEasing: {}}, n),
originalProperties: t,
originalOptions: n,
startTime: Xn || Kn(),
duration: n.duration,
tweens: [],
createTween: function (t, n) {
var r = b.Tween(e, l.opts, t, n, l.opts.specialEasing[t] || l.opts.easing);
return l.tweens.push(r), r
},
stop: function (t) {
var n = 0, r = t ? l.tweens.length : 0;
if (i) return this;
for (i = !0; r > n; n++) l.tweens[n].run(1);
return t ? s.resolveWith(e, [l, t]) : s.rejectWith(e, [l, t]), this
}
}), c = l.props;
for (tr(c, l.opts.specialEasing); a > o; o++) if (r = Gn[o].call(l, e, c, l.opts)) return r;
return Zn(l, c), b.isFunction(l.opts.start) && l.opts.start.call(e, l), b.fx.timer(b.extend(u, {
elem: e,
anim: l,
queue: l.opts.queue
})), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always)
}
function tr(e, t) {
var n, r, i, o, a;
for (i in e) if (r = b.camelCase(i), o = t[r], n = e[i], b.isArray(n) && (o = n[1], n = e[i] = n[0]), i !== r && (e[r] = n, delete e[i]), a = b.cssHooks[r], a && "expand" in a) {
n = a.expand(n), delete e[r];
for (i in n) i in e || (e[i] = n[i], t[i] = o)
} else t[r] = o
}
b.Animation = b.extend(er, {
tweener: function (e, t) {
b.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" ");
var n, r = 0, i = e.length;
for (; i > r; r++) n = e[r], Qn[n] = Qn[n] || [], Qn[n].unshift(t)
}, prefilter: function (e, t) {
t ? Gn.unshift(e) : Gn.push(e)
}
});
function nr(e, t, n) {
var r, i, o, a, s, u, l, c, p, f = this, d = e.style, h = {}, g = [], m = e.nodeType && nn(e);
n.queue || (c = b._queueHooks(e, "fx"), null == c.unqueued && (c.unqueued = 0, p = c.empty.fire, c.empty.fire = function () {
c.unqueued || p()
}), c.unqueued++, f.always(function () {
f.always(function () {
c.unqueued--, b.queue(e, "fx").length || c.empty.fire()
})
})), 1 === e.nodeType && ("height" in t || "width" in t) && (n.overflow = [d.overflow, d.overflowX, d.overflowY], "inline" === b.css(e, "display") && "none" === b.css(e, "float") && (b.support.inlineBlockNeedsLayout && "inline" !== un(e.nodeName) ? d.zoom = 1 : d.display = "inline-block")), n.overflow && (d.overflow = "hidden", b.support.shrinkWrapBlocks || f.always(function () {
d.overflow = n.overflow[0], d.overflowX = n.overflow[1], d.overflowY = n.overflow[2]
}));
for (i in t) if (a = t[i], Vn.exec(a)) {
if (delete t[i], u = u || "toggle" === a, a === (m ? "hide" : "show")) continue;
g.push(i)
}
if (o = g.length) {
s = b._data(e, "fxshow") || b._data(e, "fxshow", {}), "hidden" in s && (m = s.hidden), u && (s.hidden = !m), m ? b(e).show() : f.done(function () {
b(e).hide()
}), f.done(function () {
var t;
b._removeData(e, "fxshow");
for (t in h) b.style(e, t, h[t])
});
for (i = 0; o > i; i++) r = g[i], l = f.createTween(r, m ? s[r] : 0), h[r] = s[r] || b.style(e, r), r in s || (s[r] = l.start, m && (l.end = l.start, l.start = "width" === r || "height" === r ? 1 : 0))
}
}
function rr(e, t, n, r, i) {
return new rr.prototype.init(e, t, n, r, i)
}
b.Tween = rr, rr.prototype = {
constructor: rr, init: function (e, t, n, r, i, o) {
this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (b.cssNumber[n] ? "" : "px")
}, cur: function () {
var e = rr.propHooks[this.prop];
return e && e.get ? e.get(this) : rr.propHooks._default.get(this)
}, run: function (e) {
var t, n = rr.propHooks[this.prop];
return this.pos = t = this.options.duration ? b.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : rr.propHooks._default.set(this), this
}
}, rr.prototype.init.prototype = rr.prototype, rr.propHooks = {
_default: {
get: function (e) {
var t;
return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = b.css(e.elem, e.prop, ""), t && "auto" !== t ? t : 0) : e.elem[e.prop]
}, set: function (e) {
b.fx.step[e.prop] ? b.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[b.cssProps[e.prop]] || b.cssHooks[e.prop]) ? b.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
}
}
}, rr.propHooks.scrollTop = rr.propHooks.scrollLeft = {
set: function (e) {
e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
}
}, b.each(["toggle", "show", "hide"], function (e, t) {
var n = b.fn[t];
b.fn[t] = function (e, r, i) {
return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(ir(t, !0), e, r, i)
}
}), b.fn.extend({
fadeTo: function (e, t, n, r) {
return this.filter(nn).css("opacity", 0).show().end().animate({opacity: t}, e, n, r)
}, animate: function (e, t, n, r) {
var i = b.isEmptyObject(e), o = b.speed(t, n, r), a = function () {
var t = er(this, b.extend({}, e), o);
a.finish = function () {
t.stop(!0)
}, (i || b._data(this, "finish")) && t.stop(!0)
};
return a.finish = a, i || o.queue === !1 ? this.each(a) : this.queue(o.queue, a)
}, stop: function (e, n, r) {
var i = function (e) {
var t = e.stop;
delete e.stop, t(r)
};
return "string" != typeof e && (r = n, n = e, e = t), n && e !== !1 && this.queue(e || "fx", []), this.each(function () {
var t = !0, n = null != e && e + "queueHooks", o = b.timers, a = b._data(this);
if (n) a[n] && a[n].stop && i(a[n]); else for (n in a) a[n] && a[n].stop && Jn.test(n) && i(a[n]);
for (n = o.length; n--;) o[n].elem !== this || null != e && o[n].queue !== e || (o[n].anim.stop(r), t = !1, o.splice(n, 1));
(t || !r) && b.dequeue(this, e)
})
}, finish: function (e) {
return e !== !1 && (e = e || "fx"), this.each(function () {
var t, n = b._data(this), r = n[e + "queue"], i = n[e + "queueHooks"], o = b.timers,
a = r ? r.length : 0;
for (n.finish = !0, b.queue(this, e, []), i && i.cur && i.cur.finish && i.cur.finish.call(this), t = o.length; t--;) o[t].elem === this && o[t].queue === e && (o[t].anim.stop(!0), o.splice(t, 1));
for (t = 0; a > t; t++) r[t] && r[t].finish && r[t].finish.call(this);
delete n.finish
})
}
});
function ir(e, t) {
var n, r = {height: e}, i = 0;
for (t = t ? 1 : 0; 4 > i; i += 2 - t) n = Zt[i], r["margin" + n] = r["padding" + n] = e;
return t && (r.opacity = r.width = e), r
}
b.each({
slideDown: ir("show"),
slideUp: ir("hide"),
slideToggle: ir("toggle"),
fadeIn: {opacity: "show"},
fadeOut: {opacity: "hide"},
fadeToggle: {opacity: "toggle"}
}, function (e, t) {
b.fn[e] = function (e, n, r) {
return this.animate(t, e, n, r)
}
}), b.speed = function (e, t, n) {
var r = e && "object" == typeof e ? b.extend({}, e) : {
complete: n || !n && t || b.isFunction(e) && e,
duration: e,
easing: n && t || t && !b.isFunction(t) && t
};
return r.duration = b.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in b.fx.speeds ? b.fx.speeds[r.duration] : b.fx.speeds._default, (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function () {
b.isFunction(r.old) && r.old.call(this), r.queue && b.dequeue(this, r.queue)
}, r
}, b.easing = {
linear: function (e) {
return e
}, swing: function (e) {
return .5 - Math.cos(e * Math.PI) / 2
}
}, b.timers = [], b.fx = rr.prototype.init, b.fx.tick = function () {
var e, n = b.timers, r = 0;
for (Xn = b.now(); n.length > r; r++) e = n[r], e() || n[r] !== e || n.splice(r--, 1);
n.length || b.fx.stop(), Xn = t
}, b.fx.timer = function (e) {
e() && b.timers.push(e) && b.fx.start()
}, b.fx.interval = 13, b.fx.start = function () {
Un || (Un = setInterval(b.fx.tick, b.fx.interval))
}, b.fx.stop = function () {
clearInterval(Un), Un = null
}, b.fx.speeds = {
slow: 600,
fast: 200,
_default: 400
}, b.fx.step = {}, b.expr && b.expr.filters && (b.expr.filters.animated = function (e) {
return b.grep(b.timers, function (t) {
return e === t.elem
}).length
}), b.fn.offset = function (e) {
if (arguments.length) return e === t ? this : this.each(function (t) {
b.offset.setOffset(this, e, t)
});
var n, r, o = {top: 0, left: 0}, a = this[0], s = a && a.ownerDocument;
if (s) return n = s.documentElement, b.contains(n, a) ? (typeof a.getBoundingClientRect !== i && (o = a.getBoundingClientRect()), r = or(s), {
top: o.top + (r.pageYOffset || n.scrollTop) - (n.clientTop || 0),
left: o.left + (r.pageXOffset || n.scrollLeft) - (n.clientLeft || 0)
}) : o
}, b.offset = {
setOffset: function (e, t, n) {
var r = b.css(e, "position");
"static" === r && (e.style.position = "relative");
var i = b(e), o = i.offset(), a = b.css(e, "top"), s = b.css(e, "left"),
u = ("absolute" === r || "fixed" === r) && b.inArray("auto", [a, s]) > -1, l = {}, c = {}, p, f;
u ? (c = i.position(), p = c.top, f = c.left) : (p = parseFloat(a) || 0, f = parseFloat(s) || 0), b.isFunction(t) && (t = t.call(e, n, o)), null != t.top && (l.top = t.top - o.top + p), null != t.left && (l.left = t.left - o.left + f), "using" in t ? t.using.call(e, l) : i.css(l)
}
}, b.fn.extend({
position: function () {
if (this[0]) {
var e, t, n = {top: 0, left: 0}, r = this[0];
return "fixed" === b.css(r, "position") ? t = r.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), b.nodeName(e[0], "html") || (n = e.offset()), n.top += b.css(e[0], "borderTopWidth", !0), n.left += b.css(e[0], "borderLeftWidth", !0)), {
top: t.top - n.top - b.css(r, "marginTop", !0),
left: t.left - n.left - b.css(r, "marginLeft", !0)
}
}
}, offsetParent: function () {
return this.map(function () {
var e = this.offsetParent || o.documentElement;
while (e && !b.nodeName(e, "html") && "static" === b.css(e, "position")) e = e.offsetParent;
return e || o.documentElement
})
}
}), b.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (e, n) {
var r = /Y/.test(n);
b.fn[e] = function (i) {
return b.access(this, function (e, i, o) {
var a = or(e);
return o === t ? a ? n in a ? a[n] : a.document.documentElement[i] : e[i] : (a ? a.scrollTo(r ? b(a).scrollLeft() : o, r ? o : b(a).scrollTop()) : e[i] = o, t)
}, e, i, arguments.length, null)
}
});
function or(e) {
return b.isWindow(e) ? e : 9 === e.nodeType ? e.defaultView || e.parentWindow : !1
}
b.each({Height: "height", Width: "width"}, function (e, n) {
b.each({padding: "inner" + e, content: n, "": "outer" + e}, function (r, i) {
b.fn[i] = function (i, o) {
var a = arguments.length && (r || "boolean" != typeof i),
s = r || (i === !0 || o === !0 ? "margin" : "border");
return b.access(this, function (n, r, i) {
var o;
return b.isWindow(n) ? n.document.documentElement["client" + e] : 9 === n.nodeType ? (o = n.documentElement, Math.max(n.body["scroll" + e], o["scroll" + e], n.body["offset" + e], o["offset" + e], o["client" + e])) : i === t ? b.css(n, r, s) : b.style(n, r, i, s)
}, n, a ? i : t, a, null)
}
})
}), e.jQuery = e.$ = b, "function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function () {
return b
})
})(window);
/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
jQuery.migrateMute === void 0 && (jQuery.migrateMute = !0), function (e, t, n) {
function r(n) {
var r = t.console;
i[n] || (i[n] = !0, e.migrateWarnings.push(n), r && r.warn && !e.migrateMute && (r.warn("JQMIGRATE: " + n), e.migrateTrace && r.trace && r.trace()))
}
function a(t, a, i, o) {
if (Object.defineProperty) try {
return Object.defineProperty(t, a, {
configurable: !0, enumerable: !0, get: function () {
return r(o), i
}, set: function (e) {
r(o), i = e
}
}), n
} catch (s) {
}
e._definePropertyBroken = !0, t[a] = i
}
var i = {};
e.migrateWarnings = [], !e.migrateMute && t.console && t.console.log && t.console.log("JQMIGRATE: Logging is active"), e.migrateTrace === n && (e.migrateTrace = !0), e.migrateReset = function () {
i = {}, e.migrateWarnings.length = 0
}, "BackCompat" === document.compatMode && r("jQuery is not compatible with Quirks Mode");
var o = e("<input/>", {size: 1}).attr("size") && e.attrFn, s = e.attr,
u = e.attrHooks.value && e.attrHooks.value.get || function () {
return null
}, c = e.attrHooks.value && e.attrHooks.value.set || function () {
return n
}, l = /^(?:input|button)$/i, d = /^[238]$/,
p = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
f = /^(?:checked|selected)$/i;
a(e, "attrFn", o || {}, "jQuery.attrFn is deprecated"), e.attr = function (t, a, i, u) {
var c = a.toLowerCase(), g = t && t.nodeType;
return u && (4 > s.length && r("jQuery.fn.attr( props, pass ) is deprecated"), t && !d.test(g) && (o ? a in o : e.isFunction(e.fn[a]))) ? e(t)[a](i) : ("type" === a && i !== n && l.test(t.nodeName) && t.parentNode && r("Can't change the 'type' of an input or button in IE 6/7/8"), !e.attrHooks[c] && p.test(c) && (e.attrHooks[c] = {
get: function (t, r) {
var a, i = e.prop(t, r);
return i === !0 || "boolean" != typeof i && (a = t.getAttributeNode(r)) && a.nodeValue !== !1 ? r.toLowerCase() : n
}, set: function (t, n, r) {
var a;
return n === !1 ? e.removeAttr(t, r) : (a = e.propFix[r] || r, a in t && (t[a] = !0), t.setAttribute(r, r.toLowerCase())), r
}
}, f.test(c) && r("jQuery.fn.attr('" + c + "') may use property instead of attribute")), s.call(e, t, a, i))
}, e.attrHooks.value = {
get: function (e, t) {
var n = (e.nodeName || "").toLowerCase();
return "button" === n ? u.apply(this, arguments) : ("input" !== n && "option" !== n && r("jQuery.fn.attr('value') no longer gets properties"), t in e ? e.value : null)
}, set: function (e, t) {
var a = (e.nodeName || "").toLowerCase();
return "button" === a ? c.apply(this, arguments) : ("input" !== a && "option" !== a && r("jQuery.fn.attr('value', val) no longer sets properties"), e.value = t, n)
}
};
var g, h, v = e.fn.init, m = e.parseJSON, y = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
e.fn.init = function (t, n, a) {
var i;
return t && "string" == typeof t && !e.isPlainObject(n) && (i = y.exec(e.trim(t))) && i[0] && ("<" !== t.charAt(0) && r("$(html) HTML strings must start with '<' character"), i[3] && r("$(html) HTML text after last tag is ignored"), "#" === i[0].charAt(0) && (r("HTML string cannot start with a '#' character"), e.error("JQMIGRATE: Invalid selector string (XSS)")), n && n.context && (n = n.context), e.parseHTML) ? v.call(this, e.parseHTML(i[2], n, !0), n, a) : v.apply(this, arguments)
}, e.fn.init.prototype = e.fn, e.parseJSON = function (e) {
return e || null === e ? m.apply(this, arguments) : (r("jQuery.parseJSON requires a valid JSON string"), null)
}, e.uaMatch = function (e) {
e = e.toLowerCase();
var t = /(chrome)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || 0 > e.indexOf("compatible") && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e) || [];
return {browser: t[1] || "", version: t[2] || "0"}
}, e.browser || (g = e.uaMatch(navigator.userAgent), h = {}, g.browser && (h[g.browser] = !0, h.version = g.version), h.chrome ? h.webkit = !0 : h.webkit && (h.safari = !0), e.browser = h), a(e, "browser", e.browser, "jQuery.browser is deprecated"), e.sub = function () {
function t(e, n) {
return new t.fn.init(e, n)
}
e.extend(!0, t, this), t.superclass = this, t.fn = t.prototype = this(), t.fn.constructor = t, t.sub = this.sub, t.fn.init = function (r, a) {
return a && a instanceof e && !(a instanceof t) && (a = t(a)), e.fn.init.call(this, r, a, n)
}, t.fn.init.prototype = t.fn;
var n = t(document);
return r("jQuery.sub() is deprecated"), t
}, e.ajaxSetup({converters: {"text json": e.parseJSON}});
var b = e.fn.data;
e.fn.data = function (t) {
var a, i, o = this[0];
return !o || "events" !== t || 1 !== arguments.length || (a = e.data(o, t), i = e._data(o, t), a !== n && a !== i || i === n) ? b.apply(this, arguments) : (r("Use of jQuery.fn.data('events') is deprecated"), i)
};
var j = /\/(java|ecma)script/i, w = e.fn.andSelf || e.fn.addBack;
e.fn.andSelf = function () {
return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"), w.apply(this, arguments)
}, e.clean || (e.clean = function (t, a, i, o) {
a = a || document, a = !a.nodeType && a[0] || a, a = a.ownerDocument || a, r("jQuery.clean() is deprecated");
var s, u, c, l, d = [];
if (e.merge(d, e.buildFragment(t, a).childNodes), i) for (c = function (e) {
return !e.type || j.test(e.type) ? o ? o.push(e.parentNode ? e.parentNode.removeChild(e) : e) : i.appendChild(e) : n
}, s = 0; null != (u = d[s]); s++) e.nodeName(u, "script") && c(u) || (i.appendChild(u), u.getElementsByTagName !== n && (l = e.grep(e.merge([], u.getElementsByTagName("script")), c), d.splice.apply(d, [s + 1, 0].concat(l)), s += l.length));
return d
});
var Q = e.event.add, x = e.event.remove, k = e.event.trigger, N = e.fn.toggle, T = e.fn.live, M = e.fn.die,
S = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess", C = RegExp("\\b(?:" + S + ")\\b"),
H = /(?:^|\s)hover(\.\S+|)\b/, A = function (t) {
return "string" != typeof t || e.event.special.hover ? t : (H.test(t) && r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"), t && t.replace(H, "mouseenter$1 mouseleave$1"))
};
e.event.props && "attrChange" !== e.event.props[0] && e.event.props.unshift("attrChange", "attrName", "relatedNode", "srcElement"), e.event.dispatch && a(e.event, "handle", e.event.dispatch, "jQuery.event.handle is undocumented and deprecated"), e.event.add = function (e, t, n, a, i) {
e !== document && C.test(t) && r("AJAX events should be attached to document: " + t), Q.call(this, e, A(t || ""), n, a, i)
}, e.event.remove = function (e, t, n, r, a) {
x.call(this, e, A(t) || "", n, r, a)
}, e.fn.error = function () {
var e = Array.prototype.slice.call(arguments, 0);
return r("jQuery.fn.error() is deprecated"), e.splice(0, 0, "error"), arguments.length ? this.bind.apply(this, e) : (this.triggerHandler.apply(this, e), this)
}, e.fn.toggle = function (t, n) {
if (!e.isFunction(t) || !e.isFunction(n)) return N.apply(this, arguments);
r("jQuery.fn.toggle(handler, handler...) is deprecated");
var a = arguments, i = t.guid || e.guid++, o = 0, s = function (n) {
var r = (e._data(this, "lastToggle" + t.guid) || 0) % o;
return e._data(this, "lastToggle" + t.guid, r + 1), n.preventDefault(), a[r].apply(this, arguments) || !1
};
for (s.guid = i; a.length > o;) a[o++].guid = i;
return this.click(s)
}, e.fn.live = function (t, n, a) {
return r("jQuery.fn.live() is deprecated"), T ? T.apply(this, arguments) : (e(this.context).on(t, this.selector, n, a), this)
}, e.fn.die = function (t, n) {
return r("jQuery.fn.die() is deprecated"), M ? M.apply(this, arguments) : (e(this.context).off(t, this.selector || "**", n), this)
}, e.event.trigger = function (e, t, n, a) {
return n || C.test(e) || r("Global events are undocumented and deprecated"), k.call(this, e, t, n || document, a)
}, e.each(S.split("|"), function (t, n) {
e.event.special[n] = {
setup: function () {
var t = this;
return t !== document && (e.event.add(document, n + "." + e.guid, function () {
e.event.trigger(n, null, t, !0)
}), e._data(this, n, e.guid++)), !1
}, teardown: function () {
return this !== document && e.event.remove(document, n + "." + e._data(this, n)), !1
}
}
})
}(jQuery, window);
/*! jQuery UI - v1.10.3 - 2013-07-31
* http://jqueryui.com
* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.sortable.js, jquery.ui.datepicker.js, jquery.ui.slider.js, jquery.ui.effect.js, jquery.ui.effect-slide.js
* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
(function (e, t) {
function i(t, i) {
var a, n, r, o = t.nodeName.toLowerCase();
return "area" === o ? (a = t.parentNode, n = a.name, t.href && n && "map" === a.nodeName.toLowerCase() ? (r = e("img[usemap=#" + n + "]")[0], !!r && s(r)) : !1) : (/input|select|textarea|button|object/.test(o) ? !t.disabled : "a" === o ? t.href || i : i) && s(t)
}
function s(t) {
return e.expr.filters.visible(t) && !e(t).parents().addBack().filter(function () {
return "hidden" === e.css(this, "visibility")
}).length
}
var a = 0, n = /^ui-id-\d+$/;
e.ui = e.ui || {}, e.extend(e.ui, {
version: "1.10.3",
keyCode: {
BACKSPACE: 8,
COMMA: 188,
DELETE: 46,
DOWN: 40,
END: 35,
ENTER: 13,
ESCAPE: 27,
HOME: 36,
LEFT: 37,
NUMPAD_ADD: 107,
NUMPAD_DECIMAL: 110,
NUMPAD_DIVIDE: 111,
NUMPAD_ENTER: 108,
NUMPAD_MULTIPLY: 106,
NUMPAD_SUBTRACT: 109,
PAGE_DOWN: 34,
PAGE_UP: 33,
PERIOD: 190,
RIGHT: 39,
SPACE: 32,
TAB: 9,
UP: 38
}
}), e.fn.extend({
focus: function (t) {
return function (i, s) {
return "number" == typeof i ? this.each(function () {
var t = this;
setTimeout(function () {
e(t).focus(), s && s.call(t)
}, i)
}) : t.apply(this, arguments)
}
}(e.fn.focus), scrollParent: function () {
var t;
return t = e.ui.ie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? this.parents().filter(function () {
return /(relative|absolute|fixed)/.test(e.css(this, "position")) && /(auto|scroll)/.test(e.css(this, "overflow") + e.css(this, "overflow-y") + e.css(this, "overflow-x"))
}).eq(0) : this.parents().filter(function () {
return /(auto|scroll)/.test(e.css(this, "overflow") + e.css(this, "overflow-y") + e.css(this, "overflow-x"))
}).eq(0), /fixed/.test(this.css("position")) || !t.length ? e(document) : t
}, zIndex: function (i) {
if (i !== t) return this.css("zIndex", i);
if (this.length) for (var s, a, n = e(this[0]); n.length && n[0] !== document;) {
if (s = n.css("position"), ("absolute" === s || "relative" === s || "fixed" === s) && (a = parseInt(n.css("zIndex"), 10), !isNaN(a) && 0 !== a)) return a;
n = n.parent()
}
return 0
}, uniqueId: function () {
return this.each(function () {
this.id || (this.id = "ui-id-" + ++a)
})
}, removeUniqueId: function () {
return this.each(function () {
n.test(this.id) && e(this).removeAttr("id")
})
}
}), e.extend(e.expr[":"], {
data: e.expr.createPseudo ? e.expr.createPseudo(function (t) {
return function (i) {
return !!e.data(i, t)
}
}) : function (t, i, s) {
return !!e.data(t, s[3])
}, focusable: function (t) {
return i(t, !isNaN(e.attr(t, "tabindex")))
}, tabbable: function (t) {
var s = e.attr(t, "tabindex"), a = isNaN(s);
return (a || s >= 0) && i(t, !a)
}
}), e("<a>").outerWidth(1).jquery || e.each(["Width", "Height"], function (i, s) {
function a(t, i, s, a) {
return e.each(n, function () {
i -= parseFloat(e.css(t, "padding" + this)) || 0, s && (i -= parseFloat(e.css(t, "border" + this + "Width")) || 0), a && (i -= parseFloat(e.css(t, "margin" + this)) || 0)
}), i
}
var n = "Width" === s ? ["Left", "Right"] : ["Top", "Bottom"], r = s.toLowerCase(), o = {
innerWidth: e.fn.innerWidth,
innerHeight: e.fn.innerHeight,
outerWidth: e.fn.outerWidth,
outerHeight: e.fn.outerHeight
};
e.fn["inner" + s] = function (i) {
return i === t ? o["inner" + s].call(this) : this.each(function () {
e(this).css(r, a(this, i) + "px")
})
}, e.fn["outer" + s] = function (t, i) {
return "number" != typeof t ? o["outer" + s].call(this, t) : this.each(function () {
e(this).css(r, a(this, t, !0, i) + "px")
})
}
}), e.fn.addBack || (e.fn.addBack = function (e) {
return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
}), e("<a>").data("a-b", "a").removeData("a-b").data("a-b") && (e.fn.removeData = function (t) {
return function (i) {
return arguments.length ? t.call(this, e.camelCase(i)) : t.call(this)
}
}(e.fn.removeData)), e.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), e.support.selectstart = "onselectstart" in document.createElement("div"), e.fn.extend({
disableSelection: function () {
return this.bind((e.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function (e) {
e.preventDefault()
})
}, enableSelection: function () {
return this.unbind(".ui-disableSelection")
}
}), e.extend(e.ui, {
plugin: {
add: function (t, i, s) {
var a, n = e.ui[t].prototype;
for (a in s) n.plugins[a] = n.plugins[a] || [], n.plugins[a].push([i, s[a]])
}, call: function (e, t, i) {
var s, a = e.plugins[t];
if (a && e.element[0].parentNode && 11 !== e.element[0].parentNode.nodeType) for (s = 0; a.length > s; s++) e.options[a[s][0]] && a[s][1].apply(e.element, i)
}
}, hasScroll: function (t, i) {
if ("hidden" === e(t).css("overflow")) return !1;
var s = i && "left" === i ? "scrollLeft" : "scrollTop", a = !1;
return t[s] > 0 ? !0 : (t[s] = 1, a = t[s] > 0, t[s] = 0, a)
}
})
})(jQuery);
(function (e, t) {
var i = 0, s = Array.prototype.slice, n = e.cleanData;
e.cleanData = function (t) {
for (var i, s = 0; null != (i = t[s]); s++) try {
e(i).triggerHandler("remove")
} catch (a) {
}
n(t)
}, e.widget = function (i, s, n) {
var a, r, o, h, l = {}, u = i.split(".")[0];
i = i.split(".")[1], a = u + "-" + i, n || (n = s, s = e.Widget), e.expr[":"][a.toLowerCase()] = function (t) {
return !!e.data(t, a)
}, e[u] = e[u] || {}, r = e[u][i], o = e[u][i] = function (e, i) {
return this._createWidget ? (arguments.length && this._createWidget(e, i), t) : new o(e, i)
}, e.extend(o, r, {
version: n.version,
_proto: e.extend({}, n),
_childConstructors: []
}), h = new s, h.options = e.widget.extend({}, h.options), e.each(n, function (i, n) {
return e.isFunction(n) ? (l[i] = function () {
var e = function () {
return s.prototype[i].apply(this, arguments)
}, t = function (e) {
return s.prototype[i].apply(this, e)
};
return function () {
var i, s = this._super, a = this._superApply;
return this._super = e, this._superApply = t, i = n.apply(this, arguments), this._super = s, this._superApply = a, i
}
}(), t) : (l[i] = n, t)
}), o.prototype = e.widget.extend(h, {widgetEventPrefix: r ? h.widgetEventPrefix : i}, l, {
constructor: o,
namespace: u,
widgetName: i,
widgetFullName: a
}), r ? (e.each(r._childConstructors, function (t, i) {
var s = i.prototype;
e.widget(s.namespace + "." + s.widgetName, o, i._proto)
}), delete r._childConstructors) : s._childConstructors.push(o), e.widget.bridge(i, o)
}, e.widget.extend = function (i) {
for (var n, a, r = s.call(arguments, 1), o = 0, h = r.length; h > o; o++) for (n in r[o]) a = r[o][n], r[o].hasOwnProperty(n) && a !== t && (i[n] = e.isPlainObject(a) ? e.isPlainObject(i[n]) ? e.widget.extend({}, i[n], a) : e.widget.extend({}, a) : a);
return i
}, e.widget.bridge = function (i, n) {
var a = n.prototype.widgetFullName || i;
e.fn[i] = function (r) {
var o = "string" == typeof r, h = s.call(arguments, 1), l = this;
return r = !o && h.length ? e.widget.extend.apply(null, [r].concat(h)) : r, o ? this.each(function () {
var s, n = e.data(this, a);
return n ? e.isFunction(n[r]) && "_" !== r.charAt(0) ? (s = n[r].apply(n, h), s !== n && s !== t ? (l = s && s.jquery ? l.pushStack(s.get()) : s, !1) : t) : e.error("no such method '" + r + "' for " + i + " widget instance") : e.error("cannot call methods on " + i + " prior to initialization; " + "attempted to call method '" + r + "'")
}) : this.each(function () {
var t = e.data(this, a);
t ? t.option(r || {})._init() : e.data(this, a, new n(r, this))
}), l
}
}, e.Widget = function () {
}, e.Widget._childConstructors = [], e.Widget.prototype = {
widgetName: "widget",
widgetEventPrefix: "",
defaultElement: "<div>",
options: {disabled: !1, create: null},
_createWidget: function (t, s) {
s = e(s || this.defaultElement || this)[0], this.element = e(s), this.uuid = i++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = e.widget.extend({}, this.options, this._getCreateOptions(), t), this.bindings = e(), this.hoverable = e(), this.focusable = e(), s !== this && (e.data(s, this.widgetFullName, this), this._on(!0, this.element, {
remove: function (e) {
e.target === s && this.destroy()
}
}), this.document = e(s.style ? s.ownerDocument : s.document || s), this.window = e(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
},
_getCreateOptions: e.noop,
_getCreateEventData: e.noop,
_create: e.noop,
_init: e.noop,
destroy: function () {
this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled " + "ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
},
_destroy: e.noop,
widget: function () {
return this.element
},
option: function (i, s) {
var n, a, r, o = i;
if (0 === arguments.length) return e.widget.extend({}, this.options);
if ("string" == typeof i) if (o = {}, n = i.split("."), i = n.shift(), n.length) {
for (a = o[i] = e.widget.extend({}, this.options[i]), r = 0; n.length - 1 > r; r++) a[n[r]] = a[n[r]] || {}, a = a[n[r]];
if (i = n.pop(), s === t) return a[i] === t ? null : a[i];
a[i] = s
} else {
if (s === t) return this.options[i] === t ? null : this.options[i];
o[i] = s
}
return this._setOptions(o), this
},
_setOptions: function (e) {
var t;
for (t in e) this._setOption(t, e[t]);
return this
},
_setOption: function (e, t) {
return this.options[e] = t, "disabled" === e && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!t).attr("aria-disabled", t), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")), this
},
enable: function () {
return this._setOption("disabled", !1)
},
disable: function () {
return this._setOption("disabled", !0)
},
_on: function (i, s, n) {
var a, r = this;
"boolean" != typeof i && (n = s, s = i, i = !1), n ? (s = a = e(s), this.bindings = this.bindings.add(s)) : (n = s, s = this.element, a = this.widget()), e.each(n, function (n, o) {
function h() {
return i || r.options.disabled !== !0 && !e(this).hasClass("ui-state-disabled") ? ("string" == typeof o ? r[o] : o).apply(r, arguments) : t
}
"string" != typeof o && (h.guid = o.guid = o.guid || h.guid || e.guid++);
var l = n.match(/^(\w+)\s*(.*)$/), u = l[1] + r.eventNamespace, c = l[2];
c ? a.delegate(c, u, h) : s.bind(u, h)
})
},
_off: function (e, t) {
t = (t || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, e.unbind(t).undelegate(t)
},
_delay: function (e, t) {
function i() {
return ("string" == typeof e ? s[e] : e).apply(s, arguments)
}
var s = this;
return setTimeout(i, t || 0)
},
_hoverable: function (t) {
this.hoverable = this.hoverable.add(t), this._on(t, {
mouseenter: function (t) {
e(t.currentTarget).addClass("ui-state-hover")
}, mouseleave: function (t) {
e(t.currentTarget).removeClass("ui-state-hover")
}
})
},
_focusable: function (t) {
this.focusable = this.focusable.add(t), this._on(t, {
focusin: function (t) {
e(t.currentTarget).addClass("ui-state-focus")
}, focusout: function (t) {
e(t.currentTarget).removeClass("ui-state-focus")
}
})
},
_trigger: function (t, i, s) {
var n, a, r = this.options[t];
if (s = s || {}, i = e.Event(i), i.type = (t === this.widgetEventPrefix ? t : this.widgetEventPrefix + t).toLowerCase(), i.target = this.element[0], a = i.originalEvent) for (n in a) n in i || (i[n] = a[n]);
return this.element.trigger(i, s), !(e.isFunction(r) && r.apply(this.element[0], [i].concat(s)) === !1 || i.isDefaultPrevented())
}
}, e.each({show: "fadeIn", hide: "fadeOut"}, function (t, i) {
e.Widget.prototype["_" + t] = function (s, n, a) {
"string" == typeof n && (n = {effect: n});
var r, o = n ? n === !0 || "number" == typeof n ? i : n.effect || i : t;
n = n || {}, "number" == typeof n && (n = {duration: n}), r = !e.isEmptyObject(n), n.complete = a, n.delay && s.delay(n.delay), r && e.effects && e.effects.effect[o] ? s[t](n) : o !== t && s[o] ? s[o](n.duration, n.easing, a) : s.queue(function (i) {
e(this)[t](), a && a.call(s[0]), i()
})
}
})
})(jQuery);
(function (e) {
var t = !1;
e(document).mouseup(function () {
t = !1
}), e.widget("ui.mouse", {
version: "1.10.3",
options: {cancel: "input,textarea,button,select,option", distance: 1, delay: 0},
_mouseInit: function () {
var t = this;
this.element.bind("mousedown." + this.widgetName, function (e) {
return t._mouseDown(e)
}).bind("click." + this.widgetName, function (i) {
return !0 === e.data(i.target, t.widgetName + ".preventClickEvent") ? (e.removeData(i.target, t.widgetName + ".preventClickEvent"), i.stopImmediatePropagation(), !1) : undefined
}), this.started = !1
},
_mouseDestroy: function () {
this.element.unbind("." + this.widgetName), this._mouseMoveDelegate && e(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate)
},
_mouseDown: function (i) {
if (!t) {
this._mouseStarted && this._mouseUp(i), this._mouseDownEvent = i;
var s = this, n = 1 === i.which,
a = "string" == typeof this.options.cancel && i.target.nodeName ? e(i.target).closest(this.options.cancel).length : !1;
return n && !a && this._mouseCapture(i) ? (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function () {
s.mouseDelayMet = !0
}, this.options.delay)), this._mouseDistanceMet(i) && this._mouseDelayMet(i) && (this._mouseStarted = this._mouseStart(i) !== !1, !this._mouseStarted) ? (i.preventDefault(), !0) : (!0 === e.data(i.target, this.widgetName + ".preventClickEvent") && e.removeData(i.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function (e) {
return s._mouseMove(e)
}, this._mouseUpDelegate = function (e) {
return s._mouseUp(e)
}, e(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), i.preventDefault(), t = !0, !0)) : !0
}
},
_mouseMove: function (t) {
return e.ui.ie && (!document.documentMode || 9 > document.documentMode) && !t.button ? this._mouseUp(t) : this._mouseStarted ? (this._mouseDrag(t), t.preventDefault()) : (this._mouseDistanceMet(t) && this._mouseDelayMet(t) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, t) !== !1, this._mouseStarted ? this._mouseDrag(t) : this._mouseUp(t)), !this._mouseStarted)
},
_mouseUp: function (t) {
return e(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, t.target === this._mouseDownEvent.target && e.data(t.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(t)), !1
},
_mouseDistanceMet: function (e) {
return Math.max(Math.abs(this._mouseDownEvent.pageX - e.pageX), Math.abs(this._mouseDownEvent.pageY - e.pageY)) >= this.options.distance
},
_mouseDelayMet: function () {
return this.mouseDelayMet
},
_mouseStart: function () {
},
_mouseDrag: function () {
},
_mouseStop: function () {
},
_mouseCapture: function () {
return !0
}
})
})(jQuery);
(function (t, e) {
function i(t, e, i) {
return [parseFloat(t[0]) * (p.test(t[0]) ? e / 100 : 1), parseFloat(t[1]) * (p.test(t[1]) ? i / 100 : 1)]
}
function s(e, i) {
return parseInt(t.css(e, i), 10) || 0
}
function n(e) {
var i = e[0];
return 9 === i.nodeType ? {
width: e.width(),
height: e.height(),
offset: {top: 0, left: 0}
} : t.isWindow(i) ? {
width: e.width(),
height: e.height(),
offset: {top: e.scrollTop(), left: e.scrollLeft()}
} : i.preventDefault ? {width: 0, height: 0, offset: {top: i.pageY, left: i.pageX}} : {
width: e.outerWidth(),
height: e.outerHeight(),
offset: e.offset()
}
}
t.ui = t.ui || {};
var a, o = Math.max, r = Math.abs, h = Math.round, l = /left|center|right/, c = /top|center|bottom/,
u = /[\+\-]\d+(\.[\d]+)?%?/, d = /^\w+/, p = /%$/, f = t.fn.position;
t.position = {
scrollbarWidth: function () {
if (a !== e) return a;
var i, s,
n = t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),
o = n.children()[0];
return t("body").append(n), i = o.offsetWidth, n.css("overflow", "scroll"), s = o.offsetWidth, i === s && (s = n[0].clientWidth), n.remove(), a = i - s
}, getScrollInfo: function (e) {
var i = e.isWindow ? "" : e.element.css("overflow-x"), s = e.isWindow ? "" : e.element.css("overflow-y"),
n = "scroll" === i || "auto" === i && e.width < e.element[0].scrollWidth,
a = "scroll" === s || "auto" === s && e.height < e.element[0].scrollHeight;
return {width: a ? t.position.scrollbarWidth() : 0, height: n ? t.position.scrollbarWidth() : 0}
}, getWithinInfo: function (e) {
var i = t(e || window), s = t.isWindow(i[0]);
return {
element: i,
isWindow: s,
offset: i.offset() || {left: 0, top: 0},
scrollLeft: i.scrollLeft(),
scrollTop: i.scrollTop(),
width: s ? i.width() : i.outerWidth(),
height: s ? i.height() : i.outerHeight()
}
}
}, t.fn.position = function (e) {
if (!e || !e.of) return f.apply(this, arguments);
e = t.extend({}, e);
var a, p, m, g, v, b, _ = t(e.of), y = t.position.getWithinInfo(e.within), w = t.position.getScrollInfo(y),
x = (e.collision || "flip").split(" "), k = {};
return b = n(_), _[0].preventDefault && (e.at = "left top"), p = b.width, m = b.height, g = b.offset, v = t.extend({}, g), t.each(["my", "at"], function () {
var t, i, s = (e[this] || "").split(" ");
1 === s.length && (s = l.test(s[0]) ? s.concat(["center"]) : c.test(s[0]) ? ["center"].concat(s) : ["center", "center"]), s[0] = l.test(s[0]) ? s[0] : "center", s[1] = c.test(s[1]) ? s[1] : "center", t = u.exec(s[0]), i = u.exec(s[1]), k[this] = [t ? t[0] : 0, i ? i[0] : 0], e[this] = [d.exec(s[0])[0], d.exec(s[1])[0]]
}), 1 === x.length && (x[1] = x[0]), "right" === e.at[0] ? v.left += p : "center" === e.at[0] && (v.left += p / 2), "bottom" === e.at[1] ? v.top += m : "center" === e.at[1] && (v.top += m / 2), a = i(k.at, p, m), v.left += a[0], v.top += a[1], this.each(function () {
var n, l, c = t(this), u = c.outerWidth(), d = c.outerHeight(), f = s(this, "marginLeft"),
b = s(this, "marginTop"), D = u + f + s(this, "marginRight") + w.width,
T = d + b + s(this, "marginBottom") + w.height, C = t.extend({}, v),
M = i(k.my, c.outerWidth(), c.outerHeight());
"right" === e.my[0] ? C.left -= u : "center" === e.my[0] && (C.left -= u / 2), "bottom" === e.my[1] ? C.top -= d : "center" === e.my[1] && (C.top -= d / 2), C.left += M[0], C.top += M[1], t.support.offsetFractions || (C.left = h(C.left), C.top = h(C.top)), n = {
marginLeft: f,
marginTop: b
}, t.each(["left", "top"], function (i, s) {
t.ui.position[x[i]] && t.ui.position[x[i]][s](C, {
targetWidth: p,
targetHeight: m,
elemWidth: u,
elemHeight: d,
collisionPosition: n,
collisionWidth: D,
collisionHeight: T,
offset: [a[0] + M[0], a[1] + M[1]],
my: e.my,
at: e.at,
within: y,
elem: c
})
}), e.using && (l = function (t) {
var i = g.left - C.left, s = i + p - u, n = g.top - C.top, a = n + m - d, h = {
target: {element: _, left: g.left, top: g.top, width: p, height: m},
element: {element: c, left: C.left, top: C.top, width: u, height: d},
horizontal: 0 > s ? "left" : i > 0 ? "right" : "center",
vertical: 0 > a ? "top" : n > 0 ? "bottom" : "middle"
};
u > p && p > r(i + s) && (h.horizontal = "center"), d > m && m > r(n + a) && (h.vertical = "middle"), h.important = o(r(i), r(s)) > o(r(n), r(a)) ? "horizontal" : "vertical", e.using.call(this, t, h)
}), c.offset(t.extend(C, {using: l}))
})
}, t.ui.position = {
fit: {
left: function (t, e) {
var i, s = e.within, n = s.isWindow ? s.scrollLeft : s.offset.left, a = s.width,
r = t.left - e.collisionPosition.marginLeft, h = n - r, l = r + e.collisionWidth - a - n;
e.collisionWidth > a ? h > 0 && 0 >= l ? (i = t.left + h + e.collisionWidth - a - n, t.left += h - i) : t.left = l > 0 && 0 >= h ? n : h > l ? n + a - e.collisionWidth : n : h > 0 ? t.left += h : l > 0 ? t.left -= l : t.left = o(t.left - r, t.left)
}, top: function (t, e) {
var i, s = e.within, n = s.isWindow ? s.scrollTop : s.offset.top, a = e.within.height,
r = t.top - e.collisionPosition.marginTop, h = n - r, l = r + e.collisionHeight - a - n;
e.collisionHeight > a ? h > 0 && 0 >= l ? (i = t.top + h + e.collisionHeight - a - n, t.top += h - i) : t.top = l > 0 && 0 >= h ? n : h > l ? n + a - e.collisionHeight : n : h > 0 ? t.top += h : l > 0 ? t.top -= l : t.top = o(t.top - r, t.top)
}
}, flip: {
left: function (t, e) {
var i, s, n = e.within, a = n.offset.left + n.scrollLeft, o = n.width,
h = n.isWindow ? n.scrollLeft : n.offset.left, l = t.left - e.collisionPosition.marginLeft,
c = l - h, u = l + e.collisionWidth - o - h,
d = "left" === e.my[0] ? -e.elemWidth : "right" === e.my[0] ? e.elemWidth : 0,
p = "left" === e.at[0] ? e.targetWidth : "right" === e.at[0] ? -e.targetWidth : 0,
f = -2 * e.offset[0];
0 > c ? (i = t.left + d + p + f + e.collisionWidth - o - a, (0 > i || r(c) > i) && (t.left += d + p + f)) : u > 0 && (s = t.left - e.collisionPosition.marginLeft + d + p + f - h, (s > 0 || u > r(s)) && (t.left += d + p + f))
}, top: function (t, e) {
var i, s, n = e.within, a = n.offset.top + n.scrollTop, o = n.height,
h = n.isWindow ? n.scrollTop : n.offset.top, l = t.top - e.collisionPosition.marginTop, c = l - h,
u = l + e.collisionHeight - o - h, d = "top" === e.my[1],
p = d ? -e.elemHeight : "bottom" === e.my[1] ? e.elemHeight : 0,
f = "top" === e.at[1] ? e.targetHeight : "bottom" === e.at[1] ? -e.targetHeight : 0,
m = -2 * e.offset[1];
0 > c ? (s = t.top + p + f + m + e.collisionHeight - o - a, t.top + p + f + m > c && (0 > s || r(c) > s) && (t.top += p + f + m)) : u > 0 && (i = t.top - e.collisionPosition.marginTop + p + f + m - h, t.top + p + f + m > u && (i > 0 || u > r(i)) && (t.top += p + f + m))
}
}, flipfit: {
left: function () {
t.ui.position.flip.left.apply(this, arguments), t.ui.position.fit.left.apply(this, arguments)
}, top: function () {
t.ui.position.flip.top.apply(this, arguments), t.ui.position.fit.top.apply(this, arguments)
}
}
}, function () {
var e, i, s, n, a, o = document.getElementsByTagName("body")[0], r = document.createElement("div");
e = document.createElement(o ? "div" : "body"), s = {
visibility: "hidden",
width: 0,
height: 0,
border: 0,
margin: 0,
background: "none"
}, o && t.extend(s, {position: "absolute", left: "-1000px", top: "-1000px"});
for (a in s) e.style[a] = s[a];
e.appendChild(r), i = o || document.documentElement, i.insertBefore(e, i.firstChild), r.style.cssText = "position: absolute; left: 10.7432222px;", n = t(r).offset().left, t.support.offsetFractions = n > 10 && 11 > n, e.innerHTML = "", i.removeChild(e)
}()
})(jQuery);
(function (t) {
function e(t, e, i) {
return t > e && e + i > t
}
function i(t) {
return /left|right/.test(t.css("float")) || /inline|table-cell/.test(t.css("display"))
}
t.widget("ui.sortable", t.ui.mouse, {
version: "1.10.3",
widgetEventPrefix: "sort",
ready: !1,
options: {
appendTo: "parent",
axis: !1,
connectWith: !1,
containment: !1,
cursor: "auto",
cursorAt: !1,
dropOnEmpty: !0,
forcePlaceholderSize: !1,
forceHelperSize: !1,
grid: !1,
handle: !1,
helper: "original",
items: "> *",
opacity: !1,
placeholder: !1,
revert: !1,
scroll: !0,
scrollSensitivity: 20,
scrollSpeed: 20,
scope: "default",
tolerance: "intersect",
zIndex: 1e3,
activate: null,
beforeStop: null,
change: null,
deactivate: null,
out: null,
over: null,
receive: null,
remove: null,
sort: null,
start: null,
stop: null,
update: null
},
_create: function () {
var t = this.options;
this.containerCache = {}, this.element.addClass("ui-sortable"), this.refresh(), this.floating = this.items.length ? "x" === t.axis || i(this.items[0].item) : !1, this.offset = this.element.offset(), this._mouseInit(), this.ready = !0
},
_destroy: function () {
this.element.removeClass("ui-sortable ui-sortable-disabled"), this._mouseDestroy();
for (var t = this.items.length - 1; t >= 0; t--) this.items[t].item.removeData(this.widgetName + "-item");
return this
},
_setOption: function (e, i) {
"disabled" === e ? (this.options[e] = i, this.widget().toggleClass("ui-sortable-disabled", !!i)) : t.Widget.prototype._setOption.apply(this, arguments)
},
_mouseCapture: function (e, i) {
var s = null, n = !1, a = this;
return this.reverting ? !1 : this.options.disabled || "static" === this.options.type ? !1 : (this._refreshItems(e), t(e.target).parents().each(function () {
return t.data(this, a.widgetName + "-item") === a ? (s = t(this), !1) : undefined
}), t.data(e.target, a.widgetName + "-item") === a && (s = t(e.target)), s ? !this.options.handle || i || (t(this.options.handle, s).find("*").addBack().each(function () {
this === e.target && (n = !0)
}), n) ? (this.currentItem = s, this._removeCurrentsFromItems(), !0) : !1 : !1)
},
_mouseStart: function (e, i, s) {
var n, a, o = this.options;
if (this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(e), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
top: this.offset.top - this.margins.top,
left: this.offset.left - this.margins.left
}, t.extend(this.offset, {
click: {left: e.pageX - this.offset.left, top: e.pageY - this.offset.top},
parent: this._getParentOffset(),
relative: this._getRelativeOffset()
}), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(e), this.originalPageX = e.pageX, this.originalPageY = e.pageY, o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt), this.domPosition = {
prev: this.currentItem.prev()[0],
parent: this.currentItem.parent()[0]
}, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), o.containment && this._setContainment(), o.cursor && "auto" !== o.cursor && (a = this.document.find("body"), this.storedCursor = a.css("cursor"), a.css("cursor", o.cursor), this.storedStylesheet = t("<style>*{ cursor: " + o.cursor + " !important; }</style>").appendTo(a)), o.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", o.opacity)), o.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", o.zIndex)), this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", e, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !s) for (n = this.containers.length - 1; n >= 0; n--) this.containers[n]._trigger("activate", e, this._uiHash(this));
return t.ui.ddmanager && (t.ui.ddmanager.current = this), t.ui.ddmanager && !o.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e), this.dragging = !0, this.helper.addClass("ui-sortable-helper"), this._mouseDrag(e), !0
},
_mouseDrag: function (e) {
var i, s, n, a, o = this.options, r = !1;
for (this.position = this._generatePosition(e), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - e.pageY < o.scrollSensitivity ? this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop + o.scrollSpeed : e.pageY - this.overflowOffset.top < o.scrollSensitivity && (this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop - o.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - e.pageX < o.scrollSensitivity ? this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft + o.scrollSpeed : e.pageX - this.overflowOffset.left < o.scrollSensitivity && (this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft - o.scrollSpeed)) : (e.pageY - t(document).scrollTop() < o.scrollSensitivity ? r = t(document).scrollTop(t(document).scrollTop() - o.scrollSpeed) : t(window).height() - (e.pageY - t(document).scrollTop()) < o.scrollSensitivity && (r = t(document).scrollTop(t(document).scrollTop() + o.scrollSpeed)), e.pageX - t(document).scrollLeft() < o.scrollSensitivity ? r = t(document).scrollLeft(t(document).scrollLeft() - o.scrollSpeed) : t(window).width() - (e.pageX - t(document).scrollLeft()) < o.scrollSensitivity && (r = t(document).scrollLeft(t(document).scrollLeft() + o.scrollSpeed))), r !== !1 && t.ui.ddmanager && !o.dropBehaviour && t.ui.ddmanager.prepareOffsets(this, e)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), i = this.items.length - 1; i >= 0; i--) if (s = this.items[i], n = s.item[0], a = this._intersectsWithPointer(s), a && s.instance === this.currentContainer && n !== this.currentItem[0] && this.placeholder[1 === a ? "next" : "prev"]()[0] !== n && !t.contains(this.placeholder[0], n) && ("semi-dynamic" === this.options.type ? !t.contains(this.element[0], n) : !0)) {
if (this.direction = 1 === a ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(s)) break;
this._rearrange(e, s), this._trigger("change", e, this._uiHash());
break
}
return this._contactContainers(e), t.ui.ddmanager && t.ui.ddmanager.drag(this, e), this._trigger("sort", e, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1
},
_mouseStop: function (e, i) {
if (e) {
if (t.ui.ddmanager && !this.options.dropBehaviour && t.ui.ddmanager.drop(this, e), this.options.revert) {
var s = this, n = this.placeholder.offset(), a = this.options.axis, o = {};
a && "x" !== a || (o.left = n.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft)), a && "y" !== a || (o.top = n.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, t(this.helper).animate(o, parseInt(this.options.revert, 10) || 500, function () {
s._clear(e)
})
} else this._clear(e, i);
return !1
}
},
cancel: function () {
if (this.dragging) {
this._mouseUp({target: null}), "original" === this.options.helper ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show();
for (var e = this.containers.length - 1; e >= 0; e--) this.containers[e]._trigger("deactivate", null, this._uiHash(this)), this.containers[e].containerCache.over && (this.containers[e]._trigger("out", null, this._uiHash(this)), this.containers[e].containerCache.over = 0)
}
return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), t.extend(this, {
helper: null,
dragging: !1,
reverting: !1,
_noFinalSort: null
}), this.domPosition.prev ? t(this.domPosition.prev).after(this.currentItem) : t(this.domPosition.parent).prepend(this.currentItem)), this
},
serialize: function (e) {
var i = this._getItemsAsjQuery(e && e.connected), s = [];
return e = e || {}, t(i).each(function () {
var i = (t(e.item || this).attr(e.attribute || "id") || "").match(e.expression || /(.+)[\-=_](.+)/);
i && s.push((e.key || i[1] + "[]") + "=" + (e.key && e.expression ? i[1] : i[2]))
}), !s.length && e.key && s.push(e.key + "="), s.join("&")
},
toArray: function (e) {
var i = this._getItemsAsjQuery(e && e.connected), s = [];
return e = e || {}, i.each(function () {
s.push(t(e.item || this).attr(e.attribute || "id") || "")
}), s
},
_intersectsWith: function (t) {
var e = this.positionAbs.left, i = e + this.helperProportions.width, s = this.positionAbs.top,
n = s + this.helperProportions.height, a = t.left, o = a + t.width, r = t.top, h = r + t.height,
l = this.offset.click.top, c = this.offset.click.left,
u = "x" === this.options.axis || s + l > r && h > s + l,
d = "y" === this.options.axis || e + c > a && o > e + c, p = u && d;
return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > t[this.floating ? "width" : "height"] ? p : e + this.helperProportions.width / 2 > a && o > i - this.helperProportions.width / 2 && s + this.helperProportions.height / 2 > r && h > n - this.helperProportions.height / 2
},
_intersectsWithPointer: function (t) {
var i = "x" === this.options.axis || e(this.positionAbs.top + this.offset.click.top, t.top, t.height),
s = "y" === this.options.axis || e(this.positionAbs.left + this.offset.click.left, t.left, t.width),
n = i && s, a = this._getDragVerticalDirection(), o = this._getDragHorizontalDirection();
return n ? this.floating ? o && "right" === o || "down" === a ? 2 : 1 : a && ("down" === a ? 2 : 1) : !1
},
_intersectsWithSides: function (t) {
var i = e(this.positionAbs.top + this.offset.click.top, t.top + t.height / 2, t.height),
s = e(this.positionAbs.left + this.offset.click.left, t.left + t.width / 2, t.width),
n = this._getDragVerticalDirection(), a = this._getDragHorizontalDirection();
return this.floating && a ? "right" === a && s || "left" === a && !s : n && ("down" === n && i || "up" === n && !i)
},
_getDragVerticalDirection: function () {
var t = this.positionAbs.top - this.lastPositionAbs.top;
return 0 !== t && (t > 0 ? "down" : "up")
},
_getDragHorizontalDirection: function () {
var t = this.positionAbs.left - this.lastPositionAbs.left;
return 0 !== t && (t > 0 ? "right" : "left")
},
refresh: function (t) {
return this._refreshItems(t), this.refreshPositions(), this
},
_connectWith: function () {
var t = this.options;
return t.connectWith.constructor === String ? [t.connectWith] : t.connectWith
},
_getItemsAsjQuery: function (e) {
var i, s, n, a, o = [], r = [], h = this._connectWith();
if (h && e) for (i = h.length - 1; i >= 0; i--) for (n = t(h[i]), s = n.length - 1; s >= 0; s--) a = t.data(n[s], this.widgetFullName), a && a !== this && !a.options.disabled && r.push([t.isFunction(a.options.items) ? a.options.items.call(a.element) : t(a.options.items, a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), a]);
for (r.push([t.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
options: this.options,
item: this.currentItem
}) : t(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), i = r.length - 1; i >= 0; i--) r[i][0].each(function () {
o.push(this)
});
return t(o)
},
_removeCurrentsFromItems: function () {
var e = this.currentItem.find(":data(" + this.widgetName + "-item)");
this.items = t.grep(this.items, function (t) {
for (var i = 0; e.length > i; i++) if (e[i] === t.item[0]) return !1;
return !0
})
},
_refreshItems: function (e) {
this.items = [], this.containers = [this];
var i, s, n, a, o, r, h, l, c = this.items,
u = [[t.isFunction(this.options.items) ? this.options.items.call(this.element[0], e, {item: this.currentItem}) : t(this.options.items, this.element), this]],
d = this._connectWith();
if (d && this.ready) for (i = d.length - 1; i >= 0; i--) for (n = t(d[i]), s = n.length - 1; s >= 0; s--) a = t.data(n[s], this.widgetFullName), a && a !== this && !a.options.disabled && (u.push([t.isFunction(a.options.items) ? a.options.items.call(a.element[0], e, {item: this.currentItem}) : t(a.options.items, a.element), a]), this.containers.push(a));
for (i = u.length - 1; i >= 0; i--) for (o = u[i][1], r = u[i][0], s = 0, l = r.length; l > s; s++) h = t(r[s]), h.data(this.widgetName + "-item", o), c.push({
item: h,
instance: o,
width: 0,
height: 0,
left: 0,
top: 0
})
},
refreshPositions: function (e) {
this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset());
var i, s, n, a;
for (i = this.items.length - 1; i >= 0; i--) s = this.items[i], s.instance !== this.currentContainer && this.currentContainer && s.item[0] !== this.currentItem[0] || (n = this.options.toleranceElement ? t(this.options.toleranceElement, s.item) : s.item, e || (s.width = n.outerWidth(), s.height = n.outerHeight()), a = n.offset(), s.left = a.left, s.top = a.top);
if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this); else for (i = this.containers.length - 1; i >= 0; i--) a = this.containers[i].element.offset(), this.containers[i].containerCache.left = a.left, this.containers[i].containerCache.top = a.top, this.containers[i].containerCache.width = this.containers[i].element.outerWidth(), this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
return this
},
_createPlaceholder: function (e) {
e = e || this;
var i, s = e.options;
s.placeholder && s.placeholder.constructor !== String || (i = s.placeholder, s.placeholder = {
element: function () {
var s = e.currentItem[0].nodeName.toLowerCase(),
n = t("<" + s + ">", e.document[0]).addClass(i || e.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper");
return "tr" === s ? e.currentItem.children().each(function () {
t("<td>&#160;</td>", e.document[0]).attr("colspan", t(this).attr("colspan") || 1).appendTo(n)
}) : "img" === s && n.attr("src", e.currentItem.attr("src")), i || n.css("visibility", "hidden"), n
}, update: function (t, n) {
(!i || s.forcePlaceholderSize) && (n.height() || n.height(e.currentItem.innerHeight() - parseInt(e.currentItem.css("paddingTop") || 0, 10) - parseInt(e.currentItem.css("paddingBottom") || 0, 10)), n.width() || n.width(e.currentItem.innerWidth() - parseInt(e.currentItem.css("paddingLeft") || 0, 10) - parseInt(e.currentItem.css("paddingRight") || 0, 10)))
}
}), e.placeholder = t(s.placeholder.element.call(e.element, e.currentItem)), e.currentItem.after(e.placeholder), s.placeholder.update(e, e.placeholder)
},
_contactContainers: function (s) {
var n, a, o, r, h, l, c, u, d, p, f = null, m = null;
for (n = this.containers.length - 1; n >= 0; n--) if (!t.contains(this.currentItem[0], this.containers[n].element[0])) if (this._intersectsWith(this.containers[n].containerCache)) {
if (f && t.contains(this.containers[n].element[0], f.element[0])) continue;
f = this.containers[n], m = n
} else this.containers[n].containerCache.over && (this.containers[n]._trigger("out", s, this._uiHash(this)), this.containers[n].containerCache.over = 0);
if (f) if (1 === this.containers.length) this.containers[m].containerCache.over || (this.containers[m]._trigger("over", s, this._uiHash(this)), this.containers[m].containerCache.over = 1); else {
for (o = 1e4, r = null, p = f.floating || i(this.currentItem), h = p ? "left" : "top", l = p ? "width" : "height", c = this.positionAbs[h] + this.offset.click[h], a = this.items.length - 1; a >= 0; a--) t.contains(this.containers[m].element[0], this.items[a].item[0]) && this.items[a].item[0] !== this.currentItem[0] && (!p || e(this.positionAbs.top + this.offset.click.top, this.items[a].top, this.items[a].height)) && (u = this.items[a].item.offset()[h], d = !1, Math.abs(u - c) > Math.abs(u + this.items[a][l] - c) && (d = !0, u += this.items[a][l]), o > Math.abs(u - c) && (o = Math.abs(u - c), r = this.items[a], this.direction = d ? "up" : "down"));
if (!r && !this.options.dropOnEmpty) return;
if (this.currentContainer === this.containers[m]) return;
r ? this._rearrange(s, r, null, !0) : this._rearrange(s, null, this.containers[m].element, !0), this._trigger("change", s, this._uiHash()), this.containers[m]._trigger("change", s, this._uiHash(this)), this.currentContainer = this.containers[m], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[m]._trigger("over", s, this._uiHash(this)), this.containers[m].containerCache.over = 1
}
},
_createHelper: function (e) {
var i = this.options,
s = t.isFunction(i.helper) ? t(i.helper.apply(this.element[0], [e, this.currentItem])) : "clone" === i.helper ? this.currentItem.clone() : this.currentItem;
return s.parents("body").length || t("parent" !== i.appendTo ? i.appendTo : this.currentItem[0].parentNode)[0].appendChild(s[0]), s[0] === this.currentItem[0] && (this._storedCSS = {
width: this.currentItem[0].style.width,
height: this.currentItem[0].style.height,
position: this.currentItem.css("position"),
top: this.currentItem.css("top"),
left: this.currentItem.css("left")
}), (!s[0].style.width || i.forceHelperSize) && s.width(this.currentItem.width()), (!s[0].style.height || i.forceHelperSize) && s.height(this.currentItem.height()), s
},
_adjustOffsetFromHelper: function (e) {
"string" == typeof e && (e = e.split(" ")), t.isArray(e) && (e = {
left: +e[0],
top: +e[1] || 0
}), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top), "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
},
_getParentOffset: function () {
this.offsetParent = this.helper.offsetParent();
var e = this.offsetParent.offset();
return "absolute" === this.cssPosition && this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === document.body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && t.ui.ie) && (e = {
top: 0,
left: 0
}), {
top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
}
},
_getRelativeOffset: function () {
if ("relative" === this.cssPosition) {
var t = this.currentItem.position();
return {
top: t.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
left: t.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
}
}
return {top: 0, left: 0}
},
_cacheMargins: function () {
this.margins = {
left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
top: parseInt(this.currentItem.css("marginTop"), 10) || 0
}
},
_cacheHelperProportions: function () {
this.helperProportions = {width: this.helper.outerWidth(), height: this.helper.outerHeight()}
},
_setContainment: function () {
var e, i, s, n = this.options;
"parent" === n.containment && (n.containment = this.helper[0].parentNode), ("document" === n.containment || "window" === n.containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, t("document" === n.containment ? document : window).width() - this.helperProportions.width - this.margins.left, (t("document" === n.containment ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(n.containment) || (e = t(n.containment)[0], i = t(n.containment).offset(), s = "hidden" !== t(e).css("overflow"), this.containment = [i.left + (parseInt(t(e).css("borderLeftWidth"), 10) || 0) + (parseInt(t(e).css("paddingLeft"), 10) || 0) - this.margins.left, i.top + (parseInt(t(e).css("borderTopWidth"), 10) || 0) + (parseInt(t(e).css("paddingTop"), 10) || 0) - this.margins.top, i.left + (s ? Math.max(e.scrollWidth, e.offsetWidth) : e.offsetWidth) - (parseInt(t(e).css("borderLeftWidth"), 10) || 0) - (parseInt(t(e).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, i.top + (s ? Math.max(e.scrollHeight, e.offsetHeight) : e.offsetHeight) - (parseInt(t(e).css("borderTopWidth"), 10) || 0) - (parseInt(t(e).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
},
_convertPositionTo: function (e, i) {
i || (i = this.position);
var s = "absolute" === e ? 1 : -1,
n = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
a = /(html|body)/i.test(n[0].tagName);
return {
top: i.top + this.offset.relative.top * s + this.offset.parent.top * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : a ? 0 : n.scrollTop()) * s,
left: i.left + this.offset.relative.left * s + this.offset.parent.left * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : a ? 0 : n.scrollLeft()) * s
}
},
_generatePosition: function (e) {
var i, s, n = this.options, a = e.pageX, o = e.pageY,
r = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && t.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
h = /(html|body)/i.test(r[0].tagName);
return "relative" !== this.cssPosition || this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (e.pageX - this.offset.click.left < this.containment[0] && (a = this.containment[0] + this.offset.click.left), e.pageY - this.offset.click.top < this.containment[1] && (o = this.containment[1] + this.offset.click.top), e.pageX - this.offset.click.left > this.containment[2] && (a = this.containment[2] + this.offset.click.left), e.pageY - this.offset.click.top > this.containment[3] && (o = this.containment[3] + this.offset.click.top)), n.grid && (i = this.originalPageY + Math.round((o - this.originalPageY) / n.grid[1]) * n.grid[1], o = this.containment ? i - this.offset.click.top >= this.containment[1] && i - this.offset.click.top <= this.containment[3] ? i : i - this.offset.click.top >= this.containment[1] ? i - n.grid[1] : i + n.grid[1] : i, s = this.originalPageX + Math.round((a - this.originalPageX) / n.grid[0]) * n.grid[0], a = this.containment ? s - this.offset.click.left >= this.containment[0] && s - this.offset.click.left <= this.containment[2] ? s : s - this.offset.click.left >= this.containment[0] ? s - n.grid[0] : s + n.grid[0] : s)), {
top: o - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : h ? 0 : r.scrollTop()),
left: a - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : h ? 0 : r.scrollLeft())
}
},
_rearrange: function (t, e, i, s) {
i ? i[0].appendChild(this.placeholder[0]) : e.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? e.item[0] : e.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;
var n = this.counter;
this._delay(function () {
n === this.counter && this.refreshPositions(!s)
})
},
_clear: function (t, e) {
this.reverting = !1;
var i, s = [];
if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) {
for (i in this._storedCSS) ("auto" === this._storedCSS[i] || "static" === this._storedCSS[i]) && (this._storedCSS[i] = "");
this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")
} else this.currentItem.show();
for (this.fromOutside && !e && s.push(function (t) {
this._trigger("receive", t, this._uiHash(this.fromOutside))
}), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition.parent === this.currentItem.parent()[0] || e || s.push(function (t) {
this._trigger("update", t, this._uiHash())
}), this !== this.currentContainer && (e || (s.push(function (t) {
this._trigger("remove", t, this._uiHash())
}), s.push(function (t) {
return function (e) {
t._trigger("receive", e, this._uiHash(this))
}
}.call(this, this.currentContainer)), s.push(function (t) {
return function (e) {
t._trigger("update", e, this._uiHash(this))
}
}.call(this, this.currentContainer)))), i = this.containers.length - 1; i >= 0; i--) e || s.push(function (t) {
return function (e) {
t._trigger("deactivate", e, this._uiHash(this))
}
}.call(this, this.containers[i])), this.containers[i].containerCache.over && (s.push(function (t) {
return function (e) {
t._trigger("out", e, this._uiHash(this))
}
}.call(this, this.containers[i])), this.containers[i].containerCache.over = 0);
if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, this.cancelHelperRemoval) {
if (!e) {
for (this._trigger("beforeStop", t, this._uiHash()), i = 0; s.length > i; i++) s[i].call(this, t);
this._trigger("stop", t, this._uiHash())
}
return this.fromOutside = !1, !1
}
if (e || this._trigger("beforeStop", t, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null, !e) {
for (i = 0; s.length > i; i++) s[i].call(this, t);
this._trigger("stop", t, this._uiHash())
}
return this.fromOutside = !1, !0
},
_trigger: function () {
t.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel()
},
_uiHash: function (e) {
var i = e || this;
return {
helper: i.helper,
placeholder: i.placeholder || t([]),
position: i.position,
originalPosition: i.originalPosition,
offset: i.positionAbs,
item: i.currentItem,
sender: e ? e.element : null
}
}
})
})(jQuery);
(function (t, e) {
function i() {
this._curInst = null, this._keyEvent = !1, this._disabledInputs = [], this._datepickerShowing = !1, this._inDialog = !1, this._mainDivId = "ui-datepicker-div", this._inlineClass = "ui-datepicker-inline", this._appendClass = "ui-datepicker-append", this._triggerClass = "ui-datepicker-trigger", this._dialogClass = "ui-datepicker-dialog", this._disableClass = "ui-datepicker-disabled", this._unselectableClass = "ui-datepicker-unselectable", this._currentClass = "ui-datepicker-current-day", this._dayOverClass = "ui-datepicker-days-cell-over", this.regional = [], this.regional[""] = {
closeText: "Done",
prevText: "Prev",
nextText: "Next",
currentText: "Today",
monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
weekHeader: "Wk",
dateFormat: "mm/dd/yy",
firstDay: 0,
isRTL: !1,
showMonthAfterYear: !1,
yearSuffix: ""
}, this._defaults = {
showOn: "focus",
showAnim: "fadeIn",
showOptions: {},
defaultDate: null,
appendText: "",
buttonText: "...",
buttonImage: "",
buttonImageOnly: !1,
hideIfNoPrevNext: !1,
navigationAsDateFormat: !1,
gotoCurrent: !1,
changeMonth: !1,
changeYear: !1,
yearRange: "c-10:c+10",
showOtherMonths: !1,
selectOtherMonths: !1,
showWeek: !1,
calculateWeek: this.iso8601Week,
shortYearCutoff: "+10",
minDate: null,
maxDate: null,
duration: "fast",
beforeShowDay: null,
beforeShow: null,
onSelect: null,
onChangeMonthYear: null,
onClose: null,
numberOfMonths: 1,
showCurrentAtPos: 0,
stepMonths: 1,
stepBigMonths: 12,
altField: "",
altFormat: "",
constrainInput: !0,
showButtonPanel: !1,
autoSize: !1,
disabled: !1
}, t.extend(this._defaults, this.regional[""]), this.dpDiv = s(t("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))
}
function s(e) {
var i = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
return e.delegate(i, "mouseout", function () {
t(this).removeClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && t(this).removeClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && t(this).removeClass("ui-datepicker-next-hover")
}).delegate(i, "mouseover", function () {
t.datepicker._isDisabledDatepicker(a.inline ? e.parent()[0] : a.input[0]) || (t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), t(this).addClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && t(this).addClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && t(this).addClass("ui-datepicker-next-hover"))
})
}
function n(e, i) {
t.extend(e, i);
for (var s in i) null == i[s] && (e[s] = i[s]);
return e
}
t.extend(t.ui, {datepicker: {version: "1.10.3"}});
var a, r = "datepicker";
t.extend(i.prototype, {
markerClassName: "hasDatepicker",
maxRows: 4,
_widgetDatepicker: function () {
return this.dpDiv
},
setDefaults: function (t) {
return n(this._defaults, t || {}), this
},
_attachDatepicker: function (e, i) {
var s, n, a;
s = e.nodeName.toLowerCase(), n = "div" === s || "span" === s, e.id || (this.uuid += 1, e.id = "dp" + this.uuid), a = this._newInst(t(e), n), a.settings = t.extend({}, i || {}), "input" === s ? this._connectDatepicker(e, a) : n && this._inlineDatepicker(e, a)
},
_newInst: function (e, i) {
var n = e[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1");
return {
id: n,
input: e,
selectedDay: 0,
selectedMonth: 0,
selectedYear: 0,
drawMonth: 0,
drawYear: 0,
inline: i,
dpDiv: i ? s(t("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) : this.dpDiv
}
},
_connectDatepicker: function (e, i) {
var s = t(e);
i.append = t([]), i.trigger = t([]), s.hasClass(this.markerClassName) || (this._attachments(s, i), s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp), this._autoSize(i), t.data(e, r, i), i.settings.disabled && this._disableDatepicker(e))
},
_attachments: function (e, i) {
var s, n, a, r = this._get(i, "appendText"), o = this._get(i, "isRTL");
i.append && i.append.remove(), r && (i.append = t("<span class='" + this._appendClass + "'>" + r + "</span>"), e[o ? "before" : "after"](i.append)), e.unbind("focus", this._showDatepicker), i.trigger && i.trigger.remove(), s = this._get(i, "showOn"), ("focus" === s || "both" === s) && e.focus(this._showDatepicker), ("button" === s || "both" === s) && (n = this._get(i, "buttonText"), a = this._get(i, "buttonImage"), i.trigger = t(this._get(i, "buttonImageOnly") ? t("<img/>").addClass(this._triggerClass).attr({
src: a,
alt: n,
title: n
}) : t("<button type='button'></button>").addClass(this._triggerClass).html(a ? t("<img/>").attr({
src: a,
alt: n,
title: n
}) : n)), e[o ? "before" : "after"](i.trigger), i.trigger.click(function () {
return t.datepicker._datepickerShowing && t.datepicker._lastInput === e[0] ? t.datepicker._hideDatepicker() : t.datepicker._datepickerShowing && t.datepicker._lastInput !== e[0] ? (t.datepicker._hideDatepicker(), t.datepicker._showDatepicker(e[0])) : t.datepicker._showDatepicker(e[0]), !1
}))
},
_autoSize: function (t) {
if (this._get(t, "autoSize") && !t.inline) {
var e, i, s, n, a = new Date(2009, 11, 20), r = this._get(t, "dateFormat");
r.match(/[DM]/) && (e = function (t) {
for (i = 0, s = 0, n = 0; t.length > n; n++) t[n].length > i && (i = t[n].length, s = n);
return s
}, a.setMonth(e(this._get(t, r.match(/MM/) ? "monthNames" : "monthNamesShort"))), a.setDate(e(this._get(t, r.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - a.getDay())), t.input.attr("size", this._formatDate(t, a).length)
}
},
_inlineDatepicker: function (e, i) {
var s = t(e);
s.hasClass(this.markerClassName) || (s.addClass(this.markerClassName).append(i.dpDiv), t.data(e, r, i), this._setDate(i, this._getDefaultDate(i), !0), this._updateDatepicker(i), this._updateAlternate(i), i.settings.disabled && this._disableDatepicker(e), i.dpDiv.css("display", "block"))
},
_dialogDatepicker: function (e, i, s, a, o) {
var h, l, c, u, d, p = this._dialogInst;
return p || (this.uuid += 1, h = "dp" + this.uuid, this._dialogInput = t("<input type='text' id='" + h + "' style='position: absolute; top: -100px; width: 0px;'/>"), this._dialogInput.keydown(this._doKeyDown), t("body").append(this._dialogInput), p = this._dialogInst = this._newInst(this._dialogInput, !1), p.settings = {}, t.data(this._dialogInput[0], r, p)), n(p.settings, a || {}), i = i && i.constructor === Date ? this._formatDate(p, i) : i, this._dialogInput.val(i), this._pos = o ? o.length ? o : [o.pageX, o.pageY] : null, this._pos || (l = document.documentElement.clientWidth, c = document.documentElement.clientHeight, u = document.documentElement.scrollLeft || document.body.scrollLeft, d = document.documentElement.scrollTop || document.body.scrollTop, this._pos = [l / 2 - 100 + u, c / 2 - 150 + d]), this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"), p.settings.onSelect = s, this._inDialog = !0, this.dpDiv.addClass(this._dialogClass), this._showDatepicker(this._dialogInput[0]), t.blockUI && t.blockUI(this.dpDiv), t.data(this._dialogInput[0], r, p), this
},
_destroyDatepicker: function (e) {
var i, s = t(e), n = t.data(e, r);
s.hasClass(this.markerClassName) && (i = e.nodeName.toLowerCase(), t.removeData(e, r), "input" === i ? (n.append.remove(), n.trigger.remove(), s.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown", this._doKeyDown).unbind("keypress", this._doKeyPress).unbind("keyup", this._doKeyUp)) : ("div" === i || "span" === i) && s.removeClass(this.markerClassName).empty())
},
_enableDatepicker: function (e) {
var i, s, n = t(e), a = t.data(e, r);
n.hasClass(this.markerClassName) && (i = e.nodeName.toLowerCase(), "input" === i ? (e.disabled = !1, a.trigger.filter("button").each(function () {
this.disabled = !1
}).end().filter("img").css({
opacity: "1.0",
cursor: ""
})) : ("div" === i || "span" === i) && (s = n.children("." + this._inlineClass), s.children().removeClass("ui-state-disabled"), s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)), this._disabledInputs = t.map(this._disabledInputs, function (t) {
return t === e ? null : t
}))
},
_disableDatepicker: function (e) {
var i, s, n = t(e), a = t.data(e, r);
n.hasClass(this.markerClassName) && (i = e.nodeName.toLowerCase(), "input" === i ? (e.disabled = !0, a.trigger.filter("button").each(function () {
this.disabled = !0
}).end().filter("img").css({
opacity: "0.5",
cursor: "default"
})) : ("div" === i || "span" === i) && (s = n.children("." + this._inlineClass), s.children().addClass("ui-state-disabled"), s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)), this._disabledInputs = t.map(this._disabledInputs, function (t) {
return t === e ? null : t
}), this._disabledInputs[this._disabledInputs.length] = e)
},
_isDisabledDatepicker: function (t) {
if (!t) return !1;
for (var e = 0; this._disabledInputs.length > e; e++) if (this._disabledInputs[e] === t) return !0;
return !1
},
_getInst: function (e) {
try {
return t.data(e, r)
} catch (i) {
throw"Missing instance data for this datepicker"
}
},
_optionDatepicker: function (i, s, a) {
var r, o, h, l, c = this._getInst(i);
return 2 === arguments.length && "string" == typeof s ? "defaults" === s ? t.extend({}, t.datepicker._defaults) : c ? "all" === s ? t.extend({}, c.settings) : this._get(c, s) : null : (r = s || {}, "string" == typeof s && (r = {}, r[s] = a), c && (this._curInst === c && this._hideDatepicker(), o = this._getDateDatepicker(i, !0), h = this._getMinMaxDate(c, "min"), l = this._getMinMaxDate(c, "max"), n(c.settings, r), null !== h && r.dateFormat !== e && r.minDate === e && (c.settings.minDate = this._formatDate(c, h)), null !== l && r.dateFormat !== e && r.maxDate === e && (c.settings.maxDate = this._formatDate(c, l)), "disabled" in r && (r.disabled ? this._disableDatepicker(i) : this._enableDatepicker(i)), this._attachments(t(i), c), this._autoSize(c), this._setDate(c, o), this._updateAlternate(c), this._updateDatepicker(c)), e)
},
_changeDatepicker: function (t, e, i) {
this._optionDatepicker(t, e, i)
},
_refreshDatepicker: function (t) {
var e = this._getInst(t);
e && this._updateDatepicker(e)
},
_setDateDatepicker: function (t, e) {
var i = this._getInst(t);
i && (this._setDate(i, e), this._updateDatepicker(i), this._updateAlternate(i))
},
_getDateDatepicker: function (t, e) {
var i = this._getInst(t);
return i && !i.inline && this._setDateFromField(i, e), i ? this._getDate(i) : null
},
_doKeyDown: function (e) {
var i, s, n, a = t.datepicker._getInst(e.target), r = !0, o = a.dpDiv.is(".ui-datepicker-rtl");
if (a._keyEvent = !0, t.datepicker._datepickerShowing) switch (e.keyCode) {
case 9:
t.datepicker._hideDatepicker(), r = !1;
break;
case 13:
return n = t("td." + t.datepicker._dayOverClass + ":not(." + t.datepicker._currentClass + ")", a.dpDiv), n[0] && t.datepicker._selectDay(e.target, a.selectedMonth, a.selectedYear, n[0]), i = t.datepicker._get(a, "onSelect"), i ? (s = t.datepicker._formatDate(a), i.apply(a.input ? a.input[0] : null, [s, a])) : t.datepicker._hideDatepicker(), !1;
case 27:
t.datepicker._hideDatepicker();
break;
case 33:
t.datepicker._adjustDate(e.target, e.ctrlKey ? -t.datepicker._get(a, "stepBigMonths") : -t.datepicker._get(a, "stepMonths"), "M");
break;
case 34:
t.datepicker._adjustDate(e.target, e.ctrlKey ? +t.datepicker._get(a, "stepBigMonths") : +t.datepicker._get(a, "stepMonths"), "M");
break;
case 35:
(e.ctrlKey || e.metaKey) && t.datepicker._clearDate(e.target), r = e.ctrlKey || e.metaKey;
break;
case 36:
(e.ctrlKey || e.metaKey) && t.datepicker._gotoToday(e.target), r = e.ctrlKey || e.metaKey;
break;
case 37:
(e.ctrlKey || e.metaKey) && t.datepicker._adjustDate(e.target, o ? 1 : -1, "D"), r = e.ctrlKey || e.metaKey, e.originalEvent.altKey && t.datepicker._adjustDate(e.target, e.ctrlKey ? -t.datepicker._get(a, "stepBigMonths") : -t.datepicker._get(a, "stepMonths"), "M");
break;
case 38:
(e.ctrlKey || e.metaKey) && t.datepicker._adjustDate(e.target, -7, "D"), r = e.ctrlKey || e.metaKey;
break;
case 39:
(e.ctrlKey || e.metaKey) && t.datepicker._adjustDate(e.target, o ? -1 : 1, "D"), r = e.ctrlKey || e.metaKey, e.originalEvent.altKey && t.datepicker._adjustDate(e.target, e.ctrlKey ? +t.datepicker._get(a, "stepBigMonths") : +t.datepicker._get(a, "stepMonths"), "M");
break;
case 40:
(e.ctrlKey || e.metaKey) && t.datepicker._adjustDate(e.target, 7, "D"), r = e.ctrlKey || e.metaKey;
break;
default:
r = !1
} else 36 === e.keyCode && e.ctrlKey ? t.datepicker._showDatepicker(this) : r = !1;
r && (e.preventDefault(), e.stopPropagation())
},
_doKeyPress: function (i) {
var s, n, a = t.datepicker._getInst(i.target);
return t.datepicker._get(a, "constrainInput") ? (s = t.datepicker._possibleChars(t.datepicker._get(a, "dateFormat")), n = String.fromCharCode(null == i.charCode ? i.keyCode : i.charCode), i.ctrlKey || i.metaKey || " " > n || !s || s.indexOf(n) > -1) : e
},
_doKeyUp: function (e) {
var i, s = t.datepicker._getInst(e.target);
if (s.input.val() !== s.lastVal) try {
i = t.datepicker.parseDate(t.datepicker._get(s, "dateFormat"), s.input ? s.input.val() : null, t.datepicker._getFormatConfig(s)), i && (t.datepicker._setDateFromField(s), t.datepicker._updateAlternate(s), t.datepicker._updateDatepicker(s))
} catch (n) {
}
return !0
},
_showDatepicker: function (e) {
if (e = e.target || e, "input" !== e.nodeName.toLowerCase() && (e = t("input", e.parentNode)[0]), !t.datepicker._isDisabledDatepicker(e) && t.datepicker._lastInput !== e) {
var i, s, a, r, o, h, l;
i = t.datepicker._getInst(e), t.datepicker._curInst && t.datepicker._curInst !== i && (t.datepicker._curInst.dpDiv.stop(!0, !0), i && t.datepicker._datepickerShowing && t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])), s = t.datepicker._get(i, "beforeShow"), a = s ? s.apply(e, [e, i]) : {}, a !== !1 && (n(i.settings, a), i.lastVal = null, t.datepicker._lastInput = e, t.datepicker._setDateFromField(i), t.datepicker._inDialog && (e.value = ""), t.datepicker._pos || (t.datepicker._pos = t.datepicker._findPos(e), t.datepicker._pos[1] += e.offsetHeight), r = !1, t(e).parents().each(function () {
return r |= "fixed" === t(this).css("position"), !r
}), o = {
left: t.datepicker._pos[0],
top: t.datepicker._pos[1]
}, t.datepicker._pos = null, i.dpDiv.empty(), i.dpDiv.css({
position: "absolute",
display: "block",
top: "-1000px"
}), t.datepicker._updateDatepicker(i), o = t.datepicker._checkOffset(i, o, r), i.dpDiv.css({
position: t.datepicker._inDialog && t.blockUI ? "static" : r ? "fixed" : "absolute",
display: "none",
left: o.left + "px",
top: o.top + "px"
}), i.inline || (h = t.datepicker._get(i, "showAnim"), l = t.datepicker._get(i, "duration"), i.dpDiv.zIndex(t(e).zIndex() + 1), t.datepicker._datepickerShowing = !0, t.effects && t.effects.effect[h] ? i.dpDiv.show(h, t.datepicker._get(i, "showOptions"), l) : i.dpDiv[h || "show"](h ? l : null), t.datepicker._shouldFocusInput(i) && i.input.focus(), t.datepicker._curInst = i))
}
},
_updateDatepicker: function (e) {
this.maxRows = 4, a = e, e.dpDiv.empty().append(this._generateHTML(e)), this._attachHandlers(e), e.dpDiv.find("." + this._dayOverClass + " a").mouseover();
var i, s = this._getNumberOfMonths(e), n = s[1], r = 17;
e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""), n > 1 && e.dpDiv.addClass("ui-datepicker-multi-" + n).css("width", r * n + "em"), e.dpDiv[(1 !== s[0] || 1 !== s[1] ? "add" : "remove") + "Class"]("ui-datepicker-multi"), e.dpDiv[(this._get(e, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"), e === t.datepicker._curInst && t.datepicker._datepickerShowing && t.datepicker._shouldFocusInput(e) && e.input.focus(), e.yearshtml && (i = e.yearshtml, setTimeout(function () {
i === e.yearshtml && e.yearshtml && e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml), i = e.yearshtml = null
}, 0))
},
_shouldFocusInput: function (t) {
return t.input && t.input.is(":visible") && !t.input.is(":disabled") && !t.input.is(":focus")
},
_checkOffset: function (e, i, s) {
var n = e.dpDiv.outerWidth(), a = e.dpDiv.outerHeight(), r = e.input ? e.input.outerWidth() : 0,
o = e.input ? e.input.outerHeight() : 0,
h = document.documentElement.clientWidth + (s ? 0 : t(document).scrollLeft()),
l = document.documentElement.clientHeight + (s ? 0 : t(document).scrollTop());
return i.left -= this._get(e, "isRTL") ? n - r : 0, i.left -= s && i.left === e.input.offset().left ? t(document).scrollLeft() : 0, i.top -= s && i.top === e.input.offset().top + o ? t(document).scrollTop() : 0, i.left -= Math.min(i.left, i.left + n > h && h > n ? Math.abs(i.left + n - h) : 0), i.top -= Math.min(i.top, i.top + a > l && l > a ? Math.abs(a + o) : 0), i
},
_findPos: function (e) {
for (var i, s = this._getInst(e), n = this._get(s, "isRTL"); e && ("hidden" === e.type || 1 !== e.nodeType || t.expr.filters.hidden(e));) e = e[n ? "previousSibling" : "nextSibling"];
return i = t(e).offset(), [i.left, i.top]
},
_hideDatepicker: function (e) {
var i, s, n, a, o = this._curInst;
!o || e && o !== t.data(e, r) || this._datepickerShowing && (i = this._get(o, "showAnim"), s = this._get(o, "duration"), n = function () {
t.datepicker._tidyDialog(o)
}, t.effects && (t.effects.effect[i] || t.effects[i]) ? o.dpDiv.hide(i, t.datepicker._get(o, "showOptions"), s, n) : o.dpDiv["slideDown" === i ? "slideUp" : "fadeIn" === i ? "fadeOut" : "hide"](i ? s : null, n), i || n(), this._datepickerShowing = !1, a = this._get(o, "onClose"), a && a.apply(o.input ? o.input[0] : null, [o.input ? o.input.val() : "", o]), this._lastInput = null, this._inDialog && (this._dialogInput.css({
position: "absolute",
left: "0",
top: "-100px"
}), t.blockUI && (t.unblockUI(), t("body").append(this.dpDiv))), this._inDialog = !1)
},
_tidyDialog: function (t) {
t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")
},
_checkExternalClick: function (e) {
if (t.datepicker._curInst) {
var i = t(e.target), s = t.datepicker._getInst(i[0]);
(i[0].id !== t.datepicker._mainDivId && 0 === i.parents("#" + t.datepicker._mainDivId).length && !i.hasClass(t.datepicker.markerClassName) && !i.closest("." + t.datepicker._triggerClass).length && t.datepicker._datepickerShowing && (!t.datepicker._inDialog || !t.blockUI) || i.hasClass(t.datepicker.markerClassName) && t.datepicker._curInst !== s) && t.datepicker._hideDatepicker()
}
},
_adjustDate: function (e, i, s) {
var n = t(e), a = this._getInst(n[0]);
this._isDisabledDatepicker(n[0]) || (this._adjustInstDate(a, i + ("M" === s ? this._get(a, "showCurrentAtPos") : 0), s), this._updateDatepicker(a))
},
_gotoToday: function (e) {
var i, s = t(e), n = this._getInst(s[0]);
this._get(n, "gotoCurrent") && n.currentDay ? (n.selectedDay = n.currentDay, n.drawMonth = n.selectedMonth = n.currentMonth, n.drawYear = n.selectedYear = n.currentYear) : (i = new Date, n.selectedDay = i.getDate(), n.drawMonth = n.selectedMonth = i.getMonth(), n.drawYear = n.selectedYear = i.getFullYear()), this._notifyChange(n), this._adjustDate(s)
},
_selectMonthYear: function (e, i, s) {
var n = t(e), a = this._getInst(n[0]);
a["selected" + ("M" === s ? "Month" : "Year")] = a["draw" + ("M" === s ? "Month" : "Year")] = parseInt(i.options[i.selectedIndex].value, 10), this._notifyChange(a), this._adjustDate(n)
},
_selectDay: function (e, i, s, n) {
var a, r = t(e);
t(n).hasClass(this._unselectableClass) || this._isDisabledDatepicker(r[0]) || (a = this._getInst(r[0]), a.selectedDay = a.currentDay = t("a", n).html(), a.selectedMonth = a.currentMonth = i, a.selectedYear = a.currentYear = s, this._selectDate(e, this._formatDate(a, a.currentDay, a.currentMonth, a.currentYear)))
},
_clearDate: function (e) {
var i = t(e);
this._selectDate(i, "")
},
_selectDate: function (e, i) {
var s, n = t(e), a = this._getInst(n[0]);
i = null != i ? i : this._formatDate(a), a.input && a.input.val(i), this._updateAlternate(a), s = this._get(a, "onSelect"), s ? s.apply(a.input ? a.input[0] : null, [i, a]) : a.input && a.input.trigger("change"), a.inline ? this._updateDatepicker(a) : (this._hideDatepicker(), this._lastInput = a.input[0], "object" != typeof a.input[0] && a.input.focus(), this._lastInput = null)
},
_updateAlternate: function (e) {
var i, s, n, a = this._get(e, "altField");
a && (i = this._get(e, "altFormat") || this._get(e, "dateFormat"), s = this._getDate(e), n = this.formatDate(i, s, this._getFormatConfig(e)), t(a).each(function () {
t(this).val(n)
}))
},
noWeekends: function (t) {
var e = t.getDay();
return [e > 0 && 6 > e, ""]
},
iso8601Week: function (t) {
var e, i = new Date(t.getTime());
return i.setDate(i.getDate() + 4 - (i.getDay() || 7)), e = i.getTime(), i.setMonth(0), i.setDate(1), Math.floor(Math.round((e - i) / 864e5) / 7) + 1
},
parseDate: function (i, s, n) {
if (null == i || null == s) throw"Invalid arguments";
if (s = "object" == typeof s ? "" + s : s + "", "" === s) return null;
var a, r, o, h, l = 0, c = (n ? n.shortYearCutoff : null) || this._defaults.shortYearCutoff,
u = "string" != typeof c ? c : (new Date).getFullYear() % 100 + parseInt(c, 10),
d = (n ? n.dayNamesShort : null) || this._defaults.dayNamesShort,
p = (n ? n.dayNames : null) || this._defaults.dayNames,
f = (n ? n.monthNamesShort : null) || this._defaults.monthNamesShort,
m = (n ? n.monthNames : null) || this._defaults.monthNames, g = -1, v = -1, _ = -1, b = -1, y = !1,
x = function (t) {
var e = i.length > a + 1 && i.charAt(a + 1) === t;
return e && a++, e
}, k = function (t) {
var e = x(t), i = "@" === t ? 14 : "!" === t ? 20 : "y" === t && e ? 4 : "o" === t ? 3 : 2,
n = RegExp("^\\d{1," + i + "}"), a = s.substring(l).match(n);
if (!a) throw"Missing number at position " + l;
return l += a[0].length, parseInt(a[0], 10)
}, w = function (i, n, a) {
var r = -1, o = t.map(x(i) ? a : n, function (t, e) {
return [[e, t]]
}).sort(function (t, e) {
return -(t[1].length - e[1].length)
});
if (t.each(o, function (t, i) {
var n = i[1];
return s.substr(l, n.length).toLowerCase() === n.toLowerCase() ? (r = i[0], l += n.length, !1) : e
}), -1 !== r) return r + 1;
throw"Unknown name at position " + l
}, D = function () {
if (s.charAt(l) !== i.charAt(a)) throw"Unexpected literal at position " + l;
l++
};
for (a = 0; i.length > a; a++) if (y) "'" !== i.charAt(a) || x("'") ? D() : y = !1; else switch (i.charAt(a)) {
case"d":
_ = k("d");
break;
case"D":
w("D", d, p);
break;
case"o":
b = k("o");
break;
case"m":
v = k("m");
break;
case"M":
v = w("M", f, m);
break;
case"y":
g = k("y");
break;
case"@":
h = new Date(k("@")), g = h.getFullYear(), v = h.getMonth() + 1, _ = h.getDate();
break;
case"!":
h = new Date((k("!") - this._ticksTo1970) / 1e4), g = h.getFullYear(), v = h.getMonth() + 1, _ = h.getDate();
break;
case"'":
x("'") ? D() : y = !0;
break;
default:
D()
}
if (s.length > l && (o = s.substr(l), !/^\s+/.test(o))) throw"Extra/unparsed characters found in date: " + o;
if (-1 === g ? g = (new Date).getFullYear() : 100 > g && (g += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (u >= g ? 0 : -100)), b > -1) for (v = 1, _ = b; ;) {
if (r = this._getDaysInMonth(g, v - 1), r >= _) break;
v++, _ -= r
}
if (h = this._daylightSavingAdjust(new Date(g, v - 1, _)), h.getFullYear() !== g || h.getMonth() + 1 !== v || h.getDate() !== _) throw"Invalid date";
return h
},
ATOM: "yy-mm-dd",
COOKIE: "D, dd M yy",
ISO_8601: "yy-mm-dd",
RFC_822: "D, d M y",
RFC_850: "DD, dd-M-y",
RFC_1036: "D, d M y",
RFC_1123: "D, d M yy",
RFC_2822: "D, d M yy",
RSS: "D, d M y",
TICKS: "!",
TIMESTAMP: "@",
W3C: "yy-mm-dd",
_ticksTo1970: 1e7 * 60 * 60 * 24 * (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)),
formatDate: function (t, e, i) {
if (!e) return "";
var s, n = (i ? i.dayNamesShort : null) || this._defaults.dayNamesShort,
a = (i ? i.dayNames : null) || this._defaults.dayNames,
r = (i ? i.monthNamesShort : null) || this._defaults.monthNamesShort,
o = (i ? i.monthNames : null) || this._defaults.monthNames, h = function (e) {
var i = t.length > s + 1 && t.charAt(s + 1) === e;
return i && s++, i
}, l = function (t, e, i) {
var s = "" + e;
if (h(t)) for (; i > s.length;) s = "0" + s;
return s
}, c = function (t, e, i, s) {
return h(t) ? s[e] : i[e]
}, u = "", d = !1;
if (e) for (s = 0; t.length > s; s++) if (d) "'" !== t.charAt(s) || h("'") ? u += t.charAt(s) : d = !1; else switch (t.charAt(s)) {
case"d":
u += l("d", e.getDate(), 2);
break;
case"D":
u += c("D", e.getDay(), n, a);
break;
case"o":
u += l("o", Math.round((new Date(e.getFullYear(), e.getMonth(), e.getDate()).getTime() - new Date(e.getFullYear(), 0, 0).getTime()) / 864e5), 3);
break;
case"m":
u += l("m", e.getMonth() + 1, 2);
break;
case"M":
u += c("M", e.getMonth(), r, o);
break;
case"y":
u += h("y") ? e.getFullYear() : (10 > e.getYear() % 100 ? "0" : "") + e.getYear() % 100;
break;
case"@":
u += e.getTime();
break;
case"!":
u += 1e4 * e.getTime() + this._ticksTo1970;
break;
case"'":
h("'") ? u += "'" : d = !0;
break;
default:
u += t.charAt(s)
}
return u
},
_possibleChars: function (t) {
var e, i = "", s = !1, n = function (i) {
var s = t.length > e + 1 && t.charAt(e + 1) === i;
return s && e++, s
};
for (e = 0; t.length > e; e++) if (s) "'" !== t.charAt(e) || n("'") ? i += t.charAt(e) : s = !1; else switch (t.charAt(e)) {
case"d":
case"m":
case"y":
case"@":
i += "0123456789";
break;
case"D":
case"M":
return null;
case"'":
n("'") ? i += "'" : s = !0;
break;
default:
i += t.charAt(e)
}
return i
},
_get: function (t, i) {
return t.settings[i] !== e ? t.settings[i] : this._defaults[i]
},
_setDateFromField: function (t, e) {
if (t.input.val() !== t.lastVal) {
var i = this._get(t, "dateFormat"), s = t.lastVal = t.input ? t.input.val() : null,
n = this._getDefaultDate(t), a = n, r = this._getFormatConfig(t);
try {
a = this.parseDate(i, s, r) || n
} catch (o) {
s = e ? "" : s
}
t.selectedDay = a.getDate(), t.drawMonth = t.selectedMonth = a.getMonth(), t.drawYear = t.selectedYear = a.getFullYear(), t.currentDay = s ? a.getDate() : 0, t.currentMonth = s ? a.getMonth() : 0, t.currentYear = s ? a.getFullYear() : 0, this._adjustInstDate(t)
}
},
_getDefaultDate: function (t) {
return this._restrictMinMax(t, this._determineDate(t, this._get(t, "defaultDate"), new Date))
},
_determineDate: function (e, i, s) {
var n = function (t) {
var e = new Date;
return e.setDate(e.getDate() + t), e
}, a = function (i) {
try {
return t.datepicker.parseDate(t.datepicker._get(e, "dateFormat"), i, t.datepicker._getFormatConfig(e))
} catch (s) {
}
for (var n = (i.toLowerCase().match(/^c/) ? t.datepicker._getDate(e) : null) || new Date, a = n.getFullYear(), r = n.getMonth(), o = n.getDate(), h = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, l = h.exec(i); l;) {
switch (l[2] || "d") {
case"d":
case"D":
o += parseInt(l[1], 10);
break;
case"w":
case"W":
o += 7 * parseInt(l[1], 10);
break;
case"m":
case"M":
r += parseInt(l[1], 10), o = Math.min(o, t.datepicker._getDaysInMonth(a, r));
break;
case"y":
case"Y":
a += parseInt(l[1], 10), o = Math.min(o, t.datepicker._getDaysInMonth(a, r))
}
l = h.exec(i)
}
return new Date(a, r, o)
},
r = null == i || "" === i ? s : "string" == typeof i ? a(i) : "number" == typeof i ? isNaN(i) ? s : n(i) : new Date(i.getTime());
return r = r && "Invalid Date" == "" + r ? s : r, r && (r.setHours(0), r.setMinutes(0), r.setSeconds(0), r.setMilliseconds(0)), this._daylightSavingAdjust(r)
},
_daylightSavingAdjust: function (t) {
return t ? (t.setHours(t.getHours() > 12 ? t.getHours() + 2 : 0), t) : null
},
_setDate: function (t, e, i) {
var s = !e, n = t.selectedMonth, a = t.selectedYear,
r = this._restrictMinMax(t, this._determineDate(t, e, new Date));
t.selectedDay = t.currentDay = r.getDate(), t.drawMonth = t.selectedMonth = t.currentMonth = r.getMonth(), t.drawYear = t.selectedYear = t.currentYear = r.getFullYear(), n === t.selectedMonth && a === t.selectedYear || i || this._notifyChange(t), this._adjustInstDate(t), t.input && t.input.val(s ? "" : this._formatDate(t))
},
_getDate: function (t) {
var e = !t.currentYear || t.input && "" === t.input.val() ? null : this._daylightSavingAdjust(new Date(t.currentYear, t.currentMonth, t.currentDay));
return e
},
_attachHandlers: function (e) {
var i = this._get(e, "stepMonths"), s = "#" + e.id.replace(/\\\\/g, "\\");
e.dpDiv.find("[data-handler]").map(function () {
var e = {
prev: function () {
t.datepicker._adjustDate(s, -i, "M")
}, next: function () {
t.datepicker._adjustDate(s, +i, "M")
}, hide: function () {
t.datepicker._hideDatepicker()
}, today: function () {
t.datepicker._gotoToday(s)
}, selectDay: function () {
return t.datepicker._selectDay(s, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this), !1
}, selectMonth: function () {
return t.datepicker._selectMonthYear(s, this, "M"), !1
}, selectYear: function () {
return t.datepicker._selectMonthYear(s, this, "Y"), !1
}
};
t(this).bind(this.getAttribute("data-event"), e[this.getAttribute("data-handler")])
})
},
_generateHTML: function (t) {
var e, i, s, n, a, r, o, h, l, c, u, d, p, f, m, g, v, _, b, y, x, k, w, D, T, C, M, S, N, I, P, A, z, H, E,
F, O, W, j, R = new Date,
L = this._daylightSavingAdjust(new Date(R.getFullYear(), R.getMonth(), R.getDate())),
Y = this._get(t, "isRTL"), B = this._get(t, "showButtonPanel"), J = this._get(t, "hideIfNoPrevNext"),
K = this._get(t, "navigationAsDateFormat"), Q = this._getNumberOfMonths(t),
V = this._get(t, "showCurrentAtPos"), U = this._get(t, "stepMonths"), q = 1 !== Q[0] || 1 !== Q[1],
X = this._daylightSavingAdjust(t.currentDay ? new Date(t.currentYear, t.currentMonth, t.currentDay) : new Date(9999, 9, 9)),
G = this._getMinMaxDate(t, "min"), $ = this._getMinMaxDate(t, "max"), Z = t.drawMonth - V,
te = t.drawYear;
if (0 > Z && (Z += 12, te--), $) for (e = this._daylightSavingAdjust(new Date($.getFullYear(), $.getMonth() - Q[0] * Q[1] + 1, $.getDate())), e = G && G > e ? G : e; this._daylightSavingAdjust(new Date(te, Z, 1)) > e;) Z--, 0 > Z && (Z = 11, te--);
for (t.drawMonth = Z, t.drawYear = te, i = this._get(t, "prevText"), i = K ? this.formatDate(i, this._daylightSavingAdjust(new Date(te, Z - U, 1)), this._getFormatConfig(t)) : i, s = this._canAdjustMonth(t, -1, te, Z) ? "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='" + i + "'><span class='ui-icon ui-icon-circle-triangle-" + (Y ? "e" : "w") + "'>" + i + "</span></a>" : J ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + i + "'><span class='ui-icon ui-icon-circle-triangle-" + (Y ? "e" : "w") + "'>" + i + "</span></a>", n = this._get(t, "nextText"), n = K ? this.formatDate(n, this._daylightSavingAdjust(new Date(te, Z + U, 1)), this._getFormatConfig(t)) : n, a = this._canAdjustMonth(t, 1, te, Z) ? "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='" + n + "'><span class='ui-icon ui-icon-circle-triangle-" + (Y ? "w" : "e") + "'>" + n + "</span></a>" : J ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + n + "'><span class='ui-icon ui-icon-circle-triangle-" + (Y ? "w" : "e") + "'>" + n + "</span></a>", r = this._get(t, "currentText"), o = this._get(t, "gotoCurrent") && t.currentDay ? X : L, r = K ? this.formatDate(r, o, this._getFormatConfig(t)) : r, h = t.inline ? "" : "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + this._get(t, "closeText") + "</button>", l = B ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (Y ? h : "") + (this._isInRange(t, o) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>" + r + "</button>" : "") + (Y ? "" : h) + "</div>" : "", c = parseInt(this._get(t, "firstDay"), 10), c = isNaN(c) ? 0 : c, u = this._get(t, "showWeek"), d = this._get(t, "dayNames"), p = this._get(t, "dayNamesMin"), f = this._get(t, "monthNames"), m = this._get(t, "monthNamesShort"), g = this._get(t, "beforeShowDay"), v = this._get(t, "showOtherMonths"), _ = this._get(t, "selectOtherMonths"), b = this._getDefaultDate(t), y = "", k = 0; Q[0] > k; k++) {
for (w = "", this.maxRows = 4, D = 0; Q[1] > D; D++) {
if (T = this._daylightSavingAdjust(new Date(te, Z, t.selectedDay)), C = " ui-corner-all", M = "", q) {
if (M += "<div class='ui-datepicker-group", Q[1] > 1) switch (D) {
case 0:
M += " ui-datepicker-group-first", C = " ui-corner-" + (Y ? "right" : "left");
break;
case Q[1] - 1:
M += " ui-datepicker-group-last", C = " ui-corner-" + (Y ? "left" : "right");
break;
default:
M += " ui-datepicker-group-middle", C = ""
}
M += "'>"
}
for (M += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + C + "'>" + (/all|left/.test(C) && 0 === k ? Y ? a : s : "") + (/all|right/.test(C) && 0 === k ? Y ? s : a : "") + this._generateMonthYearHeader(t, Z, te, G, $, k > 0 || D > 0, f, m) + "</div><table class='ui-datepicker-calendar'><thead>" + "<tr>", S = u ? "<th class='ui-datepicker-week-col'>" + this._get(t, "weekHeader") + "</th>" : "", x = 0; 7 > x; x++) N = (x + c) % 7, S += "<th" + ((x + c + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" + "<span title='" + d[N] + "'>" + p[N] + "</span></th>";
for (M += S + "</tr></thead><tbody>", I = this._getDaysInMonth(te, Z), te === t.selectedYear && Z === t.selectedMonth && (t.selectedDay = Math.min(t.selectedDay, I)), P = (this._getFirstDayOfMonth(te, Z) - c + 7) % 7, A = Math.ceil((P + I) / 7), z = q ? this.maxRows > A ? this.maxRows : A : A, this.maxRows = z, H = this._daylightSavingAdjust(new Date(te, Z, 1 - P)), E = 0; z > E; E++) {
for (M += "<tr>", F = u ? "<td class='ui-datepicker-week-col'>" + this._get(t, "calculateWeek")(H) + "</td>" : "", x = 0; 7 > x; x++) O = g ? g.apply(t.input ? t.input[0] : null, [H]) : [!0, ""], W = H.getMonth() !== Z, j = W && !_ || !O[0] || G && G > H || $ && H > $, F += "<td class='" + ((x + c + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + (W ? " ui-datepicker-other-month" : "") + (H.getTime() === T.getTime() && Z === t.selectedMonth && t._keyEvent || b.getTime() === H.getTime() && b.getTime() === T.getTime() ? " " + this._dayOverClass : "") + (j ? " " + this._unselectableClass + " ui-state-disabled" : "") + (W && !v ? "" : " " + O[1] + (H.getTime() === X.getTime() ? " " + this._currentClass : "") + (H.getTime() === L.getTime() ? " ui-datepicker-today" : "")) + "'" + (W && !v || !O[2] ? "" : " title='" + O[2].replace(/'/g, "&#39;") + "'") + (j ? "" : " data-handler='selectDay' data-event='click' data-month='" + H.getMonth() + "' data-year='" + H.getFullYear() + "'") + ">" + (W && !v ? "&#xa0;" : j ? "<span class='ui-state-default'>" + H.getDate() + "</span>" : "<a class='ui-state-default" + (H.getTime() === L.getTime() ? " ui-state-highlight" : "") + (H.getTime() === X.getTime() ? " ui-state-active" : "") + (W ? " ui-priority-secondary" : "") + "' href='#'>" + H.getDate() + "</a>") + "</td>", H.setDate(H.getDate() + 1), H = this._daylightSavingAdjust(H);
M += F + "</tr>"
}
Z++, Z > 11 && (Z = 0, te++), M += "</tbody></table>" + (q ? "</div>" + (Q[0] > 0 && D === Q[1] - 1 ? "<div class='ui-datepicker-row-break'></div>" : "") : ""), w += M
}
y += w
}
return y += l, t._keyEvent = !1, y
},
_generateMonthYearHeader: function (t, e, i, s, n, a, r, o) {
var h, l, c, u, d, p, f, m, g = this._get(t, "changeMonth"), v = this._get(t, "changeYear"),
_ = this._get(t, "showMonthAfterYear"), b = "<div class='ui-datepicker-title'>", y = "";
if (a || !g) y += "<span class='ui-datepicker-month'>" + r[e] + "</span>"; else {
for (h = s && s.getFullYear() === i, l = n && n.getFullYear() === i, y += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>", c = 0; 12 > c; c++) (!h || c >= s.getMonth()) && (!l || n.getMonth() >= c) && (y += "<option value='" + c + "'" + (c === e ? " selected='selected'" : "") + ">" + o[c] + "</option>");
y += "</select>"
}
if (_ || (b += y + (!a && g && v ? "" : "&#xa0;")), !t.yearshtml) if (t.yearshtml = "", a || !v) b += "<span class='ui-datepicker-year'>" + i + "</span>"; else {
for (u = this._get(t, "yearRange").split(":"), d = (new Date).getFullYear(), p = function (t) {
var e = t.match(/c[+\-].*/) ? i + parseInt(t.substring(1), 10) : t.match(/[+\-].*/) ? d + parseInt(t, 10) : parseInt(t, 10);
return isNaN(e) ? d : e
}, f = p(u[0]), m = Math.max(f, p(u[1] || "")), f = s ? Math.max(f, s.getFullYear()) : f, m = n ? Math.min(m, n.getFullYear()) : m, t.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; m >= f; f++) t.yearshtml += "<option value='" + f + "'" + (f === i ? " selected='selected'" : "") + ">" + f + "</option>";
t.yearshtml += "</select>", b += t.yearshtml, t.yearshtml = null
}
return b += this._get(t, "yearSuffix"), _ && (b += (!a && g && v ? "" : "&#xa0;") + y), b += "</div>"
},
_adjustInstDate: function (t, e, i) {
var s = t.drawYear + ("Y" === i ? e : 0), n = t.drawMonth + ("M" === i ? e : 0),
a = Math.min(t.selectedDay, this._getDaysInMonth(s, n)) + ("D" === i ? e : 0),
r = this._restrictMinMax(t, this._daylightSavingAdjust(new Date(s, n, a)));
t.selectedDay = r.getDate(), t.drawMonth = t.selectedMonth = r.getMonth(), t.drawYear = t.selectedYear = r.getFullYear(), ("M" === i || "Y" === i) && this._notifyChange(t)
},
_restrictMinMax: function (t, e) {
var i = this._getMinMaxDate(t, "min"), s = this._getMinMaxDate(t, "max"), n = i && i > e ? i : e;
return s && n > s ? s : n
},
_notifyChange: function (t) {
var e = this._get(t, "onChangeMonthYear");
e && e.apply(t.input ? t.input[0] : null, [t.selectedYear, t.selectedMonth + 1, t])
},
_getNumberOfMonths: function (t) {
var e = this._get(t, "numberOfMonths");
return null == e ? [1, 1] : "number" == typeof e ? [1, e] : e
},
_getMinMaxDate: function (t, e) {
return this._determineDate(t, this._get(t, e + "Date"), null)
},
_getDaysInMonth: function (t, e) {
return 32 - this._daylightSavingAdjust(new Date(t, e, 32)).getDate()
},
_getFirstDayOfMonth: function (t, e) {
return new Date(t, e, 1).getDay()
},
_canAdjustMonth: function (t, e, i, s) {
var n = this._getNumberOfMonths(t),
a = this._daylightSavingAdjust(new Date(i, s + (0 > e ? e : n[0] * n[1]), 1));
return 0 > e && a.setDate(this._getDaysInMonth(a.getFullYear(), a.getMonth())), this._isInRange(t, a)
},
_isInRange: function (t, e) {
var i, s, n = this._getMinMaxDate(t, "min"), a = this._getMinMaxDate(t, "max"), r = null, o = null,
h = this._get(t, "yearRange");
return h && (i = h.split(":"), s = (new Date).getFullYear(), r = parseInt(i[0], 10), o = parseInt(i[1], 10), i[0].match(/[+\-].*/) && (r += s), i[1].match(/[+\-].*/) && (o += s)), (!n || e.getTime() >= n.getTime()) && (!a || e.getTime() <= a.getTime()) && (!r || e.getFullYear() >= r) && (!o || o >= e.getFullYear())
},
_getFormatConfig: function (t) {
var e = this._get(t, "shortYearCutoff");
return e = "string" != typeof e ? e : (new Date).getFullYear() % 100 + parseInt(e, 10), {
shortYearCutoff: e,
dayNamesShort: this._get(t, "dayNamesShort"),
dayNames: this._get(t, "dayNames"),
monthNamesShort: this._get(t, "monthNamesShort"),
monthNames: this._get(t, "monthNames")
}
},
_formatDate: function (t, e, i, s) {
e || (t.currentDay = t.selectedDay, t.currentMonth = t.selectedMonth, t.currentYear = t.selectedYear);
var n = e ? "object" == typeof e ? e : this._daylightSavingAdjust(new Date(s, i, e)) : this._daylightSavingAdjust(new Date(t.currentYear, t.currentMonth, t.currentDay));
return this.formatDate(this._get(t, "dateFormat"), n, this._getFormatConfig(t))
}
}), t.fn.datepicker = function (e) {
if (!this.length) return this;
t.datepicker.initialized || (t(document).mousedown(t.datepicker._checkExternalClick), t.datepicker.initialized = !0), 0 === t("#" + t.datepicker._mainDivId).length && t("body").append(t.datepicker.dpDiv);
var i = Array.prototype.slice.call(arguments, 1);
return "string" != typeof e || "isDisabled" !== e && "getDate" !== e && "widget" !== e ? "option" === e && 2 === arguments.length && "string" == typeof arguments[1] ? t.datepicker["_" + e + "Datepicker"].apply(t.datepicker, [this[0]].concat(i)) : this.each(function () {
"string" == typeof e ? t.datepicker["_" + e + "Datepicker"].apply(t.datepicker, [this].concat(i)) : t.datepicker._attachDatepicker(this, e)
}) : t.datepicker["_" + e + "Datepicker"].apply(t.datepicker, [this[0]].concat(i))
}, t.datepicker = new i, t.datepicker.initialized = !1, t.datepicker.uuid = (new Date).getTime(), t.datepicker.version = "1.10.3"
})(jQuery);
(function (t) {
var e = 5;
t.widget("ui.slider", t.ui.mouse, {
version: "1.10.3",
widgetEventPrefix: "slide",
options: {
animate: !1,
distance: 0,
max: 100,
min: 0,
orientation: "horizontal",
range: !1,
step: 1,
value: 0,
values: null,
change: null,
slide: null,
start: null,
stop: null
},
_create: function () {
this._keySliding = !1, this._mouseSliding = !1, this._animateOff = !0, this._handleIndex = null, this._detectOrientation(), this._mouseInit(), this.element.addClass("ui-slider ui-slider-" + this.orientation + " ui-widget" + " ui-widget-content" + " ui-corner-all"), this._refresh(), this._setOption("disabled", this.options.disabled), this._animateOff = !1
},
_refresh: function () {
this._createRange(), this._createHandles(), this._setupEvents(), this._refreshValue()
},
_createHandles: function () {
var e, i, s = this.options,
n = this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),
a = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>", o = [];
for (i = s.values && s.values.length || 1, n.length > i && (n.slice(i).remove(), n = n.slice(0, i)), e = n.length; i > e; e++) o.push(a);
this.handles = n.add(t(o.join("")).appendTo(this.element)), this.handle = this.handles.eq(0), this.handles.each(function (e) {
t(this).data("ui-slider-handle-index", e)
})
},
_createRange: function () {
var e = this.options, i = "";
e.range ? (e.range === !0 && (e.values ? e.values.length && 2 !== e.values.length ? e.values = [e.values[0], e.values[0]] : t.isArray(e.values) && (e.values = e.values.slice(0)) : e.values = [this._valueMin(), this._valueMin()]), this.range && this.range.length ? this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({
left: "",
bottom: ""
}) : (this.range = t("<div></div>").appendTo(this.element), i = "ui-slider-range ui-widget-header ui-corner-all"), this.range.addClass(i + ("min" === e.range || "max" === e.range ? " ui-slider-range-" + e.range : ""))) : this.range = t([])
},
_setupEvents: function () {
var t = this.handles.add(this.range).filter("a");
this._off(t), this._on(t, this._handleEvents), this._hoverable(t), this._focusable(t)
},
_destroy: function () {
this.handles.remove(), this.range.remove(), this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"), this._mouseDestroy()
},
_mouseCapture: function (e) {
var i, s, n, a, o, r, h, l, u = this, c = this.options;
return c.disabled ? !1 : (this.elementSize = {
width: this.element.outerWidth(),
height: this.element.outerHeight()
}, this.elementOffset = this.element.offset(), i = {
x: e.pageX,
y: e.pageY
}, s = this._normValueFromMouse(i), n = this._valueMax() - this._valueMin() + 1, this.handles.each(function (e) {
var i = Math.abs(s - u.values(e));
(n > i || n === i && (e === u._lastChangedValue || u.values(e) === c.min)) && (n = i, a = t(this), o = e)
}), r = this._start(e, o), r === !1 ? !1 : (this._mouseSliding = !0, this._handleIndex = o, a.addClass("ui-state-active").focus(), h = a.offset(), l = !t(e.target).parents().addBack().is(".ui-slider-handle"), this._clickOffset = l ? {
left: 0,
top: 0
} : {
left: e.pageX - h.left - a.width() / 2,
top: e.pageY - h.top - a.height() / 2 - (parseInt(a.css("borderTopWidth"), 10) || 0) - (parseInt(a.css("borderBottomWidth"), 10) || 0) + (parseInt(a.css("marginTop"), 10) || 0)
}, this.handles.hasClass("ui-state-hover") || this._slide(e, o, s), this._animateOff = !0, !0))
},
_mouseStart: function () {
return !0
},
_mouseDrag: function (t) {
var e = {x: t.pageX, y: t.pageY}, i = this._normValueFromMouse(e);
return this._slide(t, this._handleIndex, i), !1
},
_mouseStop: function (t) {
return this.handles.removeClass("ui-state-active"), this._mouseSliding = !1, this._stop(t, this._handleIndex), this._change(t, this._handleIndex), this._handleIndex = null, this._clickOffset = null, this._animateOff = !1, !1
},
_detectOrientation: function () {
this.orientation = "vertical" === this.options.orientation ? "vertical" : "horizontal"
},
_normValueFromMouse: function (t) {
var e, i, s, n, a;
return "horizontal" === this.orientation ? (e = this.elementSize.width, i = t.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0)) : (e = this.elementSize.height, i = t.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0)), s = i / e, s > 1 && (s = 1), 0 > s && (s = 0), "vertical" === this.orientation && (s = 1 - s), n = this._valueMax() - this._valueMin(), a = this._valueMin() + s * n, this._trimAlignValue(a)
},
_start: function (t, e) {
var i = {handle: this.handles[e], value: this.value()};
return this.options.values && this.options.values.length && (i.value = this.values(e), i.values = this.values()), this._trigger("start", t, i)
},
_slide: function (t, e, i) {
var s, n, a;
this.options.values && this.options.values.length ? (s = this.values(e ? 0 : 1), 2 === this.options.values.length && this.options.range === !0 && (0 === e && i > s || 1 === e && s > i) && (i = s), i !== this.values(e) && (n = this.values(), n[e] = i, a = this._trigger("slide", t, {
handle: this.handles[e],
value: i,
values: n
}), s = this.values(e ? 0 : 1), a !== !1 && this.values(e, i, !0))) : i !== this.value() && (a = this._trigger("slide", t, {
handle: this.handles[e],
value: i
}), a !== !1 && this.value(i))
},
_stop: function (t, e) {
var i = {handle: this.handles[e], value: this.value()};
this.options.values && this.options.values.length && (i.value = this.values(e), i.values = this.values()), this._trigger("stop", t, i)
},
_change: function (t, e) {
if (!this._keySliding && !this._mouseSliding) {
var i = {handle: this.handles[e], value: this.value()};
this.options.values && this.options.values.length && (i.value = this.values(e), i.values = this.values()), this._lastChangedValue = e, this._trigger("change", t, i)
}
},
value: function (t) {
return arguments.length ? (this.options.value = this._trimAlignValue(t), this._refreshValue(), this._change(null, 0), undefined) : this._value()
},
values: function (e, i) {
var s, n, a;
if (arguments.length > 1) return this.options.values[e] = this._trimAlignValue(i), this._refreshValue(), this._change(null, e), undefined;
if (!arguments.length) return this._values();
if (!t.isArray(arguments[0])) return this.options.values && this.options.values.length ? this._values(e) : this.value();
for (s = this.options.values, n = arguments[0], a = 0; s.length > a; a += 1) s[a] = this._trimAlignValue(n[a]), this._change(null, a);
this._refreshValue()
},
_setOption: function (e, i) {
var s, n = 0;
switch ("range" === e && this.options.range === !0 && ("min" === i ? (this.options.value = this._values(0), this.options.values = null) : "max" === i && (this.options.value = this._values(this.options.values.length - 1), this.options.values = null)), t.isArray(this.options.values) && (n = this.options.values.length), t.Widget.prototype._setOption.apply(this, arguments), e) {
case"orientation":
this._detectOrientation(), this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-" + this.orientation), this._refreshValue();
break;
case"value":
this._animateOff = !0, this._refreshValue(), this._change(null, 0), this._animateOff = !1;
break;
case"values":
for (this._animateOff = !0, this._refreshValue(), s = 0; n > s; s += 1) this._change(null, s);
this._animateOff = !1;
break;
case"min":
case"max":
this._animateOff = !0, this._refreshValue(), this._animateOff = !1;
break;
case"range":
this._animateOff = !0, this._refresh(), this._animateOff = !1
}
},
_value: function () {
var t = this.options.value;
return t = this._trimAlignValue(t)
},
_values: function (t) {
var e, i, s;
if (arguments.length) return e = this.options.values[t], e = this._trimAlignValue(e);
if (this.options.values && this.options.values.length) {
for (i = this.options.values.slice(), s = 0; i.length > s; s += 1) i[s] = this._trimAlignValue(i[s]);
return i
}
return []
},
_trimAlignValue: function (t) {
if (this._valueMin() >= t) return this._valueMin();
if (t >= this._valueMax()) return this._valueMax();
var e = this.options.step > 0 ? this.options.step : 1, i = (t - this._valueMin()) % e, s = t - i;
return 2 * Math.abs(i) >= e && (s += i > 0 ? e : -e), parseFloat(s.toFixed(5))
},
_valueMin: function () {
return this.options.min
},
_valueMax: function () {
return this.options.max
},
_refreshValue: function () {
var e, i, s, n, a, o = this.options.range, r = this.options, h = this,
l = this._animateOff ? !1 : r.animate, u = {};
this.options.values && this.options.values.length ? this.handles.each(function (s) {
i = 100 * ((h.values(s) - h._valueMin()) / (h._valueMax() - h._valueMin())), u["horizontal" === h.orientation ? "left" : "bottom"] = i + "%", t(this).stop(1, 1)[l ? "animate" : "css"](u, r.animate), h.options.range === !0 && ("horizontal" === h.orientation ? (0 === s && h.range.stop(1, 1)[l ? "animate" : "css"]({left: i + "%"}, r.animate), 1 === s && h.range[l ? "animate" : "css"]({width: i - e + "%"}, {
queue: !1,
duration: r.animate
})) : (0 === s && h.range.stop(1, 1)[l ? "animate" : "css"]({bottom: i + "%"}, r.animate), 1 === s && h.range[l ? "animate" : "css"]({height: i - e + "%"}, {
queue: !1,
duration: r.animate
}))), e = i
}) : (s = this.value(), n = this._valueMin(), a = this._valueMax(), i = a !== n ? 100 * ((s - n) / (a - n)) : 0, u["horizontal" === this.orientation ? "left" : "bottom"] = i + "%", this.handle.stop(1, 1)[l ? "animate" : "css"](u, r.animate), "min" === o && "horizontal" === this.orientation && this.range.stop(1, 1)[l ? "animate" : "css"]({width: i + "%"}, r.animate), "max" === o && "horizontal" === this.orientation && this.range[l ? "animate" : "css"]({width: 100 - i + "%"}, {
queue: !1,
duration: r.animate
}), "min" === o && "vertical" === this.orientation && this.range.stop(1, 1)[l ? "animate" : "css"]({height: i + "%"}, r.animate), "max" === o && "vertical" === this.orientation && this.range[l ? "animate" : "css"]({height: 100 - i + "%"}, {
queue: !1,
duration: r.animate
}))
},
_handleEvents: {
keydown: function (i) {
var s, n, a, o, r = t(i.target).data("ui-slider-handle-index");
switch (i.keyCode) {
case t.ui.keyCode.HOME:
case t.ui.keyCode.END:
case t.ui.keyCode.PAGE_UP:
case t.ui.keyCode.PAGE_DOWN:
case t.ui.keyCode.UP:
case t.ui.keyCode.RIGHT:
case t.ui.keyCode.DOWN:
case t.ui.keyCode.LEFT:
if (i.preventDefault(), !this._keySliding && (this._keySliding = !0, t(i.target).addClass("ui-state-active"), s = this._start(i, r), s === !1)) return
}
switch (o = this.options.step, n = a = this.options.values && this.options.values.length ? this.values(r) : this.value(), i.keyCode) {
case t.ui.keyCode.HOME:
a = this._valueMin();
break;
case t.ui.keyCode.END:
a = this._valueMax();
break;
case t.ui.keyCode.PAGE_UP:
a = this._trimAlignValue(n + (this._valueMax() - this._valueMin()) / e);
break;
case t.ui.keyCode.PAGE_DOWN:
a = this._trimAlignValue(n - (this._valueMax() - this._valueMin()) / e);
break;
case t.ui.keyCode.UP:
case t.ui.keyCode.RIGHT:
if (n === this._valueMax()) return;
a = this._trimAlignValue(n + o);
break;
case t.ui.keyCode.DOWN:
case t.ui.keyCode.LEFT:
if (n === this._valueMin()) return;
a = this._trimAlignValue(n - o)
}
this._slide(i, r, a)
}, click: function (t) {
t.preventDefault()
}, keyup: function (e) {
var i = t(e.target).data("ui-slider-handle-index");
this._keySliding && (this._keySliding = !1, this._stop(e, i), this._change(e, i), t(e.target).removeClass("ui-state-active"))
}
}
})
})(jQuery);
(function (t, e) {
var i = "ui-effects-";
t.effects = {effect: {}}, function (t, e) {
function i(t, e, i) {
var s = u[e.type] || {};
return null == t ? i || !e.def ? null : e.def : (t = s.floor ? ~~t : parseFloat(t), isNaN(t) ? e.def : s.mod ? (t + s.mod) % s.mod : 0 > t ? 0 : t > s.max ? s.max : t)
}
function s(i) {
var s = l(), n = s._rgba = [];
return i = i.toLowerCase(), f(h, function (t, a) {
var o, r = a.re.exec(i), h = r && a.parse(r), l = a.space || "rgba";
return h ? (o = s[l](h), s[c[l].cache] = o[c[l].cache], n = s._rgba = o._rgba, !1) : e
}), n.length ? ("0,0,0,0" === n.join() && t.extend(n, a.transparent), s) : a[i]
}
function n(t, e, i) {
return i = (i + 1) % 1, 1 > 6 * i ? t + 6 * (e - t) * i : 1 > 2 * i ? e : 2 > 3 * i ? t + 6 * (e - t) * (2 / 3 - i) : t
}
var a,
o = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
r = /^([\-+])=\s*(\d+\.?\d*)/, h = [{
re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
parse: function (t) {
return [t[1], t[2], t[3], t[4]]
}
}, {
re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
parse: function (t) {
return [2.55 * t[1], 2.55 * t[2], 2.55 * t[3], t[4]]
}
}, {
re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, parse: function (t) {
return [parseInt(t[1], 16), parseInt(t[2], 16), parseInt(t[3], 16)]
}
}, {
re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, parse: function (t) {
return [parseInt(t[1] + t[1], 16), parseInt(t[2] + t[2], 16), parseInt(t[3] + t[3], 16)]
}
}, {
re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
space: "hsla",
parse: function (t) {
return [t[1], t[2] / 100, t[3] / 100, t[4]]
}
}], l = t.Color = function (e, i, s, n) {
return new t.Color.fn.parse(e, i, s, n)
}, c = {
rgba: {
props: {
red: {idx: 0, type: "byte"},
green: {idx: 1, type: "byte"},
blue: {idx: 2, type: "byte"}
}
},
hsla: {
props: {
hue: {idx: 0, type: "degrees"},
saturation: {idx: 1, type: "percent"},
lightness: {idx: 2, type: "percent"}
}
}
}, u = {"byte": {floor: !0, max: 255}, percent: {max: 1}, degrees: {mod: 360, floor: !0}}, d = l.support = {},
p = t("<p>")[0], f = t.each;
p.style.cssText = "background-color:rgba(1,1,1,.5)", d.rgba = p.style.backgroundColor.indexOf("rgba") > -1, f(c, function (t, e) {
e.cache = "_" + t, e.props.alpha = {idx: 3, type: "percent", def: 1}
}), l.fn = t.extend(l.prototype, {
parse: function (n, o, r, h) {
if (n === e) return this._rgba = [null, null, null, null], this;
(n.jquery || n.nodeType) && (n = t(n).css(o), o = e);
var u = this, d = t.type(n), p = this._rgba = [];
return o !== e && (n = [n, o, r, h], d = "array"), "string" === d ? this.parse(s(n) || a._default) : "array" === d ? (f(c.rgba.props, function (t, e) {
p[e.idx] = i(n[e.idx], e)
}), this) : "object" === d ? (n instanceof l ? f(c, function (t, e) {
n[e.cache] && (u[e.cache] = n[e.cache].slice())
}) : f(c, function (e, s) {
var a = s.cache;
f(s.props, function (t, e) {
if (!u[a] && s.to) {
if ("alpha" === t || null == n[t]) return;
u[a] = s.to(u._rgba)
}
u[a][e.idx] = i(n[t], e, !0)
}), u[a] && 0 > t.inArray(null, u[a].slice(0, 3)) && (u[a][3] = 1, s.from && (u._rgba = s.from(u[a])))
}), this) : e
}, is: function (t) {
var i = l(t), s = !0, n = this;
return f(c, function (t, a) {
var o, r = i[a.cache];
return r && (o = n[a.cache] || a.to && a.to(n._rgba) || [], f(a.props, function (t, i) {
return null != r[i.idx] ? s = r[i.idx] === o[i.idx] : e
})), s
}), s
}, _space: function () {
var t = [], e = this;
return f(c, function (i, s) {
e[s.cache] && t.push(i)
}), t.pop()
}, transition: function (t, e) {
var s = l(t), n = s._space(), a = c[n], o = 0 === this.alpha() ? l("transparent") : this,
r = o[a.cache] || a.to(o._rgba), h = r.slice();
return s = s[a.cache], f(a.props, function (t, n) {
var a = n.idx, o = r[a], l = s[a], c = u[n.type] || {};
null !== l && (null === o ? h[a] = l : (c.mod && (l - o > c.mod / 2 ? o += c.mod : o - l > c.mod / 2 && (o -= c.mod)), h[a] = i((l - o) * e + o, n)))
}), this[n](h)
}, blend: function (e) {
if (1 === this._rgba[3]) return this;
var i = this._rgba.slice(), s = i.pop(), n = l(e)._rgba;
return l(t.map(i, function (t, e) {
return (1 - s) * n[e] + s * t
}))
}, toRgbaString: function () {
var e = "rgba(", i = t.map(this._rgba, function (t, e) {
return null == t ? e > 2 ? 1 : 0 : t
});
return 1 === i[3] && (i.pop(), e = "rgb("), e + i.join() + ")"
}, toHslaString: function () {
var e = "hsla(", i = t.map(this.hsla(), function (t, e) {
return null == t && (t = e > 2 ? 1 : 0), e && 3 > e && (t = Math.round(100 * t) + "%"), t
});
return 1 === i[3] && (i.pop(), e = "hsl("), e + i.join() + ")"
}, toHexString: function (e) {
var i = this._rgba.slice(), s = i.pop();
return e && i.push(~~(255 * s)), "#" + t.map(i, function (t) {
return t = (t || 0).toString(16), 1 === t.length ? "0" + t : t
}).join("")
}, toString: function () {
return 0 === this._rgba[3] ? "transparent" : this.toRgbaString()
}
}), l.fn.parse.prototype = l.fn, c.hsla.to = function (t) {
if (null == t[0] || null == t[1] || null == t[2]) return [null, null, null, t[3]];
var e, i, s = t[0] / 255, n = t[1] / 255, a = t[2] / 255, o = t[3], r = Math.max(s, n, a),
h = Math.min(s, n, a), l = r - h, c = r + h, u = .5 * c;
return e = h === r ? 0 : s === r ? 60 * (n - a) / l + 360 : n === r ? 60 * (a - s) / l + 120 : 60 * (s - n) / l + 240, i = 0 === l ? 0 : .5 >= u ? l / c : l / (2 - c), [Math.round(e) % 360, i, u, null == o ? 1 : o]
}, c.hsla.from = function (t) {
if (null == t[0] || null == t[1] || null == t[2]) return [null, null, null, t[3]];
var e = t[0] / 360, i = t[1], s = t[2], a = t[3], o = .5 >= s ? s * (1 + i) : s + i - s * i, r = 2 * s - o;
return [Math.round(255 * n(r, o, e + 1 / 3)), Math.round(255 * n(r, o, e)), Math.round(255 * n(r, o, e - 1 / 3)), a]
}, f(c, function (s, n) {
var a = n.props, o = n.cache, h = n.to, c = n.from;
l.fn[s] = function (s) {
if (h && !this[o] && (this[o] = h(this._rgba)), s === e) return this[o].slice();
var n, r = t.type(s), u = "array" === r || "object" === r ? s : arguments, d = this[o].slice();
return f(a, function (t, e) {
var s = u["object" === r ? t : e.idx];
null == s && (s = d[e.idx]), d[e.idx] = i(s, e)
}), c ? (n = l(c(d)), n[o] = d, n) : l(d)
}, f(a, function (e, i) {
l.fn[e] || (l.fn[e] = function (n) {
var a, o = t.type(n), h = "alpha" === e ? this._hsla ? "hsla" : "rgba" : s, l = this[h](),
c = l[i.idx];
return "undefined" === o ? c : ("function" === o && (n = n.call(this, c), o = t.type(n)), null == n && i.empty ? this : ("string" === o && (a = r.exec(n), a && (n = c + parseFloat(a[2]) * ("+" === a[1] ? 1 : -1))), l[i.idx] = n, this[h](l)))
})
})
}), l.hook = function (e) {
var i = e.split(" ");
f(i, function (e, i) {
t.cssHooks[i] = {
set: function (e, n) {
var a, o, r = "";
if ("transparent" !== n && ("string" !== t.type(n) || (a = s(n)))) {
if (n = l(a || n), !d.rgba && 1 !== n._rgba[3]) {
for (o = "backgroundColor" === i ? e.parentNode : e; ("" === r || "transparent" === r) && o && o.style;) try {
r = t.css(o, "backgroundColor"), o = o.parentNode
} catch (h) {
}
n = n.blend(r && "transparent" !== r ? r : "_default")
}
n = n.toRgbaString()
}
try {
e.style[i] = n
} catch (h) {
}
}
}, t.fx.step[i] = function (e) {
e.colorInit || (e.start = l(e.elem, i), e.end = l(e.end), e.colorInit = !0), t.cssHooks[i].set(e.elem, e.start.transition(e.end, e.pos))
}
})
}, l.hook(o), t.cssHooks.borderColor = {
expand: function (t) {
var e = {};
return f(["Top", "Right", "Bottom", "Left"], function (i, s) {
e["border" + s + "Color"] = t
}), e
}
}, a = t.Color.names = {
aqua: "#00ffff",
black: "#000000",
blue: "#0000ff",
fuchsia: "#ff00ff",
gray: "#808080",
green: "#008000",
lime: "#00ff00",
maroon: "#800000",
navy: "#000080",
olive: "#808000",
purple: "#800080",
red: "#ff0000",
silver: "#c0c0c0",
teal: "#008080",
white: "#ffffff",
yellow: "#ffff00",
transparent: [null, null, null, 0],
_default: "#ffffff"
}
}(jQuery), function () {
function i(e) {
var i, s,
n = e.ownerDocument.defaultView ? e.ownerDocument.defaultView.getComputedStyle(e, null) : e.currentStyle,
a = {};
if (n && n.length && n[0] && n[n[0]]) for (s = n.length; s--;) i = n[s], "string" == typeof n[i] && (a[t.camelCase(i)] = n[i]); else for (i in n) "string" == typeof n[i] && (a[i] = n[i]);
return a
}
function s(e, i) {
var s, n, o = {};
for (s in i) n = i[s], e[s] !== n && (a[s] || (t.fx.step[s] || !isNaN(parseFloat(n))) && (o[s] = n));
return o
}
var n = ["add", "remove", "toggle"], a = {
border: 1,
borderBottom: 1,
borderColor: 1,
borderLeft: 1,
borderRight: 1,
borderTop: 1,
borderWidth: 1,
margin: 1,
padding: 1
};
t.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function (e, i) {
t.fx.step[i] = function (t) {
("none" !== t.end && !t.setAttr || 1 === t.pos && !t.setAttr) && (jQuery.style(t.elem, i, t.end), t.setAttr = !0)
}
}), t.fn.addBack || (t.fn.addBack = function (t) {
return this.add(null == t ? this.prevObject : this.prevObject.filter(t))
}), t.effects.animateClass = function (e, a, o, r) {
var h = t.speed(a, o, r);
return this.queue(function () {
var a, o = t(this), r = o.attr("class") || "", l = h.children ? o.find("*").addBack() : o;
l = l.map(function () {
var e = t(this);
return {el: e, start: i(this)}
}), a = function () {
t.each(n, function (t, i) {
e[i] && o[i + "Class"](e[i])
})
}, a(), l = l.map(function () {
return this.end = i(this.el[0]), this.diff = s(this.start, this.end), this
}), o.attr("class", r), l = l.map(function () {
var e = this, i = t.Deferred(), s = t.extend({}, h, {
queue: !1, complete: function () {
i.resolve(e)
}
});
return this.el.animate(this.diff, s), i.promise()
}), t.when.apply(t, l.get()).done(function () {
a(), t.each(arguments, function () {
var e = this.el;
t.each(this.diff, function (t) {
e.css(t, "")
})
}), h.complete.call(o[0])
})
})
}, t.fn.extend({
addClass: function (e) {
return function (i, s, n, a) {
return s ? t.effects.animateClass.call(this, {add: i}, s, n, a) : e.apply(this, arguments)
}
}(t.fn.addClass), removeClass: function (e) {
return function (i, s, n, a) {
return arguments.length > 1 ? t.effects.animateClass.call(this, {remove: i}, s, n, a) : e.apply(this, arguments)
}
}(t.fn.removeClass), toggleClass: function (i) {
return function (s, n, a, o, r) {
return "boolean" == typeof n || n === e ? a ? t.effects.animateClass.call(this, n ? {add: s} : {remove: s}, a, o, r) : i.apply(this, arguments) : t.effects.animateClass.call(this, {toggle: s}, n, a, o)
}
}(t.fn.toggleClass), switchClass: function (e, i, s, n, a) {
return t.effects.animateClass.call(this, {add: i, remove: e}, s, n, a)
}
})
}(), function () {
function s(e, i, s, n) {
return t.isPlainObject(e) && (i = e, e = e.effect), e = {effect: e}, null == i && (i = {}), t.isFunction(i) && (n = i, s = null, i = {}), ("number" == typeof i || t.fx.speeds[i]) && (n = s, s = i, i = {}), t.isFunction(s) && (n = s, s = null), i && t.extend(e, i), s = s || i.duration, e.duration = t.fx.off ? 0 : "number" == typeof s ? s : s in t.fx.speeds ? t.fx.speeds[s] : t.fx.speeds._default, e.complete = n || i.complete, e
}
function n(e) {
return !e || "number" == typeof e || t.fx.speeds[e] ? !0 : "string" != typeof e || t.effects.effect[e] ? t.isFunction(e) ? !0 : "object" != typeof e || e.effect ? !1 : !0 : !0
}
t.extend(t.effects, {
version: "1.10.3", save: function (t, e) {
for (var s = 0; e.length > s; s++) null !== e[s] && t.data(i + e[s], t[0].style[e[s]])
}, restore: function (t, s) {
var n, a;
for (a = 0; s.length > a; a++) null !== s[a] && (n = t.data(i + s[a]), n === e && (n = ""), t.css(s[a], n))
}, setMode: function (t, e) {
return "toggle" === e && (e = t.is(":hidden") ? "show" : "hide"), e
}, getBaseline: function (t, e) {
var i, s;
switch (t[0]) {
case"top":
i = 0;
break;
case"middle":
i = .5;
break;
case"bottom":
i = 1;
break;
default:
i = t[0] / e.height
}
switch (t[1]) {
case"left":
s = 0;
break;
case"center":
s = .5;
break;
case"right":
s = 1;
break;
default:
s = t[1] / e.width
}
return {x: s, y: i}
}, createWrapper: function (e) {
if (e.parent().is(".ui-effects-wrapper")) return e.parent();
var i = {width: e.outerWidth(!0), height: e.outerHeight(!0), "float": e.css("float")},
s = t("<div></div>").addClass("ui-effects-wrapper").css({
fontSize: "100%",
background: "transparent",
border: "none",
margin: 0,
padding: 0
}), n = {width: e.width(), height: e.height()}, a = document.activeElement;
try {
a.id
} catch (o) {
a = document.body
}
return e.wrap(s), (e[0] === a || t.contains(e[0], a)) && t(a).focus(), s = e.parent(), "static" === e.css("position") ? (s.css({position: "relative"}), e.css({position: "relative"})) : (t.extend(i, {
position: e.css("position"),
zIndex: e.css("z-index")
}), t.each(["top", "left", "bottom", "right"], function (t, s) {
i[s] = e.css(s), isNaN(parseInt(i[s], 10)) && (i[s] = "auto")
}), e.css({
position: "relative",
top: 0,
left: 0,
right: "auto",
bottom: "auto"
})), e.css(n), s.css(i).show()
}, removeWrapper: function (e) {
var i = document.activeElement;
return e.parent().is(".ui-effects-wrapper") && (e.parent().replaceWith(e), (e[0] === i || t.contains(e[0], i)) && t(i).focus()), e
}, setTransition: function (e, i, s, n) {
return n = n || {}, t.each(i, function (t, i) {
var a = e.cssUnit(i);
a[0] > 0 && (n[i] = a[0] * s + a[1])
}), n
}
}), t.fn.extend({
effect: function () {
function e(e) {
function s() {
t.isFunction(a) && a.call(n[0]), t.isFunction(e) && e()
}
var n = t(this), a = i.complete, r = i.mode;
(n.is(":hidden") ? "hide" === r : "show" === r) ? (n[r](), s()) : o.call(n[0], i, s)
}
var i = s.apply(this, arguments), n = i.mode, a = i.queue, o = t.effects.effect[i.effect];
return t.fx.off || !o ? n ? this[n](i.duration, i.complete) : this.each(function () {
i.complete && i.complete.call(this)
}) : a === !1 ? this.each(e) : this.queue(a || "fx", e)
}, show: function (t) {
return function (e) {
if (n(e)) return t.apply(this, arguments);
var i = s.apply(this, arguments);
return i.mode = "show", this.effect.call(this, i)
}
}(t.fn.show), hide: function (t) {
return function (e) {
if (n(e)) return t.apply(this, arguments);
var i = s.apply(this, arguments);
return i.mode = "hide", this.effect.call(this, i)
}
}(t.fn.hide), toggle: function (t) {
return function (e) {
if (n(e) || "boolean" == typeof e) return t.apply(this, arguments);
var i = s.apply(this, arguments);
return i.mode = "toggle", this.effect.call(this, i)
}
}(t.fn.toggle), cssUnit: function (e) {
var i = this.css(e), s = [];
return t.each(["em", "px", "%", "pt"], function (t, e) {
i.indexOf(e) > 0 && (s = [parseFloat(i), e])
}), s
}
})
}(), function () {
var e = {};
t.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function (t, i) {
e[i] = function (e) {
return Math.pow(e, t + 2)
}
}), t.extend(e, {
Sine: function (t) {
return 1 - Math.cos(t * Math.PI / 2)
}, Circ: function (t) {
return 1 - Math.sqrt(1 - t * t)
}, Elastic: function (t) {
return 0 === t || 1 === t ? t : -Math.pow(2, 8 * (t - 1)) * Math.sin((80 * (t - 1) - 7.5) * Math.PI / 15)
}, Back: function (t) {
return t * t * (3 * t - 2)
}, Bounce: function (t) {
for (var e, i = 4; ((e = Math.pow(2, --i)) - 1) / 11 > t;) ;
return 1 / Math.pow(4, 3 - i) - 7.5625 * Math.pow((3 * e - 2) / 22 - t, 2)
}
}), t.each(e, function (e, i) {
t.easing["easeIn" + e] = i, t.easing["easeOut" + e] = function (t) {
return 1 - i(1 - t)
}, t.easing["easeInOut" + e] = function (t) {
return .5 > t ? i(2 * t) / 2 : 1 - i(-2 * t + 2) / 2
}
})
}()
})(jQuery);
(function (t) {
t.effects.effect.slide = function (e, i) {
var s, n = t(this), a = ["position", "top", "bottom", "left", "right", "width", "height"],
o = t.effects.setMode(n, e.mode || "show"), r = "show" === o, h = e.direction || "left",
l = "up" === h || "down" === h ? "top" : "left", c = "up" === h || "left" === h, u = {};
t.effects.save(n, a), n.show(), s = e.distance || n["top" === l ? "outerHeight" : "outerWidth"](!0), t.effects.createWrapper(n).css({overflow: "hidden"}), r && n.css(l, c ? isNaN(s) ? "-" + s : -s : s), u[l] = (r ? c ? "+=" : "-=" : c ? "-=" : "+=") + s, n.animate(u, {
queue: !1,
duration: e.duration,
easing: e.easing,
complete: function () {
"hide" === o && n.hide(), t.effects.restore(n, a), t.effects.removeWrapper(n), i()
}
})
}
})(jQuery);
/*!
* jquery.customscroll 1.0
*
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl-2.0.html
*/
;(function ($) {
$.customscrollOptions = {
always: false,
show: {
on: 'mouseenter scrollstart',
effect: 'fadeIn',
speed: 250,
delay: 0
},
hide: {
on: 'mouseleave scrollstop',
effect: 'fadeOut',
speed: 250,
delay: 750
},
grow: {
size: 3,
speed: 100
},
pageUpnDown: {
speed: 100
}
};
$.fn.customscroll = function (options) {
options = $.extend(true, {}, $.customscrollOptions, options || {});
return this.each(function () {
var object = $(this);
// build template
object.addClass('customscroll');
object.html([
'<div class="wrapper" style="height:' + object.height() + 'px">',
'<div class="content" style="width:' + object.width() + 'px">',
object.html(),
'</div>',
'</div>',
'<div class="placeholder" style="top:' + object.css('paddingTop') + ';bottom:' + object.css('paddingBottom') + '">',
'<div class="track">',
'<div class="grip"></div>',
'</div>',
'</div>'
].join(''));
// get elements
var wrapper = object.children('.wrapper'),
placeholder = object.children('.placeholder'),
track = placeholder.children('.track'),
grip = track.children('.grip');
// object hover
var showHideTimer,
show = function (event) {
if (object.height() >= wrapper[0].scrollHeight) {
// we dont need scroll
return;
}
if (wrapper[0].scrollHeight < parseInt(object.css('max-height'))) {
// this is a fix for IE
return;
}
// show
clearInterval(showHideTimer);
showHideTimer = setTimeout(function () {
track[options.show.effect](options.show.speed);
}, options.show.delay);
if (!event || event.type !== 'scrollstart') {
// used for adjusting sizes
wrapper.trigger('scroll');
}
};
wrapper.on(options.show.on, show);
wrapper.on(options.hide.on, function callback() {
// don't hide if always is true
if (options.always) {
return;
}
if (wrapper.hasClass('keep')) {
// someone says do not hide, try again later
return setTimeout(function () {
callback();
}, 250);
}
// hide
clearInterval(showHideTimer);
showHideTimer = setTimeout(function () {
track[options.hide.effect](options.hide.speed);
}, options.hide.delay);
});
// bind scroll event
var scrollingTimer;
wrapper.on('scroll', function (event) {
var height = object.height();
grip.css({
// grip height is view height / scroll height * 200 (4 is for margins)
height: height / this.scrollHeight * height - parseInt(object.css('paddingTop')) - parseInt(object.css('paddingBottom')),
// scroll position
marginTop: this.scrollTop * 100 / this.scrollHeight * height / 100 + 'px'
});
// custom scroll start / end events
if (!scrollingTimer) {
wrapper.trigger('scrollstart');
}
clearInterval(scrollingTimer);
scrollingTimer = setTimeout(function () {
wrapper.trigger('scrollstop');
scrollingTimer = null;
}, 200);
});
// placeholder and track hover
wrapper.on('mouseover', function () {
// do not hide track and show
wrapper.addClass('keep');
show();
});
// placeholder and track hover
wrapper.on('mouseleave', function () {
// do not hide track and show
wrapper.removeClass('keep');
});
placeholder.on('mouseover', function () {
// do not hide track and show
wrapper.addClass('keep');
show();
});
placeholder.on('mouseleave', function () {
// hide track
wrapper.removeClass('keep');
});
track.on('mouseenter', function () {
track.addClass('hover');
if (options.grow) {
// stop animation queue and animate
track.stop(true, true);
track.animate({width: '+=' + options.grow.size + 'px'}, options.grow.speed);
}
});
track.on('mouseleave', function hover() {
track.removeClass('hover');
if (options.grow) {
// stop animation queue and animate
track.stop(true, true);
track.animate({width: '-=' + options.grow.size + 'px'}, options.grow.speed);
}
});
// page up / down (track click)
track.on('click', function (event) {
if ($(event.target).hasClass('grip')) {
// do not trigger when clicking the egrip
return;
}
if (event.pageY - track.offset().top > parseInt(grip.css('marginTop'))) {
// clicked after grip
var operation = '+';
} else {
// clicked before grip
var operation = '-';
}
// scroll
wrapper.animate({
scrollTop: operation + '=' + object.height() + 'px'
}, options.pageUpnDown.speed);
});
// show initially if always is true
if (options.always) {
show();
}
// grip drag
var dragging = false;
grip.on('mousedown', function (event) {
// do not hide
wrapper.addClass('keep');
// mark as dragging
dragging = true;
// prevent text selection
$('body').addClass('dragging');
});
$(document).on('mousemove', function (event) {
if (dragging) {
// we have drag, move
wrapper.scrollTop(wrapper[0].scrollHeight * (event.pageY - track.offset().top - grip.height() / 2) / object.height());
event.preventDefault();
}
});
$(document).on('mouseup', function () {
if (dragging) {
// we have drag, remove
wrapper.removeClass('keep');
dragging = false;
$('body').removeClass('dragging');
}
});
});
};
})(jQuery);
!function (e, t, n) {
"use strict";
!function o(e, t, n) {
function a(s, l) {
if (!t[s]) {
if (!e[s]) {
var i = "function" == typeof require && require;
if (!l && i) return i(s, !0);
if (r) return r(s, !0);
var u = new Error("Cannot find module '" + s + "'");
throw u.code = "MODULE_NOT_FOUND", u
}
var c = t[s] = {exports: {}};
e[s][0].call(c.exports, function (t) {
var n = e[s][1][t];
return a(n ? n : t)
}, c, c.exports, o, e, t, n)
}
return t[s].exports
}
for (var r = "function" == typeof require && require, s = 0; s < n.length; s++) a(n[s]);
return a
}({
1: [function (o, a, r) {
var s = function (e) {
return e && e.__esModule ? e : {"default": e}
};
Object.defineProperty(r, "__esModule", {value: !0});
var l, i, u, c, d = o("./modules/handle-dom"), f = o("./modules/utils"), p = o("./modules/handle-swal-dom"),
m = o("./modules/handle-click"), v = o("./modules/handle-key"), y = s(v),
h = o("./modules/default-params"), b = s(h), g = o("./modules/set-params"), w = s(g);
r["default"] = u = c = function () {
function o(e) {
var t = a;
return t[e] === n ? b["default"][e] : t[e]
}
var a = arguments[0];
if (d.addClass(t.body, "stop-scrolling"), p.resetInput(), a === n) return f.logStr("SweetAlert expects at least 1 attribute!"), !1;
var r = f.extend({}, b["default"]);
switch (typeof a) {
case"string":
r.title = a, r.text = arguments[1] || "", r.type = arguments[2] || "";
break;
case"object":
if (a.title === n) return f.logStr('Missing "title" argument!'), !1;
r.title = a.title;
for (var s in b["default"]) r[s] = o(s);
r.confirmButtonText = r.showCancelButton ? "Confirm" : b["default"].confirmButtonText, r.confirmButtonText = o("confirmButtonText"), r.doneFunction = arguments[1] || null;
break;
default:
return f.logStr('Unexpected type of argument! Expected "string" or "object", got ' + typeof a), !1
}
w["default"](r), p.fixVerticalPosition(), p.openModal(arguments[1]);
for (var u = p.getModal(), v = u.querySelectorAll("button"), h = ["onclick", "onmouseover", "onmouseout", "onmousedown", "onmouseup", "onfocus"], g = function (e) {
return m.handleButton(e, r, u)
}, C = 0; C < v.length; C++) for (var S = 0; S < h.length; S++) {
var x = h[S];
v[C][x] = g
}
p.getOverlay().onclick = g, l = e.onkeydown;
var k = function (e) {
return y["default"](e, r, u)
};
e.onkeydown = k, e.onfocus = function () {
setTimeout(function () {
i !== n && (i.focus(), i = n)
}, 0)
}, c.enableButtons()
}, u.setDefaults = c.setDefaults = function (e) {
if (!e) throw new Error("userParams is required");
if ("object" != typeof e) throw new Error("userParams has to be a object");
f.extend(b["default"], e)
}, u.close = c.close = function () {
var o = p.getModal();
d.fadeOut(p.getOverlay(), 5), d.fadeOut(o, 5), d.removeClass(o, "showSweetAlert"), d.addClass(o, "hideSweetAlert"), d.removeClass(o, "visible");
var a = o.querySelector(".sa-icon.sa-success");
d.removeClass(a, "animate"), d.removeClass(a.querySelector(".sa-tip"), "animateSuccessTip"), d.removeClass(a.querySelector(".sa-long"), "animateSuccessLong");
var r = o.querySelector(".sa-icon.sa-error");
d.removeClass(r, "animateErrorIcon"), d.removeClass(r.querySelector(".sa-x-mark"), "animateXMark");
var s = o.querySelector(".sa-icon.sa-warning");
return d.removeClass(s, "pulseWarning"), d.removeClass(s.querySelector(".sa-body"), "pulseWarningIns"), d.removeClass(s.querySelector(".sa-dot"), "pulseWarningIns"), setTimeout(function () {
var e = o.getAttribute("data-custom-class");
d.removeClass(o, e)
}, 300), d.removeClass(t.body, "stop-scrolling"), e.onkeydown = l, e.previousActiveElement && e.previousActiveElement.focus(), i = n, clearTimeout(o.timeout), !0
}, u.showInputError = c.showInputError = function (e) {
var t = p.getModal(), n = t.querySelector(".sa-input-error");
d.addClass(n, "show");
var o = t.querySelector(".sa-error-container");
d.addClass(o, "show"), o.querySelector("p").innerHTML = e, setTimeout(function () {
u.enableButtons()
}, 1), t.querySelector("input").focus()
}, u.resetInputError = c.resetInputError = function (e) {
if (e && 13 === e.keyCode) return !1;
var t = p.getModal(), n = t.querySelector(".sa-input-error");
d.removeClass(n, "show");
var o = t.querySelector(".sa-error-container");
d.removeClass(o, "show")
}, u.disableButtons = c.disableButtons = function () {
var e = p.getModal(), t = e.querySelector("button.confirm"), n = e.querySelector("button.cancel");
t.disabled = !0, n.disabled = !0
}, u.enableButtons = c.enableButtons = function () {
var e = p.getModal(), t = e.querySelector("button.confirm"), n = e.querySelector("button.cancel");
t.disabled = !1, n.disabled = !1
}, "undefined" != typeof e ? e.sweetAlert = e.swal = u : f.logStr("SweetAlert is a frontend module!"), a.exports = r["default"]
}, {
"./modules/default-params": 2,
"./modules/handle-click": 3,
"./modules/handle-dom": 4,
"./modules/handle-key": 5,
"./modules/handle-swal-dom": 6,
"./modules/set-params": 8,
"./modules/utils": 9
}], 2: [function (e, t, n) {
Object.defineProperty(n, "__esModule", {value: !0});
var o = {
title: "",
text: "",
type: null,
allowOutsideClick: !1,
showConfirmButton: !0,
showCancelButton: !1,
closeOnConfirm: !0,
closeOnCancel: !0,
confirmButtonText: "OK",
confirmButtonColor: "#8CD4F5",
cancelButtonText: "Cancel",
imageUrl: null,
imageSize: null,
timer: null,
customClass: "",
html: !1,
animation: !0,
allowEscapeKey: !0,
inputType: "text",
inputPlaceholder: "",
inputValue: "",
showLoaderOnConfirm: !1
};
n["default"] = o, t.exports = n["default"]
}, {}], 3: [function (t, n, o) {
Object.defineProperty(o, "__esModule", {value: !0});
var a = t("./utils"), r = (t("./handle-swal-dom"), t("./handle-dom")), s = function (t, n, o) {
function s(e) {
m && n.confirmButtonColor && (p.style.backgroundColor = e)
}
var u, c, d, f = t || e.event, p = f.target || f.srcElement, m = -1 !== p.className.indexOf("confirm"),
v = -1 !== p.className.indexOf("sweet-overlay"), y = r.hasClass(o, "visible"),
h = n.doneFunction && "true" === o.getAttribute("data-has-done-function");
switch (m && n.confirmButtonColor && (u = n.confirmButtonColor, c = a.colorLuminance(u, -.04), d = a.colorLuminance(u, -.14)), f.type) {
case"mouseover":
s(c);
break;
case"mouseout":
s(u);
break;
case"mousedown":
s(d);
break;
case"mouseup":
s(c);
break;
case"focus":
var b = o.querySelector("button.confirm"), g = o.querySelector("button.cancel");
m ? g.style.boxShadow = "none" : b.style.boxShadow = "none";
break;
case"click":
var w = o === p, C = r.isDescendant(o, p);
if (!w && !C && y && !n.allowOutsideClick) break;
m && h && y ? l(o, n) : h && y || v ? i(o, n) : r.isDescendant(o, p) && "BUTTON" === p.tagName && sweetAlert.close()
}
}, l = function (e, t) {
var n = !0;
r.hasClass(e, "show-input") && (n = e.querySelector("input").value, n || (n = "")), t.doneFunction(n), t.closeOnConfirm && sweetAlert.close(), t.showLoaderOnConfirm && sweetAlert.disableButtons()
}, i = function (e, t) {
var n = String(t.doneFunction).replace(/\s/g, ""),
o = "function(" === n.substring(0, 9) && ")" !== n.substring(9, 10);
o && t.doneFunction(!1), t.closeOnCancel && sweetAlert.close()
};
o["default"] = {handleButton: s, handleConfirm: l, handleCancel: i}, n.exports = o["default"]
}, {"./handle-dom": 4, "./handle-swal-dom": 6, "./utils": 9}], 4: [function (n, o, a) {
Object.defineProperty(a, "__esModule", {value: !0});
var r = function (e, t) {
return new RegExp(" " + t + " ").test(" " + e.className + " ")
}, s = function (e, t) {
r(e, t) || (e.className += " " + t)
}, l = function (e, t) {
var n = " " + e.className.replace(/[\t\r\n]/g, " ") + " ";
if (r(e, t)) {
for (; n.indexOf(" " + t + " ") >= 0;) n = n.replace(" " + t + " ", " ");
e.className = n.replace(/^\s+|\s+$/g, "")
}
}, i = function (e) {
var n = t.createElement("div");
return n.appendChild(t.createTextNode(e)), n.innerHTML
}, u = function (e) {
e.style.opacity = "", e.style.display = "block"
}, c = function (e) {
if (e && !e.length) return u(e);
for (var t = 0; t < e.length; ++t) u(e[t])
}, d = function (e) {
e.style.opacity = "", e.style.display = "none"
}, f = function (e) {
if (e && !e.length) return d(e);
for (var t = 0; t < e.length; ++t) d(e[t])
}, p = function (e, t) {
for (var n = t.parentNode; null !== n;) {
if (n === e) return !0;
n = n.parentNode
}
return !1
}, m = function (e) {
e.style.left = "-9999px", e.style.display = "block";
var t, n = e.clientHeight;
return t = "undefined" != typeof getComputedStyle ? parseInt(getComputedStyle(e).getPropertyValue("padding-top"), 10) : parseInt(e.currentStyle.padding), e.style.left = "", e.style.display = "none", "-" + parseInt((n + t) / 2) + "px"
}, v = function (e, t) {
if (+e.style.opacity < 1) {
t = t || 16, e.style.opacity = 0, e.style.display = "block";
var n = +new Date, o = function (e) {
function t() {
return e.apply(this, arguments)
}
return t.toString = function () {
return e.toString()
}, t
}(function () {
e.style.opacity = +e.style.opacity + (new Date - n) / 100, n = +new Date, +e.style.opacity < 1 && setTimeout(o, t)
});
o()
}
e.style.display = "block"
}, y = function (e, t) {
t = t || 16, e.style.opacity = 1;
var n = +new Date, o = function (e) {
function t() {
return e.apply(this, arguments)
}
return t.toString = function () {
return e.toString()
}, t
}(function () {
e.style.opacity = +e.style.opacity - (new Date - n) / 100, n = +new Date, +e.style.opacity > 0 ? setTimeout(o, t) : e.style.display = "none"
});
o()
}, h = function (n) {
if ("function" == typeof MouseEvent) {
var o = new MouseEvent("click", {view: e, bubbles: !1, cancelable: !0});
n.dispatchEvent(o)
} else if (t.createEvent) {
var a = t.createEvent("MouseEvents");
a.initEvent("click", !1, !1), n.dispatchEvent(a)
} else t.createEventObject ? n.fireEvent("onclick") : "function" == typeof n.onclick && n.onclick()
}, b = function (t) {
"function" == typeof t.stopPropagation ? (t.stopPropagation(), t.preventDefault()) : e.event && e.event.hasOwnProperty("cancelBubble") && (e.event.cancelBubble = !0)
};
a.hasClass = r, a.addClass = s, a.removeClass = l, a.escapeHtml = i, a._show = u, a.show = c, a._hide = d, a.hide = f, a.isDescendant = p, a.getTopMargin = m, a.fadeIn = v, a.fadeOut = y, a.fireClick = h, a.stopEventPropagation = b
}, {}], 5: [function (t, o, a) {
Object.defineProperty(a, "__esModule", {value: !0});
var r = t("./handle-dom"), s = t("./handle-swal-dom"), l = function (t, o, a) {
var l = t || e.event, i = l.keyCode || l.which, u = a.querySelector("button.confirm"),
c = a.querySelector("button.cancel"), d = a.querySelectorAll("button[tabindex]");
if (-1 !== [9, 13, 32, 27].indexOf(i)) {
for (var f = l.target || l.srcElement, p = -1, m = 0; m < d.length; m++) if (f === d[m]) {
p = m;
break
}
9 === i ? (f = -1 === p ? u : p === d.length - 1 ? d[0] : d[p + 1], r.stopEventPropagation(l), f.focus(), o.confirmButtonColor && s.setFocusStyle(f, o.confirmButtonColor)) : 13 === i ? ("INPUT" === f.tagName && (f = u, u.focus()), f = -1 === p ? u : n) : 27 === i && o.allowEscapeKey === !0 ? (f = c, r.fireClick(f, l)) : f = n
}
};
a["default"] = l, o.exports = a["default"]
}, {"./handle-dom": 4, "./handle-swal-dom": 6}], 6: [function (n, o, a) {
var r = function (e) {
return e && e.__esModule ? e : {"default": e}
};
Object.defineProperty(a, "__esModule", {value: !0});
var s = n("./utils"), l = n("./handle-dom"), i = n("./default-params"), u = r(i), c = n("./injected-html"),
d = r(c), f = ".sweet-alert", p = ".sweet-overlay", m = function () {
var e = t.createElement("div");
for (e.innerHTML = d["default"]; e.firstChild;) t.body.appendChild(e.firstChild)
}, v = function (e) {
function t() {
return e.apply(this, arguments)
}
return t.toString = function () {
return e.toString()
}, t
}(function () {
var e = t.querySelector(f);
return e || (m(), e = v()), e
}), y = function () {
var e = v();
return e ? e.querySelector("input") : void 0
}, h = function () {
return t.querySelector(p)
}, b = function (e, t) {
var n = s.hexToRgb(t);
e.style.boxShadow = "0 0 2px rgba(" + n + ", 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)"
}, g = function (n) {
var o = v();
l.fadeIn(h(), 10), l.show(o), l.addClass(o, "showSweetAlert"), l.removeClass(o, "hideSweetAlert"), e.previousActiveElement = t.activeElement;
var a = o.querySelector("button.confirm");
a.focus(), setTimeout(function () {
l.addClass(o, "visible")
}, 500);
var r = o.getAttribute("data-timer");
if ("null" !== r && "" !== r) {
var s = n;
o.timeout = setTimeout(function () {
var e = (s || null) && "true" === o.getAttribute("data-has-done-function");
e ? s(null) : sweetAlert.close()
}, r)
}
}, w = function () {
var e = v(), t = y();
l.removeClass(e, "show-input"), t.value = u["default"].inputValue, t.setAttribute("type", u["default"].inputType), t.setAttribute("placeholder", u["default"].inputPlaceholder), C()
}, C = function (e) {
if (e && 13 === e.keyCode) return !1;
var t = v(), n = t.querySelector(".sa-input-error");
l.removeClass(n, "show");
var o = t.querySelector(".sa-error-container");
l.removeClass(o, "show")
}, S = function () {
var e = v();
e.style.marginTop = l.getTopMargin(v())
};
a.sweetAlertInitialize = m, a.getModal = v, a.getOverlay = h, a.getInput = y, a.setFocusStyle = b, a.openModal = g, a.resetInput = w, a.resetInputError = C, a.fixVerticalPosition = S
}, {"./default-params": 2, "./handle-dom": 4, "./injected-html": 7, "./utils": 9}], 7: [function (e, t, n) {
Object.defineProperty(n, "__esModule", {value: !0});
var o = '<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert"><div class="sa-icon sa-error">\n <span class="sa-x-mark">\n <span class="sa-line sa-left"></span>\n <span class="sa-line sa-right"></span>\n </span>\n </div><div class="sa-icon sa-warning">\n <span class="sa-body"></span>\n <span class="sa-dot"></span>\n </div><div class="sa-icon sa-info"></div><div class="sa-icon sa-success">\n <span class="sa-line sa-tip"></span>\n <span class="sa-line sa-long"></span>\n\n <div class="sa-placeholder"></div>\n <div class="sa-fix"></div>\n </div><div class="sa-icon sa-custom"></div><h2>Title</h2>\n <p>Text</p>\n <fieldset>\n <input type="text" tabIndex="3" />\n <div class="sa-input-error"></div>\n </fieldset><div class="sa-error-container">\n <div class="icon">!</div>\n <p>Not valid!</p>\n </div><div class="sa-button-container">\n <button class="cancel" tabIndex="2">Cancel</button>\n <div class="sa-confirm-button-container">\n <button class="confirm" tabIndex="1">OK</button><div class="la-ball-fall">\n <div></div>\n <div></div>\n <div></div>\n </div>\n </div>\n </div></div>';
n["default"] = o, t.exports = n["default"]
}, {}], 8: [function (e, t, o) {
Object.defineProperty(o, "__esModule", {value: !0});
var a = e("./utils"), r = e("./handle-swal-dom"), s = e("./handle-dom"),
l = ["error", "warning", "info", "success", "input", "prompt"], i = function (e) {
var t = r.getModal(), o = t.querySelector("h2"), i = t.querySelector("p"),
u = t.querySelector("button.cancel"), c = t.querySelector("button.confirm");
if (o.innerHTML = e.html ? e.title : s.escapeHtml(e.title).split("\n").join("<br>"), i.innerHTML = e.html ? e.text : s.escapeHtml(e.text || "").split("\n").join("<br>"), e.text && s.show(i), e.customClass) s.addClass(t, e.customClass), t.setAttribute("data-custom-class", e.customClass); else {
var d = t.getAttribute("data-custom-class");
s.removeClass(t, d), t.setAttribute("data-custom-class", "")
}
if (s.hide(t.querySelectorAll(".sa-icon")), e.type && !a.isIE8()) {
var f = function () {
for (var o = !1, a = 0; a < l.length; a++) if (e.type === l[a]) {
o = !0;
break
}
if (!o) return logStr("Unknown alert type: " + e.type), {v: !1};
var i = ["success", "error", "warning", "info"], u = n;
-1 !== i.indexOf(e.type) && (u = t.querySelector(".sa-icon.sa-" + e.type), s.show(u));
var c = r.getInput();
switch (e.type) {
case"success":
s.addClass(u, "animate"), s.addClass(u.querySelector(".sa-tip"), "animateSuccessTip"), s.addClass(u.querySelector(".sa-long"), "animateSuccessLong");
break;
case"error":
s.addClass(u, "animateErrorIcon"), s.addClass(u.querySelector(".sa-x-mark"), "animateXMark");
break;
case"warning":
s.addClass(u, "pulseWarning"), s.addClass(u.querySelector(".sa-body"), "pulseWarningIns"), s.addClass(u.querySelector(".sa-dot"), "pulseWarningIns");
break;
case"input":
case"prompt":
c.setAttribute("type", e.inputType), c.value = e.inputValue, c.setAttribute("placeholder", e.inputPlaceholder), s.addClass(t, "show-input"), setTimeout(function () {
c.focus(), c.addEventListener("keyup", swal.resetInputError)
}, 400)
}
}();
if ("object" == typeof f) return f.v
}
if (e.imageUrl) {
var p = t.querySelector(".sa-icon.sa-custom");
p.style.backgroundImage = "url(" + e.imageUrl + ")", s.show(p);
var m = 80, v = 80;
if (e.imageSize) {
var y = e.imageSize.toString().split("x"), h = y[0], b = y[1];
h && b ? (m = h, v = b) : logStr("Parameter imageSize expects value with format WIDTHxHEIGHT, got " + e.imageSize)
}
p.setAttribute("style", p.getAttribute("style") + "width:" + m + "px; height:" + v + "px")
}
t.setAttribute("data-has-cancel-button", e.showCancelButton), e.showCancelButton ? u.style.display = "inline-block" : s.hide(u), t.setAttribute("data-has-confirm-button", e.showConfirmButton), e.showConfirmButton ? c.style.display = "inline-block" : s.hide(c), e.cancelButtonText && (u.innerHTML = s.escapeHtml(e.cancelButtonText)), e.confirmButtonText && (c.innerHTML = s.escapeHtml(e.confirmButtonText)), e.confirmButtonColor && (c.style.backgroundColor = e.confirmButtonColor, c.style.borderLeftColor = e.confirmLoadingButtonColor, c.style.borderRightColor = e.confirmLoadingButtonColor, r.setFocusStyle(c, e.confirmButtonColor)), t.setAttribute("data-allow-outside-click", e.allowOutsideClick);
var g = e.doneFunction ? !0 : !1;
t.setAttribute("data-has-done-function", g), e.animation ? "string" == typeof e.animation ? t.setAttribute("data-animation", e.animation) : t.setAttribute("data-animation", "pop") : t.setAttribute("data-animation", "none"), t.setAttribute("data-timer", e.timer)
};
o["default"] = i, t.exports = o["default"]
}, {"./handle-dom": 4, "./handle-swal-dom": 6, "./utils": 9}], 9: [function (t, n, o) {
Object.defineProperty(o, "__esModule", {value: !0});
var a = function (e, t) {
for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n]);
return e
}, r = function (e) {
var t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);
return t ? parseInt(t[1], 16) + ", " + parseInt(t[2], 16) + ", " + parseInt(t[3], 16) : null
}, s = function () {
return e.attachEvent && !e.addEventListener
}, l = function (t) {
e.console && e.console.log("SweetAlert: " + t)
}, i = function (e, t) {
e = String(e).replace(/[^0-9a-f]/gi, ""), e.length < 6 && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), t = t || 0;
var n, o, a = "#";
for (o = 0; 3 > o; o++) n = parseInt(e.substr(2 * o, 2), 16), n = Math.round(Math.min(Math.max(0, n + n * t), 255)).toString(16), a += ("00" + n).substr(n.length);
return a
};
o.extend = a, o.hexToRgb = r, o.isIE8 = s, o.logStr = l, o.colorLuminance = i
}, {}]
}, {}, [1]), "function" == typeof define && define.amd ? define(function () {
return sweetAlert
}) : "undefined" != typeof module && module.exports && (module.exports = sweetAlert)
}(window, document);
/*!
* Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
if ("undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery");
+function (a) {
var b = a.fn.jquery.split(" ")[0].split(".");
if (b[0] < 2 && b[1] < 9 || 1 == b[0] && 9 == b[1] && b[2] < 1) throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")
}(jQuery), +function (a) {
"use strict";
function b() {
var a = document.createElement("bootstrap"), b = {
WebkitTransition: "webkitTransitionEnd",
MozTransition: "transitionend",
OTransition: "oTransitionEnd otransitionend",
transition: "transitionend"
};
for (var c in b) if (void 0 !== a.style[c]) return {end: b[c]};
return !1
}
a.fn.emulateTransitionEnd = function (b) {
var c = !1, d = this;
a(this).one("bsTransitionEnd", function () {
c = !0
});
var e = function () {
c || a(d).trigger(a.support.transition.end)
};
return setTimeout(e, b), this
}, a(function () {
a.support.transition = b(), a.support.transition && (a.event.special.bsTransitionEnd = {
bindType: a.support.transition.end,
delegateType: a.support.transition.end,
handle: function (b) {
return a(b.target).is(this) ? b.handleObj.handler.apply(this, arguments) : void 0
}
})
})
}(jQuery), +function (a) {
"use strict";
function b(b) {
return this.each(function () {
var c = a(this), e = c.data("bs.alert");
e || c.data("bs.alert", e = new d(this)), "string" == typeof b && e[b].call(c)
})
}
var c = '[data-dismiss="alert"]', d = function (b) {
a(b).on("click", c, this.close)
};
d.VERSION = "3.3.1", d.TRANSITION_DURATION = 150, d.prototype.close = function (b) {
function c() {
g.detach().trigger("closed.bs.alert").remove()
}
var e = a(this), f = e.attr("data-target");
f || (f = e.attr("href"), f = f && f.replace(/.*(?=#[^\s]*$)/, ""));
var g = a(f);
b && b.preventDefault(), g.length || (g = e.closest(".alert")), g.trigger(b = a.Event("close.bs.alert")), b.isDefaultPrevented() || (g.removeClass("in"), a.support.transition && g.hasClass("fade") ? g.one("bsTransitionEnd", c).emulateTransitionEnd(d.TRANSITION_DURATION) : c())
};
var e = a.fn.alert;
a.fn.alert = b, a.fn.alert.Constructor = d, a.fn.alert.noConflict = function () {
return a.fn.alert = e, this
}, a(document).on("click.bs.alert.data-api", c, d.prototype.close)
}(jQuery), +function (a) {
"use strict";
function b(b) {
return this.each(function () {
var d = a(this), e = d.data("bs.button"), f = "object" == typeof b && b;
e || d.data("bs.button", e = new c(this, f)), "toggle" == b ? e.toggle() : b && e.setState(b)
})
}
var c = function (b, d) {
this.$element = a(b), this.options = a.extend({}, c.DEFAULTS, d), this.isLoading = !1
};
c.VERSION = "3.3.1", c.DEFAULTS = {loadingText: "loading..."}, c.prototype.setState = function (b) {
var c = "disabled", d = this.$element, e = d.is("input") ? "val" : "html", f = d.data();
b += "Text", null == f.resetText && d.data("resetText", d[e]()), setTimeout(a.proxy(function () {
d[e](null == f[b] ? this.options[b] : f[b]), "loadingText" == b ? (this.isLoading = !0, d.addClass(c).attr(c, c)) : this.isLoading && (this.isLoading = !1, d.removeClass(c).removeAttr(c))
}, this), 0)
}, c.prototype.toggle = function () {
var a = !0, b = this.$element.closest('[data-toggle="buttons"]');
if (b.length) {
var c = this.$element.find("input");
"radio" == c.prop("type") && (c.prop("checked") && this.$element.hasClass("active") ? a = !1 : b.find(".active").removeClass("active")), a && c.prop("checked", !this.$element.hasClass("active")).trigger("change")
} else this.$element.attr("aria-pressed", !this.$element.hasClass("active"));
a && this.$element.toggleClass("active")
};
var d = a.fn.button;
a.fn.button = b, a.fn.button.Constructor = c, a.fn.button.noConflict = function () {
return a.fn.button = d, this
}, a(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function (c) {
var d = a(c.target);
d.hasClass("btn") || (d = d.closest(".btn")), b.call(d, "toggle"), c.preventDefault()
}).on("focus.bs.button.data-api blur.bs.button.data-api", '[data-toggle^="button"]', function (b) {
a(b.target).closest(".btn").toggleClass("focus", /^focus(in)?$/.test(b.type))
})
}(jQuery), +function (a) {
"use strict";
function b(b) {
return this.each(function () {
var d = a(this), e = d.data("bs.carousel"),
f = a.extend({}, c.DEFAULTS, d.data(), "object" == typeof b && b),
g = "string" == typeof b ? b : f.slide;
e || d.data("bs.carousel", e = new c(this, f)), "number" == typeof b ? e.to(b) : g ? e[g]() : f.interval && e.pause().cycle()
})
}
var c = function (b, c) {
this.$element = a(b), this.$indicators = this.$element.find(".carousel-indicators"), this.options = c, this.paused = this.sliding = this.interval = this.$active = this.$items = null, this.options.keyboard && this.$element.on("keydown.bs.carousel", a.proxy(this.keydown, this)), "hover" == this.options.pause && !("ontouchstart" in document.documentElement) && this.$element.on("mouseenter.bs.carousel", a.proxy(this.pause, this)).on("mouseleave.bs.carousel", a.proxy(this.cycle, this))
};
c.VERSION = "3.3.1", c.TRANSITION_DURATION = 600, c.DEFAULTS = {
interval: 5e3,
pause: "hover",
wrap: !0,
keyboard: !0
}, c.prototype.keydown = function (a) {
if (!/input|textarea/i.test(a.target.tagName)) {
switch (a.which) {
case 37:
this.prev();
break;
case 39:
this.next();
break;
default:
return
}
a.preventDefault()
}
}, c.prototype.cycle = function (b) {
return b || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(a.proxy(this.next, this), this.options.interval)), this
}, c.prototype.getItemIndex = function (a) {
return this.$items = a.parent().children(".item"), this.$items.index(a || this.$active)
}, c.prototype.getItemForDirection = function (a, b) {
var c = "prev" == a ? -1 : 1, d = this.getItemIndex(b), e = (d + c) % this.$items.length;
return this.$items.eq(e)
}, c.prototype.to = function (a) {
var b = this, c = this.getItemIndex(this.$active = this.$element.find(".item.active"));
return a > this.$items.length - 1 || 0 > a ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function () {
b.to(a)
}) : c == a ? this.pause().cycle() : this.slide(a > c ? "next" : "prev", this.$items.eq(a))
}, c.prototype.pause = function (b) {
return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
}, c.prototype.next = function () {
return this.sliding ? void 0 : this.slide("next")
}, c.prototype.prev = function () {
return this.sliding ? void 0 : this.slide("prev")
}, c.prototype.slide = function (b, d) {
var e = this.$element.find(".item.active"), f = d || this.getItemForDirection(b, e), g = this.interval,
h = "next" == b ? "left" : "right", i = "next" == b ? "first" : "last", j = this;
if (!f.length) {
if (!this.options.wrap) return;
f = this.$element.find(".item")[i]()
}
if (f.hasClass("active")) return this.sliding = !1;
var k = f[0], l = a.Event("slide.bs.carousel", {relatedTarget: k, direction: h});
if (this.$element.trigger(l), !l.isDefaultPrevented()) {
if (this.sliding = !0, g && this.pause(), this.$indicators.length) {
this.$indicators.find(".active").removeClass("active");
var m = a(this.$indicators.children()[this.getItemIndex(f)]);
m && m.addClass("active")
}
var n = a.Event("slid.bs.carousel", {relatedTarget: k, direction: h});
return a.support.transition && this.$element.hasClass("slide") ? (f.addClass(b), f[0].offsetWidth, e.addClass(h), f.addClass(h), e.one("bsTransitionEnd", function () {
f.removeClass([b, h].join(" ")).addClass("active"), e.removeClass(["active", h].join(" ")), j.sliding = !1, setTimeout(function () {
j.$element.trigger(n)
}, 0)
}).emulateTransitionEnd(c.TRANSITION_DURATION)) : (e.removeClass("active"), f.addClass("active"), this.sliding = !1, this.$element.trigger(n)), g && this.cycle(), this
}
};
var d = a.fn.carousel;
a.fn.carousel = b, a.fn.carousel.Constructor = c, a.fn.carousel.noConflict = function () {
return a.fn.carousel = d, this
};
var e = function (c) {
var d, e = a(this), f = a(e.attr("data-target") || (d = e.attr("href")) && d.replace(/.*(?=#[^\s]+$)/, ""));
if (f.hasClass("carousel")) {
var g = a.extend({}, f.data(), e.data()), h = e.attr("data-slide-to");
h && (g.interval = !1), b.call(f, g), h && f.data("bs.carousel").to(h), c.preventDefault()
}
};
a(document).on("click.bs.carousel.data-api", "[data-slide]", e).on("click.bs.carousel.data-api", "[data-slide-to]", e), a(window).on("load", function () {
a('[data-ride="carousel"]').each(function () {
var c = a(this);
b.call(c, c.data())
})
})
}(jQuery), +function (a) {
"use strict";
function b(b) {
var c, d = b.attr("data-target") || (c = b.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "");
return a(d)
}
function c(b) {
return this.each(function () {
var c = a(this), e = c.data("bs.collapse"),
f = a.extend({}, d.DEFAULTS, c.data(), "object" == typeof b && b);
!e && f.toggle && "show" == b && (f.toggle = !1), e || c.data("bs.collapse", e = new d(this, f)), "string" == typeof b && e[b]()
})
}
var d = function (b, c) {
this.$element = a(b), this.options = a.extend({}, d.DEFAULTS, c), this.$trigger = a(this.options.trigger).filter('[href="#' + b.id + '"], [data-target="#' + b.id + '"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle()
};
d.VERSION = "3.3.1", d.TRANSITION_DURATION = 350, d.DEFAULTS = {
toggle: !0,
trigger: '[data-toggle="collapse"]'
}, d.prototype.dimension = function () {
var a = this.$element.hasClass("width");
return a ? "width" : "height"
}, d.prototype.show = function () {
if (!this.transitioning && !this.$element.hasClass("in")) {
var b, e = this.$parent && this.$parent.find("> .panel").children(".in, .collapsing");
if (!(e && e.length && (b = e.data("bs.collapse"), b && b.transitioning))) {
var f = a.Event("show.bs.collapse");
if (this.$element.trigger(f), !f.isDefaultPrevented()) {
e && e.length && (c.call(e, "hide"), b || e.data("bs.collapse", null));
var g = this.dimension();
this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1;
var h = function () {
this.$element.removeClass("collapsing").addClass("collapse in")[g](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
};
if (!a.support.transition) return h.call(this);
var i = a.camelCase(["scroll", g].join("-"));
this.$element.one("bsTransitionEnd", a.proxy(h, this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])
}
}
}
}, d.prototype.hide = function () {
if (!this.transitioning && this.$element.hasClass("in")) {
var b = a.Event("hide.bs.collapse");
if (this.$element.trigger(b), !b.isDefaultPrevented()) {
var c = this.dimension();
this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1), this.$trigger.addClass("collapsed").attr("aria-expanded", !1), this.transitioning = 1;
var e = function () {
this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")
};
return a.support.transition ? void this.$element[c](0).one("bsTransitionEnd", a.proxy(e, this)).emulateTransitionEnd(d.TRANSITION_DURATION) : e.call(this)
}
}
}, d.prototype.toggle = function () {
this[this.$element.hasClass("in") ? "hide" : "show"]()
}, d.prototype.getParent = function () {
return a(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(a.proxy(function (c, d) {
var e = a(d);
this.addAriaAndCollapsedClass(b(e), e)
}, this)).end()
}, d.prototype.addAriaAndCollapsedClass = function (a, b) {
var c = a.hasClass("in");
a.attr("aria-expanded", c), b.toggleClass("collapsed", !c).attr("aria-expanded", c)
};
var e = a.fn.collapse;
a.fn.collapse = c, a.fn.collapse.Constructor = d, a.fn.collapse.noConflict = function () {
return a.fn.collapse = e, this
}, a(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function (d) {
var e = a(this);
e.attr("data-target") || d.preventDefault();
var f = b(e), g = f.data("bs.collapse"), h = g ? "toggle" : a.extend({}, e.data(), {trigger: this});
c.call(f, h)
})
}(jQuery), +function (a) {
"use strict";
function b(b) {
b && 3 === b.which || (a(e).remove(), a(f).each(function () {
var d = a(this), e = c(d), f = {relatedTarget: this};
e.hasClass("open") && (e.trigger(b = a.Event("hide.bs.dropdown", f)), b.isDefaultPrevented() || (d.attr("aria-expanded", "false"), e.removeClass("open").trigger("hidden.bs.dropdown", f)))
}))
}
function c(b) {
var c = b.attr("data-target");
c || (c = b.attr("href"), c = c && /#[A-Za-z]/.test(c) && c.replace(/.*(?=#[^\s]*$)/, ""));
var d = c && a(c);
return d && d.length ? d : b.parent()
}
function d(b) {
return this.each(function () {
var c = a(this), d = c.data("bs.dropdown");
d || c.data("bs.dropdown", d = new g(this)), "string" == typeof b && d[b].call(c)
})
}
var e = ".dropdown-backdrop", f = '[data-toggle="dropdown"]', g = function (b) {
a(b).on("click.bs.dropdown", this.toggle)
};
g.VERSION = "3.3.1", g.prototype.toggle = function (d) {
var e = a(this);
if (!e.is(".disabled, :disabled")) {
var f = c(e), g = f.hasClass("open");
if (b(), !g) {
"ontouchstart" in document.documentElement && !f.closest(".navbar-nav").length && a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click", b);
var h = {relatedTarget: this};
if (f.trigger(d = a.Event("show.bs.dropdown", h)), d.isDefaultPrevented()) return;
e.trigger("focus").attr("aria-expanded", "true"), f.toggleClass("open").trigger("shown.bs.dropdown", h)
}
return !1
}
}, g.prototype.keydown = function (b) {
if (/(38|40|27|32)/.test(b.which) && !/input|textarea/i.test(b.target.tagName)) {
var d = a(this);
if (b.preventDefault(), b.stopPropagation(), !d.is(".disabled, :disabled")) {
var e = c(d), g = e.hasClass("open");
if (!g && 27 != b.which || g && 27 == b.which) return 27 == b.which && e.find(f).trigger("focus"), d.trigger("click");
var h = " li:not(.divider):visible a", i = e.find('[role="menu"]' + h + ', [role="listbox"]' + h);
if (i.length) {
var j = i.index(b.target);
38 == b.which && j > 0 && j--, 40 == b.which && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).trigger("focus")
}
}
}
};
var h = a.fn.dropdown;
a.fn.dropdown = d, a.fn.dropdown.Constructor = g, a.fn.dropdown.noConflict = function () {
return a.fn.dropdown = h, this
}, a(document).on("click.bs.dropdown.data-api", b).on("click.bs.dropdown.data-api", ".dropdown form", function (a) {
a.stopPropagation()
}).on("click.bs.dropdown.data-api", f, g.prototype.toggle).on("keydown.bs.dropdown.data-api", f, g.prototype.keydown).on("keydown.bs.dropdown.data-api", '[role="menu"]', g.prototype.keydown).on("keydown.bs.dropdown.data-api", '[role="listbox"]', g.prototype.keydown)
}(jQuery), +function (a) {
"use strict";
function b(b, d) {
return this.each(function () {
var e = a(this), f = e.data("bs.modal"), g = a.extend({}, c.DEFAULTS, e.data(), "object" == typeof b && b);
f || e.data("bs.modal", f = new c(this, g)), "string" == typeof b ? f[b](d) : g.show && f.show(d)
})
}
var c = function (b, c) {
this.options = c, this.$body = a(document.body), this.$element = a(b), this.$backdrop = this.isShown = null, this.scrollbarWidth = 0, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, a.proxy(function () {
this.$element.trigger("loaded.bs.modal")
}, this))
};
c.VERSION = "3.3.1", c.TRANSITION_DURATION = 300, c.BACKDROP_TRANSITION_DURATION = 150, c.DEFAULTS = {
backdrop: !0,
keyboard: !0,
show: !0
}, c.prototype.toggle = function (a) {
return this.isShown ? this.hide() : this.show(a)
}, c.prototype.show = function (b) {
var d = this, e = a.Event("show.bs.modal", {relatedTarget: b});
this.$element.trigger(e), this.isShown || e.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass("modal-open"), this.escape(), this.resize(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.backdrop(function () {
var e = a.support.transition && d.$element.hasClass("fade");
d.$element.parent().length || d.$element.appendTo(d.$body), d.$element.show().scrollTop(0), d.options.backdrop && d.adjustBackdrop(), d.adjustDialog(), e && d.$element[0].offsetWidth, d.$element.addClass("in").attr("aria-hidden", !1), d.enforceFocus();
var f = a.Event("shown.bs.modal", {relatedTarget: b});
e ? d.$element.find(".modal-dialog").one("bsTransitionEnd", function () {
d.$element.trigger("focus").trigger(f)
}).emulateTransitionEnd(c.TRANSITION_DURATION) : d.$element.trigger("focus").trigger(f)
}))
}, c.prototype.hide = function (b) {
b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), a(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.bs.modal"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", a.proxy(this.hideModal, this)).emulateTransitionEnd(c.TRANSITION_DURATION) : this.hideModal())
}, c.prototype.enforceFocus = function () {
a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function (a) {
this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.trigger("focus")
}, this))
}, c.prototype.escape = function () {
this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", a.proxy(function (a) {
27 == a.which && this.hide()
}, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal")
}, c.prototype.resize = function () {
this.isShown ? a(window).on("resize.bs.modal", a.proxy(this.handleUpdate, this)) : a(window).off("resize.bs.modal")
}, c.prototype.hideModal = function () {
var a = this;
this.$element.hide(), this.backdrop(function () {
a.$body.removeClass("modal-open"), a.resetAdjustments(), a.resetScrollbar(), a.$element.trigger("hidden.bs.modal")
})
}, c.prototype.removeBackdrop = function () {
this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
}, c.prototype.backdrop = function (b) {
var d = this, e = this.$element.hasClass("fade") ? "fade" : "";
if (this.isShown && this.options.backdrop) {
var f = a.support.transition && e;
if (this.$backdrop = a('<div class="modal-backdrop ' + e + '" />').prependTo(this.$element).on("click.dismiss.bs.modal", a.proxy(function (a) {
a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
}, this)), f && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b) return;
f ? this.$backdrop.one("bsTransitionEnd", b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : b()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass("in");
var g = function () {
d.removeBackdrop(), b && b()
};
a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : g()
} else b && b()
}, c.prototype.handleUpdate = function () {
this.options.backdrop && this.adjustBackdrop(), this.adjustDialog()
}, c.prototype.adjustBackdrop = function () {
this.$backdrop.css("height", 0).css("height", this.$element[0].scrollHeight)
}, c.prototype.adjustDialog = function () {
var a = this.$element[0].scrollHeight > document.documentElement.clientHeight;
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && a ? this.scrollbarWidth : "",
paddingRight: this.bodyIsOverflowing && !a ? this.scrollbarWidth : ""
})
}, c.prototype.resetAdjustments = function () {
this.$element.css({paddingLeft: "", paddingRight: ""})
}, c.prototype.checkScrollbar = function () {
this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight, this.scrollbarWidth = this.measureScrollbar()
}, c.prototype.setScrollbar = function () {
var a = parseInt(this.$body.css("padding-right") || 0, 10);
this.bodyIsOverflowing && this.$body.css("padding-right", a + this.scrollbarWidth)
}, c.prototype.resetScrollbar = function () {
this.$body.css("padding-right", "")
}, c.prototype.measureScrollbar = function () {
var a = document.createElement("div");
a.className = "modal-scrollbar-measure", this.$body.append(a);
var b = a.offsetWidth - a.clientWidth;
return this.$body[0].removeChild(a), b
};
var d = a.fn.modal;
a.fn.modal = b, a.fn.modal.Constructor = c, a.fn.modal.noConflict = function () {
return a.fn.modal = d, this
}, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function (c) {
var d = a(this), e = d.attr("href"), f = a(d.attr("data-target") || e && e.replace(/.*(?=#[^\s]+$)/, "")),
g = f.data("bs.modal") ? "toggle" : a.extend({remote: !/#/.test(e) && e}, f.data(), d.data());
d.is("a") && c.preventDefault(), f.one("show.bs.modal", function (a) {
a.isDefaultPrevented() || f.one("hidden.bs.modal", function () {
d.is(":visible") && d.trigger("focus")
})
}), b.call(f, g, this)
})
}(jQuery), +function (a) {
"use strict";
function b(b) {
return this.each(function () {
var d = a(this), e = d.data("bs.tooltip"), f = "object" == typeof b && b, g = f && f.selector;
(e || "destroy" != b) && (g ? (e || d.data("bs.tooltip", e = {}), e[g] || (e[g] = new c(this, f))) : e || d.data("bs.tooltip", e = new c(this, f)), "string" == typeof b && e[b]())
})
}
var c = function (a, b) {
this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init("tooltip", a, b)
};
c.VERSION = "3.3.1", c.TRANSITION_DURATION = 150, c.DEFAULTS = {
animation: !0,
placement: "top",
selector: !1,
template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
trigger: "hover focus",
title: "",
delay: 0,
html: !1,
container: !1,
viewport: {selector: "body", padding: 0}
}, c.prototype.init = function (b, c, d) {
this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d), this.$viewport = this.options.viewport && a(this.options.viewport.selector || this.options.viewport);
for (var e = this.options.trigger.split(" "), f = e.length; f--;) {
var g = e[f];
if ("click" == g) this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this)); else if ("manual" != g) {
var h = "hover" == g ? "mouseenter" : "focusin", i = "hover" == g ? "mouseleave" : "focusout";
this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this))
}
}
this.options.selector ? this._options = a.extend({}, this.options, {
trigger: "manual",
selector: ""
}) : this.fixTitle()
}, c.prototype.getDefaults = function () {
return c.DEFAULTS
}, c.prototype.getOptions = function (b) {
return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = {
show: b.delay,
hide: b.delay
}), b
}, c.prototype.getDelegateOptions = function () {
var b = {}, c = this.getDefaults();
return this._options && a.each(this._options, function (a, d) {
c[a] != d && (b[a] = d)
}), b
}, c.prototype.enter = function (b) {
var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type);
return c && c.$tip && c.$tip.is(":visible") ? void(c.hoverState = "in") : (c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c)), clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? void(c.timeout = setTimeout(function () {
"in" == c.hoverState && c.show()
}, c.options.delay.show)) : c.show())
}, c.prototype.leave = function (b) {
var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type);
return c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c)), clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? void(c.timeout = setTimeout(function () {
"out" == c.hoverState && c.hide()
}, c.options.delay.hide)) : c.hide()
}, c.prototype.show = function () {
var b = a.Event("show.bs." + this.type);
if (this.hasContent() && this.enabled) {
this.$element.trigger(b);
var d = a.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);
if (b.isDefaultPrevented() || !d) return;
var e = this, f = this.tip(), g = this.getUID(this.type);
this.setContent(), f.attr("id", g), this.$element.attr("aria-describedby", g), this.options.animation && f.addClass("fade");
var h = "function" == typeof this.options.placement ? this.options.placement.call(this, f[0], this.$element[0]) : this.options.placement,
i = /\s?auto?\s?/i, j = i.test(h);
j && (h = h.replace(i, "") || "top"), f.detach().css({
top: 0,
left: 0,
display: "block"
}).addClass(h).data("bs." + this.type, this), this.options.container ? f.appendTo(this.options.container) : f.insertAfter(this.$element);
var k = this.getPosition(), l = f[0].offsetWidth, m = f[0].offsetHeight;
if (j) {
var n = h, o = this.options.container ? a(this.options.container) : this.$element.parent(),
p = this.getPosition(o);
h = "bottom" == h && k.bottom + m > p.bottom ? "top" : "top" == h && k.top - m < p.top ? "bottom" : "right" == h && k.right + l > p.width ? "left" : "left" == h && k.left - l < p.left ? "right" : h, f.removeClass(n).addClass(h)
}
var q = this.getCalculatedOffset(h, k, l, m);
this.applyPlacement(q, h);
var r = function () {
var a = e.hoverState;
e.$element.trigger("shown.bs." + e.type), e.hoverState = null, "out" == a && e.leave(e)
};
a.support.transition && this.$tip.hasClass("fade") ? f.one("bsTransitionEnd", r).emulateTransitionEnd(c.TRANSITION_DURATION) : r()
}
}, c.prototype.applyPlacement = function (b, c) {
var d = this.tip(), e = d[0].offsetWidth, f = d[0].offsetHeight, g = parseInt(d.css("margin-top"), 10),
h = parseInt(d.css("margin-left"), 10);
isNaN(g) && (g = 0), isNaN(h) && (h = 0), b.top = b.top + g, b.left = b.left + h, a.offset.setOffset(d[0], a.extend({
using: function (a) {
d.css({top: Math.round(a.top), left: Math.round(a.left)})
}
}, b), 0), d.addClass("in");
var i = d[0].offsetWidth, j = d[0].offsetHeight;
"top" == c && j != f && (b.top = b.top + f - j);
var k = this.getViewportAdjustedDelta(c, b, i, j);
k.left ? b.left += k.left : b.top += k.top;
var l = /top|bottom/.test(c), m = l ? 2 * k.left - e + i : 2 * k.top - f + j,
n = l ? "offsetWidth" : "offsetHeight";
d.offset(b), this.replaceArrow(m, d[0][n], l)
}, c.prototype.replaceArrow = function (a, b, c) {
this.arrow().css(c ? "left" : "top", 50 * (1 - a / b) + "%").css(c ? "top" : "left", "")
}, c.prototype.setContent = function () {
var a = this.tip(), b = this.getTitle();
a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right")
}, c.prototype.hide = function (b) {
function d() {
"in" != e.hoverState && f.detach(), e.$element.removeAttr("aria-describedby").trigger("hidden.bs." + e.type), b && b()
}
var e = this, f = this.tip(), g = a.Event("hide.bs." + this.type);
return this.$element.trigger(g), g.isDefaultPrevented() ? void 0 : (f.removeClass("in"), a.support.transition && this.$tip.hasClass("fade") ? f.one("bsTransitionEnd", d).emulateTransitionEnd(c.TRANSITION_DURATION) : d(), this.hoverState = null, this)
}, c.prototype.fixTitle = function () {
var a = this.$element;
(a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a.attr("title") || "").attr("title", "")
}, c.prototype.hasContent = function () {
return this.getTitle()
}, c.prototype.getPosition = function (b) {
b = b || this.$element;
var c = b[0], d = "BODY" == c.tagName, e = c.getBoundingClientRect();
null == e.width && (e = a.extend({}, e, {width: e.right - e.left, height: e.bottom - e.top}));
var f = d ? {top: 0, left: 0} : b.offset(),
g = {scroll: d ? document.documentElement.scrollTop || document.body.scrollTop : b.scrollTop()},
h = d ? {width: a(window).width(), height: a(window).height()} : null;
return a.extend({}, e, g, h, f)
}, c.prototype.getCalculatedOffset = function (a, b, c, d) {
return "bottom" == a ? {
top: b.top + b.height,
left: b.left + b.width / 2 - c / 2
} : "top" == a ? {
top: b.top - d,
left: b.left + b.width / 2 - c / 2
} : "left" == a ? {top: b.top + b.height / 2 - d / 2, left: b.left - c} : {
top: b.top + b.height / 2 - d / 2,
left: b.left + b.width
}
}, c.prototype.getViewportAdjustedDelta = function (a, b, c, d) {
var e = {top: 0, left: 0};
if (!this.$viewport) return e;
var f = this.options.viewport && this.options.viewport.padding || 0, g = this.getPosition(this.$viewport);
if (/right|left/.test(a)) {
var h = b.top - f - g.scroll, i = b.top + f - g.scroll + d;
h < g.top ? e.top = g.top - h : i > g.top + g.height && (e.top = g.top + g.height - i)
} else {
var j = b.left - f, k = b.left + f + c;
j < g.left ? e.left = g.left - j : k > g.width && (e.left = g.left + g.width - k)
}
return e
}, c.prototype.getTitle = function () {
var a, b = this.$element, c = this.options;
return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title)
}, c.prototype.getUID = function (a) {
do a += ~~(1e6 * Math.random()); while (document.getElementById(a));
return a
}, c.prototype.tip = function () {
return this.$tip = this.$tip || a(this.options.template)
}, c.prototype.arrow = function () {
return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
}, c.prototype.enable = function () {
this.enabled = !0
}, c.prototype.disable = function () {
this.enabled = !1
}, c.prototype.toggleEnabled = function () {
this.enabled = !this.enabled
}, c.prototype.toggle = function (b) {
var c = this;
b && (c = a(b.currentTarget).data("bs." + this.type), c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c))), c.tip().hasClass("in") ? c.leave(c) : c.enter(c)
}, c.prototype.destroy = function () {
var a = this;
clearTimeout(this.timeout), this.hide(function () {
a.$element.off("." + a.type).removeData("bs." + a.type)
})
};
var d = a.fn.tooltip;
a.fn.tooltip = b, a.fn.tooltip.Constructor = c, a.fn.tooltip.noConflict = function () {
return a.fn.tooltip = d, this
}
}(jQuery), +function (a) {
"use strict";
function b(b) {
return this.each(function () {
var d = a(this), e = d.data("bs.popover"), f = "object" == typeof b && b, g = f && f.selector;
(e || "destroy" != b) && (g ? (e || d.data("bs.popover", e = {}), e[g] || (e[g] = new c(this, f))) : e || d.data("bs.popover", e = new c(this, f)), "string" == typeof b && e[b]())
})
}
var c = function (a, b) {
this.init("popover", a, b)
};
if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js");
c.VERSION = "3.3.1", c.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, {
placement: "right",
trigger: "click",
content: "",
template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
}), c.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), c.prototype.constructor = c, c.prototype.getDefaults = function () {
return c.DEFAULTS
}, c.prototype.setContent = function () {
var a = this.tip(), b = this.getTitle(), c = this.getContent();
a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content").children().detach().end()[this.options.html ? "string" == typeof c ? "html" : "append" : "text"](c), a.removeClass("fade top bottom left right in"), a.find(".popover-title").html() || a.find(".popover-title").hide()
}, c.prototype.hasContent = function () {
return this.getTitle() || this.getContent()
}, c.prototype.getContent = function () {
var a = this.$element, b = this.options;
return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content)
}, c.prototype.arrow = function () {
return this.$arrow = this.$arrow || this.tip().find(".arrow")
}, c.prototype.tip = function () {
return this.$tip || (this.$tip = a(this.options.template)), this.$tip
};
var d = a.fn.popover;
a.fn.popover = b, a.fn.popover.Constructor = c, a.fn.popover.noConflict = function () {
return a.fn.popover = d, this
}
}(jQuery), +function (a) {
"use strict";
function b(c, d) {
var e = a.proxy(this.process, this);
this.$body = a("body"), this.$scrollElement = a(a(c).is("body") ? window : c), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || "") + " .nav li > a", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on("scroll.bs.scrollspy", e), this.refresh(), this.process()
}
function c(c) {
return this.each(function () {
var d = a(this), e = d.data("bs.scrollspy"), f = "object" == typeof c && c;
e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]()
})
}
b.VERSION = "3.3.1", b.DEFAULTS = {offset: 10}, b.prototype.getScrollHeight = function () {
return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
}, b.prototype.refresh = function () {
var b = "offset", c = 0;
a.isWindow(this.$scrollElement[0]) || (b = "position", c = this.$scrollElement.scrollTop()), this.offsets = [], this.targets = [], this.scrollHeight = this.getScrollHeight();
var d = this;
this.$body.find(this.selector).map(function () {
var d = a(this), e = d.data("target") || d.attr("href"), f = /^#./.test(e) && a(e);
return f && f.length && f.is(":visible") && [[f[b]().top + c, e]] || null
}).sort(function (a, b) {
return a[0] - b[0]
}).each(function () {
d.offsets.push(this[0]), d.targets.push(this[1])
})
}, b.prototype.process = function () {
var a, b = this.$scrollElement.scrollTop() + this.options.offset, c = this.getScrollHeight(),
d = this.options.offset + c - this.$scrollElement.height(), e = this.offsets, f = this.targets,
g = this.activeTarget;
if (this.scrollHeight != c && this.refresh(), b >= d) return g != (a = f[f.length - 1]) && this.activate(a);
if (g && b < e[0]) return this.activeTarget = null, this.clear();
for (a = e.length; a--;) g != f[a] && b >= e[a] && (!e[a + 1] || b <= e[a + 1]) && this.activate(f[a])
}, b.prototype.activate = function (b) {
this.activeTarget = b, this.clear();
var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]',
d = a(c).parents("li").addClass("active");
d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate.bs.scrollspy")
}, b.prototype.clear = function () {
a(this.selector).parentsUntil(this.options.target, ".active").removeClass("active")
};
var d = a.fn.scrollspy;
a.fn.scrollspy = c, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function () {
return a.fn.scrollspy = d, this
}, a(window).on("load.bs.scrollspy.data-api", function () {
a('[data-spy="scroll"]').each(function () {
var b = a(this);
c.call(b, b.data())
})
})
}(jQuery), +function (a) {
"use strict";
function b(b) {
return this.each(function () {
var d = a(this), e = d.data("bs.tab");
e || d.data("bs.tab", e = new c(this)), "string" == typeof b && e[b]()
})
}
var c = function (b) {
this.element = a(b)
};
c.VERSION = "3.3.1", c.TRANSITION_DURATION = 150, c.prototype.show = function () {
var b = this.element, c = b.closest("ul:not(.dropdown-menu)"), d = b.data("target");
if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) {
var e = c.find(".active:last a"), f = a.Event("hide.bs.tab", {relatedTarget: b[0]}),
g = a.Event("show.bs.tab", {relatedTarget: e[0]});
if (e.trigger(f), b.trigger(g), !g.isDefaultPrevented() && !f.isDefaultPrevented()) {
var h = a(d);
this.activate(b.closest("li"), c), this.activate(h, h.parent(), function () {
e.trigger({type: "hidden.bs.tab", relatedTarget: b[0]}), b.trigger({
type: "shown.bs.tab",
relatedTarget: e[0]
})
})
}
}
}, c.prototype.activate = function (b, d, e) {
function f() {
g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1), b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0), h ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu") && b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0), e && e()
}
var g = d.find("> .active"),
h = e && a.support.transition && (g.length && g.hasClass("fade") || !!d.find("> .fade").length);
g.length && h ? g.one("bsTransitionEnd", f).emulateTransitionEnd(c.TRANSITION_DURATION) : f(), g.removeClass("in")
};
var d = a.fn.tab;
a.fn.tab = b, a.fn.tab.Constructor = c, a.fn.tab.noConflict = function () {
return a.fn.tab = d, this
};
var e = function (c) {
c.preventDefault(), b.call(a(this), "show")
};
a(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', e).on("click.bs.tab.data-api", '[data-toggle="pill"]', e)
}(jQuery), +function (a) {
"use strict";
function b(b) {
return this.each(function () {
var d = a(this), e = d.data("bs.affix"), f = "object" == typeof b && b;
e || d.data("bs.affix", e = new c(this, f)), "string" == typeof b && e[b]()
})
}
var c = function (b, d) {
this.options = a.extend({}, c.DEFAULTS, d), this.$target = a(this.options.target).on("scroll.bs.affix.data-api", a.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", a.proxy(this.checkPositionWithEventLoop, this)), this.$element = a(b), this.affixed = this.unpin = this.pinnedOffset = null, this.checkPosition()
};
c.VERSION = "3.3.1", c.RESET = "affix affix-top affix-bottom", c.DEFAULTS = {
offset: 0,
target: window
}, c.prototype.getState = function (a, b, c, d) {
var e = this.$target.scrollTop(), f = this.$element.offset(), g = this.$target.height();
if (null != c && "top" == this.affixed) return c > e ? "top" : !1;
if ("bottom" == this.affixed) return null != c ? e + this.unpin <= f.top ? !1 : "bottom" : a - d >= e + g ? !1 : "bottom";
var h = null == this.affixed, i = h ? e : f.top, j = h ? g : b;
return null != c && c >= i ? "top" : null != d && i + j >= a - d ? "bottom" : !1
}, c.prototype.getPinnedOffset = function () {
if (this.pinnedOffset) return this.pinnedOffset;
this.$element.removeClass(c.RESET).addClass("affix");
var a = this.$target.scrollTop(), b = this.$element.offset();
return this.pinnedOffset = b.top - a
}, c.prototype.checkPositionWithEventLoop = function () {
setTimeout(a.proxy(this.checkPosition, this), 1)
}, c.prototype.checkPosition = function () {
if (this.$element.is(":visible")) {
var b = this.$element.height(), d = this.options.offset, e = d.top, f = d.bottom, g = a("body").height();
"object" != typeof d && (f = e = d), "function" == typeof e && (e = d.top(this.$element)), "function" == typeof f && (f = d.bottom(this.$element));
var h = this.getState(g, b, e, f);
if (this.affixed != h) {
null != this.unpin && this.$element.css("top", "");
var i = "affix" + (h ? "-" + h : ""), j = a.Event(i + ".bs.affix");
if (this.$element.trigger(j), j.isDefaultPrevented()) return;
this.affixed = h, this.unpin = "bottom" == h ? this.getPinnedOffset() : null, this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix", "affixed") + ".bs.affix")
}
"bottom" == h && this.$element.offset({top: g - b - f})
}
};
var d = a.fn.affix;
a.fn.affix = b, a.fn.affix.Constructor = c, a.fn.affix.noConflict = function () {
return a.fn.affix = d, this
}, a(window).on("load", function () {
a('[data-spy="affix"]').each(function () {
var c = a(this), d = c.data();
d.offset = d.offset || {}, null != d.offsetBottom && (d.offset.bottom = d.offsetBottom), null != d.offsetTop && (d.offset.top = d.offsetTop), b.call(c, d)
})
})
}(jQuery);
/*
* metismenu - v2.0.2
* A jQuery menu plugin
* https://github.com/onokumus/metisMenu
*
* Made by Osman Nuri Okumus
* Under MIT License
*/
!function (a) {
"use strict";
function b() {
var a = document.createElement("mm"), b = {
WebkitTransition: "webkitTransitionEnd",
MozTransition: "transitionend",
OTransition: "oTransitionEnd otransitionend",
transition: "transitionend"
};
for (var c in b) if (void 0 !== a.style[c]) return {end: b[c]};
return !1
}
function c(b) {
return this.each(function () {
var c = a(this), d = c.data("mm"), f = a.extend({}, e.DEFAULTS, c.data(), "object" == typeof b && b);
d || c.data("mm", d = new e(this, f)), "string" == typeof b && d[b]()
})
}
a.fn.emulateTransitionEnd = function (b) {
var c = !1, e = this;
a(this).one("mmTransitionEnd", function () {
c = !0
});
var f = function () {
c || a(e).trigger(d.end)
};
return setTimeout(f, b), this
};
var d = b();
d && (a.event.special.mmTransitionEnd = {
bindType: d.end, delegateType: d.end, handle: function (b) {
return a(b.target).is(this) ? b.handleObj.handler.apply(this, arguments) : void 0
}
});
var e = function (b, c) {
this.$element = a(b), this.options = a.extend({}, e.DEFAULTS, c), this.transitioning = null, this.init()
};
e.TRANSITION_DURATION = 350, e.DEFAULTS = {
toggle: !0,
doubleTapToGo: !1,
activeClass: "active"
}, e.prototype.init = function () {
var b = this, c = this.options.activeClass;
this.$element.find("li." + c).has("ul").children("ul").addClass("collapse in"), this.$element.find("li").not("." + c).has("ul").children("ul").addClass("collapse"), this.options.doubleTapToGo && this.$element.find("li." + c).has("ul").children("a").addClass("doubleTapToGo"), this.$element.find("li").has("ul").children("a").on("click.metisMenu", function (d) {
var e = a(this), f = e.parent("li"), g = f.children("ul");
return d.preventDefault(), f.hasClass(c) ? b.hide(g) : b.show(g), b.options.doubleTapToGo && b.doubleTapToGo(e) && "#" !== e.attr("href") && "" !== e.attr("href") ? (d.stopPropagation(), void(document.location = e.attr("href"))) : void 0
})
}, e.prototype.doubleTapToGo = function (a) {
var b = this.$element;
return a.hasClass("doubleTapToGo") ? (a.removeClass("doubleTapToGo"), !0) : a.parent().children("ul").length ? (b.find(".doubleTapToGo").removeClass("doubleTapToGo"), a.addClass("doubleTapToGo"), !1) : void 0
}, e.prototype.show = function (b) {
var c = this.options.activeClass, f = a(b), g = f.parent("li");
if (!this.transitioning && !f.hasClass("in")) {
g.addClass(c), this.options.toggle && this.hide(g.siblings().children("ul.in")), f.removeClass("collapse").addClass("collapsing").height(0), this.transitioning = 1;
var h = function () {
f.removeClass("collapsing").addClass("collapse in").height(""), this.transitioning = 0
};
return d ? void f.one("mmTransitionEnd", a.proxy(h, this)).emulateTransitionEnd(e.TRANSITION_DURATION).height(f[0].scrollHeight) : h.call(this)
}
}, e.prototype.hide = function (b) {
var c = this.options.activeClass, f = a(b);
if (!this.transitioning && f.hasClass("in")) {
f.parent("li").removeClass(c), f.height(f.height())[0].offsetHeight, f.addClass("collapsing").removeClass("collapse").removeClass("in"), this.transitioning = 1;
var g = function () {
this.transitioning = 0, f.removeClass("collapsing").addClass("collapse")
};
return d ? void f.height(0).one("mmTransitionEnd", a.proxy(g, this)).emulateTransitionEnd(e.TRANSITION_DURATION) : g.call(this)
}
};
var f = a.fn.metisMenu;
a.fn.metisMenu = c, a.fn.metisMenu.Constructor = e, a.fn.metisMenu.noConflict = function () {
return a.fn.metisMenu = f, this
}
}(jQuery);
/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* Version: 1.3.6
*
*/
(function (e) {
e.fn.extend({
slimScroll: function (g) {
var a = e.extend({
width: "auto",
height: "250px",
size: "7px",
color: "#000",
position: "right",
distance: "1px",
start: "top",
opacity: .4,
alwaysVisible: !1,
disableFadeOut: !1,
railVisible: !1,
railColor: "#333",
railOpacity: .2,
railDraggable: !0,
railClass: "slimScrollRail",
barClass: "slimScrollBar",
wrapperClass: "slimScrollDiv",
allowPageScroll: !1,
wheelStep: 20,
touchScrollStep: 200,
borderRadius: "7px",
railBorderRadius: "7px"
}, g);
this.each(function () {
function v(d) {
if (r) {
d = d || window.event;
var c = 0;
d.wheelDelta && (c = -d.wheelDelta / 120);
d.detail && (c = d.detail / 3);
e(d.target || d.srcTarget || d.srcElement).closest("." + a.wrapperClass).is(b.parent()) && m(c, !0);
d.preventDefault && !k && d.preventDefault();
k || (d.returnValue = !1)
}
}
function m(d, e, g) {
k = !1;
var f = d, h = b.outerHeight() - c.outerHeight();
e && (f = parseInt(c.css("top")) + d * parseInt(a.wheelStep) / 100 * c.outerHeight(), f = Math.min(Math.max(f, 0), h), f = 0 < d ? Math.ceil(f) : Math.floor(f), c.css({top: f + "px"}));
l = parseInt(c.css("top")) / (b.outerHeight() - c.outerHeight());
f = l * (b[0].scrollHeight - b.outerHeight());
g && (f = d, d = f / b[0].scrollHeight * b.outerHeight(), d = Math.min(Math.max(d, 0), h), c.css({top: d + "px"}));
b.scrollTop(f);
b.trigger("slimscrolling", ~~f);
w();
p()
}
function x() {
u = Math.max(b.outerHeight() / b[0].scrollHeight * b.outerHeight(), 30);
c.css({height: u + "px"});
var a = u == b.outerHeight() ? "none" : "block";
c.css({display: a})
}
function w() {
x();
clearTimeout(B);
l == ~~l ? (k = a.allowPageScroll, C != l && b.trigger("slimscroll", 0 == ~~l ? "top" : "bottom")) : k = !1;
C = l;
u >= b.outerHeight() ? k = !0 : (c.stop(!0,
!0).fadeIn("fast"), a.railVisible && h.stop(!0, !0).fadeIn("fast"))
}
function p() {
a.alwaysVisible || (B = setTimeout(function () {
a.disableFadeOut && r || y || z || (c.fadeOut("slow"), h.fadeOut("slow"))
}, 1E3))
}
var r, y, z, B, A, u, l, C, k = !1, b = e(this);
if (b.parent().hasClass(a.wrapperClass)) {
var n = b.scrollTop(), c = b.closest("." + a.barClass), h = b.closest("." + a.railClass);
x();
if (e.isPlainObject(g)) {
if ("height" in g && "auto" == g.height) {
b.parent().css("height", "auto");
b.css("height", "auto");
var q = b.parent().parent().height();
b.parent().css("height",
q);
b.css("height", q)
}
if ("scrollTo" in g) n = parseInt(a.scrollTo); else if ("scrollBy" in g) n += parseInt(a.scrollBy); else if ("destroy" in g) {
c.remove();
h.remove();
b.unwrap();
return
}
m(n, !1, !0)
}
} else if (!(e.isPlainObject(g) && "destroy" in g)) {
a.height = "auto" == a.height ? b.parent().height() : a.height;
n = e("<div></div>").addClass(a.wrapperClass).css({
position: "relative",
overflow: "hidden",
width: a.width,
height: a.height
});
b.css({overflow: "hidden", width: a.width, height: a.height});
var h = e("<div></div>").addClass(a.railClass).css({
width: a.size,
height: "100%",
position: "absolute",
top: 0,
display: a.alwaysVisible && a.railVisible ? "block" : "none",
"border-radius": a.railBorderRadius,
background: a.railColor,
opacity: a.railOpacity,
zIndex: 90
}), c = e("<div></div>").addClass(a.barClass).css({
background: a.color,
width: a.size,
position: "absolute",
top: 0,
opacity: a.opacity,
display: a.alwaysVisible ? "block" : "none",
"border-radius": a.borderRadius,
BorderRadius: a.borderRadius,
MozBorderRadius: a.borderRadius,
WebkitBorderRadius: a.borderRadius,
zIndex: 99
}), q = "right" == a.position ?
{right: a.distance} : {left: a.distance};
h.css(q);
c.css(q);
b.wrap(n);
b.parent().append(c);
b.parent().append(h);
a.railDraggable && c.bind("mousedown", function (a) {
var b = e(document);
z = !0;
t = parseFloat(c.css("top"));
pageY = a.pageY;
b.bind("mousemove.slimscroll", function (a) {
currTop = t + a.pageY - pageY;
c.css("top", currTop);
m(0, c.position().top, !1)
});
b.bind("mouseup.slimscroll", function (a) {
z = !1;
p();
b.unbind(".slimscroll")
});
return !1
}).bind("selectstart.slimscroll", function (a) {
a.stopPropagation();
a.preventDefault();
return !1
});
h.hover(function () {
w()
}, function () {
p()
});
c.hover(function () {
y = !0
}, function () {
y = !1
});
b.hover(function () {
r = !0;
w();
p()
}, function () {
r = !1;
p()
});
b.bind("touchstart", function (a, b) {
a.originalEvent.touches.length && (A = a.originalEvent.touches[0].pageY)
});
b.bind("touchmove", function (b) {
k || b.originalEvent.preventDefault();
b.originalEvent.touches.length && (m((A - b.originalEvent.touches[0].pageY) / a.touchScrollStep, !0), A = b.originalEvent.touches[0].pageY)
});
x();
"bottom" === a.start ? (c.css({top: b.outerHeight() - c.outerHeight()}),
m(0, !0)) : "top" !== a.start && (m(e(a.start).position().top, null, !0), a.alwaysVisible || c.hide());
window.addEventListener ? (this.addEventListener("DOMMouseScroll", v, !1), this.addEventListener("mousewheel", v, !1)) : document.attachEvent("onmousewheel", v)
}
});
return this
}
});
e.fn.extend({slimscroll: e.fn.slimScroll})
})(jQuery);
$(document).ready(function () {
// Add body-small class if window less than 768px
if ($(this).width() < 769) {
$('body').addClass('body-small')
} else {
$('body').removeClass('body-small')
}
// MetsiMenu
$('#side-menu').metisMenu();
// Collapse ibox function
$('.collapse-link').click(function () {
var ibox = $(this).closest('div.ibox');
var button = $(this).find('i');
var content = ibox.find('div.ibox-content');
content.slideToggle(200);
button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');
ibox.toggleClass('').toggleClass('border-bottom');
setTimeout(function () {
ibox.resize();
ibox.find('[id^=map-]').resize();
}, 50);
});
// Close ibox function
$('.close-link').click(function () {
var content = $(this).closest('div.ibox');
content.remove();
});
// Close menu in canvas mode
$('.close-canvas-menu').click(function () {
$("body").toggleClass("mini-navbar");
SmoothlyMenu();
});
// Open close right sidebar
$('.right-sidebar-toggle').click(function () {
$('#right-sidebar').toggleClass('sidebar-open');
});
// Initialize slimscroll for right sidebar
$('.sidebar-container').slimScroll({
height: '100%',
railOpacity: 0.4,
wheelStep: 10
});
// Open close small chat
$('.open-small-chat').click(function () {
$(this).children().toggleClass('fa-comments').toggleClass('fa-remove');
$('.small-chat-box').toggleClass('active');
});
// Initialize slimscroll for small chat
$('.small-chat-box .content').slimScroll({
height: '234px',
railOpacity: 0.4
});
// Small todo handler
$('.check-link').click(function () {
var button = $(this).find('i');
var label = $(this).next('span');
button.toggleClass('fa-check-square').toggleClass('fa-square-o');
label.toggleClass('todo-completed');
return false;
});
// Minimalize menu
$('.navbar-minimalize').click(function () {
$("body").toggleClass("mini-navbar");
SmoothlyMenu();
});
// Tooltips demo
$('.tooltip-demo').tooltip({
selector: "[data-toggle=tooltip]",
container: "body"
});
// Move modal to body
// Fix Bootstrap backdrop issu with animation.css
$('.modal').appendTo("body");
// Full height of sidebar
function fix_height() {
var heightWithoutNavbar = $("body > #wrapper").height() - 61;
$(".sidebard-panel").css("min-height", heightWithoutNavbar + "px");
var navbarHeigh = $('nav.navbar-default').height();
var wrapperHeigh = $('#page-wrapper').height();
if (navbarHeigh > wrapperHeigh) {
$('#page-wrapper').css("min-height", navbarHeigh + "px");
}
if (navbarHeigh < wrapperHeigh) {
$('#page-wrapper').css("min-height", $(window).height() + "px");
}
if ($('body').hasClass('fixed-nav')) {
$('#page-wrapper').css("min-height", $(window).height() - 60 + "px");
}
}
fix_height();
// Fixed Sidebar
$(window).bind("load", function () {
if ($("body").hasClass('fixed-sidebar')) {
$('.sidebar-collapse').slimScroll({
height: '100%',
railOpacity: 0.9
});
}
})
// Move right sidebar top after scroll
$(window).scroll(function () {
if ($(window).scrollTop() > 0 && !$('body').hasClass('fixed-nav')) {
$('#right-sidebar').addClass('sidebar-top');
} else {
$('#right-sidebar').removeClass('sidebar-top');
}
});
$(window).bind("load resize scroll", function () {
if (!$("body").hasClass('body-small')) {
fix_height();
}
});
$("[data-toggle=popover]")
.popover();
// Add slimscroll to element
$('.full-height-scroll').slimscroll({
height: '100%'
})
});
// Minimalize menu when screen is less than 768px
$(window).bind("resize", function () {
if ($(this).width() < 769) {
$('body').addClass('body-small')
} else {
$('body').removeClass('body-small')
}
});
// For demo purpose - animation css script
function animationHover(element, animation) {
element = $(element);
element.hover(
function () {
element.addClass('animated ' + animation);
},
function () {
//wait for animation to finish before removing classes
window.setTimeout(function () {
element.removeClass('animated ' + animation);
}, 2000);
});
}
function SmoothlyMenu() {
if (!$('body').hasClass('mini-navbar') || $('body').hasClass('body-small')) {
// Hide menu in order to smoothly turn on when maximize menu
$('#side-menu').hide();
// For smoothly turn on menu
setTimeout(
function () {
$('#side-menu').fadeIn(500);
}, 100);
} else if ($('body').hasClass('fixed-sidebar')) {
$('#side-menu').hide();
setTimeout(
function () {
$('#side-menu').fadeIn(500);
}, 300);
} else {
// Remove all inline style from jquery fadeIn function to reset menu state
$('#side-menu').removeAttr('style');
}
}
/*! pace 1.0.0 */
(function () {
var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K,
L, M, N, O, P, Q, R, S, T, U, V, W, X = [].slice, Y = {}.hasOwnProperty, Z = function (a, b) {
function c() {
this.constructor = a
}
for (var d in b) Y.call(b, d) && (a[d] = b[d]);
return c.prototype = b.prototype, a.prototype = new c, a.__super__ = b.prototype, a
}, $ = [].indexOf || function (a) {
for (var b = 0, c = this.length; c > b; b++) if (b in this && this[b] === a) return b;
return -1
};
for (u = {
catchupTime: 100,
initialRate: .03,
minTime: 250,
ghostTime: 100,
maxProgressPerFrame: 20,
easeFactor: 1.25,
startOnPageLoad: !0,
restartOnPushState: !0,
restartOnRequestAfter: 500,
target: "body",
elements: {checkInterval: 100, selectors: ["body"]},
eventLag: {minSamples: 10, sampleCount: 3, lagThreshold: 3},
ajax: {trackMethods: ["GET"], trackWebSockets: !0, ignoreURLs: []}
}, C = function () {
var a;
return null != (a = "undefined" != typeof performance && null !== performance && "function" == typeof performance.now ? performance.now() : void 0) ? a : +new Date
}, E = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame, t = window.cancelAnimationFrame || window.mozCancelAnimationFrame, null == E && (E = function (a) {
return setTimeout(a, 50)
}, t = function (a) {
return clearTimeout(a)
}), G = function (a) {
var b, c;
return b = C(), (c = function () {
var d;
return d = C() - b, d >= 33 ? (b = C(), a(d, function () {
return E(c)
})) : setTimeout(c, 33 - d)
})()
}, F = function () {
var a, b, c;
return c = arguments[0], b = arguments[1], a = 3 <= arguments.length ? X.call(arguments, 2) : [], "function" == typeof c[b] ? c[b].apply(c, a) : c[b]
}, v = function () {
var a, b, c, d, e, f, g;
for (b = arguments[0], d = 2 <= arguments.length ? X.call(arguments, 1) : [], f = 0, g = d.length; g > f; f++) if (c = d[f]) for (a in c) Y.call(c, a) && (e = c[a], null != b[a] && "object" == typeof b[a] && null != e && "object" == typeof e ? v(b[a], e) : b[a] = e);
return b
}, q = function (a) {
var b, c, d, e, f;
for (c = b = 0, e = 0, f = a.length; f > e; e++) d = a[e], c += Math.abs(d), b++;
return c / b
}, x = function (a, b) {
var c, d, e;
if (null == a && (a = "options"), null == b && (b = !0), e = document.querySelector("[data-pace-" + a + "]")) {
if (c = e.getAttribute("data-pace-" + a), !b) return c;
try {
return JSON.parse(c)
} catch (f) {
return d = f, "undefined" != typeof console && null !== console ? console.error("Error parsing inline pace options", d) : void 0
}
}
}, g = function () {
function a() {
}
return a.prototype.on = function (a, b, c, d) {
var e;
return null == d && (d = !1), null == this.bindings && (this.bindings = {}), null == (e = this.bindings)[a] && (e[a] = []), this.bindings[a].push({
handler: b,
ctx: c,
once: d
})
}, a.prototype.once = function (a, b, c) {
return this.on(a, b, c, !0)
}, a.prototype.off = function (a, b) {
var c, d, e;
if (null != (null != (d = this.bindings) ? d[a] : void 0)) {
if (null == b) return delete this.bindings[a];
for (c = 0, e = []; c < this.bindings[a].length;) e.push(this.bindings[a][c].handler === b ? this.bindings[a].splice(c, 1) : c++);
return e
}
}, a.prototype.trigger = function () {
var a, b, c, d, e, f, g, h, i;
if (c = arguments[0], a = 2 <= arguments.length ? X.call(arguments, 1) : [], null != (g = this.bindings) ? g[c] : void 0) {
for (e = 0, i = []; e < this.bindings[c].length;) h = this.bindings[c][e], d = h.handler, b = h.ctx, f = h.once, d.apply(null != b ? b : this, a), i.push(f ? this.bindings[c].splice(e, 1) : e++);
return i
}
}, a
}(), j = window.Pace || {}, window.Pace = j, v(j, g.prototype), D = j.options = v({}, u, window.paceOptions, x()), U = ["ajax", "document", "eventLag", "elements"], Q = 0, S = U.length; S > Q; Q++) K = U[Q], D[K] === !0 && (D[K] = u[K]);
i = function (a) {
function b() {
return V = b.__super__.constructor.apply(this, arguments)
}
return Z(b, a), b
}(Error), b = function () {
function a() {
this.progress = 0
}
return a.prototype.getElement = function () {
var a;
if (null == this.el) {
if (a = document.querySelector(D.target), !a) throw new i;
this.el = document.createElement("div"), this.el.className = "pace pace-active", document.body.className = document.body.className.replace(/pace-done/g, ""), document.body.className += " pace-running", this.el.innerHTML = '<div class="pace-progress">\n <div class="pace-progress-inner"></div>\n</div>\n<div class="pace-activity"></div>', null != a.firstChild ? a.insertBefore(this.el, a.firstChild) : a.appendChild(this.el)
}
return this.el
}, a.prototype.finish = function () {
var a;
return a = this.getElement(), a.className = a.className.replace("pace-active", ""), a.className += " pace-inactive", document.body.className = document.body.className.replace("pace-running", ""), document.body.className += " pace-done"
}, a.prototype.update = function (a) {
return this.progress = a, this.render()
}, a.prototype.destroy = function () {
try {
this.getElement().parentNode.removeChild(this.getElement())
} catch (a) {
i = a
}
return this.el = void 0
}, a.prototype.render = function () {
var a, b, c, d, e, f, g;
if (null == document.querySelector(D.target)) return !1;
for (a = this.getElement(), d = "translate3d(" + this.progress + "%, 0, 0)", g = ["webkitTransform", "msTransform", "transform"], e = 0, f = g.length; f > e; e++) b = g[e], a.children[0].style[b] = d;
return (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) && (a.children[0].setAttribute("data-progress-text", "" + (0 | this.progress) + "%"), this.progress >= 100 ? c = "99" : (c = this.progress < 10 ? "0" : "", c += 0 | this.progress), a.children[0].setAttribute("data-progress", "" + c)), this.lastRenderedProgress = this.progress
}, a.prototype.done = function () {
return this.progress >= 100
}, a
}(), h = function () {
function a() {
this.bindings = {}
}
return a.prototype.trigger = function (a, b) {
var c, d, e, f, g;
if (null != this.bindings[a]) {
for (f = this.bindings[a], g = [], d = 0, e = f.length; e > d; d++) c = f[d], g.push(c.call(this, b));
return g
}
}, a.prototype.on = function (a, b) {
var c;
return null == (c = this.bindings)[a] && (c[a] = []), this.bindings[a].push(b)
}, a
}(), P = window.XMLHttpRequest, O = window.XDomainRequest, N = window.WebSocket, w = function (a, b) {
var c, d, e, f;
f = [];
for (d in b.prototype) try {
e = b.prototype[d], f.push(null == a[d] && "function" != typeof e ? a[d] = e : void 0)
} catch (g) {
c = g
}
return f
}, A = [], j.ignore = function () {
var a, b, c;
return b = arguments[0], a = 2 <= arguments.length ? X.call(arguments, 1) : [], A.unshift("ignore"), c = b.apply(null, a), A.shift(), c
}, j.track = function () {
var a, b, c;
return b = arguments[0], a = 2 <= arguments.length ? X.call(arguments, 1) : [], A.unshift("track"), c = b.apply(null, a), A.shift(), c
}, J = function (a) {
var b;
if (null == a && (a = "GET"), "track" === A[0]) return "force";
if (!A.length && D.ajax) {
if ("socket" === a && D.ajax.trackWebSockets) return !0;
if (b = a.toUpperCase(), $.call(D.ajax.trackMethods, b) >= 0) return !0
}
return !1
}, k = function (a) {
function b() {
var a, c = this;
b.__super__.constructor.apply(this, arguments), a = function (a) {
var b;
return b = a.open, a.open = function (d, e) {
return J(d) && c.trigger("request", {type: d, url: e, request: a}), b.apply(a, arguments)
}
}, window.XMLHttpRequest = function (b) {
var c;
return c = new P(b), a(c), c
};
try {
w(window.XMLHttpRequest, P)
} catch (d) {
}
if (null != O) {
window.XDomainRequest = function () {
var b;
return b = new O, a(b), b
};
try {
w(window.XDomainRequest, O)
} catch (d) {
}
}
if (null != N && D.ajax.trackWebSockets) {
window.WebSocket = function (a, b) {
var d;
return d = null != b ? new N(a, b) : new N(a), J("socket") && c.trigger("request", {
type: "socket",
url: a,
protocols: b,
request: d
}), d
};
try {
w(window.WebSocket, N)
} catch (d) {
}
}
}
return Z(b, a), b
}(h), R = null, y = function () {
return null == R && (R = new k), R
}, I = function (a) {
var b, c, d, e;
for (e = D.ajax.ignoreURLs, c = 0, d = e.length; d > c; c++) if (b = e[c], "string" == typeof b) {
if (-1 !== a.indexOf(b)) return !0
} else if (b.test(a)) return !0;
return !1
}, y().on("request", function (b) {
var c, d, e, f, g;
return f = b.type, e = b.request, g = b.url, I(g) ? void 0 : j.running || D.restartOnRequestAfter === !1 && "force" !== J(f) ? void 0 : (d = arguments, c = D.restartOnRequestAfter || 0, "boolean" == typeof c && (c = 0), setTimeout(function () {
var b, c, g, h, i, k;
if (b = "socket" === f ? e.readyState < 2 : 0 < (h = e.readyState) && 4 > h) {
for (j.restart(), i = j.sources, k = [], c = 0, g = i.length; g > c; c++) {
if (K = i[c], K instanceof a) {
K.watch.apply(K, d);
break
}
k.push(void 0)
}
return k
}
}, c))
}), a = function () {
function a() {
var a = this;
this.elements = [], y().on("request", function () {
return a.watch.apply(a, arguments)
})
}
return a.prototype.watch = function (a) {
var b, c, d, e;
return d = a.type, b = a.request, e = a.url, I(e) ? void 0 : (c = "socket" === d ? new n(b) : new o(b), this.elements.push(c))
}, a
}(), o = function () {
function a(a) {
var b, c, d, e, f, g, h = this;
if (this.progress = 0, null != window.ProgressEvent) for (c = null, a.addEventListener("progress", function (a) {
return h.progress = a.lengthComputable ? 100 * a.loaded / a.total : h.progress + (100 - h.progress) / 2
}, !1), g = ["load", "abort", "timeout", "error"], d = 0, e = g.length; e > d; d++) b = g[d], a.addEventListener(b, function () {
return h.progress = 100
}, !1); else f = a.onreadystatechange, a.onreadystatechange = function () {
var b;
return 0 === (b = a.readyState) || 4 === b ? h.progress = 100 : 3 === a.readyState && (h.progress = 50), "function" == typeof f ? f.apply(null, arguments) : void 0
}
}
return a
}(), n = function () {
function a(a) {
var b, c, d, e, f = this;
for (this.progress = 0, e = ["error", "open"], c = 0, d = e.length; d > c; c++) b = e[c], a.addEventListener(b, function () {
return f.progress = 100
}, !1)
}
return a
}(), d = function () {
function a(a) {
var b, c, d, f;
for (null == a && (a = {}), this.elements = [], null == a.selectors && (a.selectors = []), f = a.selectors, c = 0, d = f.length; d > c; c++) b = f[c], this.elements.push(new e(b))
}
return a
}(), e = function () {
function a(a) {
this.selector = a, this.progress = 0, this.check()
}
return a.prototype.check = function () {
var a = this;
return document.querySelector(this.selector) ? this.done() : setTimeout(function () {
return a.check()
}, D.elements.checkInterval)
}, a.prototype.done = function () {
return this.progress = 100
}, a
}(), c = function () {
function a() {
var a, b, c = this;
this.progress = null != (b = this.states[document.readyState]) ? b : 100, a = document.onreadystatechange, document.onreadystatechange = function () {
return null != c.states[document.readyState] && (c.progress = c.states[document.readyState]), "function" == typeof a ? a.apply(null, arguments) : void 0
}
}
return a.prototype.states = {loading: 0, interactive: 50, complete: 100}, a
}(), f = function () {
function a() {
var a, b, c, d, e, f = this;
this.progress = 0, a = 0, e = [], d = 0, c = C(), b = setInterval(function () {
var g;
return g = C() - c - 50, c = C(), e.push(g), e.length > D.eventLag.sampleCount && e.shift(), a = q(e), ++d >= D.eventLag.minSamples && a < D.eventLag.lagThreshold ? (f.progress = 100, clearInterval(b)) : f.progress = 100 * (3 / (a + 3))
}, 50)
}
return a
}(), m = function () {
function a(a) {
this.source = a, this.last = this.sinceLastUpdate = 0, this.rate = D.initialRate, this.catchup = 0, this.progress = this.lastProgress = 0, null != this.source && (this.progress = F(this.source, "progress"))
}
return a.prototype.tick = function (a, b) {
var c;
return null == b && (b = F(this.source, "progress")), b >= 100 && (this.done = !0), b === this.last ? this.sinceLastUpdate += a : (this.sinceLastUpdate && (this.rate = (b - this.last) / this.sinceLastUpdate), this.catchup = (b - this.progress) / D.catchupTime, this.sinceLastUpdate = 0, this.last = b), b > this.progress && (this.progress += this.catchup * a), c = 1 - Math.pow(this.progress / 100, D.easeFactor), this.progress += c * this.rate * a, this.progress = Math.min(this.lastProgress + D.maxProgressPerFrame, this.progress), this.progress = Math.max(0, this.progress), this.progress = Math.min(100, this.progress), this.lastProgress = this.progress, this.progress
}, a
}(), L = null, H = null, r = null, M = null, p = null, s = null, j.running = !1, z = function () {
return D.restartOnPushState ? j.restart() : void 0
}, null != window.history.pushState && (T = window.history.pushState, window.history.pushState = function () {
return z(), T.apply(window.history, arguments)
}), null != window.history.replaceState && (W = window.history.replaceState, window.history.replaceState = function () {
return z(), W.apply(window.history, arguments)
}), l = {ajax: a, elements: d, document: c, eventLag: f}, (B = function () {
var a, c, d, e, f, g, h, i;
for (j.sources = L = [], g = ["ajax", "elements", "document", "eventLag"], c = 0, e = g.length; e > c; c++) a = g[c], D[a] !== !1 && L.push(new l[a](D[a]));
for (i = null != (h = D.extraSources) ? h : [], d = 0, f = i.length; f > d; d++) K = i[d], L.push(new K(D));
return j.bar = r = new b, H = [], M = new m
})(), j.stop = function () {
return j.trigger("stop"), j.running = !1, r.destroy(), s = !0, null != p && ("function" == typeof t && t(p), p = null), B()
}, j.restart = function () {
return j.trigger("restart"), j.stop(), j.start()
}, j.go = function () {
var a;
return j.running = !0, r.render(), a = C(), s = !1, p = G(function (b, c) {
var d, e, f, g, h, i, k, l, n, o, p, q, t, u, v, w;
for (l = 100 - r.progress, e = p = 0, f = !0, i = q = 0, u = L.length; u > q; i = ++q) for (K = L[i], o = null != H[i] ? H[i] : H[i] = [], h = null != (w = K.elements) ? w : [K], k = t = 0, v = h.length; v > t; k = ++t) g = h[k], n = null != o[k] ? o[k] : o[k] = new m(g), f &= n.done, n.done || (e++, p += n.tick(b));
return d = p / e, r.update(M.tick(b, d)), r.done() || f || s ? (r.update(100), j.trigger("done"), setTimeout(function () {
return r.finish(), j.running = !1, j.trigger("hide")
}, Math.max(D.ghostTime, Math.max(D.minTime - (C() - a), 0)))) : c()
})
}, j.start = function (a) {
v(D, a), j.running = !0;
try {
r.render()
} catch (b) {
i = b
}
return document.querySelector(".pace") ? (j.trigger("start"), j.go()) : setTimeout(j.start, 50)
}, "function" == typeof define && define.amd ? define(function () {
return j
}) : "object" == typeof exports ? module.exports = j : D.startOnPageLoad && j.start()
}).call(this);
var QRCode;
!function () {
function a(a) {
this.mode = c.MODE_8BIT_BYTE, this.data = a, this.parsedData = [];
for (var b = [], d = 0, e = this.data.length; e > d; d++) {
var f = this.data.charCodeAt(d);
f > 65536 ? (b[0] = 240 | (1835008 & f) >>> 18, b[1] = 128 | (258048 & f) >>> 12, b[2] = 128 | (4032 & f) >>> 6, b[3] = 128 | 63 & f) : f > 2048 ? (b[0] = 224 | (61440 & f) >>> 12, b[1] = 128 | (4032 & f) >>> 6, b[2] = 128 | 63 & f) : f > 128 ? (b[0] = 192 | (1984 & f) >>> 6, b[1] = 128 | 63 & f) : b[0] = f, this.parsedData = this.parsedData.concat(b)
}
this.parsedData.length != this.data.length && (this.parsedData.unshift(191), this.parsedData.unshift(187), this.parsedData.unshift(239))
}
function b(a, b) {
this.typeNumber = a, this.errorCorrectLevel = b, this.modules = null, this.moduleCount = 0, this.dataCache = null, this.dataList = []
}
function i(a, b) {
if (void 0 == a.length) throw new Error(a.length + "/" + b);
for (var c = 0; c < a.length && 0 == a[c];) c++;
this.num = new Array(a.length - c + b);
for (var d = 0; d < a.length - c; d++) this.num[d] = a[d + c]
}
function j(a, b) {
this.totalCount = a, this.dataCount = b
}
function k() {
this.buffer = [], this.length = 0
}
function m() {
return "undefined" != typeof CanvasRenderingContext2D
}
function n() {
var a = !1, b = navigator.userAgent;
return /android/i.test(b) && (a = !0, aMat = b.toString().match(/android ([0-9]\.[0-9])/i), aMat && aMat[1] && (a = parseFloat(aMat[1]))), a
}
function r(a, b) {
for (var c = 1, e = s(a), f = 0, g = l.length; g >= f; f++) {
var h = 0;
switch (b) {
case d.L:
h = l[f][0];
break;
case d.M:
h = l[f][1];
break;
case d.Q:
h = l[f][2];
break;
case d.H:
h = l[f][3]
}
if (h >= e) break;
c++
}
if (c > l.length) throw new Error("Too long data");
return c
}
function s(a) {
var b = encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g, "a");
return b.length + (b.length != a ? 3 : 0)
}
a.prototype = {
getLength: function () {
return this.parsedData.length
}, write: function (a) {
for (var b = 0, c = this.parsedData.length; c > b; b++) a.put(this.parsedData[b], 8)
}
}, b.prototype = {
addData: function (b) {
var c = new a(b);
this.dataList.push(c), this.dataCache = null
}, isDark: function (a, b) {
if (0 > a || this.moduleCount <= a || 0 > b || this.moduleCount <= b) throw new Error(a + "," + b);
return this.modules[a][b]
}, getModuleCount: function () {
return this.moduleCount
}, make: function () {
this.makeImpl(!1, this.getBestMaskPattern())
}, makeImpl: function (a, c) {
this.moduleCount = 4 * this.typeNumber + 17, this.modules = new Array(this.moduleCount);
for (var d = 0; d < this.moduleCount; d++) {
this.modules[d] = new Array(this.moduleCount);
for (var e = 0; e < this.moduleCount; e++) this.modules[d][e] = null
}
this.setupPositionProbePattern(0, 0), this.setupPositionProbePattern(this.moduleCount - 7, 0), this.setupPositionProbePattern(0, this.moduleCount - 7), this.setupPositionAdjustPattern(), this.setupTimingPattern(), this.setupTypeInfo(a, c), this.typeNumber >= 7 && this.setupTypeNumber(a), null == this.dataCache && (this.dataCache = b.createData(this.typeNumber, this.errorCorrectLevel, this.dataList)), this.mapData(this.dataCache, c)
}, setupPositionProbePattern: function (a, b) {
for (var c = -1; 7 >= c; c++) if (!(-1 >= a + c || this.moduleCount <= a + c)) for (var d = -1; 7 >= d; d++) -1 >= b + d || this.moduleCount <= b + d || (this.modules[a + c][b + d] = c >= 0 && 6 >= c && (0 == d || 6 == d) || d >= 0 && 6 >= d && (0 == c || 6 == c) || c >= 2 && 4 >= c && d >= 2 && 4 >= d ? !0 : !1)
}, getBestMaskPattern: function () {
for (var a = 0, b = 0, c = 0; 8 > c; c++) {
this.makeImpl(!0, c);
var d = f.getLostPoint(this);
(0 == c || a > d) && (a = d, b = c)
}
return b
}, createMovieClip: function (a, b, c) {
var d = a.createEmptyMovieClip(b, c), e = 1;
this.make();
for (var f = 0; f < this.modules.length; f++) for (var g = f * e, h = 0; h < this.modules[f].length; h++) {
var i = h * e, j = this.modules[f][h];
j && (d.beginFill(0, 100), d.moveTo(i, g), d.lineTo(i + e, g), d.lineTo(i + e, g + e), d.lineTo(i, g + e), d.endFill())
}
return d
}, setupTimingPattern: function () {
for (var a = 8; a < this.moduleCount - 8; a++) null == this.modules[a][6] && (this.modules[a][6] = 0 == a % 2);
for (var b = 8; b < this.moduleCount - 8; b++) null == this.modules[6][b] && (this.modules[6][b] = 0 == b % 2)
}, setupPositionAdjustPattern: function () {
for (var a = f.getPatternPosition(this.typeNumber), b = 0; b < a.length; b++) for (var c = 0; c < a.length; c++) {
var d = a[b], e = a[c];
if (null == this.modules[d][e]) for (var g = -2; 2 >= g; g++) for (var h = -2; 2 >= h; h++) this.modules[d + g][e + h] = -2 == g || 2 == g || -2 == h || 2 == h || 0 == g && 0 == h ? !0 : !1
}
}, setupTypeNumber: function (a) {
for (var b = f.getBCHTypeNumber(this.typeNumber), c = 0; 18 > c; c++) {
var d = !a && 1 == (1 & b >> c);
this.modules[Math.floor(c / 3)][c % 3 + this.moduleCount - 8 - 3] = d
}
for (var c = 0; 18 > c; c++) {
var d = !a && 1 == (1 & b >> c);
this.modules[c % 3 + this.moduleCount - 8 - 3][Math.floor(c / 3)] = d
}
}, setupTypeInfo: function (a, b) {
for (var c = this.errorCorrectLevel << 3 | b, d = f.getBCHTypeInfo(c), e = 0; 15 > e; e++) {
var g = !a && 1 == (1 & d >> e);
6 > e ? this.modules[e][8] = g : 8 > e ? this.modules[e + 1][8] = g : this.modules[this.moduleCount - 15 + e][8] = g
}
for (var e = 0; 15 > e; e++) {
var g = !a && 1 == (1 & d >> e);
8 > e ? this.modules[8][this.moduleCount - e - 1] = g : 9 > e ? this.modules[8][15 - e - 1 + 1] = g : this.modules[8][15 - e - 1] = g
}
this.modules[this.moduleCount - 8][8] = !a
}, mapData: function (a, b) {
for (var c = -1, d = this.moduleCount - 1, e = 7, g = 0, h = this.moduleCount - 1; h > 0; h -= 2) for (6 == h && h--; ;) {
for (var i = 0; 2 > i; i++) if (null == this.modules[d][h - i]) {
var j = !1;
g < a.length && (j = 1 == (1 & a[g] >>> e));
var k = f.getMask(b, d, h - i);
k && (j = !j), this.modules[d][h - i] = j, e--, -1 == e && (g++, e = 7)
}
if (d += c, 0 > d || this.moduleCount <= d) {
d -= c, c = -c;
break
}
}
}
}, b.PAD0 = 236, b.PAD1 = 17, b.createData = function (a, c, d) {
for (var e = j.getRSBlocks(a, c), g = new k, h = 0; h < d.length; h++) {
var i = d[h];
g.put(i.mode, 4), g.put(i.getLength(), f.getLengthInBits(i.mode, a)), i.write(g)
}
for (var l = 0, h = 0; h < e.length; h++) l += e[h].dataCount;
if (g.getLengthInBits() > 8 * l) throw new Error("code length overflow. (" + g.getLengthInBits() + ">" + 8 * l + ")");
for (g.getLengthInBits() + 4 <= 8 * l && g.put(0, 4); 0 != g.getLengthInBits() % 8;) g.putBit(!1);
for (; ;) {
if (g.getLengthInBits() >= 8 * l) break;
if (g.put(b.PAD0, 8), g.getLengthInBits() >= 8 * l) break;
g.put(b.PAD1, 8)
}
return b.createBytes(g, e)
}, b.createBytes = function (a, b) {
for (var c = 0, d = 0, e = 0, g = new Array(b.length), h = new Array(b.length), j = 0; j < b.length; j++) {
var k = b[j].dataCount, l = b[j].totalCount - k;
d = Math.max(d, k), e = Math.max(e, l), g[j] = new Array(k);
for (var m = 0; m < g[j].length; m++) g[j][m] = 255 & a.buffer[m + c];
c += k;
var n = f.getErrorCorrectPolynomial(l), o = new i(g[j], n.getLength() - 1), p = o.mod(n);
h[j] = new Array(n.getLength() - 1);
for (var m = 0; m < h[j].length; m++) {
var q = m + p.getLength() - h[j].length;
h[j][m] = q >= 0 ? p.get(q) : 0
}
}
for (var r = 0, m = 0; m < b.length; m++) r += b[m].totalCount;
for (var s = new Array(r), t = 0, m = 0; d > m; m++) for (var j = 0; j < b.length; j++) m < g[j].length && (s[t++] = g[j][m]);
for (var m = 0; e > m; m++) for (var j = 0; j < b.length; j++) m < h[j].length && (s[t++] = h[j][m]);
return s
};
for (var c = {MODE_NUMBER: 1, MODE_ALPHA_NUM: 2, MODE_8BIT_BYTE: 4, MODE_KANJI: 8}, d = {
L: 1,
M: 0,
Q: 3,
H: 2
}, e = {
PATTERN000: 0,
PATTERN001: 1,
PATTERN010: 2,
PATTERN011: 3,
PATTERN100: 4,
PATTERN101: 5,
PATTERN110: 6,
PATTERN111: 7
}, f = {
PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],
G15: 1335,
G18: 7973,
G15_MASK: 21522,
getBCHTypeInfo: function (a) {
for (var b = a << 10; f.getBCHDigit(b) - f.getBCHDigit(f.G15) >= 0;) b ^= f.G15 << f.getBCHDigit(b) - f.getBCHDigit(f.G15);
return (a << 10 | b) ^ f.G15_MASK
},
getBCHTypeNumber: function (a) {
for (var b = a << 12; f.getBCHDigit(b) - f.getBCHDigit(f.G18) >= 0;) b ^= f.G18 << f.getBCHDigit(b) - f.getBCHDigit(f.G18);
return a << 12 | b
},
getBCHDigit: function (a) {
for (var b = 0; 0 != a;) b++, a >>>= 1;
return b
},
getPatternPosition: function (a) {
return f.PATTERN_POSITION_TABLE[a - 1]
},
getMask: function (a, b, c) {
switch (a) {
case e.PATTERN000:
return 0 == (b + c) % 2;
case e.PATTERN001:
return 0 == b % 2;
case e.PATTERN010:
return 0 == c % 3;
case e.PATTERN011:
return 0 == (b + c) % 3;
case e.PATTERN100:
return 0 == (Math.floor(b / 2) + Math.floor(c / 3)) % 2;
case e.PATTERN101:
return 0 == b * c % 2 + b * c % 3;
case e.PATTERN110:
return 0 == (b * c % 2 + b * c % 3) % 2;
case e.PATTERN111:
return 0 == (b * c % 3 + (b + c) % 2) % 2;
default:
throw new Error("bad maskPattern:" + a)
}
},
getErrorCorrectPolynomial: function (a) {
for (var b = new i([1], 0), c = 0; a > c; c++) b = b.multiply(new i([1, g.gexp(c)], 0));
return b
},
getLengthInBits: function (a, b) {
if (b >= 1 && 10 > b) switch (a) {
case c.MODE_NUMBER:
return 10;
case c.MODE_ALPHA_NUM:
return 9;
case c.MODE_8BIT_BYTE:
return 8;
case c.MODE_KANJI:
return 8;
default:
throw new Error("mode:" + a)
} else if (27 > b) switch (a) {
case c.MODE_NUMBER:
return 12;
case c.MODE_ALPHA_NUM:
return 11;
case c.MODE_8BIT_BYTE:
return 16;
case c.MODE_KANJI:
return 10;
default:
throw new Error("mode:" + a)
} else {
if (!(41 > b)) throw new Error("type:" + b);
switch (a) {
case c.MODE_NUMBER:
return 14;
case c.MODE_ALPHA_NUM:
return 13;
case c.MODE_8BIT_BYTE:
return 16;
case c.MODE_KANJI:
return 12;
default:
throw new Error("mode:" + a)
}
}
},
getLostPoint: function (a) {
for (var b = a.getModuleCount(), c = 0, d = 0; b > d; d++) for (var e = 0; b > e; e++) {
for (var f = 0, g = a.isDark(d, e), h = -1; 1 >= h; h++) if (!(0 > d + h || d + h >= b)) for (var i = -1; 1 >= i; i++) 0 > e + i || e + i >= b || (0 != h || 0 != i) && g == a.isDark(d + h, e + i) && f++;
f > 5 && (c += 3 + f - 5)
}
for (var d = 0; b - 1 > d; d++) for (var e = 0; b - 1 > e; e++) {
var j = 0;
a.isDark(d, e) && j++, a.isDark(d + 1, e) && j++, a.isDark(d, e + 1) && j++, a.isDark(d + 1, e + 1) && j++, (0 == j || 4 == j) && (c += 3)
}
for (var d = 0; b > d; d++) for (var e = 0; b - 6 > e; e++) a.isDark(d, e) && !a.isDark(d, e + 1) && a.isDark(d, e + 2) && a.isDark(d, e + 3) && a.isDark(d, e + 4) && !a.isDark(d, e + 5) && a.isDark(d, e + 6) && (c += 40);
for (var e = 0; b > e; e++) for (var d = 0; b - 6 > d; d++) a.isDark(d, e) && !a.isDark(d + 1, e) && a.isDark(d + 2, e) && a.isDark(d + 3, e) && a.isDark(d + 4, e) && !a.isDark(d + 5, e) && a.isDark(d + 6, e) && (c += 40);
for (var k = 0, e = 0; b > e; e++) for (var d = 0; b > d; d++) a.isDark(d, e) && k++;
var l = Math.abs(100 * k / b / b - 50) / 5;
return c += 10 * l
}
}, g = {
glog: function (a) {
if (1 > a) throw new Error("glog(" + a + ")");
return g.LOG_TABLE[a]
}, gexp: function (a) {
for (; 0 > a;) a += 255;
for (; a >= 256;) a -= 255;
return g.EXP_TABLE[a]
}, EXP_TABLE: new Array(256), LOG_TABLE: new Array(256)
}, h = 0; 8 > h; h++) g.EXP_TABLE[h] = 1 << h;
for (var h = 8; 256 > h; h++) g.EXP_TABLE[h] = g.EXP_TABLE[h - 4] ^ g.EXP_TABLE[h - 5] ^ g.EXP_TABLE[h - 6] ^ g.EXP_TABLE[h - 8];
for (var h = 0; 255 > h; h++) g.LOG_TABLE[g.EXP_TABLE[h]] = h;
i.prototype = {
get: function (a) {
return this.num[a]
}, getLength: function () {
return this.num.length
}, multiply: function (a) {
for (var b = new Array(this.getLength() + a.getLength() - 1), c = 0; c < this.getLength(); c++) for (var d = 0; d < a.getLength(); d++) b[c + d] ^= g.gexp(g.glog(this.get(c)) + g.glog(a.get(d)));
return new i(b, 0)
}, mod: function (a) {
if (this.getLength() - a.getLength() < 0) return this;
for (var b = g.glog(this.get(0)) - g.glog(a.get(0)), c = new Array(this.getLength()), d = 0; d < this.getLength(); d++) c[d] = this.get(d);
for (var d = 0; d < a.getLength(); d++) c[d] ^= g.gexp(g.glog(a.get(d)) + b);
return new i(c, 0).mod(a)
}
}, j.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]], j.getRSBlocks = function (a, b) {
var c = j.getRsBlockTable(a, b);
if (void 0 == c) throw new Error("bad rs block @ typeNumber:" + a + "/errorCorrectLevel:" + b);
for (var d = c.length / 3, e = [], f = 0; d > f; f++) for (var g = c[3 * f + 0], h = c[3 * f + 1], i = c[3 * f + 2], k = 0; g > k; k++) e.push(new j(h, i));
return e
}, j.getRsBlockTable = function (a, b) {
switch (b) {
case d.L:
return j.RS_BLOCK_TABLE[4 * (a - 1) + 0];
case d.M:
return j.RS_BLOCK_TABLE[4 * (a - 1) + 1];
case d.Q:
return j.RS_BLOCK_TABLE[4 * (a - 1) + 2];
case d.H:
return j.RS_BLOCK_TABLE[4 * (a - 1) + 3];
default:
return void 0
}
}, k.prototype = {
get: function (a) {
var b = Math.floor(a / 8);
return 1 == (1 & this.buffer[b] >>> 7 - a % 8)
}, put: function (a, b) {
for (var c = 0; b > c; c++) this.putBit(1 == (1 & a >>> b - c - 1))
}, getLengthInBits: function () {
return this.length
}, putBit: function (a) {
var b = Math.floor(this.length / 8);
this.buffer.length <= b && this.buffer.push(0), a && (this.buffer[b] |= 128 >>> this.length % 8), this.length++
}
};
var l = [[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155], [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220], [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310], [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403], [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511], [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625], [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742], [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898], [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051], [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]],
o = function () {
var a = function (a, b) {
this._el = a, this._htOption = b
};
return a.prototype.draw = function (a) {
function g(a, b) {
var c = document.createElementNS("http://www.w3.org/2000/svg", a);
for (var d in b) b.hasOwnProperty(d) && c.setAttribute(d, b[d]);
return c
}
var b = this._htOption, c = this._el, d = a.getModuleCount();
Math.floor(b.width / d), Math.floor(b.height / d), this.clear();
var h = g("svg", {
viewBox: "0 0 " + String(d) + " " + String(d),
width: "100%",
height: "100%",
fill: b.colorLight
});
h.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"), c.appendChild(h), h.appendChild(g("rect", {
fill: b.colorDark,
width: "1",
height: "1",
id: "template"
}));
for (var i = 0; d > i; i++) for (var j = 0; d > j; j++) if (a.isDark(i, j)) {
var k = g("use", {x: String(i), y: String(j)});
k.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template"), h.appendChild(k)
}
}, a.prototype.clear = function () {
for (; this._el.hasChildNodes();) this._el.removeChild(this._el.lastChild)
}, a
}(), p = "svg" === document.documentElement.tagName.toLowerCase(), q = p ? o : m() ? function () {
function a() {
this._elImage.src = this._elCanvas.toDataURL("image/png"), this._elImage.style.display = "block", this._elCanvas.style.display = "none"
}
function d(a, b) {
var c = this;
if (c._fFail = b, c._fSuccess = a, null === c._bSupportDataURI) {
var d = document.createElement("img"), e = function () {
c._bSupportDataURI = !1, c._fFail && _fFail.call(c)
}, f = function () {
c._bSupportDataURI = !0, c._fSuccess && c._fSuccess.call(c)
};
return d.onabort = e, d.onerror = e, d.onload = f, d.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==", void 0
}
c._bSupportDataURI === !0 && c._fSuccess ? c._fSuccess.call(c) : c._bSupportDataURI === !1 && c._fFail && c._fFail.call(c)
}
if (this._android && this._android <= 2.1) {
var b = 1 / window.devicePixelRatio, c = CanvasRenderingContext2D.prototype.drawImage;
CanvasRenderingContext2D.prototype.drawImage = function (a, d, e, f, g, h, i, j) {
if ("nodeName" in a && /img/i.test(a.nodeName)) for (var l = arguments.length - 1; l >= 1; l--) arguments[l] = arguments[l] * b; else "undefined" == typeof j && (arguments[1] *= b, arguments[2] *= b, arguments[3] *= b, arguments[4] *= b);
c.apply(this, arguments)
}
}
var e = function (a, b) {
this._bIsPainted = !1, this._android = n(), this._htOption = b, this._elCanvas = document.createElement("canvas"), this._elCanvas.width = b.width, this._elCanvas.height = b.height, a.appendChild(this._elCanvas), this._el = a, this._oContext = this._elCanvas.getContext("2d"), this._bIsPainted = !1, this._elImage = document.createElement("img"), this._elImage.style.display = "none", this._el.appendChild(this._elImage), this._bSupportDataURI = null
};
return e.prototype.draw = function (a) {
var b = this._elImage, c = this._oContext, d = this._htOption, e = a.getModuleCount(), f = d.width / e,
g = d.height / e, h = Math.round(f), i = Math.round(g);
b.style.display = "none", this.clear();
for (var j = 0; e > j; j++) for (var k = 0; e > k; k++) {
var l = a.isDark(j, k), m = k * f, n = j * g;
c.strokeStyle = l ? d.colorDark : d.colorLight, c.lineWidth = 1, c.fillStyle = l ? d.colorDark : d.colorLight, c.fillRect(m, n, f, g), c.strokeRect(Math.floor(m) + .5, Math.floor(n) + .5, h, i), c.strokeRect(Math.ceil(m) - .5, Math.ceil(n) - .5, h, i)
}
this._bIsPainted = !0
}, e.prototype.makeImage = function () {
this._bIsPainted && d.call(this, a)
}, e.prototype.isPainted = function () {
return this._bIsPainted
}, e.prototype.clear = function () {
this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height), this._bIsPainted = !1
}, e.prototype.round = function (a) {
return a ? Math.floor(1e3 * a) / 1e3 : a
}, e
}() : function () {
var a = function (a, b) {
this._el = a, this._htOption = b
};
return a.prototype.draw = function (a) {
for (var b = this._htOption, c = this._el, d = a.getModuleCount(), e = Math.floor(b.width / d), f = Math.floor(b.height / d), g = ['<table style="border:0;border-collapse:collapse;">'], h = 0; d > h; h++) {
g.push("<tr>");
for (var i = 0; d > i; i++) g.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:' + e + "px;height:" + f + "px;background-color:" + (a.isDark(h, i) ? b.colorDark : b.colorLight) + ';"></td>');
g.push("</tr>")
}
g.push("</table>"), c.innerHTML = g.join("");
var j = c.childNodes[0], k = (b.width - j.offsetWidth) / 2, l = (b.height - j.offsetHeight) / 2;
k > 0 && l > 0 && (j.style.margin = l + "px " + k + "px")
}, a.prototype.clear = function () {
this._el.innerHTML = ""
}, a
}();
QRCode = function (a, b) {
if (this._htOption = {
width: 256,
height: 256,
typeNumber: 4,
colorDark: "#000000",
colorLight: "#ffffff",
correctLevel: d.H
}, "string" == typeof b && (b = {text: b}), b) for (var c in b) this._htOption[c] = b[c];
"string" == typeof a && (a = document.getElementById(a)), this._android = n(), this._el = a, this._oQRCode = null, this._oDrawing = new q(this._el, this._htOption), this._htOption.text && this.makeCode(this._htOption.text)
}, QRCode.prototype.makeCode = function (a) {
this._oQRCode = new b(r(a, this._htOption.correctLevel), this._htOption.correctLevel), this._oQRCode.addData(a), this._oQRCode.make(), this._el.title = a, this._oDrawing.draw(this._oQRCode), this.makeImage()
}, QRCode.prototype.makeImage = function () {
"function" == typeof this._oDrawing.makeImage && (!this._android || this._android >= 3) && this._oDrawing.makeImage()
}, QRCode.prototype.clear = function () {
this._oDrawing.clear()
}, QRCode.CorrectLevel = d
}();
/*
Copyright 2012 Igor Vaynberg
Version: 3.4.1 Timestamp: Thu Jun 27 18:02:10 PDT 2013
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
General Public License version 2 (the "GPL License"). You may choose either license to govern your
use of this software only upon the condition that you accept all of the terms of either the Apache
License or the GPL License.
You may obtain a copy of the Apache License and the GPL License at:
http://www.apache.org/licenses/LICENSE-2.0
http://www.gnu.org/licenses/gpl-2.0.html
Unless required by applicable law or agreed to in writing, software distributed under the
Apache License or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for
the specific language governing permissions and limitations under the Apache License and the GPL License.
*/
(function ($) {
if (typeof $.fn.each2 == "undefined") {
$.fn.extend({
/*
* 4-10 times faster .each replacement
* use it carefully, as it overrides jQuery context of element on each iteration
*/
each2: function (c) {
var j = $([0]), i = -1, l = this.length;
while (
++i < l
&& (j.context = j[0] = this[i])
&& c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object
) ;
return this;
}
});
}
})(jQuery);
(function ($, undefined) {
"use strict";
/*global document, window, jQuery, console */
if (window.Select2 !== undefined) {
return;
}
var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,
lastMousePosition = {x: 0, y: 0}, $document, scrollBarDimensions,
KEY = {
TAB: 9,
ENTER: 13,
ESC: 27,
SPACE: 32,
LEFT: 37,
UP: 38,
RIGHT: 39,
DOWN: 40,
SHIFT: 16,
CTRL: 17,
ALT: 18,
PAGE_UP: 33,
PAGE_DOWN: 34,
HOME: 36,
END: 35,
BACKSPACE: 8,
DELETE: 46,
isArrow: function (k) {
k = k.which ? k.which : k;
switch (k) {
case KEY.LEFT:
case KEY.RIGHT:
case KEY.UP:
case KEY.DOWN:
return true;
}
return false;
},
isControl: function (e) {
var k = e.which;
switch (k) {
case KEY.SHIFT:
case KEY.CTRL:
case KEY.ALT:
return true;
}
if (e.metaKey) return true;
return false;
},
isFunctionKey: function (k) {
k = k.which ? k.which : k;
return k >= 112 && k <= 123;
}
},
MEASURE_SCROLLBAR_TEMPLATE = "<div class='select2-measure-scrollbar'></div>";
$document = $(document);
nextUid = (function () {
var counter = 1;
return function () {
return counter++;
};
}());
function indexOf(value, array) {
var i = 0, l = array.length;
for (; i < l; i = i + 1) {
if (equal(value, array[i])) return i;
}
return -1;
}
function measureScrollbar() {
var $template = $(MEASURE_SCROLLBAR_TEMPLATE);
$template.appendTo('body');
var dim = {
width: $template.width() - $template[0].clientWidth,
height: $template.height() - $template[0].clientHeight
};
$template.remove();
return dim;
}
/**
* Compares equality of a and b
* @param a
* @param b
*/
function equal(a, b) {
if (a === b) return true;
if (a === undefined || b === undefined) return false;
if (a === null || b === null) return false;
// Check whether 'a' or 'b' is a string (primitive or object).
// The concatenation of an empty string (+'') converts its argument to a string's primitive.
if (a.constructor === String) return a + '' === b + ''; // a+'' - in case 'a' is a String object
if (b.constructor === String) return b + '' === a + ''; // b+'' - in case 'b' is a String object
return false;
}
/**
* Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty
* strings
* @param string
* @param separator
*/
function splitVal(string, separator) {
var val, i, l;
if (string === null || string.length < 1) return [];
val = string.split(separator);
for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);
return val;
}
function getSideBorderPadding(element) {
return element.outerWidth(false) - element.width();
}
function installKeyUpChangeEvent(element) {
var key = "keyup-change-value";
element.on("keydown", function () {
if ($.data(element, key) === undefined) {
$.data(element, key, element.val());
}
});
element.on("keyup", function () {
var val = $.data(element, key);
if (val !== undefined && element.val() !== val) {
$.removeData(element, key);
element.trigger("keyup-change");
}
});
}
$document.on("mousemove", function (e) {
lastMousePosition.x = e.pageX;
lastMousePosition.y = e.pageY;
});
/**
* filters mouse events so an event is fired only if the mouse moved.
*
* filters out mouse events that occur when mouse is stationary but
* the elements under the pointer are scrolled.
*/
function installFilteredMouseMove(element) {
element.on("mousemove", function (e) {
var lastpos = lastMousePosition;
if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {
$(e.target).trigger("mousemove-filtered", e);
}
});
}
/**
* Debounces a function. Returns a function that calls the original fn function only if no invocations have been made
* within the last quietMillis milliseconds.
*
* @param quietMillis number of milliseconds to wait before invoking fn
* @param fn function to be debounced
* @param ctx object to be used as this reference within fn
* @return debounced version of fn
*/
function debounce(quietMillis, fn, ctx) {
ctx = ctx || undefined;
var timeout;
return function () {
var args = arguments;
window.clearTimeout(timeout);
timeout = window.setTimeout(function () {
fn.apply(ctx, args);
}, quietMillis);
};
}
/**
* A simple implementation of a thunk
* @param formula function used to lazily initialize the thunk
* @return {Function}
*/
function thunk(formula) {
var evaluated = false,
value;
return function () {
if (evaluated === false) {
value = formula();
evaluated = true;
}
return value;
};
};
function installDebouncedScroll(threshold, element) {
var notify = debounce(threshold, function (e) {
element.trigger("scroll-debounced", e);
});
element.on("scroll", function (e) {
if (indexOf(e.target, element.get()) >= 0) notify(e);
});
}
function focus($el) {
if ($el[0] === document.activeElement) return;
/* set the focus in a 0 timeout - that way the focus is set after the processing
of the current event has finished - which seems like the only reliable way
to set focus */
window.setTimeout(function () {
var el = $el[0], pos = $el.val().length, range;
$el.focus();
/* make sure el received focus so we do not error out when trying to manipulate the caret.
sometimes modals or others listeners may steal it after its set */
if ($el.is(":visible") && el === document.activeElement) {
/* after the focus is set move the caret to the end, necessary when we val()
just before setting focus */
if (el.setSelectionRange) {
el.setSelectionRange(pos, pos);
}
else if (el.createTextRange) {
range = el.createTextRange();
range.collapse(false);
range.select();
}
}
}, 0);
}
function getCursorInfo(el) {
el = $(el)[0];
var offset = 0;
var length = 0;
if ('selectionStart' in el) {
offset = el.selectionStart;
length = el.selectionEnd - offset;
} else if ('selection' in document) {
el.focus();
var sel = document.selection.createRange();
length = document.selection.createRange().text.length;
sel.moveStart('character', -el.value.length);
offset = sel.text.length - length;
}
return {offset: offset, length: length};
}
function killEvent(event) {
event.preventDefault();
event.stopPropagation();
}
function killEventImmediately(event) {
event.preventDefault();
event.stopImmediatePropagation();
}
function measureTextWidth(e) {
if (!sizer) {
var style = e[0].currentStyle || window.getComputedStyle(e[0], null);
sizer = $(document.createElement("div")).css({
position: "absolute",
left: "-10000px",
top: "-10000px",
display: "none",
fontSize: style.fontSize,
fontFamily: style.fontFamily,
fontStyle: style.fontStyle,
fontWeight: style.fontWeight,
letterSpacing: style.letterSpacing,
textTransform: style.textTransform,
whiteSpace: "nowrap"
});
sizer.attr("class", "select2-sizer");
$("body").append(sizer);
}
sizer.text(e.val());
return sizer.width();
}
function syncCssClasses(dest, src, adapter) {
var classes, replacements = [], adapted;
classes = dest.attr("class");
if (classes) {
classes = '' + classes; // for IE which returns object
$(classes.split(" ")).each2(function () {
if (this.indexOf("select2-") === 0) {
replacements.push(this);
}
});
}
classes = src.attr("class");
if (classes) {
classes = '' + classes; // for IE which returns object
$(classes.split(" ")).each2(function () {
if (this.indexOf("select2-") !== 0) {
adapted = adapter(this);
if (adapted) {
replacements.push(this);
}
}
});
}
dest.attr("class", replacements.join(" "));
}
function markMatch(text, term, markup, escapeMarkup) {
var match = text.toUpperCase().indexOf(term.toUpperCase()),
tl = term.length;
if (match < 0) {
markup.push(escapeMarkup(text));
return;
}
markup.push(escapeMarkup(text.substring(0, match)));
markup.push("<span class='select2-match'>");
markup.push(escapeMarkup(text.substring(match, match + tl)));
markup.push("</span>");
markup.push(escapeMarkup(text.substring(match + tl, text.length)));
}
function defaultEscapeMarkup(markup) {
var replace_map = {
'\\': '&#92;',
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;',
"/": '&#47;'
};
return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
return replace_map[match];
});
}
/**
* Produces an ajax-based query function
*
* @param options object containing configuration paramters
* @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax
* @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax
* @param options.url url for the data
* @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.
* @param options.dataType request data type: ajax, jsonp, other datatatypes supported by jQuery's $.ajax function or the transport function if specified
* @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often
* @param options.results a function(remoteData, pageNumber) that converts data returned form the remote request to the format expected by Select2.
* The expected format is an object containing the following keys:
* results array of objects that will be used as choices
* more (optional) boolean indicating whether there are more results available
* Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}
*/
function ajax(options) {
var timeout, // current scheduled but not yet executed request
requestSequence = 0, // sequence used to drop out-of-order responses
handler = null,
quietMillis = options.quietMillis || 100,
ajaxUrl = options.url,
self = this;
return function (query) {
window.clearTimeout(timeout);
timeout = window.setTimeout(function () {
requestSequence += 1; // increment the sequence
var requestNumber = requestSequence, // this request's sequence number
data = options.data, // ajax data function
url = ajaxUrl, // ajax url string or function
transport = options.transport || $.fn.select2.ajaxDefaults.transport,
// deprecated - to be removed in 4.0 - use params instead
deprecated = {
type: options.type || 'GET', // set type of request (GET or POST)
cache: options.cache || false,
jsonpCallback: options.jsonpCallback || undefined,
dataType: options.dataType || "json"
},
params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);
data = data ? data.call(self, query.term, query.page, query.context) : null;
url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;
if (handler) {
handler.abort();
}
if (options.params) {
if ($.isFunction(options.params)) {
$.extend(params, options.params.call(self));
} else {
$.extend(params, options.params);
}
}
$.extend(params, {
url: url,
dataType: options.dataType,
data: data,
success: function (data) {
if (requestNumber < requestSequence) {
return;
}
// TODO - replace query.page with query so users have access to term, page, etc.
var results = options.results(data, query.page);
query.callback(results);
}
});
handler = transport.call(self, params);
}, quietMillis);
};
}
/**
* Produces a query function that works with a local array
*
* @param options object containing configuration parameters. The options parameter can either be an array or an
* object.
*
* If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.
*
* If the object form is used ti is assumed that it contains 'data' and 'text' keys. The 'data' key should contain
* an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'
* key can either be a String in which case it is expected that each element in the 'data' array has a key with the
* value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract
* the text.
*/
function local(options) {
var data = options, // data elements
dataText,
tmp,
text = function (item) {
return "" + item.text;
}; // function used to retrieve the text portion of a data item that is matched against the search
if ($.isArray(data)) {
tmp = data;
data = {results: tmp};
}
if ($.isFunction(data) === false) {
tmp = data;
data = function () {
return tmp;
};
}
var dataItem = data();
if (dataItem.text) {
text = dataItem.text;
// if text is not a function we assume it to be a key name
if (!$.isFunction(text)) {
dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available
text = function (item) {
return item[dataText];
};
}
}
return function (query) {
var t = query.term, filtered = {results: []}, process;
if (t === "") {
query.callback(data());
return;
}
process = function (datum, collection) {
var group, attr;
datum = datum[0];
if (datum.children) {
group = {};
for (attr in datum) {
if (datum.hasOwnProperty(attr)) group[attr] = datum[attr];
}
group.children = [];
$(datum.children).each2(function (i, childDatum) {
process(childDatum, group.children);
});
if (group.children.length || query.matcher(t, text(group), datum)) {
collection.push(group);
}
} else {
if (query.matcher(t, text(datum), datum)) {
collection.push(datum);
}
}
};
$(data().results).each2(function (i, datum) {
process(datum, filtered.results);
});
query.callback(filtered);
};
}
// TODO javadoc
function tags(data) {
var isFunc = $.isFunction(data);
return function (query) {
var t = query.term, filtered = {results: []};
$(isFunc ? data() : data).each(function () {
var isObject = this.text !== undefined,
text = isObject ? this.text : this;
if (t === "" || query.matcher(t, text)) {
filtered.results.push(isObject ? this : {id: this, text: this});
}
});
query.callback(filtered);
};
}
/**
* Checks if the formatter function should be used.
*
* Throws an error if it is not a function. Returns true if it should be used,
* false if no formatting should be performed.
*
* @param formatter
*/
function checkFormatter(formatter, formatterName) {
if ($.isFunction(formatter)) return true;
if (!formatter) return false;
throw new Error(formatterName + " must be a function or a falsy value");
}
function evaluate(val) {
return $.isFunction(val) ? val() : val;
}
function countResults(results) {
var count = 0;
$.each(results, function (i, item) {
if (item.children) {
count += countResults(item.children);
} else {
count++;
}
});
return count;
}
/**
* Default tokenizer. This function uses breaks the input on substring match of any string from the
* opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those
* two options have to be defined in order for the tokenizer to work.
*
* @param input text user has typed so far or pasted into the search field
* @param selection currently selected choices
* @param selectCallback function(choice) callback tho add the choice to selection
* @param opts select2's opts
* @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value
*/
function defaultTokenizer(input, selection, selectCallback, opts) {
var original = input, // store the original so we can compare and know if we need to tell the search to update its text
dupe = false, // check for whether a token we extracted represents a duplicate selected choice
token, // token
index, // position at which the separator was found
i, l, // looping variables
separator; // the matched separator
if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;
while (true) {
index = -1;
for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {
separator = opts.tokenSeparators[i];
index = input.indexOf(separator);
if (index >= 0) break;
}
if (index < 0) break; // did not find any token separator in the input string, bail
token = input.substring(0, index);
input = input.substring(index + separator.length);
if (token.length > 0) {
token = opts.createSearchChoice.call(this, token, selection);
if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {
dupe = false;
for (i = 0, l = selection.length; i < l; i++) {
if (equal(opts.id(token), opts.id(selection[i]))) {
dupe = true;
break;
}
}
if (!dupe) selectCallback(token);
}
}
}
if (original !== input) return input;
}
/**
* Creates a new class
*
* @param superClass
* @param methods
*/
function clazz(SuperClass, methods) {
var constructor = function () {
};
constructor.prototype = new SuperClass;
constructor.prototype.constructor = constructor;
constructor.prototype.parent = SuperClass.prototype;
constructor.prototype = $.extend(constructor.prototype, methods);
return constructor;
}
AbstractSelect2 = clazz(Object, {
// abstract
bind: function (func) {
var self = this;
return function () {
func.apply(self, arguments);
};
},
// abstract
init: function (opts) {
var results, search, resultsSelector = ".select2-results", disabled, readonly;
// prepare options
this.opts = opts = this.prepareOpts(opts);
this.id = opts.id;
// destroy if called on an existing component
if (opts.element.data("select2") !== undefined &&
opts.element.data("select2") !== null) {
opts.element.data("select2").destroy();
}
this.container = this.createContainer();
this.containerId = "s2id_" + (opts.element.attr("id") || "autogen" + nextUid());
this.containerSelector = "#" + this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
this.container.attr("id", this.containerId);
// cache the body so future lookups are cheap
this.body = thunk(function () {
return opts.element.closest("body");
});
syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);
this.container.css(evaluate(opts.containerCss));
this.container.addClass(evaluate(opts.containerCssClass));
this.elementTabIndex = this.opts.element.attr("tabindex");
// swap container for the element
this.opts.element
.data("select2", this)
.attr("tabindex", "-1")
.before(this.container);
this.container.data("select2", this);
this.dropdown = this.container.find(".select2-drop");
this.dropdown.addClass(evaluate(opts.dropdownCssClass));
this.dropdown.data("select2", this);
this.results = results = this.container.find(resultsSelector);
this.search = search = this.container.find("input.select2-input");
this.resultsPage = 0;
this.context = null;
// initialize the container
this.initContainer();
installFilteredMouseMove(this.results);
this.dropdown.on("mousemove-filtered touchstart touchmove touchend", resultsSelector, this.bind(this.highlightUnderEvent));
installDebouncedScroll(80, this.results);
this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded));
// do not propagate change event from the search field out of the component
$(this.container).on("change", ".select2-input", function (e) {
e.stopPropagation();
});
$(this.dropdown).on("change", ".select2-input", function (e) {
e.stopPropagation();
});
// if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel
if ($.fn.mousewheel) {
results.mousewheel(function (e, delta, deltaX, deltaY) {
var top = results.scrollTop(), height;
if (deltaY > 0 && top - deltaY <= 0) {
results.scrollTop(0);
killEvent(e);
} else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {
results.scrollTop(results.get(0).scrollHeight - results.height());
killEvent(e);
}
});
}
installKeyUpChangeEvent(search);
search.on("keyup-change input paste", this.bind(this.updateResults));
search.on("focus", function () {
search.addClass("select2-focused");
});
search.on("blur", function () {
search.removeClass("select2-focused");
});
this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) {
if ($(e.target).closest(".select2-result-selectable").length > 0) {
this.highlightUnderEvent(e);
this.selectHighlighted(e);
}
}));
// trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening
// for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's
// dom it will trigger the popup close, which is not what we want
this.dropdown.on("click mouseup mousedown", function (e) {
e.stopPropagation();
});
if ($.isFunction(this.opts.initSelection)) {
// initialize selection based on the current value of the source element
this.initSelection();
// if the user has provided a function that can set selection based on the value of the source element
// we monitor the change event on the element and trigger it, allowing for two way synchronization
this.monitorSource();
}
if (opts.maximumInputLength !== null) {
this.search.attr("maxlength", opts.maximumInputLength);
}
var disabled = opts.element.prop("disabled");
if (disabled === undefined) disabled = false;
this.enable(!disabled);
var readonly = opts.element.prop("readonly");
if (readonly === undefined) readonly = false;
this.readonly(readonly);
// Calculate size of scrollbar
scrollBarDimensions = scrollBarDimensions || measureScrollbar();
this.autofocus = opts.element.prop("autofocus")
opts.element.prop("autofocus", false);
if (this.autofocus) this.focus();
},
// abstract
destroy: function () {
var element = this.opts.element, select2 = element.data("select2");
if (this.propertyObserver) {
delete this.propertyObserver;
this.propertyObserver = null;
}
if (select2 !== undefined) {
select2.container.remove();
select2.dropdown.remove();
element
.removeClass("select2-offscreen")
.removeData("select2")
.off(".select2")
.prop("autofocus", this.autofocus || false);
if (this.elementTabIndex) {
element.attr({tabindex: this.elementTabIndex});
} else {
element.removeAttr("tabindex");
}
element.show();
}
},
// abstract
optionToData: function (element) {
if (element.is("option")) {
return {
id: element.prop("value"),
text: element.text(),
element: element.get(),
css: element.attr("class"),
disabled: element.prop("disabled"),
locked: equal(element.attr("locked"), "locked") || equal(element.data("locked"), true)
};
} else if (element.is("optgroup")) {
return {
text: element.attr("label"),
children: [],
element: element.get(),
css: element.attr("class")
};
}
},
// abstract
prepareOpts: function (opts) {
var element, select, idKey, ajaxUrl, self = this;
element = opts.element;
if (element.get(0).tagName.toLowerCase() === "select") {
this.select = select = opts.element;
}
if (select) {
// these options are not allowed when attached to a select because they are picked up off the element itself
$.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () {
if (this in opts) {
throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element.");
}
});
}
opts = $.extend({}, {
populateResults: function (container, results, query) {
var populate, data, result, children, id = this.opts.id;
populate = function (results, container, depth) {
var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;
results = opts.sortResults(results, container, query);
for (i = 0, l = results.length; i < l; i = i + 1) {
result = results[i];
disabled = (result.disabled === true);
selectable = (!disabled) && (id(result) !== undefined);
compound = result.children && result.children.length > 0;
node = $("<li></li>");
node.addClass("select2-results-dept-" + depth);
node.addClass("select2-result");
node.addClass(selectable ? "select2-result-selectable" : "select2-result-unselectable");
if (disabled) {
node.addClass("select2-disabled");
}
if (compound) {
node.addClass("select2-result-with-children");
}
node.addClass(self.opts.formatResultCssClass(result));
label = $(document.createElement("div"));
label.addClass("select2-result-label");
formatted = opts.formatResult(result, label, query, self.opts.escapeMarkup);
if (formatted !== undefined) {
label.html(formatted);
}
node.append(label);
if (compound) {
innerContainer = $("<ul></ul>");
innerContainer.addClass("select2-result-sub");
populate(result.children, innerContainer, depth + 1);
node.append(innerContainer);
}
node.data("select2-data", result);
container.append(node);
}
};
populate(results, container, 0);
}
}, $.fn.select2.defaults, opts);
if (typeof(opts.id) !== "function") {
idKey = opts.id;
opts.id = function (e) {
return e[idKey];
};
}
if ($.isArray(opts.element.data("select2Tags"))) {
if ("tags" in opts) {
throw "tags specified as both an attribute 'data-select2-tags' and in options of Select2 " + opts.element.attr("id");
}
opts.tags = opts.element.data("select2Tags");
}
if (select) {
opts.query = this.bind(function (query) {
var data = {results: [], more: false},
term = query.term,
children, placeholderOption, process;
process = function (element, collection) {
var group;
if (element.is("option")) {
if (query.matcher(term, element.text(), element)) {
collection.push(self.optionToData(element));
}
} else if (element.is("optgroup")) {
group = self.optionToData(element);
element.children().each2(function (i, elm) {
process(elm, group.children);
});
if (group.children.length > 0) {
collection.push(group);
}
}
};
children = element.children();
// ignore the placeholder option if there is one
if (this.getPlaceholder() !== undefined && children.length > 0) {
placeholderOption = this.getPlaceholderOption();
if (placeholderOption) {
children = children.not(placeholderOption);
}
}
children.each2(function (i, elm) {
process(elm, data.results);
});
query.callback(data);
});
// this is needed because inside val() we construct choices from options and there id is hardcoded
opts.id = function (e) {
return e.id;
};
opts.formatResultCssClass = function (data) {
return data.css;
};
} else {
if (!("query" in opts)) {
if ("ajax" in opts) {
ajaxUrl = opts.element.data("ajax-url");
if (ajaxUrl && ajaxUrl.length > 0) {
opts.ajax.url = ajaxUrl;
}
opts.query = ajax.call(opts.element, opts.ajax);
} else if ("data" in opts) {
opts.query = local(opts.data);
} else if ("tags" in opts) {
opts.query = tags(opts.tags);
if (opts.createSearchChoice === undefined) {
opts.createSearchChoice = function (term) {
return {id: term, text: term};
};
}
if (opts.initSelection === undefined) {
opts.initSelection = function (element, callback) {
var data = [];
$(splitVal(element.val(), opts.separator)).each(function () {
var id = this, text = this, tags = opts.tags;
if ($.isFunction(tags)) tags = tags();
$(tags).each(function () {
if (equal(this.id, id)) {
text = this.text;
return false;
}
});
data.push({id: id, text: text});
});
callback(data);
};
}
}
}
}
if (typeof(opts.query) !== "function") {
throw "query function not defined for Select2 " + opts.element.attr("id");
}
return opts;
},
/**
* Monitor the original element for changes and update select2 accordingly
*/
// abstract
monitorSource: function () {
var el = this.opts.element, sync;
el.on("change.select2", this.bind(function (e) {
if (this.opts.element.data("select2-change-triggered") !== true) {
this.initSelection();
}
}));
sync = this.bind(function () {
var enabled, readonly, self = this;
// sync enabled state
var disabled = el.prop("disabled");
if (disabled === undefined) disabled = false;
this.enable(!disabled);
var readonly = el.prop("readonly");
if (readonly === undefined) readonly = false;
this.readonly(readonly);
syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);
this.container.addClass(evaluate(this.opts.containerCssClass));
syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);
this.dropdown.addClass(evaluate(this.opts.dropdownCssClass));
});
// mozilla and IE
el.on("propertychange.select2 DOMAttrModified.select2", sync);
// hold onto a reference of the callback to work around a chromium bug
if (this.mutationCallback === undefined) {
this.mutationCallback = function (mutations) {
mutations.forEach(sync);
}
}
// safari and chrome
if (typeof WebKitMutationObserver !== "undefined") {
if (this.propertyObserver) {
delete this.propertyObserver;
this.propertyObserver = null;
}
this.propertyObserver = new WebKitMutationObserver(this.mutationCallback);
this.propertyObserver.observe(el.get(0), {attributes: true, subtree: false});
}
},
// abstract
triggerSelect: function (data) {
var evt = $.Event("select2-selecting", {val: this.id(data), object: data});
this.opts.element.trigger(evt);
return !evt.isDefaultPrevented();
},
/**
* Triggers the change event on the source element
*/
// abstract
triggerChange: function (details) {
details = details || {};
details = $.extend({}, details, {type: "change", val: this.val()});
// prevents recursive triggering
this.opts.element.data("select2-change-triggered", true);
this.opts.element.trigger(details);
this.opts.element.data("select2-change-triggered", false);
// some validation frameworks ignore the change event and listen instead to keyup, click for selects
// so here we trigger the click event manually
this.opts.element.click();
// ValidationEngine ignorea the change event and listens instead to blur
// so here we trigger the blur event manually if so desired
if (this.opts.blurOnChange)
this.opts.element.blur();
},
//abstract
isInterfaceEnabled: function () {
return this.enabledInterface === true;
},
// abstract
enableInterface: function () {
var enabled = this._enabled && !this._readonly,
disabled = !enabled;
if (enabled === this.enabledInterface) return false;
this.container.toggleClass("select2-container-disabled", disabled);
this.close();
this.enabledInterface = enabled;
return true;
},
// abstract
enable: function (enabled) {
if (enabled === undefined) enabled = true;
if (this._enabled === enabled) return false;
this._enabled = enabled;
this.opts.element.prop("disabled", !enabled);
this.enableInterface();
return true;
},
// abstract
readonly: function (enabled) {
if (enabled === undefined) enabled = false;
if (this._readonly === enabled) return false;
this._readonly = enabled;
this.opts.element.prop("readonly", enabled);
this.enableInterface();
return true;
},
// abstract
opened: function () {
return this.container.hasClass("select2-dropdown-open");
},
// abstract
positionDropdown: function () {
var $dropdown = this.dropdown,
offset = this.container.offset(),
height = this.container.outerHeight(false),
width = this.container.outerWidth(false),
dropHeight = $dropdown.outerHeight(false),
viewPortRight = $(window).scrollLeft() + $(window).width(),
viewportBottom = $(window).scrollTop() + $(window).height(),
dropTop = offset.top + height,
dropLeft = offset.left,
enoughRoomBelow = dropTop + dropHeight <= viewportBottom,
enoughRoomAbove = (offset.top - dropHeight) >= this.body().scrollTop(),
dropWidth = $dropdown.outerWidth(false),
enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,
aboveNow = $dropdown.hasClass("select2-drop-above"),
bodyOffset,
above,
css,
resultsListNode;
if (this.opts.dropdownAutoWidth) {
resultsListNode = $('.select2-results', $dropdown)[0];
$dropdown.addClass('select2-drop-auto-width');
$dropdown.css('width', '');
// Add scrollbar width to dropdown if vertical scrollbar is present
dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);
dropWidth > width ? width = dropWidth : dropWidth = width;
enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;
}
else {
this.container.removeClass('select2-drop-auto-width');
}
//console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow);
//console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body().scrollTop(), "enough?", enoughRoomAbove);
// fix positioning when body has an offset and is not position: static
if (this.body().css('position') !== 'static') {
bodyOffset = this.body().offset();
dropTop -= bodyOffset.top;
dropLeft -= bodyOffset.left;
}
// always prefer the current above/below alignment, unless there is not enough room
if (aboveNow) {
above = true;
if (!enoughRoomAbove && enoughRoomBelow) above = false;
} else {
above = false;
if (!enoughRoomBelow && enoughRoomAbove) above = true;
}
if (!enoughRoomOnRight) {
dropLeft = offset.left + width - dropWidth;
}
if (above) {
dropTop = offset.top - dropHeight;
this.container.addClass("select2-drop-above");
$dropdown.addClass("select2-drop-above");
}
else {
this.container.removeClass("select2-drop-above");
$dropdown.removeClass("select2-drop-above");
}
css = $.extend({
top: dropTop,
left: dropLeft,
width: width
}, evaluate(this.opts.dropdownCss));
$dropdown.css(css);
},
// abstract
shouldOpen: function () {
var event;
if (this.opened()) return false;
if (this._enabled === false || this._readonly === true) return false;
event = $.Event("select2-opening");
this.opts.element.trigger(event);
return !event.isDefaultPrevented();
},
// abstract
clearDropdownAlignmentPreference: function () {
// clear the classes used to figure out the preference of where the dropdown should be opened
this.container.removeClass("select2-drop-above");
this.dropdown.removeClass("select2-drop-above");
},
/**
* Opens the dropdown
*
* @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,
* the dropdown is already open, or if the 'open' event listener on the element called preventDefault().
*/
// abstract
open: function () {
if (!this.shouldOpen()) return false;
this.opening();
return true;
},
/**
* Performs the opening of the dropdown
*/
// abstract
opening: function () {
var cid = this.containerId,
scroll = "scroll." + cid,
resize = "resize." + cid,
orient = "orientationchange." + cid,
mask, maskCss;
this.container.addClass("select2-dropdown-open").addClass("select2-container-active");
this.clearDropdownAlignmentPreference();
if (this.dropdown[0] !== this.body().children().last()[0]) {
this.dropdown.detach().appendTo(this.body());
}
// create the dropdown mask if doesnt already exist
mask = $("#select2-drop-mask");
if (mask.length == 0) {
mask = $(document.createElement("div"));
mask.attr("id", "select2-drop-mask").attr("class", "select2-drop-mask");
mask.hide();
mask.appendTo(this.body());
mask.on("mousedown touchstart click", function (e) {
var dropdown = $("#select2-drop"), self;
if (dropdown.length > 0) {
self = dropdown.data("select2");
if (self.opts.selectOnBlur) {
self.selectHighlighted({noFocus: true});
}
self.close();
e.preventDefault();
e.stopPropagation();
}
});
}
// ensure the mask is always right before the dropdown
if (this.dropdown.prev()[0] !== mask[0]) {
this.dropdown.before(mask);
}
// move the global id to the correct dropdown
$("#select2-drop").removeAttr("id");
this.dropdown.attr("id", "select2-drop");
// show the elements
maskCss = _makeMaskCss();
mask.css(maskCss).show();
this.dropdown.show();
this.positionDropdown();
this.dropdown.addClass("select2-drop-active");
// attach listeners to events that can change the position of the container and thus require
// the position of the dropdown to be updated as well so it does not come unglued from the container
var that = this;
this.container.parents().add(window).each(function () {
$(this).on(resize + " " + scroll + " " + orient, function (e) {
var maskCss = _makeMaskCss();
$("#select2-drop-mask").css(maskCss);
that.positionDropdown();
});
});
function _makeMaskCss() {
return {
width: Math.max(document.documentElement.scrollWidth, $(window).width()),
height: Math.max(document.documentElement.scrollHeight, $(window).height())
}
}
},
// abstract
close: function () {
if (!this.opened()) return;
var cid = this.containerId,
scroll = "scroll." + cid,
resize = "resize." + cid,
orient = "orientationchange." + cid;
// unbind event listeners
this.container.parents().add(window).each(function () {
$(this).off(scroll).off(resize).off(orient);
});
this.clearDropdownAlignmentPreference();
$("#select2-drop-mask").hide();
this.dropdown.removeAttr("id"); // only the active dropdown has the select2-drop id
this.dropdown.hide();
this.container.removeClass("select2-dropdown-open");
this.results.empty();
this.clearSearch();
this.search.removeClass("select2-active");
this.opts.element.trigger($.Event("select2-close"));
},
/**
* Opens control, sets input value, and updates results.
*/
// abstract
externalSearch: function (term) {
this.open();
this.search.val(term);
this.updateResults(false);
},
// abstract
clearSearch: function () {
},
//abstract
getMaximumSelectionSize: function () {
return evaluate(this.opts.maximumSelectionSize);
},
// abstract
ensureHighlightVisible: function () {
var results = this.results, children, index, child, hb, rb, y, more;
index = this.highlight();
if (index < 0) return;
if (index == 0) {
// if the first element is highlighted scroll all the way to the top,
// that way any unselectable headers above it will also be scrolled
// into view
results.scrollTop(0);
return;
}
children = this.findHighlightableChoices().find('.select2-result-label');
child = $(children[index]);
hb = child.offset().top + child.outerHeight(true);
// if this is the last child lets also make sure select2-more-results is visible
if (index === children.length - 1) {
more = results.find("li.select2-more-results");
if (more.length > 0) {
hb = more.offset().top + more.outerHeight(true);
}
}
rb = results.offset().top + results.outerHeight(true);
if (hb > rb) {
results.scrollTop(results.scrollTop() + (hb - rb));
}
y = child.offset().top - results.offset().top;
// make sure the top of the element is visible
if (y < 0 && child.css('display') != 'none') {
results.scrollTop(results.scrollTop() + y); // y is negative
}
},
// abstract
findHighlightableChoices: function () {
return this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)");
},
// abstract
moveHighlight: function (delta) {
var choices = this.findHighlightableChoices(),
index = this.highlight();
while (index > -1 && index < choices.length) {
index += delta;
var choice = $(choices[index]);
if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled") && !choice.hasClass("select2-selected")) {
this.highlight(index);
break;
}
}
},
// abstract
highlight: function (index) {
var choices = this.findHighlightableChoices(),
choice,
data;
if (arguments.length === 0) {
return indexOf(choices.filter(".select2-highlighted")[0], choices.get());
}
if (index >= choices.length) index = choices.length - 1;
if (index < 0) index = 0;
this.results.find(".select2-highlighted").removeClass("select2-highlighted");
choice = $(choices[index]);
choice.addClass("select2-highlighted");
this.ensureHighlightVisible();
data = choice.data("select2-data");
if (data) {
this.opts.element.trigger({type: "select2-highlight", val: this.id(data), choice: data});
}
},
// abstract
countSelectableResults: function () {
return this.findHighlightableChoices().length;
},
// abstract
highlightUnderEvent: function (event) {
var el = $(event.target).closest(".select2-result-selectable");
if (el.length > 0 && !el.is(".select2-highlighted")) {
var choices = this.findHighlightableChoices();
this.highlight(choices.index(el));
} else if (el.length == 0) {
// if we are over an unselectable item remove al highlights
this.results.find(".select2-highlighted").removeClass("select2-highlighted");
}
},
// abstract
loadMoreIfNeeded: function () {
var results = this.results,
more = results.find("li.select2-more-results"),
below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible
offset = -1, // index of first element without data
page = this.resultsPage + 1,
self = this,
term = this.search.val(),
context = this.context;
if (more.length === 0) return;
below = more.offset().top - results.offset().top - results.height();
if (below <= this.opts.loadMorePadding) {
more.addClass("select2-active");
this.opts.query({
element: this.opts.element,
term: term,
page: page,
context: context,
matcher: this.opts.matcher,
callback: this.bind(function (data) {
// ignore a response if the select2 has been closed before it was received
if (!self.opened()) return;
self.opts.populateResults.call(this, results, data.results, {
term: term,
page: page,
context: context
});
self.postprocessResults(data, false, false);
if (data.more === true) {
more.detach().appendTo(results).text(self.opts.formatLoadMore(page + 1));
window.setTimeout(function () {
self.loadMoreIfNeeded();
}, 10);
} else {
more.remove();
}
self.positionDropdown();
self.resultsPage = page;
self.context = data.context;
})
});
}
},
/**
* Default tokenizer function which does nothing
*/
tokenize: function () {
},
/**
* @param initial whether or not this is the call to this method right after the dropdown has been opened
*/
// abstract
updateResults: function (initial) {
var search = this.search,
results = this.results,
opts = this.opts,
data,
self = this,
input,
term = search.val(),
lastTerm = $.data(this.container, "select2-last-term");
// prevent duplicate queries against the same term
if (initial !== true && lastTerm && equal(term, lastTerm)) return;
$.data(this.container, "select2-last-term", term);
// if the search is currently hidden we do not alter the results
if (initial !== true && (this.showSearchInput === false || !this.opened())) {
return;
}
function postRender() {
search.removeClass("select2-active");
self.positionDropdown();
}
function render(html) {
results.html(html);
postRender();
}
var maxSelSize = this.getMaximumSelectionSize();
if (maxSelSize >= 1) {
data = this.data();
if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) {
render("<li class='select2-selection-limit'>" + opts.formatSelectionTooBig(maxSelSize) + "</li>");
return;
}
}
if (search.val().length < opts.minimumInputLength) {
if (checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) {
render("<li class='select2-no-results'>" + opts.formatInputTooShort(search.val(), opts.minimumInputLength) + "</li>");
} else {
render("");
}
if (initial && this.showSearch) this.showSearch(true);
return;
}
if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {
if (checkFormatter(opts.formatInputTooLong, "formatInputTooLong")) {
render("<li class='select2-no-results'>" + opts.formatInputTooLong(search.val(), opts.maximumInputLength) + "</li>");
} else {
render("");
}
return;
}
if (opts.formatSearching && this.findHighlightableChoices().length === 0) {
render("<li class='select2-searching'>" + opts.formatSearching() + "</li>");
}
search.addClass("select2-active");
// give the tokenizer a chance to pre-process the input
input = this.tokenize();
if (input != undefined && input != null) {
search.val(input);
}
this.resultsPage = 1;
opts.query({
element: opts.element,
term: search.val(),
page: this.resultsPage,
context: null,
matcher: opts.matcher,
callback: this.bind(function (data) {
var def; // default choice
// ignore a response if the select2 has been closed before it was received
if (!this.opened()) {
this.search.removeClass("select2-active");
return;
}
// save context, if any
this.context = (data.context === undefined) ? null : data.context;
// create a default choice and prepend it to the list
if (this.opts.createSearchChoice && search.val() !== "") {
def = this.opts.createSearchChoice.call(self, search.val(), data.results);
if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {
if ($(data.results).filter(
function () {
return equal(self.id(this), self.id(def));
}).length === 0) {
data.results.unshift(def);
}
}
}
if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) {
render("<li class='select2-no-results'>" + opts.formatNoMatches(search.val()) + "</li>");
return;
}
results.empty();
self.opts.populateResults.call(this, results, data.results, {
term: search.val(),
page: this.resultsPage,
context: null
});
if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) {
results.append("<li class='select2-more-results'>" + self.opts.escapeMarkup(opts.formatLoadMore(this.resultsPage)) + "</li>");
window.setTimeout(function () {
self.loadMoreIfNeeded();
}, 10);
}
this.postprocessResults(data, initial);
postRender();
this.opts.element.trigger({type: "select2-loaded", items: data});
})
});
},
// abstract
cancel: function () {
this.close();
},
// abstract
blur: function () {
// if selectOnBlur == true, select the currently highlighted option
if (this.opts.selectOnBlur)
this.selectHighlighted({noFocus: true});
this.close();
this.container.removeClass("select2-container-active");
// synonymous to .is(':focus'), which is available in jquery >= 1.6
if (this.search[0] === document.activeElement) {
this.search.blur();
}
this.clearSearch();
this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");
},
// abstract
focusSearch: function () {
focus(this.search);
},
// abstract
selectHighlighted: function (options) {
var index = this.highlight(),
highlighted = this.results.find(".select2-highlighted"),
data = highlighted.closest('.select2-result').data("select2-data");
if (data) {
this.highlight(index);
this.onSelect(data, options);
} else if (options && options.noFocus) {
this.close();
}
},
// abstract
getPlaceholder: function () {
var placeholderOption;
return this.opts.element.attr("placeholder") ||
this.opts.element.attr("data-placeholder") || // jquery 1.4 compat
this.opts.element.data("placeholder") ||
this.opts.placeholder ||
((placeholderOption = this.getPlaceholderOption()) !== undefined ? placeholderOption.text() : undefined);
},
// abstract
getPlaceholderOption: function () {
if (this.select) {
var firstOption = this.select.children().first();
if (this.opts.placeholderOption !== undefined) {
//Determine the placeholder option based on the specified placeholderOption setting
return (this.opts.placeholderOption === "first" && firstOption) ||
(typeof this.opts.placeholderOption === "function" && this.opts.placeholderOption(this.select));
} else if (firstOption.text() === "" && firstOption.val() === "") {
//No explicit placeholder option specified, use the first if it's blank
return firstOption;
}
}
},
/**
* Get the desired width for the container element. This is
* derived first from option `width` passed to select2, then
* the inline 'style' on the original element, and finally
* falls back to the jQuery calculated element width.
*/
// abstract
initContainerWidth: function () {
function resolveContainerWidth() {
var style, attrs, matches, i, l;
if (this.opts.width === "off") {
return null;
} else if (this.opts.width === "element") {
return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';
} else if (this.opts.width === "copy" || this.opts.width === "resolve") {
// check if there is inline style on the element that contains width
style = this.opts.element.attr('style');
if (style !== undefined) {
attrs = style.split(';');
for (i = 0, l = attrs.length; i < l; i = i + 1) {
matches = attrs[i].replace(/\s/g, '')
.match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);
if (matches !== null && matches.length >= 1)
return matches[1];
}
}
if (this.opts.width === "resolve") {
// next check if css('width') can resolve a width that is percent based, this is sometimes possible
// when attached to input type=hidden or elements hidden via css
style = this.opts.element.css('width');
if (style.indexOf("%") > 0) return style;
// finally, fallback on the calculated width of the element
return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');
}
return null;
} else if ($.isFunction(this.opts.width)) {
return this.opts.width();
} else {
return this.opts.width;
}
};
var width = resolveContainerWidth.call(this);
if (width !== null) {
this.container.css("width", width);
}
}
});
SingleSelect2 = clazz(AbstractSelect2, {
// single
createContainer: function () {
var container = $(document.createElement("div")).attr({
"class": "select2-container"
}).html([
"<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>",
" <span class='select2-chosen'>&nbsp;</span><abbr class='select2-search-choice-close'></abbr>",
" <span class='select2-arrow'><b></b></span>",
"</a>",
"<input class='select2-focusser select2-offscreen' type='text'/>",
"<div class='select2-drop select2-display-none'>",
" <div class='select2-search'>",
" <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'/>",
" </div>",
" <ul class='select2-results'>",
" </ul>",
"</div>"].join(""));
return container;
},
// single
enableInterface: function () {
if (this.parent.enableInterface.apply(this, arguments)) {
this.focusser.prop("disabled", !this.isInterfaceEnabled());
}
},
// single
opening: function () {
var el, range, len;
if (this.opts.minimumResultsForSearch >= 0) {
this.showSearch(true);
}
this.parent.opening.apply(this, arguments);
if (this.showSearchInput !== false) {
// IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range
// all other browsers handle this just fine
this.search.val(this.focusser.val());
}
this.search.focus();
// move the cursor to the end after focussing, otherwise it will be at the beginning and
// new text will appear *before* focusser.val()
el = this.search.get(0);
if (el.createTextRange) {
range = el.createTextRange();
range.collapse(false);
range.select();
} else if (el.setSelectionRange) {
len = this.search.val().length;
el.setSelectionRange(len, len);
}
this.focusser.prop("disabled", true).val("");
this.updateResults(true);
this.opts.element.trigger($.Event("select2-open"));
},
// single
close: function () {
if (!this.opened()) return;
this.parent.close.apply(this, arguments);
this.focusser.removeAttr("disabled");
this.focusser.focus();
},
// single
focus: function () {
if (this.opened()) {
this.close();
} else {
this.focusser.removeAttr("disabled");
this.focusser.focus();
}
},
// single
isFocused: function () {
return this.container.hasClass("select2-container-active");
},
// single
cancel: function () {
this.parent.cancel.apply(this, arguments);
this.focusser.removeAttr("disabled");
this.focusser.focus();
},
// single
initContainer: function () {
var selection,
container = this.container,
dropdown = this.dropdown;
if (this.opts.minimumResultsForSearch < 0) {
this.showSearch(false);
} else {
this.showSearch(true);
}
this.selection = selection = container.find(".select2-choice");
this.focusser = container.find(".select2-focusser");
// rewrite labels from original element to focusser
this.focusser.attr("id", "s2id_autogen" + nextUid());
$("label[for='" + this.opts.element.attr("id") + "']")
.attr('for', this.focusser.attr('id'));
this.focusser.attr("tabindex", this.elementTabIndex);
this.search.on("keydown", this.bind(function (e) {
if (!this.isInterfaceEnabled()) return;
if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {
// prevent the page from scrolling
killEvent(e);
return;
}
switch (e.which) {
case KEY.UP:
case KEY.DOWN:
this.moveHighlight((e.which === KEY.UP) ? -1 : 1);
killEvent(e);
return;
case KEY.ENTER:
this.selectHighlighted();
killEvent(e);
return;
case KEY.TAB:
this.selectHighlighted({noFocus: true});
return;
case KEY.ESC:
this.cancel(e);
killEvent(e);
return;
}
}));
this.search.on("blur", this.bind(function (e) {
// a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.
// without this the search field loses focus which is annoying
if (document.activeElement === this.body().get(0)) {
window.setTimeout(this.bind(function () {
this.search.focus();
}), 0);
}
}));
this.focusser.on("keydown", this.bind(function (e) {
if (!this.isInterfaceEnabled()) return;
if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {
return;
}
if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {
killEvent(e);
return;
}
if (e.which == KEY.DOWN || e.which == KEY.UP
|| (e.which == KEY.ENTER && this.opts.openOnEnter)) {
if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return;
this.open();
killEvent(e);
return;
}
if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {
if (this.opts.allowClear) {
this.clear();
}
killEvent(e);
return;
}
}));
installKeyUpChangeEvent(this.focusser);
this.focusser.on("keyup-change input", this.bind(function (e) {
if (this.opts.minimumResultsForSearch >= 0) {
e.stopPropagation();
if (this.opened()) return;
this.open();
}
}));
selection.on("mousedown", "abbr", this.bind(function (e) {
if (!this.isInterfaceEnabled()) return;
this.clear();
killEventImmediately(e);
this.close();
this.selection.focus();
}));
selection.on("mousedown", this.bind(function (e) {
if (!this.container.hasClass("select2-container-active")) {
this.opts.element.trigger($.Event("select2-focus"));
}
if (this.opened()) {
this.close();
} else if (this.isInterfaceEnabled()) {
this.open();
}
killEvent(e);
}));
dropdown.on("mousedown", this.bind(function () {
this.search.focus();
}));
selection.on("focus", this.bind(function (e) {
killEvent(e);
}));
this.focusser.on("focus", this.bind(function () {
if (!this.container.hasClass("select2-container-active")) {
this.opts.element.trigger($.Event("select2-focus"));
}
this.container.addClass("select2-container-active");
})).on("blur", this.bind(function () {
if (!this.opened()) {
this.container.removeClass("select2-container-active");
this.opts.element.trigger($.Event("select2-blur"));
}
}));
this.search.on("focus", this.bind(function () {
if (!this.container.hasClass("select2-container-active")) {
this.opts.element.trigger($.Event("select2-focus"));
}
this.container.addClass("select2-container-active");
}));
this.initContainerWidth();
this.opts.element.addClass("select2-offscreen");
this.setPlaceholder();
},
// single
clear: function (triggerChange) {
var data = this.selection.data("select2-data");
if (data) { // guard against queued quick consecutive clicks
var placeholderOption = this.getPlaceholderOption();
this.opts.element.val(placeholderOption ? placeholderOption.val() : "");
this.selection.find(".select2-chosen").empty();
this.selection.removeData("select2-data");
this.setPlaceholder();
if (triggerChange !== false) {
this.opts.element.trigger({type: "select2-removed", val: this.id(data), choice: data});
this.triggerChange({removed: data});
}
}
},
/**
* Sets selection based on source element's value
*/
// single
initSelection: function () {
var selected;
if (this.isPlaceholderOptionSelected()) {
this.updateSelection([]);
this.close();
this.setPlaceholder();
} else {
var self = this;
this.opts.initSelection.call(null, this.opts.element, function (selected) {
if (selected !== undefined && selected !== null) {
self.updateSelection(selected);
self.close();
self.setPlaceholder();
}
});
}
},
isPlaceholderOptionSelected: function () {
var placeholderOption;
return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.is(':selected')) ||
(this.opts.element.val() === "") ||
(this.opts.element.val() === undefined) ||
(this.opts.element.val() === null);
},
// single
prepareOpts: function () {
var opts = this.parent.prepareOpts.apply(this, arguments),
self = this;
if (opts.element.get(0).tagName.toLowerCase() === "select") {
// install the selection initializer
opts.initSelection = function (element, callback) {
var selected = element.find(":selected");
// a single select box always has a value, no need to null check 'selected'
callback(self.optionToData(selected));
};
} else if ("data" in opts) {
// install default initSelection when applied to hidden input and data is local
opts.initSelection = opts.initSelection || function (element, callback) {
var id = element.val();
//search in data by id, storing the actual matching item
var match = null;
opts.query({
matcher: function (term, text, el) {
var is_match = equal(id, opts.id(el));
if (is_match) {
match = el;
}
return is_match;
},
callback: !$.isFunction(callback) ? $.noop : function () {
callback(match);
}
});
};
}
return opts;
},
// single
getPlaceholder: function () {
// if a placeholder is specified on a single select without a valid placeholder option ignore it
if (this.select) {
if (this.getPlaceholderOption() === undefined) {
return undefined;
}
}
return this.parent.getPlaceholder.apply(this, arguments);
},
// single
setPlaceholder: function () {
var placeholder = this.getPlaceholder();
if (this.isPlaceholderOptionSelected() && placeholder !== undefined) {
// check for a placeholder option if attached to a select
if (this.select && this.getPlaceholderOption() === undefined) return;
this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(placeholder));
this.selection.addClass("select2-default");
this.container.removeClass("select2-allowclear");
}
},
// single
postprocessResults: function (data, initial, noHighlightUpdate) {
var selected = 0, self = this, showSearchInput = true;
// find the selected element in the result list
this.findHighlightableChoices().each2(function (i, elm) {
if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {
selected = i;
return false;
}
});
// and highlight it
if (noHighlightUpdate !== false) {
if (initial === true && selected >= 0) {
this.highlight(selected);
} else {
this.highlight(0);
}
}
// hide the search box if this is the first we got the results and there are enough of them for search
if (initial === true) {
var min = this.opts.minimumResultsForSearch;
if (min >= 0) {
this.showSearch(countResults(data.results) >= min);
}
}
},
// single
showSearch: function (showSearchInput) {
if (this.showSearchInput === showSearchInput) return;
this.showSearchInput = showSearchInput;
this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput);
this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput);
//add "select2-with-searchbox" to the container if search box is shown
$(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput);
},
// single
onSelect: function (data, options) {
if (!this.triggerSelect(data)) {
return;
}
var old = this.opts.element.val(),
oldData = this.data();
this.opts.element.val(this.id(data));
this.updateSelection(data);
this.opts.element.trigger({type: "select2-selected", val: this.id(data), choice: data});
this.close();
if (!options || !options.noFocus)
this.selection.focus();
if (!equal(old, this.id(data))) {
this.triggerChange({added: data, removed: oldData});
}
},
// single
updateSelection: function (data) {
var container = this.selection.find(".select2-chosen"), formatted, cssClass;
this.selection.data("select2-data", data);
container.empty();
formatted = this.opts.formatSelection(data, container, this.opts.escapeMarkup);
if (formatted !== undefined) {
container.append(formatted);
}
cssClass = this.opts.formatSelectionCssClass(data, container);
if (cssClass !== undefined) {
container.addClass(cssClass);
}
this.selection.removeClass("select2-default");
if (this.opts.allowClear && this.getPlaceholder() !== undefined) {
this.container.addClass("select2-allowclear");
}
},
// single
val: function () {
var val,
triggerChange = false,
data = null,
self = this,
oldData = this.data();
if (arguments.length === 0) {
return this.opts.element.val();
}
val = arguments[0];
if (arguments.length > 1) {
triggerChange = arguments[1];
}
if (this.select) {
this.select
.val(val)
.find(":selected").each2(function (i, elm) {
data = self.optionToData(elm);
return false;
});
this.updateSelection(data);
this.setPlaceholder();
if (triggerChange) {
this.triggerChange({added: data, removed: oldData});
}
} else {
// val is an id. !val is true for [undefined,null,'',0] - 0 is legal
if (!val && val !== 0) {
this.clear(triggerChange);
return;
}
if (this.opts.initSelection === undefined) {
throw new Error("cannot call val() if initSelection() is not defined");
}
this.opts.element.val(val);
this.opts.initSelection(this.opts.element, function (data) {
self.opts.element.val(!data ? "" : self.id(data));
self.updateSelection(data);
self.setPlaceholder();
if (triggerChange) {
self.triggerChange({added: data, removed: oldData});
}
});
}
},
// single
clearSearch: function () {
this.search.val("");
this.focusser.val("");
},
// single
data: function (value, triggerChange) {
var data;
if (arguments.length === 0) {
data = this.selection.data("select2-data");
if (data == undefined) data = null;
return data;
} else {
if (!value || value === "") {
this.clear(triggerChange);
} else {
data = this.data();
this.opts.element.val(!value ? "" : this.id(value));
this.updateSelection(value);
if (triggerChange) {
this.triggerChange({added: value, removed: data});
}
}
}
}
});
MultiSelect2 = clazz(AbstractSelect2, {
// multi
createContainer: function () {
var container = $(document.createElement("div")).attr({
"class": "select2-container select2-container-multi"
}).html([
"<ul class='select2-choices'>",
" <li class='select2-search-field'>",
" <input type='text' autocomplete='off' autocorrect='off' autocapitilize='off' spellcheck='false' class='select2-input'>",
" </li>",
"</ul>",
"<div class='select2-drop select2-drop-multi select2-display-none'>",
" <ul class='select2-results'>",
" </ul>",
"</div>"].join(""));
return container;
},
// multi
prepareOpts: function () {
var opts = this.parent.prepareOpts.apply(this, arguments),
self = this;
// TODO validate placeholder is a string if specified
if (opts.element.get(0).tagName.toLowerCase() === "select") {
// install sthe selection initializer
opts.initSelection = function (element, callback) {
var data = [];
element.find(":selected").each2(function (i, elm) {
data.push(self.optionToData(elm));
});
callback(data);
};
} else if ("data" in opts) {
// install default initSelection when applied to hidden input and data is local
opts.initSelection = opts.initSelection || function (element, callback) {
var ids = splitVal(element.val(), opts.separator);
//search in data by array of ids, storing matching items in a list
var matches = [];
opts.query({
matcher: function (term, text, el) {
var is_match = $.grep(ids, function (id) {
return equal(id, opts.id(el));
}).length;
if (is_match) {
matches.push(el);
}
return is_match;
},
callback: !$.isFunction(callback) ? $.noop : function () {
// reorder matches based on the order they appear in the ids array because right now
// they are in the order in which they appear in data array
var ordered = [];
for (var i = 0; i < ids.length; i++) {
var id = ids[i];
for (var j = 0; j < matches.length; j++) {
var match = matches[j];
if (equal(id, opts.id(match))) {
ordered.push(match);
matches.splice(j, 1);
break;
}
}
}
callback(ordered);
}
});
};
}
return opts;
},
selectChoice: function (choice) {
var selected = this.container.find(".select2-search-choice-focus");
if (selected.length && choice && choice[0] == selected[0]) {
} else {
if (selected.length) {
this.opts.element.trigger("choice-deselected", selected);
}
selected.removeClass("select2-search-choice-focus");
if (choice && choice.length) {
this.close();
choice.addClass("select2-search-choice-focus");
this.opts.element.trigger("choice-selected", choice);
}
}
},
// multi
initContainer: function () {
var selector = ".select2-choices", selection;
this.searchContainer = this.container.find(".select2-search-field");
this.selection = selection = this.container.find(selector);
var _this = this;
this.selection.on("mousedown", ".select2-search-choice", function (e) {
//killEvent(e);
_this.search[0].focus();
_this.selectChoice($(this));
})
// rewrite labels from original element to focusser
this.search.attr("id", "s2id_autogen" + nextUid());
$("label[for='" + this.opts.element.attr("id") + "']")
.attr('for', this.search.attr('id'));
this.search.on("input paste", this.bind(function () {
if (!this.isInterfaceEnabled()) return;
if (!this.opened()) {
this.open();
}
}));
this.search.attr("tabindex", this.elementTabIndex);
this.keydowns = 0;
this.search.on("keydown", this.bind(function (e) {
if (!this.isInterfaceEnabled()) return;
++this.keydowns;
var selected = selection.find(".select2-search-choice-focus");
var prev = selected.prev(".select2-search-choice:not(.select2-locked)");
var next = selected.next(".select2-search-choice:not(.select2-locked)");
var pos = getCursorInfo(this.search);
if (selected.length &&
(e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {
var selectedChoice = selected;
if (e.which == KEY.LEFT && prev.length) {
selectedChoice = prev;
}
else if (e.which == KEY.RIGHT) {
selectedChoice = next.length ? next : null;
}
else if (e.which === KEY.BACKSPACE) {
this.unselect(selected.first());
this.search.width(10);
selectedChoice = prev.length ? prev : next;
} else if (e.which == KEY.DELETE) {
this.unselect(selected.first());
this.search.width(10);
selectedChoice = next.length ? next : null;
} else if (e.which == KEY.ENTER) {
selectedChoice = null;
}
this.selectChoice(selectedChoice);
killEvent(e);
if (!selectedChoice || !selectedChoice.length) {
this.open();
}
return;
} else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)
|| e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {
this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last());
killEvent(e);
return;
} else {
this.selectChoice(null);
}
if (this.opened()) {
switch (e.which) {
case KEY.UP:
case KEY.DOWN:
this.moveHighlight((e.which === KEY.UP) ? -1 : 1);
killEvent(e);
return;
case KEY.ENTER:
this.selectHighlighted();
killEvent(e);
return;
case KEY.TAB:
this.selectHighlighted({noFocus: true});
this.close();
return;
case KEY.ESC:
this.cancel(e);
killEvent(e);
return;
}
}
if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)
|| e.which === KEY.BACKSPACE || e.which === KEY.ESC) {
return;
}
if (e.which === KEY.ENTER) {
if (this.opts.openOnEnter === false) {
return;
} else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {
return;
}
}
this.open();
if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {
// prevent the page from scrolling
killEvent(e);
}
if (e.which === KEY.ENTER) {
// prevent form from being submitted
killEvent(e);
}
}));
this.search.on("keyup", this.bind(function (e) {
this.keydowns = 0;
this.resizeSearch();
})
);
this.search.on("blur", this.bind(function (e) {
this.container.removeClass("select2-container-active");
this.search.removeClass("select2-focused");
this.selectChoice(null);
if (!this.opened()) this.clearSearch();
e.stopImmediatePropagation();
this.opts.element.trigger($.Event("select2-blur"));
}));
this.container.on("click", selector, this.bind(function (e) {
if (!this.isInterfaceEnabled()) return;
if ($(e.target).closest(".select2-search-choice").length > 0) {
// clicked inside a select2 search choice, do not open
return;
}
this.selectChoice(null);
this.clearPlaceholder();
if (!this.container.hasClass("select2-container-active")) {
this.opts.element.trigger($.Event("select2-focus"));
}
this.open();
this.focusSearch();
e.preventDefault();
}));
this.container.on("focus", selector, this.bind(function () {
if (!this.isInterfaceEnabled()) return;
if (!this.container.hasClass("select2-container-active")) {
this.opts.element.trigger($.Event("select2-focus"));
}
this.container.addClass("select2-container-active");
this.dropdown.addClass("select2-drop-active");
this.clearPlaceholder();
}));
this.initContainerWidth();
this.opts.element.addClass("select2-offscreen");
// set the placeholder if necessary
this.clearSearch();
},
// multi
enableInterface: function () {
if (this.parent.enableInterface.apply(this, arguments)) {
this.search.prop("disabled", !this.isInterfaceEnabled());
}
},
// multi
initSelection: function () {
var data;
if (this.opts.element.val() === "" && this.opts.element.text() === "") {
this.updateSelection([]);
this.close();
// set the placeholder if necessary
this.clearSearch();
}
if (this.select || this.opts.element.val() !== "") {
var self = this;
this.opts.initSelection.call(null, this.opts.element, function (data) {
if (data !== undefined && data !== null) {
self.updateSelection(data);
self.close();
// set the placeholder if necessary
self.clearSearch();
}
});
}
},
// multi
clearSearch: function () {
var placeholder = this.getPlaceholder(),
maxWidth = this.getMaxSearchWidth();
if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) {
this.search.val(placeholder).addClass("select2-default");
// stretch the search box to full width of the container so as much of the placeholder is visible as possible
// we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944
this.search.width(maxWidth > 0 ? maxWidth : this.container.css("width"));
} else {
this.search.val("").width(10);
}
},
// multi
clearPlaceholder: function () {
if (this.search.hasClass("select2-default")) {
this.search.val("").removeClass("select2-default");
}
},
// multi
opening: function () {
this.clearPlaceholder(); // should be done before super so placeholder is not used to search
this.resizeSearch();
this.parent.opening.apply(this, arguments);
this.focusSearch();
this.updateResults(true);
this.search.focus();
this.opts.element.trigger($.Event("select2-open"));
},
// multi
close: function () {
if (!this.opened()) return;
this.parent.close.apply(this, arguments);
},
// multi
focus: function () {
this.close();
this.search.focus();
},
// multi
isFocused: function () {
return this.search.hasClass("select2-focused");
},
// multi
updateSelection: function (data) {
var ids = [], filtered = [], self = this;
// filter out duplicates
$(data).each(function () {
if (indexOf(self.id(this), ids) < 0) {
ids.push(self.id(this));
filtered.push(this);
}
});
data = filtered;
this.selection.find(".select2-search-choice").remove();
$(data).each(function () {
self.addSelectedChoice(this);
});
self.postprocessResults();
},
// multi
tokenize: function () {
var input = this.search.val();
input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts);
if (input != null && input != undefined) {
this.search.val(input);
if (input.length > 0) {
this.open();
}
}
},
// multi
onSelect: function (data, options) {
if (!this.triggerSelect(data)) {
return;
}
this.addSelectedChoice(data);
this.opts.element.trigger({type: "selected", val: this.id(data), choice: data});
if (this.select || !this.opts.closeOnSelect) this.postprocessResults();
if (this.opts.closeOnSelect) {
this.close();
this.search.width(10);
} else {
if (this.countSelectableResults() > 0) {
this.search.width(10);
this.resizeSearch();
if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {
// if we reached max selection size repaint the results so choices
// are replaced with the max selection reached message
this.updateResults(true);
}
this.positionDropdown();
} else {
// if nothing left to select close
this.close();
this.search.width(10);
}
}
// since its not possible to select an element that has already been
// added we do not need to check if this is a new element before firing change
this.triggerChange({added: data});
if (!options || !options.noFocus)
this.focusSearch();
},
// multi
cancel: function () {
this.close();
this.focusSearch();
},
addSelectedChoice: function (data) {
var enableChoice = !data.locked,
enabledItem = $(
"<li class='select2-search-choice'>" +
" <div></div>" +
" <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a>" +
"</li>"),
disabledItem = $(
"<li class='select2-search-choice select2-locked'>" +
"<div></div>" +
"</li>");
var choice = enableChoice ? enabledItem : disabledItem,
id = this.id(data),
val = this.getVal(),
formatted,
cssClass;
formatted = this.opts.formatSelection(data, choice.find("div"), this.opts.escapeMarkup);
if (formatted != undefined) {
choice.find("div").replaceWith("<div>" + formatted + "</div>");
}
cssClass = this.opts.formatSelectionCssClass(data, choice.find("div"));
if (cssClass != undefined) {
choice.addClass(cssClass);
}
if (enableChoice) {
choice.find(".select2-search-choice-close")
.on("mousedown", killEvent)
.on("click dblclick", this.bind(function (e) {
if (!this.isInterfaceEnabled()) return;
$(e.target).closest(".select2-search-choice").fadeOut('fast', this.bind(function () {
this.unselect($(e.target));
this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");
this.close();
this.focusSearch();
})).dequeue();
killEvent(e);
})).on("focus", this.bind(function () {
if (!this.isInterfaceEnabled()) return;
this.container.addClass("select2-container-active");
this.dropdown.addClass("select2-drop-active");
}));
}
choice.data("select2-data", data);
choice.insertBefore(this.searchContainer);
val.push(id);
this.setVal(val);
},
// multi
unselect: function (selected) {
var val = this.getVal(),
data,
index;
selected = selected.closest(".select2-search-choice");
if (selected.length === 0) {
throw "Invalid argument: " + selected + ". Must be .select2-search-choice";
}
data = selected.data("select2-data");
if (!data) {
// prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued
// and invoked on an element already removed
return;
}
index = indexOf(this.id(data), val);
if (index >= 0) {
val.splice(index, 1);
this.setVal(val);
if (this.select) this.postprocessResults();
}
selected.remove();
this.opts.element.trigger({type: "removed", val: this.id(data), choice: data});
this.triggerChange({removed: data});
},
// multi
postprocessResults: function (data, initial, noHighlightUpdate) {
var val = this.getVal(),
choices = this.results.find(".select2-result"),
compound = this.results.find(".select2-result-with-children"),
self = this;
choices.each2(function (i, choice) {
var id = self.id(choice.data("select2-data"));
if (indexOf(id, val) >= 0) {
choice.addClass("select2-selected");
// mark all children of the selected parent as selected
choice.find(".select2-result-selectable").addClass("select2-selected");
}
});
compound.each2(function (i, choice) {
// hide an optgroup if it doesnt have any selectable children
if (!choice.is('.select2-result-selectable')
&& choice.find(".select2-result-selectable:not(.select2-selected)").length === 0) {
choice.addClass("select2-selected");
}
});
if (this.highlight() == -1 && noHighlightUpdate !== false) {
self.highlight(0);
}
//If all results are chosen render formatNoMAtches
if (!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0) {
if (!data || data && !data.more && this.results.find(".select2-no-results").length === 0) {
if (checkFormatter(self.opts.formatNoMatches, "formatNoMatches")) {
this.results.append("<li class='select2-no-results'>" + self.opts.formatNoMatches(self.search.val()) + "</li>");
}
}
}
},
// multi
getMaxSearchWidth: function () {
return this.selection.width() - getSideBorderPadding(this.search);
},
// multi
resizeSearch: function () {
var minimumWidth, left, maxWidth, containerLeft, searchWidth,
sideBorderPadding = getSideBorderPadding(this.search);
minimumWidth = measureTextWidth(this.search) + 10;
left = this.search.offset().left;
maxWidth = this.selection.width();
containerLeft = this.selection.offset().left;
searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;
if (searchWidth < minimumWidth) {
searchWidth = maxWidth - sideBorderPadding;
}
if (searchWidth < 40) {
searchWidth = maxWidth - sideBorderPadding;
}
if (searchWidth <= 0) {
searchWidth = minimumWidth;
}
this.search.width(searchWidth);
},
// multi
getVal: function () {
var val;
if (this.select) {
val = this.select.val();
return val === null ? [] : val;
} else {
val = this.opts.element.val();
return splitVal(val, this.opts.separator);
}
},
// multi
setVal: function (val) {
var unique;
if (this.select) {
this.select.val(val);
} else {
unique = [];
// filter out duplicates
$(val).each(function () {
if (indexOf(this, unique) < 0) unique.push(this);
});
this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator));
}
},
// multi
buildChangeDetails: function (old, current) {
var current = current.slice(0),
old = old.slice(0);
// remove intersection from each array
for (var i = 0; i < current.length; i++) {
for (var j = 0; j < old.length; j++) {
if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {
current.splice(i, 1);
i--;
old.splice(j, 1);
j--;
}
}
}
return {added: current, removed: old};
},
// multi
val: function (val, triggerChange) {
var oldData, self = this, changeDetails;
if (arguments.length === 0) {
return this.getVal();
}
oldData = this.data();
if (!oldData.length) oldData = [];
// val is an id. !val is true for [undefined,null,'',0] - 0 is legal
if (!val && val !== 0) {
this.opts.element.val("");
this.updateSelection([]);
this.clearSearch();
if (triggerChange) {
this.triggerChange({added: this.data(), removed: oldData});
}
return;
}
// val is a list of ids
this.setVal(val);
if (this.select) {
this.opts.initSelection(this.select, this.bind(this.updateSelection));
if (triggerChange) {
this.triggerChange(this.buildChangeDetails(oldData, this.data()));
}
} else {
if (this.opts.initSelection === undefined) {
throw new Error("val() cannot be called if initSelection() is not defined");
}
this.opts.initSelection(this.opts.element, function (data) {
var ids = $.map(data, self.id);
self.setVal(ids);
self.updateSelection(data);
self.clearSearch();
if (triggerChange) {
self.triggerChange(this.buildChangeDetails(oldData, this.data()));
}
});
}
this.clearSearch();
},
// multi
onSortStart: function () {
if (this.select) {
throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");
}
// collapse search field into 0 width so its container can be collapsed as well
this.search.width(0);
// hide the container
this.searchContainer.hide();
},
// multi
onSortEnd: function () {
var val = [], self = this;
// show search and move it to the end of the list
this.searchContainer.show();
// make sure the search container is the last item in the list
this.searchContainer.appendTo(this.searchContainer.parent());
// since we collapsed the width in dragStarted, we resize it here
this.resizeSearch();
// update selection
this.selection.find(".select2-search-choice").each(function () {
val.push(self.opts.id($(this).data("select2-data")));
});
this.setVal(val);
this.triggerChange();
},
// multi
data: function (values, triggerChange) {
var self = this, ids, old;
if (arguments.length === 0) {
return this.selection
.find(".select2-search-choice")
.map(function () {
return $(this).data("select2-data");
})
.get();
} else {
old = this.data();
if (!values) {
values = [];
}
ids = $.map(values, function (e) {
return self.opts.id(e);
});
this.setVal(ids);
this.updateSelection(values);
this.clearSearch();
if (triggerChange) {
this.triggerChange(this.buildChangeDetails(old, this.data()));
}
}
}
});
$.fn.select2 = function () {
var args = Array.prototype.slice.call(arguments, 0),
opts,
select2,
method, value, multiple,
allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "readonly", "positionDropdown", "data", "search"],
valueMethods = ["val", "opened", "isFocused", "container", "data"],
methodsMap = {search: "externalSearch"};
this.each(function () {
if (args.length === 0 || typeof(args[0]) === "object") {
opts = args.length === 0 ? {} : $.extend({}, args[0]);
opts.element = $(this);
if (opts.element.get(0).tagName.toLowerCase() === "select") {
multiple = opts.element.prop("multiple");
} else {
multiple = opts.multiple || false;
if ("tags" in opts) {
opts.multiple = multiple = true;
}
}
select2 = multiple ? new MultiSelect2() : new SingleSelect2();
select2.init(opts);
} else if (typeof(args[0]) === "string") {
if (indexOf(args[0], allowedMethods) < 0) {
throw "Unknown method: " + args[0];
}
value = undefined;
select2 = $(this).data("select2");
if (select2 === undefined) return;
method = args[0];
if (method === "container") {
value = select2.container;
} else if (method === "dropdown") {
value = select2.dropdown;
} else {
if (methodsMap[method]) method = methodsMap[method];
value = select2[method].apply(select2, args.slice(1));
}
if (indexOf(args[0], valueMethods) >= 0) {
return false;
}
} else {
throw "Invalid arguments to select2 plugin: " + args;
}
});
return (value === undefined) ? this : value;
};
// plugin defaults, accessible to users
$.fn.select2.defaults = {
width: "copy",
loadMorePadding: 0,
closeOnSelect: true,
openOnEnter: true,
containerCss: {},
dropdownCss: {},
containerCssClass: "",
dropdownCssClass: "",
formatResult: function (result, container, query, escapeMarkup) {
var markup = [];
markMatch(result.text, query.term, markup, escapeMarkup);
return markup.join("");
},
formatSelection: function (data, container, escapeMarkup) {
return data ? escapeMarkup(data.text) : undefined;
},
sortResults: function (results, container, query) {
return results;
},
formatResultCssClass: function (data) {
return undefined;
},
formatSelectionCssClass: function (data, container) {
return undefined;
},
formatNoMatches: function () {
return "No matches found";
},
formatInputTooShort: function (input, min) {
var n = min - input.length;
return "Please enter " + n + " more character" + (n == 1 ? "" : "s");
},
formatInputTooLong: function (input, max) {
var n = input.length - max;
return "Please delete " + n + " character" + (n == 1 ? "" : "s");
},
formatSelectionTooBig: function (limit) {
return "You can only select " + limit + " item" + (limit == 1 ? "" : "s");
},
formatLoadMore: function (pageNumber) {
return "Loading more results...";
},
formatSearching: function () {
return "Searching...";
},
minimumResultsForSearch: 0,
minimumInputLength: 0,
maximumInputLength: null,
maximumSelectionSize: 0,
id: function (e) {
return e.id;
},
matcher: function (term, text) {
return ('' + text).toUpperCase().indexOf(('' + term).toUpperCase()) >= 0;
},
separator: ",",
tokenSeparators: [],
tokenizer: defaultTokenizer,
escapeMarkup: defaultEscapeMarkup,
blurOnChange: false,
selectOnBlur: false,
adaptContainerCssClass: function (c) {
return c;
},
adaptDropdownCssClass: function (c) {
return null;
}
};
$.fn.select2.ajaxDefaults = {
transport: $.ajax,
params: {
type: "GET",
cache: false,
dataType: "json"
}
};
// exports
window.Select2 = {
query: {
ajax: ajax,
local: local,
tags: tags
}, util: {
debounce: debounce,
markMatch: markMatch,
escapeMarkup: defaultEscapeMarkup
}, "class": {
"abstract": AbstractSelect2,
"single": SingleSelect2,
"multi": MultiSelect2
}
};
}(jQuery));
/*! jQuery Timepicker Addon - v1.4.2 - 2013-11-23
* http://trentrichardson.com/examples/timepicker
* Copyright (c) 2013 Trent Richardson; Licensed MIT */
(function ($) {
/*
* Lets not redefine timepicker, Prevent "Uncaught RangeError: Maximum call stack size exceeded"
*/
$.ui.timepicker = $.ui.timepicker || {};
if ($.ui.timepicker.version) {
return;
}
/*
* Extend jQueryUI, get it started with our version number
*/
$.extend($.ui, {
timepicker: {
version: "1.4.2"
}
});
/*
* Timepicker manager.
* Use the singleton instance of this class, $.timepicker, to interact with the time picker.
* Settings for (groups of) time pickers are maintained in an instance object,
* allowing multiple different settings on the same page.
*/
var Timepicker = function () {
this.regional = []; // Available regional settings, indexed by language code
this.regional[''] = { // Default regional settings
currentText: 'Now',
closeText: 'Done',
amNames: ['AM', 'A'],
pmNames: ['PM', 'P'],
timeFormat: 'HH:mm',
timeSuffix: '',
timeOnlyTitle: 'Choose Time',
timeText: 'Time',
hourText: 'Hour',
minuteText: 'Minute',
secondText: 'Second',
millisecText: 'Millisecond',
microsecText: 'Microsecond',
timezoneText: 'Time Zone',
isRTL: false
};
this._defaults = { // Global defaults for all the datetime picker instances
showButtonPanel: true,
timeOnly: false,
showHour: null,
showMinute: null,
showSecond: null,
showMillisec: null,
showMicrosec: null,
showTimezone: null,
showTime: true,
stepHour: 1,
stepMinute: 1,
stepSecond: 1,
stepMillisec: 1,
stepMicrosec: 1,
hour: 0,
minute: 0,
second: 0,
millisec: 0,
microsec: 0,
timezone: null,
hourMin: 0,
minuteMin: 0,
secondMin: 0,
millisecMin: 0,
microsecMin: 0,
hourMax: 23,
minuteMax: 59,
secondMax: 59,
millisecMax: 999,
microsecMax: 999,
minDateTime: null,
maxDateTime: null,
onSelect: null,
hourGrid: 0,
minuteGrid: 0,
secondGrid: 0,
millisecGrid: 0,
microsecGrid: 0,
alwaysSetTime: true,
separator: ' ',
altFieldTimeOnly: true,
altTimeFormat: null,
altSeparator: null,
altTimeSuffix: null,
pickerTimeFormat: null,
pickerTimeSuffix: null,
showTimepicker: true,
timezoneList: null,
addSliderAccess: false,
sliderAccessArgs: null,
controlType: 'slider',
defaultValue: null,
parse: 'strict'
};
$.extend(this._defaults, this.regional['']);
};
$.extend(Timepicker.prototype, {
$input: null,
$altInput: null,
$timeObj: null,
inst: null,
hour_slider: null,
minute_slider: null,
second_slider: null,
millisec_slider: null,
microsec_slider: null,
timezone_select: null,
hour: 0,
minute: 0,
second: 0,
millisec: 0,
microsec: 0,
timezone: null,
hourMinOriginal: null,
minuteMinOriginal: null,
secondMinOriginal: null,
millisecMinOriginal: null,
microsecMinOriginal: null,
hourMaxOriginal: null,
minuteMaxOriginal: null,
secondMaxOriginal: null,
millisecMaxOriginal: null,
microsecMaxOriginal: null,
ampm: '',
formattedDate: '',
formattedTime: '',
formattedDateTime: '',
timezoneList: null,
units: ['hour', 'minute', 'second', 'millisec', 'microsec'],
support: {},
control: null,
/*
* Override the default settings for all instances of the time picker.
* @param {Object} settings object - the new settings to use as defaults (anonymous object)
* @return {Object} the manager object
*/
setDefaults: function (settings) {
extendRemove(this._defaults, settings || {});
return this;
},
/*
* Create a new Timepicker instance
*/
_newInst: function ($input, opts) {
var tp_inst = new Timepicker(),
inlineSettings = {},
fns = {},
overrides, i;
for (var attrName in this._defaults) {
if (this._defaults.hasOwnProperty(attrName)) {
var attrValue = $input.attr('time:' + attrName);
if (attrValue) {
try {
inlineSettings[attrName] = eval(attrValue);
} catch (err) {
inlineSettings[attrName] = attrValue;
}
}
}
}
overrides = {
beforeShow: function (input, dp_inst) {
if ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {
return tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst);
}
},
onChangeMonthYear: function (year, month, dp_inst) {
// Update the time as well : this prevents the time from disappearing from the $input field.
tp_inst._updateDateTime(dp_inst);
if ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) {
tp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);
}
},
onClose: function (dateText, dp_inst) {
if (tp_inst.timeDefined === true && $input.val() !== '') {
tp_inst._updateDateTime(dp_inst);
}
if ($.isFunction(tp_inst._defaults.evnts.onClose)) {
tp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst);
}
}
};
for (i in overrides) {
if (overrides.hasOwnProperty(i)) {
fns[i] = opts[i] || null;
}
}
tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, {
evnts: fns,
timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');
});
tp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) {
return val.toUpperCase();
});
tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) {
return val.toUpperCase();
});
// detect which units are supported
tp_inst.support = detectSupport(
tp_inst._defaults.timeFormat +
(tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : '') +
(tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : ''));
// controlType is string - key to our this._controls
if (typeof(tp_inst._defaults.controlType) === 'string') {
if (tp_inst._defaults.controlType === 'slider' && typeof($.ui.slider) === 'undefined') {
tp_inst._defaults.controlType = 'select';
}
tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];
}
// controlType is an object and must implement create, options, value methods
else {
tp_inst.control = tp_inst._defaults.controlType;
}
// prep the timezone options
var timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60,
0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];
if (tp_inst._defaults.timezoneList !== null) {
timezoneList = tp_inst._defaults.timezoneList;
}
var tzl = timezoneList.length, tzi = 0, tzv = null;
if (tzl > 0 && typeof timezoneList[0] !== 'object') {
for (; tzi < tzl; tzi++) {
tzv = timezoneList[tzi];
timezoneList[tzi] = {
value: tzv,
label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601)
};
}
}
tp_inst._defaults.timezoneList = timezoneList;
// set the default units
tp_inst.timezone = tp_inst._defaults.timezone !== null ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :
((new Date()).getTimezoneOffset() * -1);
tp_inst.hour = tp_inst._defaults.hour < tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin :
tp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour;
tp_inst.minute = tp_inst._defaults.minute < tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin :
tp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute;
tp_inst.second = tp_inst._defaults.second < tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin :
tp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second;
tp_inst.millisec = tp_inst._defaults.millisec < tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin :
tp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;
tp_inst.microsec = tp_inst._defaults.microsec < tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin :
tp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;
tp_inst.ampm = '';
tp_inst.$input = $input;
if (tp_inst._defaults.altField) {
tp_inst.$altInput = $(tp_inst._defaults.altField).css({
cursor: 'pointer'
}).focus(function () {
$input.trigger("focus");
});
}
if (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) {
tp_inst._defaults.minDate = new Date();
}
if (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) {
tp_inst._defaults.maxDate = new Date();
}
// datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..
if (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {
tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());
}
if (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {
tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());
}
if (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {
tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());
}
if (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {
tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());
}
tp_inst.$input.bind('focus', function () {
tp_inst._onFocus();
});
return tp_inst;
},
/*
* add our sliders to the calendar
*/
_addTimePicker: function (dp_inst) {
var currDT = (this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val();
this.timeDefined = this._parseTime(currDT);
this._limitMinMaxDateTime(dp_inst, false);
this._injectTimePicker();
},
/*
* parse the time string from input value or _setTime
*/
_parseTime: function (timeString, withDate) {
if (!this.inst) {
this.inst = $.datepicker._getInst(this.$input[0]);
}
if (withDate || !this._defaults.timeOnly) {
var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');
try {
var parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);
if (!parseRes.timeObj) {
return false;
}
$.extend(this, parseRes.timeObj);
} catch (err) {
$.timepicker.log("Error parsing the date/time string: " + err +
"\ndate/time string = " + timeString +
"\ntimeFormat = " + this._defaults.timeFormat +
"\ndateFormat = " + dp_dateFormat);
return false;
}
return true;
} else {
var timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);
if (!timeObj) {
return false;
}
$.extend(this, timeObj);
return true;
}
},
/*
* generate and inject html for timepicker into ui datepicker
*/
_injectTimePicker: function () {
var $dp = this.inst.dpDiv,
o = this.inst.settings,
tp_inst = this,
litem = '',
uitem = '',
show = null,
max = {},
gridSize = {},
size = null,
i = 0,
l = 0;
// Prevent displaying twice
if ($dp.find("div.ui-timepicker-div").length === 0 && o.showTimepicker) {
var noDisplay = ' style="display:none;"',
html = '<div class="ui-timepicker-div' + (o.isRTL ? ' ui-timepicker-rtl' : '') + '"><dl>' + '<dt class="ui_tpicker_time_label"' + ((o.showTime) ? '' : noDisplay) + '>' + o.timeText + '</dt>' +
'<dd class="ui_tpicker_time"' + ((o.showTime) ? '' : noDisplay) + '></dd>';
// Create the markup
for (i = 0, l = this.units.length; i < l; i++) {
litem = this.units[i];
uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);
show = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];
// Added by Peter Medeiros:
// - Figure out what the hour/minute/second max should be based on the step values.
// - Example: if stepMinute is 15, then minMax is 45.
max[litem] = parseInt((o[litem + 'Max'] - ((o[litem + 'Max'] - o[litem + 'Min']) % o['step' + uitem])), 10);
gridSize[litem] = 0;
html += '<dt class="ui_tpicker_' + litem + '_label"' + (show ? '' : noDisplay) + '>' + o[litem + 'Text'] + '</dt>' +
'<dd class="ui_tpicker_' + litem + '"><div class="ui_tpicker_' + litem + '_slider"' + (show ? '' : noDisplay) + '></div>';
if (show && o[litem + 'Grid'] > 0) {
html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
if (litem === 'hour') {
for (var h = o[litem + 'Min']; h <= max[litem]; h += parseInt(o[litem + 'Grid'], 10)) {
gridSize[litem]++;
var tmph = $.datepicker.formatTime(this.support.ampm ? 'hht' : 'HH', {hour: h}, o);
html += '<td data-for="' + litem + '">' + tmph + '</td>';
}
}
else {
for (var m = o[litem + 'Min']; m <= max[litem]; m += parseInt(o[litem + 'Grid'], 10)) {
gridSize[litem]++;
html += '<td data-for="' + litem + '">' + ((m < 10) ? '0' : '') + m + '</td>';
}
}
html += '</tr></table></div>';
}
html += '</dd>';
}
// Timezone
var showTz = o.showTimezone !== null ? o.showTimezone : this.support.timezone;
html += '<dt class="ui_tpicker_timezone_label"' + (showTz ? '' : noDisplay) + '>' + o.timezoneText + '</dt>';
html += '<dd class="ui_tpicker_timezone" ' + (showTz ? '' : noDisplay) + '></dd>';
// Create the elements from string
html += '</dl></div>';
var $tp = $(html);
// if we only want time picker...
if (o.timeOnly === true) {
$tp.prepend('<div class="ui-widget-header ui-helper-clearfix ui-corner-all">' + '<div class="ui-datepicker-title">' + o.timeOnlyTitle + '</div>' + '</div>');
$dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();
}
// add sliders, adjust grids, add events
for (i = 0, l = tp_inst.units.length; i < l; i++) {
litem = tp_inst.units[i];
uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);
show = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];
// add the slider
tp_inst[litem + '_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_' + litem + '_slider'), litem, tp_inst[litem], o[litem + 'Min'], max[litem], o['step' + uitem]);
// adjust the grid and add click event
if (show && o[litem + 'Grid'] > 0) {
size = 100 * gridSize[litem] * o[litem + 'Grid'] / (max[litem] - o[litem + 'Min']);
$tp.find('.ui_tpicker_' + litem + ' table').css({
width: size + "%",
marginLeft: o.isRTL ? '0' : ((size / (-2 * gridSize[litem])) + "%"),
marginRight: o.isRTL ? ((size / (-2 * gridSize[litem])) + "%") : '0',
borderCollapse: 'collapse'
}).find("td").click(function (e) {
var $t = $(this),
h = $t.html(),
n = parseInt(h.replace(/[^0-9]/g), 10),
ap = h.replace(/[^apm]/ig),
f = $t.data('for'); // loses scope, so we use data-for
if (f === 'hour') {
if (ap.indexOf('p') !== -1 && n < 12) {
n += 12;
}
else {
if (ap.indexOf('a') !== -1 && n === 12) {
n = 0;
}
}
}
tp_inst.control.value(tp_inst, tp_inst[f + '_slider'], litem, n);
tp_inst._onTimeChange();
tp_inst._onSelectHandler();
}).css({
cursor: 'pointer',
width: (100 / gridSize[litem]) + '%',
textAlign: 'center',
overflow: 'hidden'
});
} // end if grid > 0
} // end for loop
// Add timezone options
this.timezone_select = $tp.find('.ui_tpicker_timezone').append('<select></select>').find("select");
$.fn.append.apply(this.timezone_select,
$.map(o.timezoneList, function (val, idx) {
return $("<option />").val(typeof val === "object" ? val.value : val).text(typeof val === "object" ? val.label : val);
}));
if (typeof(this.timezone) !== "undefined" && this.timezone !== null && this.timezone !== "") {
var local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset() * -1;
if (local_timezone === this.timezone) {
selectLocalTimezone(tp_inst);
} else {
this.timezone_select.val(this.timezone);
}
} else {
if (typeof(this.hour) !== "undefined" && this.hour !== null && this.hour !== "") {
this.timezone_select.val(o.timezone);
} else {
selectLocalTimezone(tp_inst);
}
}
this.timezone_select.change(function () {
tp_inst._onTimeChange();
tp_inst._onSelectHandler();
});
// End timezone options
// inject timepicker into datepicker
var $buttonPanel = $dp.find('.ui-datepicker-buttonpane');
if ($buttonPanel.length) {
$buttonPanel.before($tp);
} else {
$dp.append($tp);
}
this.$timeObj = $tp.find('.ui_tpicker_time');
if (this.inst !== null) {
var timeDefined = this.timeDefined;
this._onTimeChange();
this.timeDefined = timeDefined;
}
// slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/
if (this._defaults.addSliderAccess) {
var sliderAccessArgs = this._defaults.sliderAccessArgs,
rtl = this._defaults.isRTL;
sliderAccessArgs.isRTL = rtl;
setTimeout(function () { // fix for inline mode
if ($tp.find('.ui-slider-access').length === 0) {
$tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);
// fix any grids since sliders are shorter
var sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);
if (sliderAccessWidth) {
$tp.find('table:visible').each(function () {
var $g = $(this),
oldWidth = $g.outerWidth(),
oldMarginLeft = $g.css(rtl ? 'marginRight' : 'marginLeft').toString().replace('%', ''),
newWidth = oldWidth - sliderAccessWidth,
newMarginLeft = ((oldMarginLeft * newWidth) / oldWidth) + '%',
css = {width: newWidth, marginRight: 0, marginLeft: 0};
css[rtl ? 'marginRight' : 'marginLeft'] = newMarginLeft;
$g.css(css);
});
}
}
}, 10);
}
// end slideAccess integration
tp_inst._limitMinMaxDateTime(this.inst, true);
}
},
/*
* This function tries to limit the ability to go outside the
* min/max date range
*/
_limitMinMaxDateTime: function (dp_inst, adjustSliders) {
var o = this._defaults,
dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);
if (!this._defaults.showTimepicker) {
return;
} // No time so nothing to check here
if ($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date) {
var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),
minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);
if (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {
this.hourMinOriginal = o.hourMin;
this.minuteMinOriginal = o.minuteMin;
this.secondMinOriginal = o.secondMin;
this.millisecMinOriginal = o.millisecMin;
this.microsecMinOriginal = o.microsecMin;
}
if (dp_inst.settings.timeOnly || minDateTimeDate.getTime() === dp_date.getTime()) {
this._defaults.hourMin = minDateTime.getHours();
if (this.hour <= this._defaults.hourMin) {
this.hour = this._defaults.hourMin;
this._defaults.minuteMin = minDateTime.getMinutes();
if (this.minute <= this._defaults.minuteMin) {
this.minute = this._defaults.minuteMin;
this._defaults.secondMin = minDateTime.getSeconds();
if (this.second <= this._defaults.secondMin) {
this.second = this._defaults.secondMin;
this._defaults.millisecMin = minDateTime.getMilliseconds();
if (this.millisec <= this._defaults.millisecMin) {
this.millisec = this._defaults.millisecMin;
this._defaults.microsecMin = minDateTime.getMicroseconds();
} else {
if (this.microsec < this._defaults.microsecMin) {
this.microsec = this._defaults.microsecMin;
}
this._defaults.microsecMin = this.microsecMinOriginal;
}
} else {
this._defaults.millisecMin = this.millisecMinOriginal;
this._defaults.microsecMin = this.microsecMinOriginal;
}
} else {
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal;
this._defaults.microsecMin = this.microsecMinOriginal;
}
} else {
this._defaults.minuteMin = this.minuteMinOriginal;
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal;
this._defaults.microsecMin = this.microsecMinOriginal;
}
} else {
this._defaults.hourMin = this.hourMinOriginal;
this._defaults.minuteMin = this.minuteMinOriginal;
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal;
this._defaults.microsecMin = this.microsecMinOriginal;
}
}
if ($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date) {
var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),
maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);
if (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {
this.hourMaxOriginal = o.hourMax;
this.minuteMaxOriginal = o.minuteMax;
this.secondMaxOriginal = o.secondMax;
this.millisecMaxOriginal = o.millisecMax;
this.microsecMaxOriginal = o.microsecMax;
}
if (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() === dp_date.getTime()) {
this._defaults.hourMax = maxDateTime.getHours();
if (this.hour >= this._defaults.hourMax) {
this.hour = this._defaults.hourMax;
this._defaults.minuteMax = maxDateTime.getMinutes();
if (this.minute >= this._defaults.minuteMax) {
this.minute = this._defaults.minuteMax;
this._defaults.secondMax = maxDateTime.getSeconds();
if (this.second >= this._defaults.secondMax) {
this.second = this._defaults.secondMax;
this._defaults.millisecMax = maxDateTime.getMilliseconds();
if (this.millisec >= this._defaults.millisecMax) {
this.millisec = this._defaults.millisecMax;
this._defaults.microsecMax = maxDateTime.getMicroseconds();
} else {
if (this.microsec > this._defaults.microsecMax) {
this.microsec = this._defaults.microsecMax;
}
this._defaults.microsecMax = this.microsecMaxOriginal;
}
} else {
this._defaults.millisecMax = this.millisecMaxOriginal;
this._defaults.microsecMax = this.microsecMaxOriginal;
}
} else {
this._defaults.secondMax = this.secondMaxOriginal;
this._defaults.millisecMax = this.millisecMaxOriginal;
this._defaults.microsecMax = this.microsecMaxOriginal;
}
} else {
this._defaults.minuteMax = this.minuteMaxOriginal;
this._defaults.secondMax = this.secondMaxOriginal;
this._defaults.millisecMax = this.millisecMaxOriginal;
this._defaults.microsecMax = this.microsecMaxOriginal;
}
} else {
this._defaults.hourMax = this.hourMaxOriginal;
this._defaults.minuteMax = this.minuteMaxOriginal;
this._defaults.secondMax = this.secondMaxOriginal;
this._defaults.millisecMax = this.millisecMaxOriginal;
this._defaults.microsecMax = this.microsecMaxOriginal;
}
}
if (adjustSliders !== undefined && adjustSliders === true) {
var hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10),
minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),
secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),
millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10),
microsecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);
if (this.hour_slider) {
this.control.options(this, this.hour_slider, 'hour', {min: this._defaults.hourMin, max: hourMax});
this.control.value(this, this.hour_slider, 'hour', this.hour - (this.hour % this._defaults.stepHour));
}
if (this.minute_slider) {
this.control.options(this, this.minute_slider, 'minute', {
min: this._defaults.minuteMin,
max: minMax
});
this.control.value(this, this.minute_slider, 'minute', this.minute - (this.minute % this._defaults.stepMinute));
}
if (this.second_slider) {
this.control.options(this, this.second_slider, 'second', {
min: this._defaults.secondMin,
max: secMax
});
this.control.value(this, this.second_slider, 'second', this.second - (this.second % this._defaults.stepSecond));
}
if (this.millisec_slider) {
this.control.options(this, this.millisec_slider, 'millisec', {
min: this._defaults.millisecMin,
max: millisecMax
});
this.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));
}
if (this.microsec_slider) {
this.control.options(this, this.microsec_slider, 'microsec', {
min: this._defaults.microsecMin,
max: microsecMax
});
this.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));
}
}
},
/*
* when a slider moves, set the internal time...
* on time change is also called when the time is updated in the text field
*/
_onTimeChange: function () {
if (!this._defaults.showTimepicker) {
return;
}
var hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, 'hour') : false,
minute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,
second = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,
millisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,
microsec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,
timezone = (this.timezone_select) ? this.timezone_select.val() : false,
o = this._defaults,
pickerTimeFormat = o.pickerTimeFormat || o.timeFormat,
pickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;
if (typeof(hour) === 'object') {
hour = false;
}
if (typeof(minute) === 'object') {
minute = false;
}
if (typeof(second) === 'object') {
second = false;
}
if (typeof(millisec) === 'object') {
millisec = false;
}
if (typeof(microsec) === 'object') {
microsec = false;
}
if (typeof(timezone) === 'object') {
timezone = false;
}
if (hour !== false) {
hour = parseInt(hour, 10);
}
if (minute !== false) {
minute = parseInt(minute, 10);
}
if (second !== false) {
second = parseInt(second, 10);
}
if (millisec !== false) {
millisec = parseInt(millisec, 10);
}
if (microsec !== false) {
microsec = parseInt(microsec, 10);
}
if (timezone !== false) {
timezone = timezone.toString();
}
var ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];
// If the update was done in the input field, the input field should not be updated.
// If the update was done using the sliders, update the input field.
var hasChanged = (
hour !== parseInt(this.hour, 10) || // sliders should all be numeric
minute !== parseInt(this.minute, 10) ||
second !== parseInt(this.second, 10) ||
millisec !== parseInt(this.millisec, 10) ||
microsec !== parseInt(this.microsec, 10) ||
(this.ampm.length > 0 && (hour < 12) !== ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) ||
(this.timezone !== null && timezone !== this.timezone.toString()) // could be numeric or "EST" format, so use toString()
);
if (hasChanged) {
if (hour !== false) {
this.hour = hour;
}
if (minute !== false) {
this.minute = minute;
}
if (second !== false) {
this.second = second;
}
if (millisec !== false) {
this.millisec = millisec;
}
if (microsec !== false) {
this.microsec = microsec;
}
if (timezone !== false) {
this.timezone = timezone;
}
if (!this.inst) {
this.inst = $.datepicker._getInst(this.$input[0]);
}
this._limitMinMaxDateTime(this.inst, true);
}
if (this.support.ampm) {
this.ampm = ampm;
}
// Updates the time within the timepicker
this.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);
if (this.$timeObj) {
if (pickerTimeFormat === o.timeFormat) {
this.$timeObj.text(this.formattedTime + pickerTimeSuffix);
}
else {
this.$timeObj.text($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix);
}
}
this.timeDefined = true;
if (hasChanged) {
this._updateDateTime();
this.$input.focus();
}
},
/*
* call custom onSelect.
* bind to sliders slidestop, and grid click.
*/
_onSelectHandler: function () {
var onSelect = this._defaults.onSelect || this.inst.settings.onSelect;
var inputEl = this.$input ? this.$input[0] : null;
if (onSelect && inputEl) {
onSelect.apply(inputEl, [this.formattedDateTime, this]);
}
},
/*
* update our input with the new date time..
*/
_updateDateTime: function (dp_inst) {
dp_inst = this.inst || dp_inst;
var dtTmp = (dp_inst.currentYear > 0 ?
new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay) :
new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),
dt = $.datepicker._daylightSavingAdjust(dtTmp),
//dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),
//dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay)),
dateFmt = $.datepicker._get(dp_inst, 'dateFormat'),
formatCfg = $.datepicker._getFormatConfig(dp_inst),
timeAvailable = dt !== null && this.timeDefined;
this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);
var formattedDateTime = this.formattedDate;
// if a slider was changed but datepicker doesn't have a value yet, set it
if (dp_inst.lastVal === "") {
dp_inst.currentYear = dp_inst.selectedYear;
dp_inst.currentMonth = dp_inst.selectedMonth;
dp_inst.currentDay = dp_inst.selectedDay;
}
/*
* remove following lines to force every changes in date picker to change the input value
* Bug descriptions: when an input field has a default value, and click on the field to pop up the date picker.
* If the user manually empty the value in the input field, the date picker will never change selected value.
*/
//if (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0)) {
// return;
//}
if (this._defaults.timeOnly === true) {
formattedDateTime = this.formattedTime;
} else if (this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) {
formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;
}
this.formattedDateTime = formattedDateTime;
if (!this._defaults.showTimepicker) {
this.$input.val(this.formattedDate);
} else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {
this.$altInput.val(this.formattedTime);
this.$input.val(this.formattedDate);
} else if (this.$altInput) {
this.$input.val(formattedDateTime);
var altFormattedDateTime = '',
altSeparator = this._defaults.altSeparator ? this._defaults.altSeparator : this._defaults.separator,
altTimeSuffix = this._defaults.altTimeSuffix ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;
if (!this._defaults.timeOnly) {
if (this._defaults.altFormat) {
altFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);
}
else {
altFormattedDateTime = this.formattedDate;
}
if (altFormattedDateTime) {
altFormattedDateTime += altSeparator;
}
}
if (this._defaults.altTimeFormat) {
altFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix;
}
else {
altFormattedDateTime += this.formattedTime + altTimeSuffix;
}
this.$altInput.val(altFormattedDateTime);
} else {
this.$input.val(formattedDateTime);
}
this.$input.trigger("change");
},
_onFocus: function () {
if (!this.$input.val() && this._defaults.defaultValue) {
this.$input.val(this._defaults.defaultValue);
var inst = $.datepicker._getInst(this.$input.get(0)),
tp_inst = $.datepicker._get(inst, 'timepicker');
if (tp_inst) {
if (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {
try {
$.datepicker._updateDatepicker(inst);
} catch (err) {
$.timepicker.log(err);
}
}
}
}
},
/*
* Small abstraction to control types
* We can add more, just be sure to follow the pattern: create, options, value
*/
_controls: {
// slider methods
slider: {
create: function (tp_inst, obj, unit, val, min, max, step) {
var rtl = tp_inst._defaults.isRTL; // if rtl go -60->0 instead of 0->60
return obj.prop('slide', null).slider({
orientation: "horizontal",
value: rtl ? val * -1 : val,
min: rtl ? max * -1 : min,
max: rtl ? min * -1 : max,
step: step,
slide: function (event, ui) {
tp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);
tp_inst._onTimeChange();
},
stop: function (event, ui) {
tp_inst._onSelectHandler();
}
});
},
options: function (tp_inst, obj, unit, opts, val) {
if (tp_inst._defaults.isRTL) {
if (typeof(opts) === 'string') {
if (opts === 'min' || opts === 'max') {
if (val !== undefined) {
return obj.slider(opts, val * -1);
}
return Math.abs(obj.slider(opts));
}
return obj.slider(opts);
}
var min = opts.min,
max = opts.max;
opts.min = opts.max = null;
if (min !== undefined) {
opts.max = min * -1;
}
if (max !== undefined) {
opts.min = max * -1;
}
return obj.slider(opts);
}
if (typeof(opts) === 'string' && val !== undefined) {
return obj.slider(opts, val);
}
return obj.slider(opts);
},
value: function (tp_inst, obj, unit, val) {
if (tp_inst._defaults.isRTL) {
if (val !== undefined) {
return obj.slider('value', val * -1);
}
return Math.abs(obj.slider('value'));
}
if (val !== undefined) {
return obj.slider('value', val);
}
return obj.slider('value');
}
},
// select methods
select: {
create: function (tp_inst, obj, unit, val, min, max, step) {
var sel = '<select class="ui-timepicker-select" data-unit="' + unit + '" data-min="' + min + '" data-max="' + max + '" data-step="' + step + '">',
format = tp_inst._defaults.pickerTimeFormat || tp_inst._defaults.timeFormat;
for (var i = min; i <= max; i += step) {
sel += '<option value="' + i + '"' + (i === val ? ' selected' : '') + '>';
if (unit === 'hour') {
sel += $.datepicker.formatTime($.trim(format.replace(/[^ht ]/ig, '')), {hour: i}, tp_inst._defaults);
}
else if (unit === 'millisec' || unit === 'microsec' || i >= 10) {
sel += i;
}
else {
sel += '0' + i.toString();
}
sel += '</option>';
}
sel += '</select>';
obj.children('select').remove();
$(sel).appendTo(obj).change(function (e) {
tp_inst._onTimeChange();
tp_inst._onSelectHandler();
});
return obj;
},
options: function (tp_inst, obj, unit, opts, val) {
var o = {},
$t = obj.children('select');
if (typeof(opts) === 'string') {
if (val === undefined) {
return $t.data(opts);
}
o[opts] = val;
}
else {
o = opts;
}
return tp_inst.control.create(tp_inst, obj, $t.data('unit'), $t.val(), o.min || $t.data('min'), o.max || $t.data('max'), o.step || $t.data('step'));
},
value: function (tp_inst, obj, unit, val) {
var $t = obj.children('select');
if (val !== undefined) {
return $t.val(val);
}
return $t.val();
}
}
} // end _controls
});
$.fn.extend({
/*
* shorthand just to use timepicker.
*/
timepicker: function (o) {
o = o || {};
var tmp_args = Array.prototype.slice.call(arguments);
if (typeof o === 'object') {
tmp_args[0] = $.extend(o, {
timeOnly: true
});
}
return $(this).each(function () {
$.fn.datetimepicker.apply($(this), tmp_args);
});
},
/*
* extend timepicker to datepicker
*/
datetimepicker: function (o) {
o = o || {};
var tmp_args = arguments;
if (typeof(o) === 'string') {
if (o === 'getDate') {
return $.fn.datepicker.apply($(this[0]), tmp_args);
} else {
return this.each(function () {
var $t = $(this);
$t.datepicker.apply($t, tmp_args);
});
}
} else {
return this.each(function () {
var $t = $(this);
$t.datepicker($.timepicker._newInst($t, o)._defaults);
});
}
}
});
/*
* Public Utility to parse date and time
*/
$.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {
var parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);
if (parseRes.timeObj) {
var t = parseRes.timeObj;
parseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);
parseRes.date.setMicroseconds(t.microsec);
}
return parseRes.date;
};
/*
* Public utility to parse time
*/
$.datepicker.parseTime = function (timeFormat, timeString, options) {
var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),
iso8601 = (timeFormat.replace(/\'.*?\'/g, '').indexOf('Z') !== -1);
// Strict parse requires the timeString to match the timeFormat exactly
var strictParse = function (f, s, o) {
// pattern for standard and localized AM/PM markers
var getPatternAmpm = function (amNames, pmNames) {
var markers = [];
if (amNames) {
$.merge(markers, amNames);
}
if (pmNames) {
$.merge(markers, pmNames);
}
markers = $.map(markers, function (val) {
return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&');
});
return '(' + markers.join('|') + ')?';
};
// figure out position of time elements.. cause js cant do named captures
var getFormatPositions = function (timeFormat) {
var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')/g),
orders = {
h: -1,
m: -1,
s: -1,
l: -1,
c: -1,
t: -1,
z: -1
};
if (finds) {
for (var i = 0; i < finds.length; i++) {
if (orders[finds[i].toString().charAt(0)] === -1) {
orders[finds[i].toString().charAt(0)] = i + 1;
}
}
}
return orders;
};
var regstr = '^' + f.toString()
.replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {
var ml = match.length;
switch (match.charAt(0).toLowerCase()) {
case 'h':
return ml === 1 ? '(\\d?\\d)' : '(\\d{' + ml + '})';
case 'm':
return ml === 1 ? '(\\d?\\d)' : '(\\d{' + ml + '})';
case 's':
return ml === 1 ? '(\\d?\\d)' : '(\\d{' + ml + '})';
case 'l':
return '(\\d?\\d?\\d)';
case 'c':
return '(\\d?\\d?\\d)';
case 'z':
return '(z|[-+]\\d\\d:?\\d\\d|\\S+)?';
case 't':
return getPatternAmpm(o.amNames, o.pmNames);
default: // literal escaped in quotes
return '(' + match.replace(/\'/g, "").replace(/(\.|\$|\^|\\|\/|\(|\)|\[|\]|\?|\+|\*)/g, function (m) {
return "\\" + m;
}) + ')?';
}
})
.replace(/\s/g, '\\s?') +
o.timeSuffix + '$',
order = getFormatPositions(f),
ampm = '',
treg;
treg = s.match(new RegExp(regstr, 'i'));
var resTime = {
hour: 0,
minute: 0,
second: 0,
millisec: 0,
microsec: 0
};
if (treg) {
if (order.t !== -1) {
if (treg[order.t] === undefined || treg[order.t].length === 0) {
ampm = '';
resTime.ampm = '';
} else {
ampm = $.inArray(treg[order.t].toUpperCase(), o.amNames) !== -1 ? 'AM' : 'PM';
resTime.ampm = o[ampm === 'AM' ? 'amNames' : 'pmNames'][0];
}
}
if (order.h !== -1) {
if (ampm === 'AM' && treg[order.h] === '12') {
resTime.hour = 0; // 12am = 0 hour
} else {
if (ampm === 'PM' && treg[order.h] !== '12') {
resTime.hour = parseInt(treg[order.h], 10) + 12; // 12pm = 12 hour, any other pm = hour + 12
} else {
resTime.hour = Number(treg[order.h]);
}
}
}
if (order.m !== -1) {
resTime.minute = Number(treg[order.m]);
}
if (order.s !== -1) {
resTime.second = Number(treg[order.s]);
}
if (order.l !== -1) {
resTime.millisec = Number(treg[order.l]);
}
if (order.c !== -1) {
resTime.microsec = Number(treg[order.c]);
}
if (order.z !== -1 && treg[order.z] !== undefined) {
resTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);
}
return resTime;
}
return false;
};// end strictParse
// First try JS Date, if that fails, use strictParse
var looseParse = function (f, s, o) {
try {
var d = new Date('2012-01-01 ' + s);
if (isNaN(d.getTime())) {
d = new Date('2012-01-01T' + s);
if (isNaN(d.getTime())) {
d = new Date('01/01/2012 ' + s);
if (isNaN(d.getTime())) {
throw "Unable to parse time with native Date: " + s;
}
}
}
return {
hour: d.getHours(),
minute: d.getMinutes(),
second: d.getSeconds(),
millisec: d.getMilliseconds(),
microsec: d.getMicroseconds(),
timezone: d.getTimezoneOffset() * -1
};
}
catch (err) {
try {
return strictParse(f, s, o);
}
catch (err2) {
$.timepicker.log("Unable to parse \ntimeString: " + s + "\ntimeFormat: " + f);
}
}
return false;
}; // end looseParse
if (typeof o.parse === "function") {
return o.parse(timeFormat, timeString, o);
}
if (o.parse === 'loose') {
return looseParse(timeFormat, timeString, o);
}
return strictParse(timeFormat, timeString, o);
};
/**
* Public utility to format the time
* @param {string} format format of the time
* @param {Object} time Object not a Date for timezones
* @param {Object} [options] essentially the regional[].. amNames, pmNames, ampm
* @returns {string} the formatted time
*/
$.datepicker.formatTime = function (format, time, options) {
options = options || {};
options = $.extend({}, $.timepicker._defaults, options);
time = $.extend({
hour: 0,
minute: 0,
second: 0,
millisec: 0,
microsec: 0,
timezone: null
}, time);
var tmptime = format,
ampmName = options.amNames[0],
hour = parseInt(time.hour, 10);
if (hour > 11) {
ampmName = options.pmNames[0];
}
tmptime = tmptime.replace(/(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {
switch (match) {
case 'HH':
return ('0' + hour).slice(-2);
case 'H':
return hour;
case 'hh':
return ('0' + convert24to12(hour)).slice(-2);
case 'h':
return convert24to12(hour);
case 'mm':
return ('0' + time.minute).slice(-2);
case 'm':
return time.minute;
case 'ss':
return ('0' + time.second).slice(-2);
case 's':
return time.second;
case 'l':
return ('00' + time.millisec).slice(-3);
case 'c':
return ('00' + time.microsec).slice(-3);
case 'z':
return $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, false);
case 'Z':
return $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, true);
case 'T':
return ampmName.charAt(0).toUpperCase();
case 'TT':
return ampmName.toUpperCase();
case 't':
return ampmName.charAt(0).toLowerCase();
case 'tt':
return ampmName.toLowerCase();
default:
return match.replace(/'/g, "");
}
});
return tmptime;
};
/*
* the bad hack :/ override datepicker so it doesn't close on select
// inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378
*/
$.datepicker._base_selectDate = $.datepicker._selectDate;
$.datepicker._selectDate = function (id, dateStr) {
var inst = this._getInst($(id)[0]),
tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
tp_inst._limitMinMaxDateTime(inst, true);
inst.inline = inst.stay_open = true;
//This way the onSelect handler called from calendarpicker get the full dateTime
this._base_selectDate(id, dateStr);
inst.inline = inst.stay_open = false;
this._notifyChange(inst);
this._updateDatepicker(inst);
} else {
this._base_selectDate(id, dateStr);
}
};
/*
* second bad hack :/ override datepicker so it triggers an event when changing the input field
* and does not redraw the datepicker on every selectDate event
*/
$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;
$.datepicker._updateDatepicker = function (inst) {
// don't popup the datepicker if there is another instance already opened
var input = inst.input[0];
if ($.datepicker._curInst && $.datepicker._curInst !== inst && $.datepicker._datepickerShowing && $.datepicker._lastInput !== input) {
return;
}
if (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {
this._base_updateDatepicker(inst);
// Reload the time control when changing something in the input text field.
var tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
tp_inst._addTimePicker(inst);
}
}
};
/*
* third bad hack :/ override datepicker so it allows spaces and colon in the input field
*/
$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;
$.datepicker._doKeyPress = function (event) {
var inst = $.datepicker._getInst(event.target),
tp_inst = $.datepicker._get(inst, 'timepicker');
if (tp_inst) {
if ($.datepicker._get(inst, 'constrainInput')) {
var ampm = tp_inst.support.ampm,
tz = tp_inst._defaults.showTimezone !== null ? tp_inst._defaults.showTimezone : tp_inst.support.timezone,
dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),
datetimeChars = tp_inst._defaults.timeFormat.toString()
.replace(/[hms]/g, '')
.replace(/TT/g, ampm ? 'APM' : '')
.replace(/Tt/g, ampm ? 'AaPpMm' : '')
.replace(/tT/g, ampm ? 'AaPpMm' : '')
.replace(/T/g, ampm ? 'AP' : '')
.replace(/tt/g, ampm ? 'apm' : '')
.replace(/t/g, ampm ? 'ap' : '') +
" " + tp_inst._defaults.separator +
tp_inst._defaults.timeSuffix +
(tz ? tp_inst._defaults.timezoneList.join('') : '') +
(tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +
dateChars,
chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);
return event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);
}
}
return $.datepicker._base_doKeyPress(event);
};
/*
* Fourth bad hack :/ override _updateAlternate function used in inline mode to init altField
* Update any alternate field to synchronise with the main field.
*/
$.datepicker._base_updateAlternate = $.datepicker._updateAlternate;
$.datepicker._updateAlternate = function (inst) {
var tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
var altField = tp_inst._defaults.altField;
if (altField) { // update alternate field too
var altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat,
date = this._getDate(inst),
formatCfg = $.datepicker._getFormatConfig(inst),
altFormattedDateTime = '',
altSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator,
altTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix,
altTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;
altFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;
if (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly && date !== null) {
if (tp_inst._defaults.altFormat) {
altFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, date, formatCfg) + altSeparator + altFormattedDateTime;
}
else {
altFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime;
}
}
$(altField).val(altFormattedDateTime);
}
}
else {
$.datepicker._base_updateAlternate(inst);
}
};
/*
* Override key up event to sync manual input changes.
*/
$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;
$.datepicker._doKeyUp = function (event) {
var inst = $.datepicker._getInst(event.target),
tp_inst = $.datepicker._get(inst, 'timepicker');
if (tp_inst) {
if (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {
try {
$.datepicker._updateDatepicker(inst);
} catch (err) {
$.timepicker.log(err);
}
}
}
return $.datepicker._base_doKeyUp(event);
};
/*
* override "Today" button to also grab the time.
*/
$.datepicker._base_gotoToday = $.datepicker._gotoToday;
$.datepicker._gotoToday = function (id) {
var inst = this._getInst($(id)[0]),
$dp = inst.dpDiv;
this._base_gotoToday(id);
var tp_inst = this._get(inst, 'timepicker');
selectLocalTimezone(tp_inst);
var now = new Date();
this._setTime(inst, now);
$('.ui-datepicker-today', $dp).click();
};
/*
* Disable & enable the Time in the datetimepicker
*/
$.datepicker._disableTimepickerDatepicker = function (target) {
var inst = this._getInst(target);
if (!inst) {
return;
}
var tp_inst = this._get(inst, 'timepicker');
$(target).datepicker('getDate'); // Init selected[Year|Month|Day]
if (tp_inst) {
inst.settings.showTimepicker = false;
tp_inst._defaults.showTimepicker = false;
tp_inst._updateDateTime(inst);
}
};
$.datepicker._enableTimepickerDatepicker = function (target) {
var inst = this._getInst(target);
if (!inst) {
return;
}
var tp_inst = this._get(inst, 'timepicker');
$(target).datepicker('getDate'); // Init selected[Year|Month|Day]
if (tp_inst) {
inst.settings.showTimepicker = true;
tp_inst._defaults.showTimepicker = true;
tp_inst._addTimePicker(inst); // Could be disabled on page load
tp_inst._updateDateTime(inst);
}
};
/*
* Create our own set time function
*/
$.datepicker._setTime = function (inst, date) {
var tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
var defaults = tp_inst._defaults;
// calling _setTime with no date sets time to defaults
tp_inst.hour = date ? date.getHours() : defaults.hour;
tp_inst.minute = date ? date.getMinutes() : defaults.minute;
tp_inst.second = date ? date.getSeconds() : defaults.second;
tp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;
tp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;
//check if within min/max times..
tp_inst._limitMinMaxDateTime(inst, true);
tp_inst._onTimeChange();
tp_inst._updateDateTime(inst);
}
};
/*
* Create new public method to set only time, callable as $().datepicker('setTime', date)
*/
$.datepicker._setTimeDatepicker = function (target, date, withDate) {
var inst = this._getInst(target);
if (!inst) {
return;
}
var tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
this._setDateFromField(inst);
var tp_date;
if (date) {
if (typeof date === "string") {
tp_inst._parseTime(date, withDate);
tp_date = new Date();
tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
tp_date.setMicroseconds(tp_inst.microsec);
} else {
tp_date = new Date(date.getTime());
tp_date.setMicroseconds(date.getMicroseconds());
}
if (tp_date.toString() === 'Invalid Date') {
tp_date = undefined;
}
this._setTime(inst, tp_date);
}
}
};
/*
* override setDate() to allow setting time too within Date object
*/
$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;
$.datepicker._setDateDatepicker = function (target, date) {
var inst = this._getInst(target);
if (!inst) {
return;
}
if (typeof(date) === 'string') {
date = new Date(date);
if (!date.getTime()) {
$.timepicker.log("Error creating Date object from string.");
}
}
var tp_inst = this._get(inst, 'timepicker');
var tp_date;
if (date instanceof Date) {
tp_date = new Date(date.getTime());
tp_date.setMicroseconds(date.getMicroseconds());
} else {
tp_date = date;
}
// This is important if you are using the timezone option, javascript's Date
// object will only return the timezone offset for the current locale, so we
// adjust it accordingly. If not using timezone option this won't matter..
// If a timezone is different in tp, keep the timezone as is
if (tp_inst) {
// look out for DST if tz wasn't specified
if (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {
tp_inst.timezone = tp_date.getTimezoneOffset() * -1;
}
date = $.timepicker.timezoneAdjust(date, tp_inst.timezone);
tp_date = $.timepicker.timezoneAdjust(tp_date, tp_inst.timezone);
}
this._updateDatepicker(inst);
this._base_setDateDatepicker.apply(this, arguments);
this._setTimeDatepicker(target, tp_date, true);
};
/*
* override getDate() to allow getting time too within Date object
*/
$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;
$.datepicker._getDateDatepicker = function (target, noDefault) {
var inst = this._getInst(target);
if (!inst) {
return;
}
var tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
// if it hasn't yet been defined, grab from field
if (inst.lastVal === undefined) {
this._setDateFromField(inst, noDefault);
}
var date = this._getDate(inst);
if (date && tp_inst._parseTime($(target).val(), tp_inst.timeOnly)) {
date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
date.setMicroseconds(tp_inst.microsec);
// This is important if you are using the timezone option, javascript's Date
// object will only return the timezone offset for the current locale, so we
// adjust it accordingly. If not using timezone option this won't matter..
if (tp_inst.timezone != null) {
// look out for DST if tz wasn't specified
if (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {
tp_inst.timezone = date.getTimezoneOffset() * -1;
}
date = $.timepicker.timezoneAdjust(date, tp_inst.timezone);
}
}
return date;
}
return this._base_getDateDatepicker(target, noDefault);
};
/*
* override parseDate() because UI 1.8.14 throws an error about "Extra characters"
* An option in datapicker to ignore extra format characters would be nicer.
*/
$.datepicker._base_parseDate = $.datepicker.parseDate;
$.datepicker.parseDate = function (format, value, settings) {
var date;
try {
date = this._base_parseDate(format, value, settings);
} catch (err) {
// Hack! The error message ends with a colon, a space, and
// the "extra" characters. We rely on that instead of
// attempting to perfectly reproduce the parsing algorithm.
if (err.indexOf(":") >= 0) {
date = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(':') - 2)), settings);
$.timepicker.log("Error parsing the date string: " + err + "\ndate string = " + value + "\ndate format = " + format);
} else {
throw err;
}
}
return date;
};
/*
* override formatDate to set date with time to the input
*/
$.datepicker._base_formatDate = $.datepicker._formatDate;
$.datepicker._formatDate = function (inst, day, month, year) {
var tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
tp_inst._updateDateTime(inst);
return tp_inst.$input.val();
}
return this._base_formatDate(inst);
};
/*
* override options setter to add time to maxDate(Time) and minDate(Time). MaxDate
*/
$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;
$.datepicker._optionDatepicker = function (target, name, value) {
var inst = this._getInst(target),
name_clone;
if (!inst) {
return null;
}
var tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
var min = null,
max = null,
onselect = null,
overrides = tp_inst._defaults.evnts,
fns = {},
prop;
if (typeof name === 'string') { // if min/max was set with the string
if (name === 'minDate' || name === 'minDateTime') {
min = value;
} else if (name === 'maxDate' || name === 'maxDateTime') {
max = value;
} else if (name === 'onSelect') {
onselect = value;
} else if (overrides.hasOwnProperty(name)) {
if (typeof (value) === 'undefined') {
return overrides[name];
}
fns[name] = value;
name_clone = {}; //empty results in exiting function after overrides updated
}
} else if (typeof name === 'object') { //if min/max was set with the JSON
if (name.minDate) {
min = name.minDate;
} else if (name.minDateTime) {
min = name.minDateTime;
} else if (name.maxDate) {
max = name.maxDate;
} else if (name.maxDateTime) {
max = name.maxDateTime;
}
for (prop in overrides) {
if (overrides.hasOwnProperty(prop) && name[prop]) {
fns[prop] = name[prop];
}
}
}
for (prop in fns) {
if (fns.hasOwnProperty(prop)) {
overrides[prop] = fns[prop];
if (!name_clone) {
name_clone = $.extend({}, name);
}
delete name_clone[prop];
}
}
if (name_clone && isEmptyObject(name_clone)) {
return;
}
if (min) { //if min was set
if (min === 0) {
min = new Date();
} else {
min = new Date(min);
}
tp_inst._defaults.minDate = min;
tp_inst._defaults.minDateTime = min;
} else if (max) { //if max was set
if (max === 0) {
max = new Date();
} else {
max = new Date(max);
}
tp_inst._defaults.maxDate = max;
tp_inst._defaults.maxDateTime = max;
} else if (onselect) {
tp_inst._defaults.onSelect = onselect;
}
}
if (value === undefined) {
return this._base_optionDatepicker.call($.datepicker, target, name);
}
return this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);
};
/*
* jQuery isEmptyObject does not check hasOwnProperty - if someone has added to the object prototype,
* it will return false for all objects
*/
var isEmptyObject = function (obj) {
var prop;
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
return false;
}
}
return true;
};
/*
* jQuery extend now ignores nulls!
*/
var extendRemove = function (target, props) {
$.extend(target, props);
for (var name in props) {
if (props[name] === null || props[name] === undefined) {
target[name] = props[name];
}
}
return target;
};
/*
* Determine by the time format which units are supported
* Returns an object of booleans for each unit
*/
var detectSupport = function (timeFormat) {
var tf = timeFormat.replace(/'.*?'/g, '').toLowerCase(), // removes literals
isIn = function (f, t) { // does the format contain the token?
return f.indexOf(t) !== -1 ? true : false;
};
return {
hour: isIn(tf, 'h'),
minute: isIn(tf, 'm'),
second: isIn(tf, 's'),
millisec: isIn(tf, 'l'),
microsec: isIn(tf, 'c'),
timezone: isIn(tf, 'z'),
ampm: isIn(tf, 't') && isIn(timeFormat, 'h'),
iso8601: isIn(timeFormat, 'Z')
};
};
/*
* Converts 24 hour format into 12 hour
* Returns 12 hour without leading 0
*/
var convert24to12 = function (hour) {
hour %= 12;
if (hour === 0) {
hour = 12;
}
return String(hour);
};
var computeEffectiveSetting = function (settings, property) {
return settings && settings[property] ? settings[property] : $.timepicker._defaults[property];
};
/*
* Splits datetime string into date and time substrings.
* Throws exception when date can't be parsed
* Returns {dateString: dateString, timeString: timeString}
*/
var splitDateTime = function (dateTimeString, timeSettings) {
// The idea is to get the number separator occurrences in datetime and the time format requested (since time has
// fewer unknowns, mostly numbers and am/pm). We will use the time pattern to split.
var separator = computeEffectiveSetting(timeSettings, 'separator'),
format = computeEffectiveSetting(timeSettings, 'timeFormat'),
timeParts = format.split(separator), // how many occurrences of separator may be in our format?
timePartsLen = timeParts.length,
allParts = dateTimeString.split(separator),
allPartsLen = allParts.length;
if (allPartsLen > 1) {
return {
dateString: allParts.splice(0, allPartsLen - timePartsLen).join(separator),
timeString: allParts.splice(0, timePartsLen).join(separator)
};
}
return {
dateString: dateTimeString,
timeString: ''
};
};
/*
* Internal function to parse datetime interval
* Returns: {date: Date, timeObj: Object}, where
* date - parsed date without time (type Date)
* timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional
*/
var parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {
var date,
parts,
parsedTime;
parts = splitDateTime(dateTimeString, timeSettings);
date = $.datepicker._base_parseDate(dateFormat, parts.dateString, dateSettings);
if (parts.timeString === '') {
return {
date: date
};
}
parsedTime = $.datepicker.parseTime(timeFormat, parts.timeString, timeSettings);
if (!parsedTime) {
throw 'Wrong time format';
}
return {
date: date,
timeObj: parsedTime
};
};
/*
* Internal function to set timezone_select to the local timezone
*/
var selectLocalTimezone = function (tp_inst, date) {
if (tp_inst && tp_inst.timezone_select) {
var now = date || new Date();
tp_inst.timezone_select.val(-now.getTimezoneOffset());
}
};
/*
* Create a Singleton Instance
*/
$.timepicker = new Timepicker();
/**
* Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)
* @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned
* @param {boolean} iso8601 if true formats in accordance to iso8601 "+12:45"
* @return {string}
*/
$.timepicker.timezoneOffsetString = function (tzMinutes, iso8601) {
if (isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes < -720) {
return tzMinutes;
}
var off = tzMinutes,
minutes = off % 60,
hours = (off - minutes) / 60,
iso = iso8601 ? ':' : '',
tz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);
if (tz === '+00:00') {
return 'Z';
}
return tz;
};
/**
* Get the number in minutes that represents a timezone string
* @param {string} tzString formatted like "+0500", "-1245", "Z"
* @return {number} the offset minutes or the original string if it doesn't match expectations
*/
$.timepicker.timezoneOffsetNumber = function (tzString) {
var normalized = tzString.toString().replace(':', ''); // excuse any iso8601, end up with "+1245"
if (normalized.toUpperCase() === 'Z') { // if iso8601 with Z, its 0 minute offset
return 0;
}
if (!/^(\-|\+)\d{4}$/.test(normalized)) { // possibly a user defined tz, so just give it back
return tzString;
}
return ((normalized.substr(0, 1) === '-' ? -1 : 1) * // plus or minus
((parseInt(normalized.substr(1, 2), 10) * 60) + // hours (converted to minutes)
parseInt(normalized.substr(3, 2), 10))); // minutes
};
/**
* No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)
* @param {Date} date
* @param {string} toTimezone formatted like "+0500", "-1245"
* @return {Date}
*/
$.timepicker.timezoneAdjust = function (date, toTimezone) {
var toTz = $.timepicker.timezoneOffsetNumber(toTimezone);
if (!isNaN(toTz)) {
date.setMinutes(date.getMinutes() + -date.getTimezoneOffset() - toTz);
}
return date;
};
/**
* Calls `timepicker()` on the `startTime` and `endTime` elements, and configures them to
* enforce date range limits.
* n.b. The input value must be correctly formatted (reformatting is not supported)
* @param {Element} startTime
* @param {Element} endTime
* @param {Object} options Options for the timepicker() call
* @return {jQuery}
*/
$.timepicker.timeRange = function (startTime, endTime, options) {
return $.timepicker.handleRange('timepicker', startTime, endTime, options);
};
/**
* Calls `datetimepicker` on the `startTime` and `endTime` elements, and configures them to
* enforce date range limits.
* @param {Element} startTime
* @param {Element} endTime
* @param {Object} options Options for the `timepicker()` call. Also supports `reformat`,
* a boolean value that can be used to reformat the input values to the `dateFormat`.
* @param {string} method Can be used to specify the type of picker to be added
* @return {jQuery}
*/
$.timepicker.datetimeRange = function (startTime, endTime, options) {
$.timepicker.handleRange('datetimepicker', startTime, endTime, options);
};
/**
* Calls `datepicker` on the `startTime` and `endTime` elements, and configures them to
* enforce date range limits.
* @param {Element} startTime
* @param {Element} endTime
* @param {Object} options Options for the `timepicker()` call. Also supports `reformat`,
* a boolean value that can be used to reformat the input values to the `dateFormat`.
* @return {jQuery}
*/
$.timepicker.dateRange = function (startTime, endTime, options) {
$.timepicker.handleRange('datepicker', startTime, endTime, options);
};
/**
* Calls `method` on the `startTime` and `endTime` elements, and configures them to
* enforce date range limits.
* @param {string} method Can be used to specify the type of picker to be added
* @param {Element} startTime
* @param {Element} endTime
* @param {Object} options Options for the `timepicker()` call. Also supports `reformat`,
* a boolean value that can be used to reformat the input values to the `dateFormat`.
* @return {jQuery}
*/
$.timepicker.handleRange = function (method, startTime, endTime, options) {
options = $.extend({}, {
minInterval: 0, // min allowed interval in milliseconds
maxInterval: 0, // max allowed interval in milliseconds
start: {}, // options for start picker
end: {} // options for end picker
}, options);
function checkDates(changed, other) {
var startdt = startTime[method]('getDate'),
enddt = endTime[method]('getDate'),
changeddt = changed[method]('getDate');
if (startdt !== null) {
var minDate = new Date(startdt.getTime()),
maxDate = new Date(startdt.getTime());
minDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);
maxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);
if (options.minInterval > 0 && minDate > enddt) { // minInterval check
endTime[method]('setDate', minDate);
}
else if (options.maxInterval > 0 && maxDate < enddt) { // max interval check
endTime[method]('setDate', maxDate);
}
else if (startdt > enddt) {
other[method]('setDate', changeddt);
}
}
}
function selected(changed, other, option) {
if (!changed.val()) {
return;
}
var date = changed[method].call(changed, 'getDate');
if (date !== null && options.minInterval > 0) {
if (option === 'minDate') {
date.setMilliseconds(date.getMilliseconds() + options.minInterval);
}
if (option === 'maxDate') {
date.setMilliseconds(date.getMilliseconds() - options.minInterval);
}
}
if (date.getTime) {
other[method].call(other, 'option', option, date);
}
}
$.fn[method].call(startTime, $.extend({
onClose: function (dateText, inst) {
checkDates($(this), endTime);
},
onSelect: function (selectedDateTime) {
selected($(this), endTime, 'minDate');
}
}, options, options.start));
$.fn[method].call(endTime, $.extend({
onClose: function (dateText, inst) {
checkDates($(this), startTime);
},
onSelect: function (selectedDateTime) {
selected($(this), startTime, 'maxDate');
}
}, options, options.end));
checkDates(startTime, endTime);
selected(startTime, endTime, 'minDate');
selected(endTime, startTime, 'maxDate');
return $([startTime.get(0), endTime.get(0)]);
};
/**
* Log error or data to the console during error or debugging
* @param {Object} err pass any type object to log to the console during error or debugging
* @return {void}
*/
$.timepicker.log = function (err) {
if (window.console) {
window.console.log(err);
}
};
/*
* Add util object to allow access to private methods for testability.
*/
$.timepicker._util = {
_extendRemove: extendRemove,
_isEmptyObject: isEmptyObject,
_convert24to12: convert24to12,
_detectSupport: detectSupport,
_selectLocalTimezone: selectLocalTimezone,
_computeEffectiveSetting: computeEffectiveSetting,
_splitDateTime: splitDateTime,
_parseDateTimeInternal: parseDateTimeInternal
};
/*
* Microsecond support
*/
if (!Date.prototype.getMicroseconds) {
Date.prototype.microseconds = 0;
Date.prototype.getMicroseconds = function () {
return this.microseconds;
};
Date.prototype.setMicroseconds = function (m) {
this.setMilliseconds(this.getMilliseconds() + Math.floor(m / 1000));
this.microseconds = m % 1000;
return this;
};
}
/*
* Keep up with the version
*/
$.timepicker.version = "1.4.2";
})(jQuery);
// Released under MIT license
// Copyright (c) 2009-2010 Dominic Baggott
// Copyright (c) 2009-2010 Ash Berlin
// Copyright (c) 2011 Christoph Dorn <christoph@christophdorn.com> (http://www.christophdorn.com)
(function (expose) {
/**
* class Markdown
*
* Markdown processing in Javascript done right. We have very particular views
* on what constitutes 'right' which include:
*
* - produces well-formed HTML (this means that em and strong nesting is
* important)
*
* - has an intermediate representation to allow processing of parsed data (We
* in fact have two, both as [JsonML]: a markdown tree and an HTML tree).
*
* - is easily extensible to add new dialects without having to rewrite the
* entire parsing mechanics
*
* - has a good test suite
*
* This implementation fulfills all of these (except that the test suite could
* do with expanding to automatically run all the fixtures from other Markdown
* implementations.)
*
* ##### Intermediate Representation
*
* *TODO* Talk about this :) Its JsonML, but document the node names we use.
*
* [JsonML]: http://jsonml.org/ "JSON Markup Language"
**/
var Markdown = expose.Markdown = function Markdown(dialect) {
switch (typeof dialect) {
case "undefined":
this.dialect = Markdown.dialects.Gruber;
break;
case "object":
this.dialect = dialect;
break;
default:
if (dialect in Markdown.dialects) {
this.dialect = Markdown.dialects[dialect];
}
else {
throw new Error("Unknown Markdown dialect '" + String(dialect) + "'");
}
break;
}
this.em_state = [];
this.strong_state = [];
this.debug_indent = "";
};
/**
* parse( markdown, [dialect] ) -> JsonML
* - markdown (String): markdown string to parse
* - dialect (String | Dialect): the dialect to use, defaults to gruber
*
* Parse `markdown` and return a markdown document as a Markdown.JsonML tree.
**/
expose.parse = function (source, dialect) {
// dialect will default if undefined
var md = new Markdown(dialect);
return md.toTree(source);
};
/**
* toHTML( markdown, [dialect] ) -> String
* toHTML( md_tree ) -> String
* - markdown (String): markdown string to parse
* - md_tree (Markdown.JsonML): parsed markdown tree
*
* Take markdown (either as a string or as a JsonML tree) and run it through
* [[toHTMLTree]] then turn it into a well-formated HTML fragment.
**/
expose.toHTML = function toHTML(source, dialect, options) {
var input = expose.toHTMLTree(source, dialect, options);
return expose.renderJsonML(input);
};
/**
* toHTMLTree( markdown, [dialect] ) -> JsonML
* toHTMLTree( md_tree ) -> JsonML
* - markdown (String): markdown string to parse
* - dialect (String | Dialect): the dialect to use, defaults to gruber
* - md_tree (Markdown.JsonML): parsed markdown tree
*
* Turn markdown into HTML, represented as a JsonML tree. If a string is given
* to this function, it is first parsed into a markdown tree by calling
* [[parse]].
**/
expose.toHTMLTree = function toHTMLTree(input, dialect, options) {
// convert string input to an MD tree
if (typeof input === "string") input = this.parse(input, dialect);
// Now convert the MD tree to an HTML tree
// remove references from the tree
var attrs = extract_attr(input),
refs = {};
if (attrs && attrs.references) {
refs = attrs.references;
}
var html = convert_tree_to_html(input, refs, options);
merge_text_nodes(html);
return html;
};
// For Spidermonkey based engines
function mk_block_toSource() {
return "Markdown.mk_block( " +
uneval(this.toString()) +
", " +
uneval(this.trailing) +
", " +
uneval(this.lineNumber) +
" )";
}
// node
function mk_block_inspect() {
var util = require('util');
return "Markdown.mk_block( " +
util.inspect(this.toString()) +
", " +
util.inspect(this.trailing) +
", " +
util.inspect(this.lineNumber) +
" )";
}
var mk_block = Markdown.mk_block = function (block, trail, line) {
// Be helpful for default case in tests.
if (arguments.length == 1) trail = "\n\n";
var s = new String(block);
s.trailing = trail;
// To make it clear its not just a string
s.inspect = mk_block_inspect;
s.toSource = mk_block_toSource;
if (line != undefined)
s.lineNumber = line;
return s;
};
function count_lines(str) {
var n = 0, i = -1;
while ((i = str.indexOf('\n', i + 1)) !== -1) n++;
return n;
}
// Internal - split source into rough blocks
Markdown.prototype.split_blocks = function splitBlocks(input, startLine) {
// [\s\S] matches _anything_ (newline or space)
var re = /([\s\S]+?)($|\n(?:\s*\n|$)+)/g,
blocks = [],
m;
var line_no = 1;
if ((m = /^(\s*\n)/.exec(input)) != null) {
// skip (but count) leading blank lines
line_no += count_lines(m[0]);
re.lastIndex = m[0].length;
}
while ((m = re.exec(input)) !== null) {
blocks.push(mk_block(m[1], m[2], line_no));
line_no += count_lines(m[0]);
}
return blocks;
};
/**
* Markdown#processBlock( block, next ) -> undefined | [ JsonML, ... ]
* - block (String): the block to process
* - next (Array): the following blocks
*
* Process `block` and return an array of JsonML nodes representing `block`.
*
* It does this by asking each block level function in the dialect to process
* the block until one can. Succesful handling is indicated by returning an
* array (with zero or more JsonML nodes), failure by a false value.
*
* Blocks handlers are responsible for calling [[Markdown#processInline]]
* themselves as appropriate.
*
* If the blocks were split incorrectly or adjacent blocks need collapsing you
* can adjust `next` in place using shift/splice etc.
*
* If any of this default behaviour is not right for the dialect, you can
* define a `__call__` method on the dialect that will get invoked to handle
* the block processing.
*/
Markdown.prototype.processBlock = function processBlock(block, next) {
var cbs = this.dialect.block,
ord = cbs.__order__;
if ("__call__" in cbs) {
return cbs.__call__.call(this, block, next);
}
for (var i = 0; i < ord.length; i++) {
//D:this.debug( "Testing", ord[i] );
var res = cbs[ord[i]].call(this, block, next);
if (res) {
//D:this.debug(" matched");
if (!isArray(res) || (res.length > 0 && !(isArray(res[0]))))
this.debug(ord[i], "didn't return a proper array");
//D:this.debug( "" );
return res;
}
}
// Uhoh! no match! Should we throw an error?
return [];
};
Markdown.prototype.processInline = function processInline(block) {
return this.dialect.inline.__call__.call(this, String(block));
};
/**
* Markdown#toTree( source ) -> JsonML
* - source (String): markdown source to parse
*
* Parse `source` into a JsonML tree representing the markdown document.
**/
// custom_tree means set this.tree to `custom_tree` and restore old value on return
Markdown.prototype.toTree = function toTree(source, custom_root) {
var blocks = source instanceof Array ? source : this.split_blocks(source);
// Make tree a member variable so its easier to mess with in extensions
var old_tree = this.tree;
try {
this.tree = custom_root || this.tree || ["markdown"];
blocks:
while (blocks.length) {
var b = this.processBlock(blocks.shift(), blocks);
// Reference blocks and the like won't return any content
if (!b.length) continue blocks;
this.tree.push.apply(this.tree, b);
}
return this.tree;
}
finally {
if (custom_root) {
this.tree = old_tree;
}
}
};
// Noop by default
Markdown.prototype.debug = function () {
var args = Array.prototype.slice.call(arguments);
args.unshift(this.debug_indent);
if (typeof print !== "undefined")
print.apply(print, args);
if (typeof console !== "undefined" && typeof console.log !== "undefined")
console.log.apply(null, args);
}
Markdown.prototype.loop_re_over_block = function (re, block, cb) {
// Dont use /g regexps with this
var m,
b = block.valueOf();
while (b.length && (m = re.exec(b)) != null) {
b = b.substr(m[0].length);
cb.call(this, m);
}
return b;
};
/**
* Markdown.dialects
*
* Namespace of built-in dialects.
**/
Markdown.dialects = {};
/**
* Markdown.dialects.Gruber
*
* The default dialect that follows the rules set out by John Gruber's
* markdown.pl as closely as possible. Well actually we follow the behaviour of
* that script which in some places is not exactly what the syntax web page
* says.
**/
Markdown.dialects.Gruber = {
block: {
atxHeader: function atxHeader(block, next) {
var m = block.match(/^(#{1,6})\s*(.*?)\s*#*\s*(?:\n|$)/);
if (!m) return undefined;
var header = ["header", {level: m[1].length}];
Array.prototype.push.apply(header, this.processInline(m[2]));
if (m[0].length < block.length)
next.unshift(mk_block(block.substr(m[0].length), block.trailing, block.lineNumber + 2));
return [header];
},
setextHeader: function setextHeader(block, next) {
var m = block.match(/^(.*)\n([-=])\2\2+(?:\n|$)/);
if (!m) return undefined;
var level = (m[2] === "=") ? 1 : 2;
var header = ["header", {level: level}, m[1]];
if (m[0].length < block.length)
next.unshift(mk_block(block.substr(m[0].length), block.trailing, block.lineNumber + 2));
return [header];
},
code: function code(block, next) {
// | Foo
// |bar
// should be a code block followed by a paragraph. Fun
//
// There might also be adjacent code block to merge.
var ret = [],
re = /^(?: {0,3}\t| {4})(.*)\n?/,
lines;
// 4 spaces + content
if (!block.match(re)) return undefined;
block_search:
do {
// Now pull out the rest of the lines
var b = this.loop_re_over_block(
re, block.valueOf(), function (m) {
ret.push(m[1]);
});
if (b.length) {
// Case alluded to in first comment. push it back on as a new block
next.unshift(mk_block(b, block.trailing));
break block_search;
}
else if (next.length) {
// Check the next block - it might be code too
if (!next[0].match(re)) break block_search;
// Pull how how many blanks lines follow - minus two to account for .join
ret.push(block.trailing.replace(/[^\n]/g, '').substring(2));
block = next.shift();
}
else {
break block_search;
}
} while (true);
return [["code_block", ret.join("\n")]];
},
horizRule: function horizRule(block, next) {
// this needs to find any hr in the block to handle abutting blocks
var m = block.match(/^(?:([\s\S]*?)\n)?[ \t]*([-_*])(?:[ \t]*\2){2,}[ \t]*(?:\n([\s\S]*))?$/);
if (!m) {
return undefined;
}
var jsonml = [["hr"]];
// if there's a leading abutting block, process it
if (m[1]) {
jsonml.unshift.apply(jsonml, this.processBlock(m[1], []));
}
// if there's a trailing abutting block, stick it into next
if (m[3]) {
next.unshift(mk_block(m[3]));
}
return jsonml;
},
// There are two types of lists. Tight and loose. Tight lists have no whitespace
// between the items (and result in text just in the <li>) and loose lists,
// which have an empty line between list items, resulting in (one or more)
// paragraphs inside the <li>.
//
// There are all sorts weird edge cases about the original markdown.pl's
// handling of lists:
//
// * Nested lists are supposed to be indented by four chars per level. But
// if they aren't, you can get a nested list by indenting by less than
// four so long as the indent doesn't match an indent of an existing list
// item in the 'nest stack'.
//
// * The type of the list (bullet or number) is controlled just by the
// first item at the indent. Subsequent changes are ignored unless they
// are for nested lists
//
lists: (function () {
// Use a closure to hide a few variables.
var any_list = "[*+-]|\\d+\\.",
bullet_list = /[*+-]/,
number_list = /\d+\./,
// Capture leading indent as it matters for determining nested lists.
is_list_re = new RegExp("^( {0,3})(" + any_list + ")[ \t]+"),
indent_re = "(?: {0,3}\\t| {4})";
// TODO: Cache this regexp for certain depths.
// Create a regexp suitable for matching an li for a given stack depth
function regex_for_depth(depth) {
return new RegExp(
// m[1] = indent, m[2] = list_type
"(?:^(" + indent_re + "{0," + depth + "} {0,3})(" + any_list + ")\\s+)|" +
// m[3] = cont
"(^" + indent_re + "{0," + (depth - 1) + "}[ ]{0,4})"
);
}
function expand_tab(input) {
return input.replace(/ {0,3}\t/g, " ");
}
// Add inline content `inline` to `li`. inline comes from processInline
// so is an array of content
function add(li, loose, inline, nl) {
if (loose) {
li.push(["para"].concat(inline));
return;
}
// Hmmm, should this be any block level element or just paras?
var add_to = li[li.length - 1] instanceof Array && li[li.length - 1][0] == "para"
? li[li.length - 1]
: li;
// If there is already some content in this list, add the new line in
if (nl && li.length > 1) inline.unshift(nl);
for (var i = 0; i < inline.length; i++) {
var what = inline[i],
is_str = typeof what == "string";
if (is_str && add_to.length > 1 && typeof add_to[add_to.length - 1] == "string") {
add_to[add_to.length - 1] += what;
}
else {
add_to.push(what);
}
}
}
// contained means have an indent greater than the current one. On
// *every* line in the block
function get_contained_blocks(depth, blocks) {
var re = new RegExp("^(" + indent_re + "{" + depth + "}.*?\\n?)*$"),
replace = new RegExp("^" + indent_re + "{" + depth + "}", "gm"),
ret = [];
while (blocks.length > 0) {
if (re.exec(blocks[0])) {
var b = blocks.shift(),
// Now remove that indent
x = b.replace(replace, "");
ret.push(mk_block(x, b.trailing, b.lineNumber));
}
break;
}
return ret;
}
// passed to stack.forEach to turn list items up the stack into paras
function paragraphify(s, i, stack) {
var list = s.list;
var last_li = list[list.length - 1];
if (last_li[1] instanceof Array && last_li[1][0] == "para") {
return;
}
if (i + 1 == stack.length) {
// Last stack frame
// Keep the same array, but replace the contents
last_li.push(["para"].concat(last_li.splice(1)));
}
else {
var sublist = last_li.pop();
last_li.push(["para"].concat(last_li.splice(1)), sublist);
}
}
// The matcher function
return function (block, next) {
var m = block.match(is_list_re);
if (!m) return undefined;
function make_list(m) {
var list = bullet_list.exec(m[2])
? ["bulletlist"]
: ["numberlist"];
stack.push({list: list, indent: m[1]});
return list;
}
var stack = [], // Stack of lists for nesting.
list = make_list(m),
last_li,
loose = false,
ret = [stack[0].list],
i;
// Loop to search over block looking for inner block elements and loose lists
loose_search:
while (true) {
// Split into lines preserving new lines at end of line
var lines = block.split(/(?=\n)/);
// We have to grab all lines for a li and call processInline on them
// once as there are some inline things that can span lines.
var li_accumulate = "";
// Loop over the lines in this block looking for tight lists.
tight_search:
for (var line_no = 0; line_no < lines.length; line_no++) {
var nl = "",
l = lines[line_no].replace(/^\n/, function (n) {
nl = n;
return "";
});
// TODO: really should cache this
var line_re = regex_for_depth(stack.length);
m = l.match(line_re);
//print( "line:", uneval(l), "\nline match:", uneval(m) );
// We have a list item
if (m[1] !== undefined) {
// Process the previous list item, if any
if (li_accumulate.length) {
add(last_li, loose, this.processInline(li_accumulate), nl);
// Loose mode will have been dealt with. Reset it
loose = false;
li_accumulate = "";
}
m[1] = expand_tab(m[1]);
var wanted_depth = Math.floor(m[1].length / 4) + 1;
//print( "want:", wanted_depth, "stack:", stack.length);
if (wanted_depth > stack.length) {
// Deep enough for a nested list outright
//print ( "new nested list" );
list = make_list(m);
last_li.push(list);
last_li = list[1] = ["listitem"];
}
else {
// We aren't deep enough to be strictly a new level. This is
// where Md.pl goes nuts. If the indent matches a level in the
// stack, put it there, else put it one deeper then the
// wanted_depth deserves.
var found = false;
for (i = 0; i < stack.length; i++) {
if (stack[i].indent != m[1]) continue;
list = stack[i].list;
stack.splice(i + 1);
found = true;
break;
}
if (!found) {
//print("not found. l:", uneval(l));
wanted_depth++;
if (wanted_depth <= stack.length) {
stack.splice(wanted_depth);
//print("Desired depth now", wanted_depth, "stack:", stack.length);
list = stack[wanted_depth - 1].list;
//print("list:", uneval(list) );
}
else {
//print ("made new stack for messy indent");
list = make_list(m);
last_li.push(list);
}
}
//print( uneval(list), "last", list === stack[stack.length-1].list );
last_li = ["listitem"];
list.push(last_li);
} // end depth of shenegains
nl = "";
}
// Add content
if (l.length > m[0].length) {
li_accumulate += nl + l.substr(m[0].length);
}
} // tight_search
if (li_accumulate.length) {
add(last_li, loose, this.processInline(li_accumulate), nl);
// Loose mode will have been dealt with. Reset it
loose = false;
li_accumulate = "";
}
// Look at the next block - we might have a loose list. Or an extra
// paragraph for the current li
var contained = get_contained_blocks(stack.length, next);
// Deal with code blocks or properly nested lists
if (contained.length > 0) {
// Make sure all listitems up the stack are paragraphs
forEach(stack, paragraphify, this);
last_li.push.apply(last_li, this.toTree(contained, []));
}
var next_block = next[0] && next[0].valueOf() || "";
if (next_block.match(is_list_re) || next_block.match(/^ /)) {
block = next.shift();
// Check for an HR following a list: features/lists/hr_abutting
var hr = this.dialect.block.horizRule(block, next);
if (hr) {
ret.push.apply(ret, hr);
break;
}
// Make sure all listitems up the stack are paragraphs
forEach(stack, paragraphify, this);
loose = true;
continue loose_search;
}
break;
} // loose_search
return ret;
};
})(),
blockquote: function blockquote(block, next) {
if (!block.match(/^>/m))
return undefined;
var jsonml = [];
// separate out the leading abutting block, if any
if (block[0] != ">") {
var lines = block.split(/\n/),
prev = [];
// keep shifting lines until you find a crotchet
while (lines.length && lines[0][0] != ">") {
prev.push(lines.shift());
}
// reassemble!
block = lines.join("\n");
jsonml.push.apply(jsonml, this.processBlock(prev.join("\n"), []));
}
// if the next block is also a blockquote merge it in
while (next.length && next[0][0] == ">") {
var b = next.shift();
block = new String(block + block.trailing + b);
block.trailing = b.trailing;
}
// Strip off the leading "> " and re-process as a block.
var input = block.replace(/^> ?/gm, ''),
old_tree = this.tree;
jsonml.push(this.toTree(input, ["blockquote"]));
return jsonml;
},
referenceDefn: function referenceDefn(block, next) {
var re = /^\s*\[(.*?)\]:\s*(\S+)(?:\s+(?:(['"])(.*?)\3|\((.*?)\)))?\n?/;
// interesting matches are [ , ref_id, url, , title, title ]
if (!block.match(re))
return undefined;
// make an attribute node if it doesn't exist
if (!extract_attr(this.tree)) {
this.tree.splice(1, 0, {});
}
var attrs = extract_attr(this.tree);
// make a references hash if it doesn't exist
if (attrs.references === undefined) {
attrs.references = {};
}
var b = this.loop_re_over_block(re, block, function (m) {
if (m[2] && m[2][0] == '<' && m[2][m[2].length - 1] == '>')
m[2] = m[2].substring(1, m[2].length - 1);
var ref = attrs.references[m[1].toLowerCase()] = {
href: m[2]
};
if (m[4] !== undefined)
ref.title = m[4];
else if (m[5] !== undefined)
ref.title = m[5];
});
if (b.length)
next.unshift(mk_block(b, block.trailing));
return [];
},
para: function para(block, next) {
// everything's a para!
return [["para"].concat(this.processInline(block))];
}
}
};
Markdown.dialects.Gruber.inline = {
__oneElement__: function oneElement(text, patterns_or_re, previous_nodes) {
var m,
res,
lastIndex = 0;
patterns_or_re = patterns_or_re || this.dialect.inline.__patterns__;
var re = new RegExp("([\\s\\S]*?)(" + (patterns_or_re.source || patterns_or_re) + ")");
m = re.exec(text);
if (!m) {
// Just boring text
return [text.length, text];
}
else if (m[1]) {
// Some un-interesting text matched. Return that first
return [m[1].length, m[1]];
}
var res;
if (m[2] in this.dialect.inline) {
res = this.dialect.inline[m[2]].call(
this,
text.substr(m.index), m, previous_nodes || []);
}
// Default for now to make dev easier. just slurp special and output it.
res = res || [m[2].length, m[2]];
return res;
},
__call__: function inline(text, patterns) {
var out = [],
res;
function add(x) {
//D:self.debug(" adding output", uneval(x));
if (typeof x == "string" && typeof out[out.length - 1] == "string")
out[out.length - 1] += x;
else
out.push(x);
}
while (text.length > 0) {
res = this.dialect.inline.__oneElement__.call(this, text, patterns, out);
text = text.substr(res.shift());
forEach(res, add)
}
return out;
},
// These characters are intersting elsewhere, so have rules for them so that
// chunks of plain text blocks don't include them
"]": function () {
},
"}": function () {
},
"\\": function escaped(text) {
// [ length of input processed, node/children to add... ]
// Only esacape: \ ` * _ { } [ ] ( ) # * + - . !
if (text.match(/^\\[\\`\*_{}\[\]()#\+.!\-]/))
return [2, text[1]];
else
// Not an esacpe
return [1, "\\"];
},
"![": function image(text) {
// Unlike images, alt text is plain text only. no other elements are
// allowed in there
// ![Alt text](/path/to/img.jpg "Optional title")
// 1 2 3 4 <--- captures
var m = text.match(/^!\[(.*?)\][ \t]*\([ \t]*(\S*)(?:[ \t]+(["'])(.*?)\3)?[ \t]*\)/);
if (m) {
if (m[2] && m[2][0] == '<' && m[2][m[2].length - 1] == '>')
m[2] = m[2].substring(1, m[2].length - 1);
m[2] = this.dialect.inline.__call__.call(this, m[2], /\\/)[0];
var attrs = {alt: m[1], href: m[2] || ""};
if (m[4] !== undefined)
attrs.title = m[4];
return [m[0].length, ["img", attrs]];
}
// ![Alt text][id]
m = text.match(/^!\[(.*?)\][ \t]*\[(.*?)\]/);
if (m) {
// We can't check if the reference is known here as it likely wont be
// found till after. Check it in md tree->hmtl tree conversion
return [m[0].length, ["img_ref", {alt: m[1], ref: m[2].toLowerCase(), original: m[0]}]];
}
// Just consume the '!['
return [2, "!["];
},
"[": function link(text) {
var orig = String(text);
// Inline content is possible inside `link text`
var res = Markdown.DialectHelpers.inline_until_char.call(this, text.substr(1), ']');
// No closing ']' found. Just consume the [
if (!res) return [1, '['];
var consumed = 1 + res[0],
children = res[1],
link,
attrs;
// At this point the first [...] has been parsed. See what follows to find
// out which kind of link we are (reference or direct url)
text = text.substr(consumed);
// [link text](/path/to/img.jpg "Optional title")
// 1 2 3 <--- captures
// This will capture up to the last paren in the block. We then pull
// back based on if there a matching ones in the url
// ([here](/url/(test))
// The parens have to be balanced
var m = text.match(/^\s*\([ \t]*(\S+)(?:[ \t]+(["'])(.*?)\2)?[ \t]*\)/);
if (m) {
var url = m[1];
consumed += m[0].length;
if (url && url[0] == '<' && url[url.length - 1] == '>')
url = url.substring(1, url.length - 1);
// If there is a title we don't have to worry about parens in the url
if (!m[3]) {
var open_parens = 1; // One open that isn't in the capture
for (var len = 0; len < url.length; len++) {
switch (url[len]) {
case '(':
open_parens++;
break;
case ')':
if (--open_parens == 0) {
consumed -= url.length - len;
url = url.substring(0, len);
}
break;
}
}
}
// Process escapes only
url = this.dialect.inline.__call__.call(this, url, /\\/)[0];
attrs = {href: url || ""};
if (m[3] !== undefined)
attrs.title = m[3];
link = ["link", attrs].concat(children);
return [consumed, link];
}
// [Alt text][id]
// [Alt text] [id]
m = text.match(/^\s*\[(.*?)\]/);
if (m) {
consumed += m[0].length;
// [links][] uses links as its reference
attrs = {ref: (m[1] || String(children)).toLowerCase(), original: orig.substr(0, consumed)};
link = ["link_ref", attrs].concat(children);
// We can't check if the reference is known here as it likely wont be
// found till after. Check it in md tree->hmtl tree conversion.
// Store the original so that conversion can revert if the ref isn't found.
return [consumed, link];
}
// [id]
// Only if id is plain (no formatting.)
if (children.length == 1 && typeof children[0] == "string") {
attrs = {ref: children[0].toLowerCase(), original: orig.substr(0, consumed)};
link = ["link_ref", attrs, children[0]];
return [consumed, link];
}
// Just consume the '['
return [1, "["];
},
"<": function autoLink(text) {
var m;
if ((m = text.match(/^<(?:((https?|ftp|mailto):[^>]+)|(.*?@.*?\.[a-zA-Z]+))>/)) != null) {
if (m[3]) {
return [m[0].length, ["link", {href: "mailto:" + m[3]}, m[3]]];
}
else if (m[2] == "mailto") {
return [m[0].length, ["link", {href: m[1]}, m[1].substr("mailto:".length)]];
}
else
return [m[0].length, ["link", {href: m[1]}, m[1]]];
}
return [1, "<"];
},
"`": function inlineCode(text) {
// Inline code block. as many backticks as you like to start it
// Always skip over the opening ticks.
var m = text.match(/(`+)(([\s\S]*?)\1)/);
if (m && m[2])
return [m[1].length + m[2].length, ["inlinecode", m[3]]];
else {
// TODO: No matching end code found - warn!
return [1, "`"];
}
},
" \n": function lineBreak(text) {
return [3, ["linebreak"]];
}
};
// Meta Helper/generator method for em and strong handling
function strong_em(tag, md) {
var state_slot = tag + "_state",
other_slot = tag == "strong" ? "em_state" : "strong_state";
function CloseTag(len) {
this.len_after = len;
this.name = "close_" + md;
}
return function (text, orig_match) {
if (this[state_slot][0] == md) {
// Most recent em is of this type
//D:this.debug("closing", md);
this[state_slot].shift();
// "Consume" everything to go back to the recrusion in the else-block below
return [text.length, new CloseTag(text.length - md.length)];
}
else {
// Store a clone of the em/strong states
var other = this[other_slot].slice(),
state = this[state_slot].slice();
this[state_slot].unshift(md);
//D:this.debug_indent += " ";
// Recurse
var res = this.processInline(text.substr(md.length));
//D:this.debug_indent = this.debug_indent.substr(2);
var last = res[res.length - 1];
//D:this.debug("processInline from", tag + ": ", uneval( res ) );
var check = this[state_slot].shift();
if (last instanceof CloseTag) {
res.pop();
// We matched! Huzzah.
var consumed = text.length - last.len_after;
return [consumed, [tag].concat(res)];
}
else {
// Restore the state of the other kind. We might have mistakenly closed it.
this[other_slot] = other;
this[state_slot] = state;
// We can't reuse the processed result as it could have wrong parsing contexts in it.
return [md.length, md];
}
}
}; // End returned function
}
Markdown.dialects.Gruber.inline["**"] = strong_em("strong", "**");
Markdown.dialects.Gruber.inline["__"] = strong_em("strong", "__");
Markdown.dialects.Gruber.inline["*"] = strong_em("em", "*");
Markdown.dialects.Gruber.inline["_"] = strong_em("em", "_");
// Build default order from insertion order.
Markdown.buildBlockOrder = function (d) {
var ord = [];
for (var i in d) {
if (i == "__order__" || i == "__call__") continue;
ord.push(i);
}
d.__order__ = ord;
};
// Build patterns for inline matcher
Markdown.buildInlinePatterns = function (d) {
var patterns = [];
for (var i in d) {
// __foo__ is reserved and not a pattern
if (i.match(/^__.*__$/)) continue;
var l = i.replace(/([\\.*+?|()\[\]{}])/g, "\\$1")
.replace(/\n/, "\\n");
patterns.push(i.length == 1 ? l : "(?:" + l + ")");
}
patterns = patterns.join("|");
d.__patterns__ = patterns;
//print("patterns:", uneval( patterns ) );
var fn = d.__call__;
d.__call__ = function (text, pattern) {
if (pattern != undefined) {
return fn.call(this, text, pattern);
}
else {
return fn.call(this, text, patterns);
}
};
};
Markdown.DialectHelpers = {};
Markdown.DialectHelpers.inline_until_char = function (text, want) {
var consumed = 0,
nodes = [];
while (true) {
if (text[consumed] == want) {
// Found the character we were looking for
consumed++;
return [consumed, nodes];
}
if (consumed >= text.length) {
// No closing char found. Abort.
return null;
}
var res = this.dialect.inline.__oneElement__.call(this, text.substr(consumed));
consumed += res[0];
// Add any returned nodes.
nodes.push.apply(nodes, res.slice(1));
}
}
// Helper function to make sub-classing a dialect easier
Markdown.subclassDialect = function (d) {
function Block() {
}
Block.prototype = d.block;
function Inline() {
}
Inline.prototype = d.inline;
return {block: new Block(), inline: new Inline()};
};
Markdown.buildBlockOrder(Markdown.dialects.Gruber.block);
Markdown.buildInlinePatterns(Markdown.dialects.Gruber.inline);
Markdown.dialects.Maruku = Markdown.subclassDialect(Markdown.dialects.Gruber);
Markdown.dialects.Maruku.processMetaHash = function processMetaHash(meta_string) {
var meta = split_meta_hash(meta_string),
attr = {};
for (var i = 0; i < meta.length; ++i) {
// id: #foo
if (/^#/.test(meta[i])) {
attr.id = meta[i].substring(1);
}
// class: .foo
else if (/^\./.test(meta[i])) {
// if class already exists, append the new one
if (attr['class']) {
attr['class'] = attr['class'] + meta[i].replace(/./, " ");
}
else {
attr['class'] = meta[i].substring(1);
}
}
// attribute: foo=bar
else if (/\=/.test(meta[i])) {
var s = meta[i].split(/\=/);
attr[s[0]] = s[1];
}
}
return attr;
}
function split_meta_hash(meta_string) {
var meta = meta_string.split(""),
parts = [""],
in_quotes = false;
while (meta.length) {
var letter = meta.shift();
switch (letter) {
case " " :
// if we're in a quoted section, keep it
if (in_quotes) {
parts[parts.length - 1] += letter;
}
// otherwise make a new part
else {
parts.push("");
}
break;
case "'" :
case '"' :
// reverse the quotes and move straight on
in_quotes = !in_quotes;
break;
case "\\" :
// shift off the next letter to be used straight away.
// it was escaped so we'll keep it whatever it is
letter = meta.shift();
default :
parts[parts.length - 1] += letter;
break;
}
}
return parts;
}
Markdown.dialects.Maruku.block.document_meta = function document_meta(block, next) {
// we're only interested in the first block
if (block.lineNumber > 1) return undefined;
// document_meta blocks consist of one or more lines of `Key: Value\n`
if (!block.match(/^(?:\w+:.*\n)*\w+:.*$/)) return undefined;
// make an attribute node if it doesn't exist
if (!extract_attr(this.tree)) {
this.tree.splice(1, 0, {});
}
var pairs = block.split(/\n/);
for (p in pairs) {
var m = pairs[p].match(/(\w+):\s*(.*)$/),
key = m[1].toLowerCase(),
value = m[2];
this.tree[1][key] = value;
}
// document_meta produces no content!
return [];
};
Markdown.dialects.Maruku.block.block_meta = function block_meta(block, next) {
// check if the last line of the block is an meta hash
var m = block.match(/(^|\n) {0,3}\{:\s*((?:\\\}|[^\}])*)\s*\}$/);
if (!m) return undefined;
// process the meta hash
var attr = this.dialect.processMetaHash(m[2]);
var hash;
// if we matched ^ then we need to apply meta to the previous block
if (m[1] === "") {
var node = this.tree[this.tree.length - 1];
hash = extract_attr(node);
// if the node is a string (rather than JsonML), bail
if (typeof node === "string") return undefined;
// create the attribute hash if it doesn't exist
if (!hash) {
hash = {};
node.splice(1, 0, hash);
}
// add the attributes in
for (a in attr) {
hash[a] = attr[a];
}
// return nothing so the meta hash is removed
return [];
}
// pull the meta hash off the block and process what's left
var b = block.replace(/\n.*$/, ""),
result = this.processBlock(b, []);
// get or make the attributes hash
hash = extract_attr(result[0]);
if (!hash) {
hash = {};
result[0].splice(1, 0, hash);
}
// attach the attributes to the block
for (a in attr) {
hash[a] = attr[a];
}
return result;
};
Markdown.dialects.Maruku.block.definition_list = function definition_list(block, next) {
// one or more terms followed by one or more definitions, in a single block
var tight = /^((?:[^\s:].*\n)+):\s+([\s\S]+)$/,
list = ["dl"],
i;
// see if we're dealing with a tight or loose block
if ((m = block.match(tight))) {
// pull subsequent tight DL blocks out of `next`
var blocks = [block];
while (next.length && tight.exec(next[0])) {
blocks.push(next.shift());
}
for (var b = 0; b < blocks.length; ++b) {
var m = blocks[b].match(tight),
terms = m[1].replace(/\n$/, "").split(/\n/),
defns = m[2].split(/\n:\s+/);
// print( uneval( m ) );
for (i = 0; i < terms.length; ++i) {
list.push(["dt", terms[i]]);
}
for (i = 0; i < defns.length; ++i) {
// run inline processing over the definition
list.push(["dd"].concat(this.processInline(defns[i].replace(/(\n)\s+/, "$1"))));
}
}
}
else {
return undefined;
}
return [list];
};
Markdown.dialects.Maruku.inline["{:"] = function inline_meta(text, matches, out) {
if (!out.length) {
return [2, "{:"];
}
// get the preceeding element
var before = out[out.length - 1];
if (typeof before === "string") {
return [2, "{:"];
}
// match a meta hash
var m = text.match(/^\{:\s*((?:\\\}|[^\}])*)\s*\}/);
// no match, false alarm
if (!m) {
return [2, "{:"];
}
// attach the attributes to the preceeding element
var meta = this.dialect.processMetaHash(m[1]),
attr = extract_attr(before);
if (!attr) {
attr = {};
before.splice(1, 0, attr);
}
for (var k in meta) {
attr[k] = meta[k];
}
// cut out the string and replace it with nothing
return [m[0].length, ""];
};
Markdown.buildBlockOrder(Markdown.dialects.Maruku.block);
Markdown.buildInlinePatterns(Markdown.dialects.Maruku.inline);
var isArray = Array.isArray || function (obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
};
var forEach;
// Don't mess with Array.prototype. Its not friendly
if (Array.prototype.forEach) {
forEach = function (arr, cb, thisp) {
return arr.forEach(cb, thisp);
};
}
else {
forEach = function (arr, cb, thisp) {
for (var i = 0; i < arr.length; i++) {
cb.call(thisp || arr, arr[i], i, arr);
}
}
}
function extract_attr(jsonml) {
return isArray(jsonml)
&& jsonml.length > 1
&& typeof jsonml[1] === "object"
&& !(isArray(jsonml[1]))
? jsonml[1]
: undefined;
}
/**
* renderJsonML( jsonml[, options] ) -> String
* - jsonml (Array): JsonML array to render to XML
* - options (Object): options
*
* Converts the given JsonML into well-formed XML.
*
* The options currently understood are:
*
* - root (Boolean): wether or not the root node should be included in the
* output, or just its children. The default `false` is to not include the
* root itself.
*/
expose.renderJsonML = function (jsonml, options) {
options = options || {};
// include the root element in the rendered output?
options.root = options.root || false;
var content = [];
if (options.root) {
content.push(render_tree(jsonml));
}
else {
jsonml.shift(); // get rid of the tag
if (jsonml.length && typeof jsonml[0] === "object" && !(jsonml[0] instanceof Array)) {
jsonml.shift(); // get rid of the attributes
}
while (jsonml.length) {
content.push(render_tree(jsonml.shift()));
}
}
return content.join("\n\n");
};
function escapeHTML(text) {
return text.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#39;");
}
function render_tree(jsonml) {
// basic case
if (typeof jsonml === "string") {
return escapeHTML(jsonml);
}
var tag = jsonml.shift(),
attributes = {},
content = [];
if (jsonml.length && typeof jsonml[0] === "object" && !(jsonml[0] instanceof Array)) {
attributes = jsonml.shift();
}
while (jsonml.length) {
content.push(arguments.callee(jsonml.shift()));
}
var tag_attrs = "";
for (var a in attributes) {
tag_attrs += " " + a + '="' + escapeHTML(attributes[a]) + '"';
}
// be careful about adding whitespace here for inline elements
if (tag == "img" || tag == "br" || tag == "hr") {
return "<" + tag + tag_attrs + "/>";
}
else {
return "<" + tag + tag_attrs + ">" + content.join("") + "</" + tag + ">";
}
}
function convert_tree_to_html(tree, references, options) {
var i;
options = options || {};
// shallow clone
var jsonml = tree.slice(0);
if (typeof options.preprocessTreeNode === "function") {
jsonml = options.preprocessTreeNode(jsonml, references);
}
// Clone attributes if they exist
var attrs = extract_attr(jsonml);
if (attrs) {
jsonml[1] = {};
for (i in attrs) {
jsonml[1][i] = attrs[i];
}
attrs = jsonml[1];
}
// basic case
if (typeof jsonml === "string") {
return jsonml;
}
// convert this node
switch (jsonml[0]) {
case "header":
jsonml[0] = "h" + jsonml[1].level;
delete jsonml[1].level;
break;
case "bulletlist":
jsonml[0] = "ul";
break;
case "numberlist":
jsonml[0] = "ol";
break;
case "listitem":
jsonml[0] = "li";
break;
case "para":
jsonml[0] = "p";
break;
case "markdown":
jsonml[0] = "html";
if (attrs) delete attrs.references;
break;
case "code_block":
jsonml[0] = "pre";
i = attrs ? 2 : 1;
var code = ["code"];
code.push.apply(code, jsonml.splice(i));
jsonml[i] = code;
break;
case "inlinecode":
jsonml[0] = "code";
break;
case "img":
jsonml[1].src = jsonml[1].href;
delete jsonml[1].href;
break;
case "linebreak":
jsonml[0] = "br";
break;
case "link":
jsonml[0] = "a";
break;
case "link_ref":
jsonml[0] = "a";
// grab this ref and clean up the attribute node
var ref = references[attrs.ref];
// if the reference exists, make the link
if (ref) {
delete attrs.ref;
// add in the href and title, if present
attrs.href = ref.href;
if (ref.title) {
attrs.title = ref.title;
}
// get rid of the unneeded original text
delete attrs.original;
}
// the reference doesn't exist, so revert to plain text
else {
return attrs.original;
}
break;
case "img_ref":
jsonml[0] = "img";
// grab this ref and clean up the attribute node
var ref = references[attrs.ref];
// if the reference exists, make the link
if (ref) {
delete attrs.ref;
// add in the href and title, if present
attrs.src = ref.href;
if (ref.title) {
attrs.title = ref.title;
}
// get rid of the unneeded original text
delete attrs.original;
}
// the reference doesn't exist, so revert to plain text
else {
return attrs.original;
}
break;
}
// convert all the children
i = 1;
// deal with the attribute node, if it exists
if (attrs) {
// if there are keys, skip over it
for (var key in jsonml[1]) {
i = 2;
}
// if there aren't, remove it
if (i === 1) {
jsonml.splice(i, 1);
}
}
for (; i < jsonml.length; ++i) {
jsonml[i] = arguments.callee(jsonml[i], references, options);
}
return jsonml;
}
// merges adjacent text nodes into a single node
function merge_text_nodes(jsonml) {
// skip the tag name and attribute hash
var i = extract_attr(jsonml) ? 2 : 1;
while (i < jsonml.length) {
// if it's a string check the next item too
if (typeof jsonml[i] === "string") {
if (i + 1 < jsonml.length && typeof jsonml[i + 1] === "string") {
// merge the second string into the first and remove it
jsonml[i] += jsonml.splice(i + 1, 1)[0];
}
else {
++i;
}
}
// if it's not a string recurse
else {
arguments.callee(jsonml[i]);
++i;
}
}
}
})((function () {
if (typeof exports === "undefined") {
window.markdown = {};
return window.markdown;
}
else {
return exports;
}
})());
// Knockout JavaScript library v2.2.0
// (c) Steven Sanderson - http://knockoutjs.com/
// License: MIT (http://www.opensource.org/licenses/mit-license.php)
(function () {
function i(v) {
throw v;
}
var l = !0, n = null, q = !1;
function t(v) {
return function () {
return v
}
};var w = window, x = document, fa = navigator, E = window.jQuery, H = void 0;
function K(v) {
function ga(a, d, c, e, f) {
var g = [], a = b.j(function () {
var a = d(c, f) || [];
0 < g.length && (b.a.Xa(L(g), a), e && b.r.K(e, n, [c, a, f]));
g.splice(0, g.length);
b.a.P(g, a)
}, n, {
W: a, Ja: function () {
return 0 == g.length || !b.a.X(g[0])
}
});
return {M: g, j: a.oa() ? a : H}
}
function L(a) {
for (; a.length && !b.a.X(a[0]);) a.splice(0, 1);
if (1 < a.length) {
for (var d = a[0], c = a[a.length - 1], e = [d]; d !== c;) {
d = d.nextSibling;
if (!d) return;
e.push(d)
}
Array.prototype.splice.apply(a, [0, a.length].concat(e))
}
return a
}
function R(a, b, c, e, f) {
var g = Math.min,
h = Math.max, j = [], k, m = a.length, p, r = b.length, u = r - m || 1, F = m + r + 1, I, z, y;
for (k = 0; k <= m; k++) {
z = I;
j.push(I = []);
y = g(r, k + u);
for (p = h(0, k - 1); p <= y; p++) I[p] = p ? k ? a[k - 1] === b[p - 1] ? z[p - 1] : g(z[p] || F, I[p - 1] || F) + 1 : p + 1 : k + 1
}
g = [];
h = [];
u = [];
k = m;
for (p = r; k || p;) r = j[k][p] - 1, p && r === j[k][p - 1] ? h.push(g[g.length] = {
status: c,
value: b[--p],
index: p
}) : k && r === j[k - 1][p] ? u.push(g[g.length] = {
status: e,
value: a[--k],
index: k
}) : (g.push({status: "retained", value: b[--p]}), --k);
if (h.length && u.length) for (var a = 10 * m, s, b = c = 0; (f || b < a) && (s = h[c]); c++) {
for (e =
0; j = u[e]; e++) if (s.value === j.value) {
s.moved = j.index;
j.moved = s.index;
u.splice(e, 1);
b = e = 0;
break
}
b += e
}
return g.reverse()
}
function S(a, d, c, e, f) {
var f = f || {}, g = a && M(a), g = g && g.ownerDocument, h = f.templateEngine || N;
b.ya.ub(c, h, g);
c = h.renderTemplate(c, e, f, g);
("number" != typeof c.length || 0 < c.length && "number" != typeof c[0].nodeType) && i(Error("Template engine must return an array of DOM nodes"));
g = q;
switch (d) {
case "replaceChildren":
b.e.N(a, c);
g = l;
break;
case "replaceNode":
b.a.Xa(a, c);
g = l;
break;
case "ignoreTargetNode":
break;
default:
i(Error("Unknown renderMode: " + d))
}
g && (T(c, e), f.afterRender && b.r.K(f.afterRender, n, [c, e.$data]));
return c
}
function M(a) {
return a.nodeType ? a : 0 < a.length ? a[0] : n
}
function T(a, d) {
if (a.length) {
var c = a[0], e = a[a.length - 1];
U(c, e, function (a) {
b.Ca(d, a)
});
U(c, e, function (a) {
b.s.hb(a, [d])
})
}
}
function U(a, d, c) {
for (var e, d = b.e.nextSibling(d); a && (e = a) !== d;) a = b.e.nextSibling(e), (1 === e.nodeType || 8 === e.nodeType) && c(e)
}
function V(a, d, c) {
for (var a = b.g.aa(a), e = b.g.Q, f = 0; f < a.length; f++) {
var g = a[f].key;
if (e.hasOwnProperty(g)) {
var h =
e[g];
"function" === typeof h ? (g = h(a[f].value)) && i(Error(g)) : h || i(Error("This template engine does not support the '" + g + "' binding within its templates"))
}
}
a = "ko.__tr_ambtns(function($context,$element){return(function(){return{ " + b.g.ba(a) + " } })()})";
return c.createJavaScriptEvaluatorBlock(a) + d
}
function W(a, d, c, e) {
function f(a) {
return function () {
return j[a]
}
}
function g() {
return j
}
var h = 0, j, k;
b.j(function () {
var m = c && c instanceof b.z ? c : new b.z(b.a.d(c)), p = m.$data;
e && b.cb(a, m);
if (j = ("function" == typeof d ?
d(m, a) : d) || b.J.instance.getBindings(a, m)) {
if (0 === h) {
h = 1;
for (var r in j) {
var u = b.c[r];
u && 8 === a.nodeType && !b.e.I[r] && i(Error("The binding '" + r + "' cannot be used with virtual elements"));
if (u && "function" == typeof u.init && (u = (0, u.init)(a, f(r), g, p, m)) && u.controlsDescendantBindings) k !== H && i(Error("Multiple bindings (" + k + " and " + r + ") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.")), k = r
}
h = 2
}
if (2 === h) for (r in j) (u = b.c[r]) && "function" ==
typeof u.update && (0, u.update)(a, f(r), g, p, m)
}
}, n, {W: a});
return {Mb: k === H}
}
function X(a, d, c) {
var e = l, f = 1 === d.nodeType;
f && b.e.Sa(d);
if (f && c || b.J.instance.nodeHasBindings(d)) e = W(d, n, a, c).Mb;
e && Y(a, d, !f)
}
function Y(a, d, c) {
for (var e = b.e.firstChild(d); d = e;) e = b.e.nextSibling(d), X(a, d, c)
}
function Z(a, b) {
var c = $(a, b);
return c ? 0 < c.length ? c[c.length - 1].nextSibling : a.nextSibling : n
}
function $(a, b) {
for (var c = a, e = 1, f = []; c = c.nextSibling;) {
if (G(c) && (e--, 0 === e)) return f;
f.push(c);
A(c) && e++
}
b || i(Error("Cannot find closing comment tag to match: " +
a.nodeValue));
return n
}
function G(a) {
return 8 == a.nodeType && (J ? a.text : a.nodeValue).match(ha)
}
function A(a) {
return 8 == a.nodeType && (J ? a.text : a.nodeValue).match(ia)
}
function O(a, b) {
for (var c = n; a != c;) c = a, a = a.replace(ja, function (a, c) {
return b[c]
});
return a
}
function ka() {
var a = [], d = [];
this.save = function (c, e) {
var f = b.a.i(a, c);
0 <= f ? d[f] = e : (a.push(c), d.push(e))
};
this.get = function (c) {
c = b.a.i(a, c);
return 0 <= c ? d[c] : H
}
}
function aa(a, b, c) {
function e(e) {
var g = b(a[e]);
switch (typeof g) {
case "boolean":
case "number":
case "string":
case "function":
f[e] =
g;
break;
case "object":
case "undefined":
var h = c.get(g);
f[e] = h !== H ? h : aa(g, b, c)
}
}
c = c || new ka;
a = b(a);
if (!("object" == typeof a && a !== n && a !== H && !(a instanceof Date))) return a;
var f = a instanceof Array ? [] : {};
c.save(a, f);
var g = a;
if (g instanceof Array) {
for (var h = 0; h < g.length; h++) e(h);
"function" == typeof g.toJSON && e("toJSON")
} else for (h in g) e(h);
return f
}
function ba(a, d) {
if (a) if (8 == a.nodeType) {
var c = b.s.Ta(a.nodeValue);
c != n && d.push({rb: a, Eb: c})
} else if (1 == a.nodeType) for (var c = 0, e = a.childNodes, f = e.length; c < f; c++) ba(e[c],
d)
}
function P(a, d, c, e) {
b.c[a] = {
init: function (a) {
b.a.f.set(a, ca, {});
return {controlsDescendantBindings: l}
}, update: function (a, g, h, j, k) {
var h = b.a.f.get(a, ca), g = b.a.d(g()), j = !c !== !g, m = !h.Ya;
if (m || d || j !== h.pb) m && (h.Ya = b.a.Ha(b.e.childNodes(a), l)), j ? (m || b.e.N(a, b.a.Ha(h.Ya)), b.Da(e ? e(k, g) : k, a)) : b.e.Y(a), h.pb = j
}
};
b.g.Q[a] = q;
b.e.I[a] = l
}
function da(a, d, c) {
c && d !== b.k.q(a) && b.k.T(a, d);
d !== b.k.q(a) && b.r.K(b.a.Aa, n, [a, "change"])
}
var b = "undefined" !== typeof v ? v : {};
b.b = function (a, d) {
for (var c = a.split("."), e = b, f = 0; f <
c.length - 1; f++) e = e[c[f]];
e[c[c.length - 1]] = d
};
b.p = function (a, b, c) {
a[b] = c
};
b.version = "2.2.0";
b.b("version", b.version);
b.a = new function () {
function a(a, d) {
if ("input" !== b.a.u(a) || !a.type || "click" != d.toLowerCase()) return q;
var c = a.type;
return "checkbox" == c || "radio" == c
}
var d = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, c = {}, e = {};
c[/Firefox\/2/i.test(fa.userAgent) ? "KeyboardEvent" : "UIEvents"] = ["keyup", "keydown", "keypress"];
c.MouseEvents = "click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");
for (var f in c) {
var g = c[f];
if (g.length) for (var h = 0, j = g.length; h < j; h++) e[g[h]] = f
}
var k = {propertychange: l}, m, c = 3;
f = x.createElement("div");
for (g = f.getElementsByTagName("i"); f.innerHTML = "<\!--[if gt IE " + ++c + "]><i></i><![endif]--\>", g[0];) ;
m = 4 < c ? c : H;
return {
Ma: ["authenticity_token", /^__RequestVerificationToken(_.*)?$/], o: function (a, b) {
for (var d = 0, c = a.length; d < c; d++) b(a[d])
}, i: function (a, b) {
if ("function" == typeof Array.prototype.indexOf) return Array.prototype.indexOf.call(a, b);
for (var d = 0, c = a.length; d <
c; d++) if (a[d] === b) return d;
return -1
}, kb: function (a, b, d) {
for (var c = 0, e = a.length; c < e; c++) if (b.call(d, a[c])) return a[c];
return n
}, ga: function (a, d) {
var c = b.a.i(a, d);
0 <= c && a.splice(c, 1)
}, Fa: function (a) {
for (var a = a || [], d = [], c = 0, e = a.length; c < e; c++) 0 > b.a.i(d, a[c]) && d.push(a[c]);
return d
}, V: function (a, b) {
for (var a = a || [], d = [], c = 0, e = a.length; c < e; c++) d.push(b(a[c]));
return d
}, fa: function (a, b) {
for (var a = a || [], d = [], c = 0, e = a.length; c < e; c++) b(a[c]) && d.push(a[c]);
return d
}, P: function (a, b) {
if (b instanceof Array) a.push.apply(a,
b); else for (var d = 0, c = b.length; d < c; d++) a.push(b[d]);
return a
}, extend: function (a, b) {
if (b) for (var d in b) b.hasOwnProperty(d) && (a[d] = b[d]);
return a
}, ka: function (a) {
for (; a.firstChild;) b.removeNode(a.firstChild)
}, Gb: function (a) {
for (var a = b.a.L(a), d = x.createElement("div"), c = 0, e = a.length; c < e; c++) d.appendChild(b.A(a[c]));
return d
}, Ha: function (a, d) {
for (var c = 0, e = a.length, g = []; c < e; c++) {
var f = a[c].cloneNode(l);
g.push(d ? b.A(f) : f)
}
return g
}, N: function (a, d) {
b.a.ka(a);
if (d) for (var c = 0, e = d.length; c < e; c++) a.appendChild(d[c])
},
Xa: function (a, d) {
var c = a.nodeType ? [a] : a;
if (0 < c.length) {
for (var e = c[0], g = e.parentNode, f = 0, h = d.length; f < h; f++) g.insertBefore(d[f], e);
f = 0;
for (h = c.length; f < h; f++) b.removeNode(c[f])
}
}, ab: function (a, b) {
7 > m ? a.setAttribute("selected", b) : a.selected = b
}, D: function (a) {
return (a || "").replace(d, "")
}, Qb: function (a, d) {
for (var c = [], e = (a || "").split(d), f = 0, g = e.length; f < g; f++) {
var h = b.a.D(e[f]);
"" !== h && c.push(h)
}
return c
}, Nb: function (a, b) {
a = a || "";
return b.length > a.length ? q : a.substring(0, b.length) === b
}, sb: function (a, b) {
if (b.compareDocumentPosition) return 16 ==
(b.compareDocumentPosition(a) & 16);
for (; a != n;) {
if (a == b) return l;
a = a.parentNode
}
return q
}, X: function (a) {
return b.a.sb(a, a.ownerDocument)
}, u: function (a) {
return a && a.tagName && a.tagName.toLowerCase()
}, n: function (b, d, c) {
var e = m && k[d];
if (!e && "undefined" != typeof E) {
if (a(b, d)) var f = c, c = function (a, b) {
var d = this.checked;
b && (this.checked = b.mb !== l);
f.call(this, a);
this.checked = d
};
E(b).bind(d, c)
} else !e && "function" == typeof b.addEventListener ? b.addEventListener(d, c, q) : "undefined" != typeof b.attachEvent ? b.attachEvent("on" +
d, function (a) {
c.call(b, a)
}) : i(Error("Browser doesn't support addEventListener or attachEvent"))
}, Aa: function (b, d) {
(!b || !b.nodeType) && i(Error("element must be a DOM node when calling triggerEvent"));
if ("undefined" != typeof E) {
var c = [];
a(b, d) && c.push({mb: b.checked});
E(b).trigger(d, c)
} else "function" == typeof x.createEvent ? "function" == typeof b.dispatchEvent ? (c = x.createEvent(e[d] || "HTMLEvents"), c.initEvent(d, l, l, w, 0, 0, 0, 0, 0, q, q, q, q, 0, b), b.dispatchEvent(c)) : i(Error("The supplied element doesn't support dispatchEvent")) :
"undefined" != typeof b.fireEvent ? (a(b, d) && (b.checked = b.checked !== l), b.fireEvent("on" + d)) : i(Error("Browser doesn't support triggering events"))
}, d: function (a) {
return b.$(a) ? a() : a
}, ta: function (a) {
return b.$(a) ? a.t() : a
}, da: function (a, d, c) {
if (d) {
var e = /[\w-]+/g, f = a.className.match(e) || [];
b.a.o(d.match(e), function (a) {
var d = b.a.i(f, a);
0 <= d ? c || f.splice(d, 1) : c && f.push(a)
});
a.className = f.join(" ")
}
}, bb: function (a, d) {
var c = b.a.d(d);
if (c === n || c === H) c = "";
if (3 === a.nodeType) a.data = c; else {
var e = b.e.firstChild(a);
!e || 3 != e.nodeType || b.e.nextSibling(e) ? b.e.N(a, [x.createTextNode(c)]) : e.data = c;
b.a.vb(a)
}
}, $a: function (a, b) {
a.name = b;
if (7 >= m) try {
a.mergeAttributes(x.createElement("<input name='" + a.name + "'/>"), q)
} catch (d) {
}
}, vb: function (a) {
9 <= m && (a = 1 == a.nodeType ? a : a.parentNode, a.style && (a.style.zoom = a.style.zoom))
}, tb: function (a) {
if (9 <= m) {
var b = a.style.width;
a.style.width = 0;
a.style.width = b
}
}, Kb: function (a, d) {
for (var a = b.a.d(a), d = b.a.d(d), c = [], e = a; e <= d; e++) c.push(e);
return c
}, L: function (a) {
for (var b = [], d = 0, c = a.length; d <
c; d++) b.push(a[d]);
return b
}, Ob: 6 === m, Pb: 7 === m, Z: m, Na: function (a, d) {
for (var c = b.a.L(a.getElementsByTagName("input")).concat(b.a.L(a.getElementsByTagName("textarea"))), e = "string" == typeof d ? function (a) {
return a.name === d
} : function (a) {
return d.test(a.name)
}, f = [], g = c.length - 1; 0 <= g; g--) e(c[g]) && f.push(c[g]);
return f
}, Hb: function (a) {
return "string" == typeof a && (a = b.a.D(a)) ? w.JSON && w.JSON.parse ? w.JSON.parse(a) : (new Function("return " + a))() : n
}, wa: function (a, d, c) {
("undefined" == typeof JSON || "undefined" == typeof JSON.stringify) &&
i(Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js"));
return JSON.stringify(b.a.d(a), d, c)
}, Ib: function (a, d, c) {
var c = c || {}, e = c.params || {}, f = c.includeFields || this.Ma, g = a;
if ("object" == typeof a && "form" === b.a.u(a)) for (var g = a.action, h = f.length - 1; 0 <= h; h--) for (var j = b.a.Na(a, f[h]), k = j.length - 1; 0 <= k; k--) e[j[k].name] = j[k].value;
var d = b.a.d(d), m = x.createElement("form");
m.style.display = "none";
m.action = g;
m.method = "post";
for (var v in d) a = x.createElement("input"), a.name = v, a.value = b.a.wa(b.a.d(d[v])), m.appendChild(a);
for (v in e) a = x.createElement("input"), a.name = v, a.value = e[v], m.appendChild(a);
x.body.appendChild(m);
c.submitter ? c.submitter(m) : m.submit();
setTimeout(function () {
m.parentNode.removeChild(m)
}, 0)
}
}
};
b.b("utils", b.a);
b.b("utils.arrayForEach", b.a.o);
b.b("utils.arrayFirst", b.a.kb);
b.b("utils.arrayFilter", b.a.fa);
b.b("utils.arrayGetDistinctValues", b.a.Fa);
b.b("utils.arrayIndexOf",
b.a.i);
b.b("utils.arrayMap", b.a.V);
b.b("utils.arrayPushAll", b.a.P);
b.b("utils.arrayRemoveItem", b.a.ga);
b.b("utils.extend", b.a.extend);
b.b("utils.fieldsIncludedWithJsonPost", b.a.Ma);
b.b("utils.getFormFields", b.a.Na);
b.b("utils.peekObservable", b.a.ta);
b.b("utils.postJson", b.a.Ib);
b.b("utils.parseJson", b.a.Hb);
b.b("utils.registerEventHandler", b.a.n);
b.b("utils.stringifyJson", b.a.wa);
b.b("utils.range", b.a.Kb);
b.b("utils.toggleDomNodeCssClass", b.a.da);
b.b("utils.triggerEvent", b.a.Aa);
b.b("utils.unwrapObservable",
b.a.d);
Function.prototype.bind || (Function.prototype.bind = function (a) {
var b = this, c = Array.prototype.slice.call(arguments), a = c.shift();
return function () {
return b.apply(a, c.concat(Array.prototype.slice.call(arguments)))
}
});
b.a.f = new function () {
var a = 0, d = "__ko__" + (new Date).getTime(), c = {};
return {
get: function (a, d) {
var c = b.a.f.getAll(a, q);
return c === H ? H : c[d]
}, set: function (a, d, c) {
c === H && b.a.f.getAll(a, q) === H || (b.a.f.getAll(a, l)[d] = c)
}, getAll: function (b, f) {
var g = b[d];
if (!g || !("null" !== g && c[g])) {
if (!f) return H;
g = b[d] = "ko" + a++;
c[g] = {}
}
return c[g]
}, clear: function (a) {
var b = a[d];
return b ? (delete c[b], a[d] = n, l) : q
}
}
};
b.b("utils.domData", b.a.f);
b.b("utils.domData.clear", b.a.f.clear);
b.a.F = new function () {
function a(a, d) {
var e = b.a.f.get(a, c);
e === H && d && (e = [], b.a.f.set(a, c, e));
return e
}
function d(c) {
var e = a(c, q);
if (e) for (var e = e.slice(0), j = 0; j < e.length; j++) e[j](c);
b.a.f.clear(c);
"function" == typeof E && "function" == typeof E.cleanData && E.cleanData([c]);
if (f[c.nodeType]) for (e = c.firstChild; c = e;) e = c.nextSibling, 8 === c.nodeType &&
d(c)
}
var c = "__ko_domNodeDisposal__" + (new Date).getTime(), e = {1: l, 8: l, 9: l}, f = {1: l, 9: l};
return {
Ba: function (b, d) {
"function" != typeof d && i(Error("Callback must be a function"));
a(b, l).push(d)
}, Wa: function (d, e) {
var f = a(d, q);
f && (b.a.ga(f, e), 0 == f.length && b.a.f.set(d, c, H))
}, A: function (a) {
if (e[a.nodeType] && (d(a), f[a.nodeType])) {
var c = [];
b.a.P(c, a.getElementsByTagName("*"));
for (var j = 0, k = c.length; j < k; j++) d(c[j])
}
return a
}, removeNode: function (a) {
b.A(a);
a.parentNode && a.parentNode.removeChild(a)
}
}
};
b.A = b.a.F.A;
b.removeNode = b.a.F.removeNode;
b.b("cleanNode", b.A);
b.b("removeNode", b.removeNode);
b.b("utils.domNodeDisposal", b.a.F);
b.b("utils.domNodeDisposal.addDisposeCallback", b.a.F.Ba);
b.b("utils.domNodeDisposal.removeDisposeCallback", b.a.F.Wa);
b.a.sa = function (a) {
var d;
if ("undefined" != typeof E) {
if ((d = E.clean([a])) && d[0]) {
for (a = d[0]; a.parentNode && 11 !== a.parentNode.nodeType;) a = a.parentNode;
a.parentNode && a.parentNode.removeChild(a)
}
} else {
var c = b.a.D(a).toLowerCase();
d = x.createElement("div");
c = c.match(/^<(thead|tbody|tfoot)/) &&
[1, "<table>", "</table>"] || !c.indexOf("<tr") && [2, "<table><tbody>", "</tbody></table>"] || (!c.indexOf("<td") || !c.indexOf("<th")) && [3, "<table><tbody><tr>", "</tr></tbody></table>"] || [0, "", ""];
a = "ignored<div>" + c[1] + a + c[2] + "</div>";
for ("function" == typeof w.innerShiv ? d.appendChild(w.innerShiv(a)) : d.innerHTML = a; c[0]--;) d = d.lastChild;
d = b.a.L(d.lastChild.childNodes)
}
return d
};
b.a.ca = function (a, d) {
b.a.ka(a);
d = b.a.d(d);
if (d !== n && d !== H) if ("string" != typeof d && (d = d.toString()), "undefined" != typeof E) E(a).html(d); else for (var c =
b.a.sa(d), e = 0; e < c.length; e++) a.appendChild(c[e])
};
b.b("utils.parseHtmlFragment", b.a.sa);
b.b("utils.setHtml", b.a.ca);
var Q = {};
b.s = {
qa: function (a) {
"function" != typeof a && i(Error("You can only pass a function to ko.memoization.memoize()"));
var b = (4294967296 * (1 + Math.random()) | 0).toString(16).substring(1) + (4294967296 * (1 + Math.random()) | 0).toString(16).substring(1);
Q[b] = a;
return "<\!--[ko_memo:" + b + "]--\>"
}, gb: function (a, b) {
var c = Q[a];
c === H && i(Error("Couldn't find any memo with ID " + a + ". Perhaps it's already been unmemoized."));
try {
return c.apply(n, b || []), l
} finally {
delete Q[a]
}
}, hb: function (a, d) {
var c = [];
ba(a, c);
for (var e = 0, f = c.length; e < f; e++) {
var g = c[e].rb, h = [g];
d && b.a.P(h, d);
b.s.gb(c[e].Eb, h);
g.nodeValue = "";
g.parentNode && g.parentNode.removeChild(g)
}
}, Ta: function (a) {
return (a = a.match(/^\[ko_memo\:(.*?)\]$/)) ? a[1] : n
}
};
b.b("memoization", b.s);
b.b("memoization.memoize", b.s.qa);
b.b("memoization.unmemoize", b.s.gb);
b.b("memoization.parseMemoText", b.s.Ta);
b.b("memoization.unmemoizeDomNodeAndDescendants", b.s.hb);
b.La = {
throttle: function (a,
d) {
a.throttleEvaluation = d;
var c = n;
return b.j({
read: a, write: function (b) {
clearTimeout(c);
c = setTimeout(function () {
a(b)
}, d)
}
})
}, notify: function (a, d) {
a.equalityComparer = "always" == d ? t(q) : b.m.fn.equalityComparer;
return a
}
};
b.b("extenders", b.La);
b.eb = function (a, d, c) {
this.target = a;
this.ha = d;
this.qb = c;
b.p(this, "dispose", this.B)
};
b.eb.prototype.B = function () {
this.Bb = l;
this.qb()
};
b.S = function () {
this.w = {};
b.a.extend(this, b.S.fn);
b.p(this, "subscribe", this.xa);
b.p(this, "extend", this.extend);
b.p(this, "getSubscriptionsCount",
this.xb)
};
b.S.fn = {
xa: function (a, d, c) {
var c = c || "change", a = d ? a.bind(d) : a, e = new b.eb(this, a, function () {
b.a.ga(this.w[c], e)
}.bind(this));
this.w[c] || (this.w[c] = []);
this.w[c].push(e);
return e
}, notifySubscribers: function (a, d) {
d = d || "change";
this.w[d] && b.r.K(function () {
b.a.o(this.w[d].slice(0), function (b) {
b && b.Bb !== l && b.ha(a)
})
}, this)
}, xb: function () {
var a = 0, b;
for (b in this.w) this.w.hasOwnProperty(b) && (a += this.w[b].length);
return a
}, extend: function (a) {
var d = this;
if (a) for (var c in a) {
var e = b.La[c];
"function" ==
typeof e && (d = e(d, a[c]))
}
return d
}
};
b.Pa = function (a) {
return "function" == typeof a.xa && "function" == typeof a.notifySubscribers
};
b.b("subscribable", b.S);
b.b("isSubscribable", b.Pa);
var B = [];
b.r = {
lb: function (a) {
B.push({ha: a, Ka: []})
}, end: function () {
B.pop()
}, Va: function (a) {
b.Pa(a) || i(Error("Only subscribable things can act as dependencies"));
if (0 < B.length) {
var d = B[B.length - 1];
d && !(0 <= b.a.i(d.Ka, a)) && (d.Ka.push(a), d.ha(a))
}
}, K: function (a, b, c) {
try {
return B.push(n), a.apply(b, c || [])
} finally {
B.pop()
}
}
};
var la = {
undefined: l,
"boolean": l, number: l, string: l
};
b.m = function (a) {
function d() {
if (0 < arguments.length) {
if (!d.equalityComparer || !d.equalityComparer(c, arguments[0])) d.H(), c = arguments[0], d.G();
return this
}
b.r.Va(d);
return c
}
var c = a;
b.S.call(d);
d.t = function () {
return c
};
d.G = function () {
d.notifySubscribers(c)
};
d.H = function () {
d.notifySubscribers(c, "beforeChange")
};
b.a.extend(d, b.m.fn);
b.p(d, "peek", d.t);
b.p(d, "valueHasMutated", d.G);
b.p(d, "valueWillMutate", d.H);
return d
};
b.m.fn = {
equalityComparer: function (a, b) {
return a === n || typeof a in
la ? a === b : q
}
};
var D = b.m.Jb = "__ko_proto__";
b.m.fn[D] = b.m;
b.la = function (a, d) {
return a === n || a === H || a[D] === H ? q : a[D] === d ? l : b.la(a[D], d)
};
b.$ = function (a) {
return b.la(a, b.m)
};
b.Qa = function (a) {
return "function" == typeof a && a[D] === b.m || "function" == typeof a && a[D] === b.j && a.yb ? l : q
};
b.b("observable", b.m);
b.b("isObservable", b.$);
b.b("isWriteableObservable", b.Qa);
b.R = function (a) {
0 == arguments.length && (a = []);
a !== n && (a !== H && !("length" in a)) && i(Error("The argument passed when initializing an observable array must be an array, or null, or undefined."));
var d = b.m(a);
b.a.extend(d, b.R.fn);
return d
};
b.R.fn = {
remove: function (a) {
for (var b = this.t(), c = [], e = "function" == typeof a ? a : function (b) {
return b === a
}, f = 0; f < b.length; f++) {
var g = b[f];
e(g) && (0 === c.length && this.H(), c.push(g), b.splice(f, 1), f--)
}
c.length && this.G();
return c
}, removeAll: function (a) {
if (a === H) {
var d = this.t(), c = d.slice(0);
this.H();
d.splice(0, d.length);
this.G();
return c
}
return !a ? [] : this.remove(function (d) {
return 0 <= b.a.i(a, d)
})
}, destroy: function (a) {
var b = this.t(), c = "function" == typeof a ? a : function (b) {
return b ===
a
};
this.H();
for (var e = b.length - 1; 0 <= e; e--) c(b[e]) && (b[e]._destroy = l);
this.G()
}, destroyAll: function (a) {
return a === H ? this.destroy(t(l)) : !a ? [] : this.destroy(function (d) {
return 0 <= b.a.i(a, d)
})
}, indexOf: function (a) {
var d = this();
return b.a.i(d, a)
}, replace: function (a, b) {
var c = this.indexOf(a);
0 <= c && (this.H(), this.t()[c] = b, this.G())
}
};
b.a.o("pop push reverse shift sort splice unshift".split(" "), function (a) {
b.R.fn[a] = function () {
var b = this.t();
this.H();
b = b[a].apply(b, arguments);
this.G();
return b
}
});
b.a.o(["slice"],
function (a) {
b.R.fn[a] = function () {
var b = this();
return b[a].apply(b, arguments)
}
});
b.b("observableArray", b.R);
b.j = function (a, d, c) {
function e() {
b.a.o(y, function (a) {
a.B()
});
y = []
}
function f() {
var a = h.throttleEvaluation;
a && 0 <= a ? (clearTimeout(s), s = setTimeout(g, a)) : g()
}
function g() {
if (!p) if (m && v()) z(); else {
p = l;
try {
var a = b.a.V(y, function (a) {
return a.target
});
b.r.lb(function (c) {
var d;
0 <= (d = b.a.i(a, c)) ? a[d] = H : y.push(c.xa(f))
});
for (var c = r.call(d), e = a.length - 1; 0 <= e; e--) a[e] && y.splice(e, 1)[0].B();
m = l;
h.notifySubscribers(k,
"beforeChange");
k = c
} finally {
b.r.end()
}
h.notifySubscribers(k);
p = q;
y.length || z()
}
}
function h() {
if (0 < arguments.length) return "function" === typeof u ? u.apply(d, arguments) : i(Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.")), this;
m || g();
b.r.Va(h);
return k
}
function j() {
return !m || 0 < y.length
}
var k, m = q, p = q, r = a;
r && "object" == typeof r ? (c = r, r = c.read) : (c = c || {}, r || (r = c.read));
"function" != typeof r && i(Error("Pass a function that returns the value of the ko.computed"));
var u = c.write, F = c.disposeWhenNodeIsRemoved || c.W || n, v = c.disposeWhen || c.Ja || t(q), z = e,
y = [], s = n;
d || (d = c.owner);
h.t = function () {
m || g();
return k
};
h.wb = function () {
return y.length
};
h.yb = "function" === typeof c.write;
h.B = function () {
z()
};
h.oa = j;
b.S.call(h);
b.a.extend(h, b.j.fn);
b.p(h, "peek", h.t);
b.p(h, "dispose", h.B);
b.p(h, "isActive", h.oa);
b.p(h, "getDependenciesCount", h.wb);
c.deferEvaluation !== l && g();
if (F && j()) {
z = function () {
b.a.F.Wa(F, arguments.callee);
e()
};
b.a.F.Ba(F, z);
var C = v, v = function () {
return !b.a.X(F) || C()
}
}
return h
};
b.Ab = function (a) {
return b.la(a, b.j)
};
v = b.m.Jb;
b.j[v] = b.m;
b.j.fn = {};
b.j.fn[v] = b.j;
b.b("dependentObservable", b.j);
b.b("computed", b.j);
b.b("isComputed", b.Ab);
b.fb = function (a) {
0 == arguments.length && i(Error("When calling ko.toJS, pass the object you want to convert."));
return aa(a, function (a) {
for (var c = 0; b.$(a) && 10 > c; c++) a = a();
return a
})
};
b.toJSON = function (a, d, c) {
a = b.fb(a);
return b.a.wa(a, d, c)
};
b.b("toJS", b.fb);
b.b("toJSON", b.toJSON);
b.k = {
q: function (a) {
switch (b.a.u(a)) {
case "option":
return a.__ko__hasDomDataOptionValue__ ===
l ? b.a.f.get(a, b.c.options.ra) : 7 >= b.a.Z ? a.getAttributeNode("value").specified ? a.value : a.text : a.value;
case "select":
return 0 <= a.selectedIndex ? b.k.q(a.options[a.selectedIndex]) : H;
default:
return a.value
}
}, T: function (a, d) {
switch (b.a.u(a)) {
case "option":
switch (typeof d) {
case "string":
b.a.f.set(a, b.c.options.ra, H);
"__ko__hasDomDataOptionValue__" in a && delete a.__ko__hasDomDataOptionValue__;
a.value = d;
break;
default:
b.a.f.set(a, b.c.options.ra, d), a.__ko__hasDomDataOptionValue__ = l, a.value = "number" === typeof d ?
d : ""
}
break;
case "select":
for (var c = a.options.length - 1; 0 <= c; c--) if (b.k.q(a.options[c]) == d) {
a.selectedIndex = c;
break
}
break;
default:
if (d === n || d === H) d = "";
a.value = d
}
}
};
b.b("selectExtensions", b.k);
b.b("selectExtensions.readValue", b.k.q);
b.b("selectExtensions.writeValue", b.k.T);
var ja = /\@ko_token_(\d+)\@/g, ma = ["true", "false"],
na = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i;
b.g = {
Q: [], aa: function (a) {
var d = b.a.D(a);
if (3 > d.length) return [];
"{" === d.charAt(0) && (d = d.substring(1, d.length - 1));
for (var a = [],
c = n, e, f = 0; f < d.length; f++) {
var g = d.charAt(f);
if (c === n) switch (g) {
case '"':
case "'":
case "/":
c = f, e = g
} else if (g == e && "\\" !== d.charAt(f - 1)) {
g = d.substring(c, f + 1);
a.push(g);
var h = "@ko_token_" + (a.length - 1) + "@", d = d.substring(0, c) + h + d.substring(f + 1),
f = f - (g.length - h.length), c = n
}
}
e = c = n;
for (var j = 0, k = n, f = 0; f < d.length; f++) {
g = d.charAt(f);
if (c === n) switch (g) {
case "{":
c = f;
k = g;
e = "}";
break;
case "(":
c = f;
k = g;
e = ")";
break;
case "[":
c = f, k = g, e = "]"
}
g === k ? j++ : g === e && (j--, 0 === j && (g = d.substring(c, f + 1), a.push(g), h = "@ko_token_" + (a.length -
1) + "@", d = d.substring(0, c) + h + d.substring(f + 1), f -= g.length - h.length, c = n))
}
e = [];
d = d.split(",");
c = 0;
for (f = d.length; c < f; c++) j = d[c], k = j.indexOf(":"), 0 < k && k < j.length - 1 ? (g = j.substring(k + 1), e.push({
key: O(j.substring(0, k), a),
value: O(g, a)
})) : e.push({unknown: O(j, a)});
return e
}, ba: function (a) {
for (var d = "string" === typeof a ? b.g.aa(a) : a, c = [], a = [], e, f = 0; e = d[f]; f++) if (0 < c.length && c.push(","), e.key) {
var g;
a:{
g = e.key;
var h = b.a.D(g);
switch (h.length && h.charAt(0)) {
case "'":
case '"':
break a;
default:
g = "'" + h + "'"
}
}
e = e.value;
c.push(g);
c.push(":");
c.push(e);
e = b.a.D(e);
0 <= b.a.i(ma, b.a.D(e).toLowerCase()) ? e = q : (h = e.match(na), e = h === n ? q : h[1] ? "Object(" + h[1] + ")" + h[2] : e);
e && (0 < a.length && a.push(", "), a.push(g + " : function(__ko_value) { " + e + " = __ko_value; }"))
} else e.unknown && c.push(e.unknown);
d = c.join("");
0 < a.length && (d = d + ", '_ko_property_writers' : { " + a.join("") + " } ");
return d
}, Db: function (a, d) {
for (var c = 0; c < a.length; c++) if (b.a.D(a[c].key) == d) return l;
return q
}, ea: function (a, d, c, e, f) {
if (!a || !b.Qa(a)) {
if ((a = d()._ko_property_writers) &&
a[c]) a[c](e)
} else (!f || a.t() !== e) && a(e)
}
};
b.b("expressionRewriting", b.g);
b.b("expressionRewriting.bindingRewriteValidators", b.g.Q);
b.b("expressionRewriting.parseObjectLiteral", b.g.aa);
b.b("expressionRewriting.preProcessBindings", b.g.ba);
b.b("jsonExpressionRewriting", b.g);
b.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson", b.g.ba);
var J = "<\!--test--\>" === x.createComment("test").text,
ia = J ? /^<\!--\s*ko(?:\s+(.+\s*\:[\s\S]*))?\s*--\>$/ : /^\s*ko(?:\s+(.+\s*\:[\s\S]*))?\s*$/,
ha = J ? /^<\!--\s*\/ko\s*--\>$/ :
/^\s*\/ko\s*$/, oa = {ul: l, ol: l};
b.e = {
I: {}, childNodes: function (a) {
return A(a) ? $(a) : a.childNodes
}, Y: function (a) {
if (A(a)) for (var a = b.e.childNodes(a), d = 0, c = a.length; d < c; d++) b.removeNode(a[d]); else b.a.ka(a)
}, N: function (a, d) {
if (A(a)) {
b.e.Y(a);
for (var c = a.nextSibling, e = 0, f = d.length; e < f; e++) c.parentNode.insertBefore(d[e], c)
} else b.a.N(a, d)
}, Ua: function (a, b) {
A(a) ? a.parentNode.insertBefore(b, a.nextSibling) : a.firstChild ? a.insertBefore(b, a.firstChild) : a.appendChild(b)
}, Oa: function (a, d, c) {
c ? A(a) ? a.parentNode.insertBefore(d,
c.nextSibling) : c.nextSibling ? a.insertBefore(d, c.nextSibling) : a.appendChild(d) : b.e.Ua(a, d)
}, firstChild: function (a) {
return !A(a) ? a.firstChild : !a.nextSibling || G(a.nextSibling) ? n : a.nextSibling
}, nextSibling: function (a) {
A(a) && (a = Z(a));
return a.nextSibling && G(a.nextSibling) ? n : a.nextSibling
}, ib: function (a) {
return (a = A(a)) ? a[1] : n
}, Sa: function (a) {
if (oa[b.a.u(a)]) {
var d = a.firstChild;
if (d) {
do if (1 === d.nodeType) {
var c;
c = d.firstChild;
var e = n;
if (c) {
do if (e) e.push(c); else if (A(c)) {
var f = Z(c, l);
f ? c = f : e = [c]
} else G(c) &&
(e = [c]); while (c = c.nextSibling)
}
if (c = e) {
e = d.nextSibling;
for (f = 0; f < c.length; f++) e ? a.insertBefore(c[f], e) : a.appendChild(c[f])
}
} while (d = d.nextSibling)
}
}
}
};
b.b("virtualElements", b.e);
b.b("virtualElements.allowedBindings", b.e.I);
b.b("virtualElements.emptyNode", b.e.Y);
b.b("virtualElements.insertAfter", b.e.Oa);
b.b("virtualElements.prepend", b.e.Ua);
b.b("virtualElements.setDomNodeChildren", b.e.N);
b.J = function () {
this.Ga = {}
};
b.a.extend(b.J.prototype, {
nodeHasBindings: function (a) {
switch (a.nodeType) {
case 1:
return a.getAttribute("data-bind") !=
n;
case 8:
return b.e.ib(a) != n;
default:
return q
}
}, getBindings: function (a, b) {
var c = this.getBindingsString(a, b);
return c ? this.parseBindingsString(c, b, a) : n
}, getBindingsString: function (a) {
switch (a.nodeType) {
case 1:
return a.getAttribute("data-bind");
case 8:
return b.e.ib(a);
default:
return n
}
}, parseBindingsString: function (a, d, c) {
try {
var e;
if (!(e = this.Ga[a])) {
var f = this.Ga, g = "with($context){with($data||{}){return{" + b.g.ba(a) + "}}}";
e = f[a] = new Function("$context", "$element", g)
}
return e(d, c)
} catch (h) {
i(Error("Unable to parse bindings.\nMessage: " +
h + ";\nBindings value: " + a))
}
}
});
b.J.instance = new b.J;
b.b("bindingProvider", b.J);
b.c = {};
b.z = function (a, d, c) {
d ? (b.a.extend(this, d), this.$parentContext = d, this.$parent = d.$data, this.$parents = (d.$parents || []).slice(0), this.$parents.unshift(this.$parent)) : (this.$parents = [], this.$root = a, this.ko = b);
this.$data = a;
c && (this[c] = a)
};
b.z.prototype.createChildContext = function (a, d) {
return new b.z(a, this, d)
};
b.z.prototype.extend = function (a) {
var d = b.a.extend(new b.z, this);
return b.a.extend(d, a)
};
b.cb = function (a, d) {
if (2 ==
arguments.length) b.a.f.set(a, "__ko_bindingContext__", d); else return b.a.f.get(a, "__ko_bindingContext__")
};
b.Ea = function (a, d, c) {
1 === a.nodeType && b.e.Sa(a);
return W(a, d, c, l)
};
b.Da = function (a, b) {
(1 === b.nodeType || 8 === b.nodeType) && Y(a, b, l)
};
b.Ca = function (a, b) {
b && (1 !== b.nodeType && 8 !== b.nodeType) && i(Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node"));
b = b || w.document.body;
X(a, b, l)
};
b.ja = function (a) {
switch (a.nodeType) {
case 1:
case 8:
var d = b.cb(a);
if (d) return d;
if (a.parentNode) return b.ja(a.parentNode)
}
return H
};
b.ob = function (a) {
return (a = b.ja(a)) ? a.$data : H
};
b.b("bindingHandlers", b.c);
b.b("applyBindings", b.Ca);
b.b("applyBindingsToDescendants", b.Da);
b.b("applyBindingsToNode", b.Ea);
b.b("contextFor", b.ja);
b.b("dataFor", b.ob);
var ea = {"class": "className", "for": "htmlFor"};
b.c.attr = {
update: function (a, d) {
var c = b.a.d(d()) || {}, e;
for (e in c) if ("string" == typeof e) {
var f = b.a.d(c[e]), g = f === q || f === n || f === H;
g && a.removeAttribute(e);
8 >= b.a.Z && e in ea ? (e = ea[e], g ? a.removeAttribute(e) :
a[e] = f) : g || a.setAttribute(e, f.toString());
"name" === e && b.a.$a(a, g ? "" : f.toString())
}
}
};
b.c.checked = {
init: function (a, d, c) {
b.a.n(a, "click", function () {
var e;
if ("checkbox" == a.type) e = a.checked; else if ("radio" == a.type && a.checked) e = a.value; else return;
var f = d(), g = b.a.d(f);
"checkbox" == a.type && g instanceof Array ? (e = b.a.i(g, a.value), a.checked && 0 > e ? f.push(a.value) : !a.checked && 0 <= e && f.splice(e, 1)) : b.g.ea(f, c, "checked", e, l)
});
"radio" == a.type && !a.name && b.c.uniqueName.init(a, t(l))
}, update: function (a, d) {
var c = b.a.d(d());
"checkbox" == a.type ? a.checked = c instanceof Array ? 0 <= b.a.i(c, a.value) : c : "radio" == a.type && (a.checked = a.value == c)
}
};
b.c.css = {
update: function (a, d) {
var c = b.a.d(d());
if ("object" == typeof c) for (var e in c) {
var f = b.a.d(c[e]);
b.a.da(a, e, f)
} else c = String(c || ""), b.a.da(a, a.__ko__cssValue, q), a.__ko__cssValue = c, b.a.da(a, c, l)
}
};
b.c.enable = {
update: function (a, d) {
var c = b.a.d(d());
c && a.disabled ? a.removeAttribute("disabled") : !c && !a.disabled && (a.disabled = l)
}
};
b.c.disable = {
update: function (a, d) {
b.c.enable.update(a, function () {
return !b.a.d(d())
})
}
};
b.c.event = {
init: function (a, d, c, e) {
var f = d() || {}, g;
for (g in f) (function () {
var f = g;
"string" == typeof f && b.a.n(a, f, function (a) {
var g, m = d()[f];
if (m) {
var p = c();
try {
var r = b.a.L(arguments);
r.unshift(e);
g = m.apply(e, r)
} finally {
g !== l && (a.preventDefault ? a.preventDefault() : a.returnValue = q)
}
p[f + "Bubble"] === q && (a.cancelBubble = l, a.stopPropagation && a.stopPropagation())
}
})
})()
}
};
b.c.foreach = {
Ra: function (a) {
return function () {
var d = a(), c = b.a.ta(d);
if (!c || "number" == typeof c.length) return {foreach: d, templateEngine: b.C.na};
b.a.d(d);
return {
foreach: c.data,
as: c.as,
includeDestroyed: c.includeDestroyed,
afterAdd: c.afterAdd,
beforeRemove: c.beforeRemove,
afterRender: c.afterRender,
beforeMove: c.beforeMove,
afterMove: c.afterMove,
templateEngine: b.C.na
}
}
}, init: function (a, d) {
return b.c.template.init(a, b.c.foreach.Ra(d))
}, update: function (a, d, c, e, f) {
return b.c.template.update(a, b.c.foreach.Ra(d), c, e, f)
}
};
b.g.Q.foreach = q;
b.e.I.foreach = l;
b.c.hasfocus = {
init: function (a, d, c) {
function e(e) {
a.__ko_hasfocusUpdating = l;
var f = a.ownerDocument;
"activeElement" in
f && (e = f.activeElement === a);
f = d();
b.g.ea(f, c, "hasfocus", e, l);
a.__ko_hasfocusUpdating = q
}
var f = e.bind(n, l), g = e.bind(n, q);
b.a.n(a, "focus", f);
b.a.n(a, "focusin", f);
b.a.n(a, "blur", g);
b.a.n(a, "focusout", g)
}, update: function (a, d) {
var c = b.a.d(d());
a.__ko_hasfocusUpdating || (c ? a.focus() : a.blur(), b.r.K(b.a.Aa, n, [a, c ? "focusin" : "focusout"]))
}
};
b.c.html = {
init: function () {
return {controlsDescendantBindings: l}
}, update: function (a, d) {
b.a.ca(a, d())
}
};
var ca = "__ko_withIfBindingData";
P("if");
P("ifnot", q, l);
P("with", l, q, function (a,
b) {
return a.createChildContext(b)
});
b.c.options = {
update: function (a, d, c) {
"select" !== b.a.u(a) && i(Error("options binding applies only to SELECT elements"));
for (var e = 0 == a.length, f = b.a.V(b.a.fa(a.childNodes, function (a) {
return a.tagName && "option" === b.a.u(a) && a.selected
}), function (a) {
return b.k.q(a) || a.innerText || a.textContent
}), g = a.scrollTop, h = b.a.d(d()); 0 < a.length;) b.A(a.options[0]), a.remove(0);
if (h) {
var c = c(), j = c.optionsIncludeDestroyed;
"number" != typeof h.length && (h = [h]);
if (c.optionsCaption) {
var k = x.createElement("option");
b.a.ca(k, c.optionsCaption);
b.k.T(k, H);
a.appendChild(k)
}
for (var d = 0, m = h.length; d < m; d++) {
var p = h[d];
if (!p || !p._destroy || j) {
var k = x.createElement("option"), r = function (a, b, c) {
var d = typeof b;
return "function" == d ? b(a) : "string" == d ? a[b] : c
}, u = r(p, c.optionsValue, p);
b.k.T(k, b.a.d(u));
p = r(p, c.optionsText, u);
b.a.bb(k, p);
a.appendChild(k)
}
}
h = a.getElementsByTagName("option");
d = j = 0;
for (m = h.length; d < m; d++) 0 <= b.a.i(f, b.k.q(h[d])) && (b.a.ab(h[d], l), j++);
a.scrollTop = g;
e && "value" in c && da(a, b.a.ta(c.value), l);
b.a.tb(a)
}
}
};
b.c.options.ra = "__ko.optionValueDomData__";
b.c.selectedOptions = {
init: function (a, d, c) {
b.a.n(a, "change", function () {
var e = d(), f = [];
b.a.o(a.getElementsByTagName("option"), function (a) {
a.selected && f.push(b.k.q(a))
});
b.g.ea(e, c, "value", f)
})
}, update: function (a, d) {
"select" != b.a.u(a) && i(Error("values binding applies only to SELECT elements"));
var c = b.a.d(d());
c && "number" == typeof c.length && b.a.o(a.getElementsByTagName("option"), function (a) {
var d = 0 <= b.a.i(c, b.k.q(a));
b.a.ab(a, d)
})
}
};
b.c.style = {
update: function (a,
d) {
var c = b.a.d(d() || {}), e;
for (e in c) if ("string" == typeof e) {
var f = b.a.d(c[e]);
a.style[e] = f || ""
}
}
};
b.c.submit = {
init: function (a, d, c, e) {
"function" != typeof d() && i(Error("The value for a submit binding must be a function"));
b.a.n(a, "submit", function (b) {
var c, h = d();
try {
c = h.call(e, a)
} finally {
c !== l && (b.preventDefault ? b.preventDefault() : b.returnValue = q)
}
})
}
};
b.c.text = {
update: function (a, d) {
b.a.bb(a, d())
}
};
b.e.I.text = l;
b.c.uniqueName = {
init: function (a, d) {
if (d()) {
var c = "ko_unique_" + ++b.c.uniqueName.nb;
b.a.$a(a,
c)
}
}
};
b.c.uniqueName.nb = 0;
b.c.value = {
init: function (a, d, c) {
function e() {
h = q;
var e = d(), f = b.k.q(a);
b.g.ea(e, c, "value", f)
}
var f = ["change"], g = c().valueUpdate, h = q;
g && ("string" == typeof g && (g = [g]), b.a.P(f, g), f = b.a.Fa(f));
if (b.a.Z && ("input" == a.tagName.toLowerCase() && "text" == a.type && "off" != a.autocomplete && (!a.form || "off" != a.form.autocomplete)) && -1 == b.a.i(f, "propertychange")) b.a.n(a, "propertychange", function () {
h = l
}), b.a.n(a, "blur", function () {
h && e()
});
b.a.o(f, function (c) {
var d = e;
b.a.Nb(c, "after") && (d = function () {
setTimeout(e,
0)
}, c = c.substring(5));
b.a.n(a, c, d)
})
}, update: function (a, d) {
var c = "select" === b.a.u(a), e = b.a.d(d()), f = b.k.q(a), g = e != f;
0 === e && (0 !== f && "0" !== f) && (g = l);
g && (f = function () {
b.k.T(a, e)
}, f(), c && setTimeout(f, 0));
c && 0 < a.length && da(a, e, q)
}
};
b.c.visible = {
update: function (a, d) {
var c = b.a.d(d()), e = "none" != a.style.display;
c && !e ? a.style.display = "" : !c && e && (a.style.display = "none")
}
};
b.c.click = {
init: function (a, d, c, e) {
return b.c.event.init.call(this, a, function () {
var a = {};
a.click = d();
return a
}, c, e)
}
};
b.v = function () {
};
b.v.prototype.renderTemplateSource =
function () {
i(Error("Override renderTemplateSource"))
};
b.v.prototype.createJavaScriptEvaluatorBlock = function () {
i(Error("Override createJavaScriptEvaluatorBlock"))
};
b.v.prototype.makeTemplateSource = function (a, d) {
if ("string" == typeof a) {
var d = d || x, c = d.getElementById(a);
c || i(Error("Cannot find template with ID " + a));
return new b.l.h(c)
}
if (1 == a.nodeType || 8 == a.nodeType) return new b.l.O(a);
i(Error("Unknown template type: " + a))
};
b.v.prototype.renderTemplate = function (a, b, c, e) {
a = this.makeTemplateSource(a, e);
return this.renderTemplateSource(a, b, c)
};
b.v.prototype.isTemplateRewritten = function (a, b) {
return this.allowTemplateRewriting === q ? l : this.makeTemplateSource(a, b).data("isRewritten")
};
b.v.prototype.rewriteTemplate = function (a, b, c) {
a = this.makeTemplateSource(a, c);
b = b(a.text());
a.text(b);
a.data("isRewritten", l)
};
b.b("templateEngine", b.v);
var pa = /(<[a-z]+\d*(\s+(?!data-bind=)[a-z0-9\-]+(=(\"[^\"]*\"|\'[^\']*\'))?)*\s+)data-bind=(["'])([\s\S]*?)\5/gi,
qa = /<\!--\s*ko\b\s*([\s\S]*?)\s*--\>/g;
b.ya = {
ub: function (a,
d, c) {
d.isTemplateRewritten(a, c) || d.rewriteTemplate(a, function (a) {
return b.ya.Fb(a, d)
}, c)
}, Fb: function (a, b) {
return a.replace(pa, function (a, e, f, g, h, j, k) {
return V(k, e, b)
}).replace(qa, function (a, e) {
return V(e, "<\!-- ko --\>", b)
})
}, jb: function (a) {
return b.s.qa(function (d, c) {
d.nextSibling && b.Ea(d.nextSibling, a, c)
})
}
};
b.b("__tr_ambtns", b.ya.jb);
b.l = {};
b.l.h = function (a) {
this.h = a
};
b.l.h.prototype.text = function () {
var a = b.a.u(this.h), a = "script" === a ? "text" : "textarea" === a ? "value" : "innerHTML";
if (0 == arguments.length) return this.h[a];
var d = arguments[0];
"innerHTML" === a ? b.a.ca(this.h, d) : this.h[a] = d
};
b.l.h.prototype.data = function (a) {
if (1 === arguments.length) return b.a.f.get(this.h, "templateSourceData_" + a);
b.a.f.set(this.h, "templateSourceData_" + a, arguments[1])
};
b.l.O = function (a) {
this.h = a
};
b.l.O.prototype = new b.l.h;
b.l.O.prototype.text = function () {
if (0 == arguments.length) {
var a = b.a.f.get(this.h, "__ko_anon_template__") || {};
a.za === H && a.ia && (a.za = a.ia.innerHTML);
return a.za
}
b.a.f.set(this.h, "__ko_anon_template__", {za: arguments[0]})
};
b.l.h.prototype.nodes =
function () {
if (0 == arguments.length) return (b.a.f.get(this.h, "__ko_anon_template__") || {}).ia;
b.a.f.set(this.h, "__ko_anon_template__", {ia: arguments[0]})
};
b.b("templateSources", b.l);
b.b("templateSources.domElement", b.l.h);
b.b("templateSources.anonymousTemplate", b.l.O);
var N;
b.va = function (a) {
a != H && !(a instanceof b.v) && i(Error("templateEngine must inherit from ko.templateEngine"));
N = a
};
b.ua = function (a, d, c, e, f) {
c = c || {};
(c.templateEngine || N) == H && i(Error("Set a template engine before calling renderTemplate"));
f = f || "replaceChildren";
if (e) {
var g = M(e);
return b.j(function () {
var h = d && d instanceof b.z ? d : new b.z(b.a.d(d)),
j = "function" == typeof a ? a(h.$data, h) : a, h = S(e, f, j, h, c);
"replaceNode" == f && (e = h, g = M(e))
}, n, {
Ja: function () {
return !g || !b.a.X(g)
}, W: g && "replaceNode" == f ? g.parentNode : g
})
}
return b.s.qa(function (e) {
b.ua(a, d, c, e, "replaceNode")
})
};
b.Lb = function (a, d, c, e, f) {
function g(a, b) {
T(b, j);
c.afterRender && c.afterRender(b, a)
}
function h(d, e) {
j = f.createChildContext(b.a.d(d), c.as);
j.$index = e;
var g = "function" == typeof a ?
a(d, j) : a;
return S(n, "ignoreTargetNode", g, j, c)
}
var j;
return b.j(function () {
var a = b.a.d(d) || [];
"undefined" == typeof a.length && (a = [a]);
a = b.a.fa(a, function (a) {
return c.includeDestroyed || a === H || a === n || !b.a.d(a._destroy)
});
b.r.K(b.a.Za, n, [e, a, h, c, g])
}, n, {W: e})
};
b.c.template = {
init: function (a, d) {
var c = b.a.d(d());
if ("string" != typeof c && !c.name && (1 == a.nodeType || 8 == a.nodeType)) c = 1 == a.nodeType ? a.childNodes : b.e.childNodes(a), c = b.a.Gb(c), (new b.l.O(a)).nodes(c);
return {controlsDescendantBindings: l}
}, update: function (a,
d, c, e, f) {
var d = b.a.d(d()), c = {}, e = l, g, h = n;
"string" != typeof d && (c = d, d = c.name, "if" in c && (e = b.a.d(c["if"])), e && "ifnot" in c && (e = !b.a.d(c.ifnot)), g = b.a.d(c.data));
"foreach" in c ? h = b.Lb(d || a, e && c.foreach || [], c, a, f) : e ? (f = "data" in c ? f.createChildContext(g, c.as) : f, h = b.ua(d || a, f, c, a)) : b.e.Y(a);
f = h;
(g = b.a.f.get(a, "__ko__templateComputedDomDataKey__")) && "function" == typeof g.B && g.B();
b.a.f.set(a, "__ko__templateComputedDomDataKey__", f && f.oa() ? f : H)
}
};
b.g.Q.template = function (a) {
a = b.g.aa(a);
return 1 == a.length && a[0].unknown ||
b.g.Db(a, "name") ? n : "This template engine does not support anonymous templates nested within its templates"
};
b.e.I.template = l;
b.b("setTemplateEngine", b.va);
b.b("renderTemplate", b.ua);
b.a.Ia = function (a, b, c) {
a = a || [];
b = b || [];
return a.length <= b.length ? R(a, b, "added", "deleted", c) : R(b, a, "deleted", "added", c)
};
b.b("utils.compareArrays", b.a.Ia);
b.a.Za = function (a, d, c, e, f) {
function g(a, b) {
s = k[b];
v !== b && (y[a] = s);
s.ma(v++);
L(s.M);
r.push(s);
z.push(s)
}
function h(a, c) {
if (a) for (var d = 0, e = c.length; d < e; d++) c[d] && b.a.o(c[d].M,
function (b) {
a(b, d, c[d].U)
})
}
for (var d = d || [], e = e || {}, j = b.a.f.get(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult") === H, k = b.a.f.get(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult") || [], m = b.a.V(k, function (a) {
return a.U
}), p = b.a.Ia(m, d), r = [], u = 0, v = 0, A = [], z = [], d = [], y = [], m = [], s, C = 0, B, D; B = p[C]; C++) switch (D = B.moved, B.status) {
case "deleted":
D === H && (s = k[u], s.j && s.j.B(), A.push.apply(A, L(s.M)), e.beforeRemove && (d[C] = s, z.push(s)));
u++;
break;
case "retained":
g(C, u++);
break;
case "added":
D !== H ? g(C,
D) : (s = {U: B.value, ma: b.m(v++)}, r.push(s), z.push(s), j || (m[C] = s))
}
h(e.beforeMove, y);
b.a.o(A, e.beforeRemove ? b.A : b.removeNode);
for (var C = 0, j = b.e.firstChild(a), G; s = z[C]; C++) {
s.M || b.a.extend(s, ga(a, c, s.U, f, s.ma));
for (u = 0; p = s.M[u]; j = p.nextSibling, G = p, u++) p !== j && b.e.Oa(a, p, G);
!s.zb && f && (f(s.U, s.M, s.ma), s.zb = l)
}
h(e.beforeRemove, d);
h(e.afterMove, y);
h(e.afterAdd, m);
b.a.f.set(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult", r)
};
b.b("utils.setDomNodeChildrenFromArrayMapping", b.a.Za);
b.C = function () {
this.allowTemplateRewriting =
q
};
b.C.prototype = new b.v;
b.C.prototype.renderTemplateSource = function (a) {
var d = !(9 > b.a.Z) && a.nodes ? a.nodes() : n;
if (d) return b.a.L(d.cloneNode(l).childNodes);
a = a.text();
return b.a.sa(a)
};
b.C.na = new b.C;
b.va(b.C.na);
b.b("nativeTemplateEngine", b.C);
b.pa = function () {
var a = this.Cb = function () {
if ("undefined" == typeof E || !E.tmpl) return 0;
try {
if (0 <= E.tmpl.tag.tmpl.open.toString().indexOf("__")) return 2
} catch (a) {
}
return 1
}();
this.renderTemplateSource = function (b, c, e) {
e = e || {};
2 > a && i(Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later."));
var f = b.data("precompiled");
f || (f = b.text() || "", f = E.template(n, "{{ko_with $item.koBindingContext}}" + f + "{{/ko_with}}"), b.data("precompiled", f));
b = [c.$data];
c = E.extend({koBindingContext: c}, e.templateOptions);
c = E.tmpl(f, b, c);
c.appendTo(x.createElement("div"));
E.fragments = {};
return c
};
this.createJavaScriptEvaluatorBlock = function (a) {
return "{{ko_code ((function() { return " + a + " })()) }}"
};
this.addTemplate = function (a, b) {
x.write("<script type='text/html' id='" + a + "'>" + b + "<\/script>")
};
0 < a && (E.tmpl.tag.ko_code =
{open: "__.push($1 || '');"}, E.tmpl.tag.ko_with = {open: "with($1) {", close: "} "})
};
b.pa.prototype = new b.v;
v = new b.pa;
0 < v.Cb && b.va(v);
b.b("jqueryTmplTemplateEngine", b.pa)
}
"function" === typeof require && "object" === typeof exports && "object" === typeof module ? K(module.exports || exports) : "function" === typeof define && define.amd ? define(["exports"], K) : K(w.ko = {});
l;
})();
// Knockout Mapping plugin v1.0
// (c) 2011 Steven Sanderson, Roy Jacobs - http://knockoutjs.com/
// License: Ms-Pl (http://www.opensource.org/licenses/ms-pl.html)
ko.exportSymbol = function (i, p) {
for (var j = i.split("."), r = window, k = 0; k < j.length - 1; k++) r = r[j[k]];
r[j[j.length - 1]] = p
};
ko.exportProperty = function (i, p, j) {
i[p] = j
};
(function () {
function i(a, c) {
for (var b in c) c.hasOwnProperty(b) && c[b] && (a[b] = c[b])
}
function p(a, c) {
var b = {};
i(b, a);
i(b, c);
return b
}
function j(a) {
if (a && typeof a === "object" && a.constructor == (new Date).constructor) return "date";
return typeof a
}
function r() {
ko.dependentObservable = function (a, c, b) {
b = b || {};
b.deferEvaluation = !0;
a = new v(a, c, b);
a.__ko_proto__ = v;
return a
}
}
function k(a, c, b, d, e, g) {
var l = ko.utils.unwrapObservable(c) instanceof Array;
if (ko.mapping.isMapped(a)) var h = ko.utils.unwrapObservable(a)[m], b =
p(h, b);
d = d || new x;
if (d.get(c)) return a;
e = e || "";
if (l) {
var g = [], f = function (a) {
return a
};
if (b[e] && b[e].key) f = b[e].key;
if (!ko.isObservable(a)) a = ko.observableArray([]), a.mappedRemove = function (b) {
var c = typeof b == "function" ? b : function (a) {
return a === f(b)
};
return a.remove(function (a) {
return c(f(a))
})
}, a.mappedRemoveAll = function (b) {
var c = s(b, f);
return a.remove(function (a) {
return ko.utils.arrayIndexOf(c, f(a)) != -1
})
}, a.mappedDestroy = function (b) {
var c = typeof b == "function" ? b : function (a) {
return a === f(b)
};
return a.destroy(function (a) {
return c(f(a))
})
},
a.mappedDestroyAll = function (b) {
var c = s(b, f);
return a.destroy(function (a) {
return ko.utils.arrayIndexOf(c, f(a)) != -1
})
}, a.mappedIndexOf = function (b) {
var c = s(a(), f), b = f(b);
return ko.utils.arrayIndexOf(c, b)
};
for (var l = s(ko.utils.unwrapObservable(a), f).sort(), h = s(c, f).sort(), l = ko.utils.compareArrays(l, h), h = [], i = 0, u = l.length; i < u; i++) {
var q = l[i], n;
switch (q.status) {
case "added":
var o = t(ko.utils.unwrapObservable(c), q.value, f);
n = ko.utils.unwrapObservable(k(void 0, o, b, d, e, a));
o = ko.utils.arrayIndexOf(ko.utils.unwrapObservable(c),
o);
h[o] = n;
break;
case "retained":
o = t(ko.utils.unwrapObservable(c), q.value, f);
n = t(a, q.value, f);
k(n, o, b, d, e, a);
o = ko.utils.arrayIndexOf(ko.utils.unwrapObservable(c), o);
h[o] = n;
break;
case "deleted":
n = t(a, q.value, f)
}
g.push({event: q.status, item: n})
}
a(h);
b[e] && b[e].arrayChanged && ko.utils.arrayForEach(g, function (a) {
b[e].arrayChanged(a.event, a.item)
})
} else if (w(c)) {
if (!a) if (b[e] && b[e].create instanceof Function) return r(), n = b[e].create({
data: c,
parent: g
}), ko.dependentObservable = v, n; else a = {};
d.save(c, a);
y(c,
function (f) {
var l = d.get(c[f]);
a[f] = l ? l : k(a[f], c[f], b, d, f, a);
b.mappedProperties[z(e, c, f)] = !0
})
} else switch (j(c)) {
case "function":
a = c;
break;
default:
ko.isWriteableObservable(a) ? a(ko.utils.unwrapObservable(c)) : a = ko.observable(ko.utils.unwrapObservable(c))
}
return a
}
function u(a, c) {
var b;
c && (b = c(a));
b || (b = a);
return ko.utils.unwrapObservable(b)
}
function t(a, c, b) {
a = ko.utils.arrayFilter(ko.utils.unwrapObservable(a), function (a) {
return u(a, b) == c
});
if (a.length == 0) throw Error("When calling ko.update*, the key '" +
c + "' was not found!");
if (a.length > 1 && w(a[0])) throw Error("When calling ko.update*, the key '" + c + "' was not unique!");
return a[0]
}
function s(a, c) {
return ko.utils.arrayMap(ko.utils.unwrapObservable(a), function (a) {
return c ? u(a, c) : a
})
}
function y(a, c) {
if (a instanceof Array) for (var b = 0; b < a.length; b++) c(b); else for (b in a) c(b)
}
function w(a) {
return j(a) == "object" && a !== null && a !== void 0
}
function z(a, c, b) {
var d = a || "";
c instanceof Array ? a && (d += "[" + b + "]") : (a && (d += "."), d += b);
return d
}
function x() {
var a = [], c = [];
this.save = function (b, d) {
var e = ko.utils.arrayIndexOf(a, b);
e >= 0 ? c[e] = d : (a.push(b), c.push(d))
};
this.get = function (b) {
b = ko.utils.arrayIndexOf(a, b);
return b >= 0 ? c[b] : void 0
}
}
ko.mapping = {};
var m = "__ko_mapping__", v = ko.dependentObservable, g;
ko.mapping.fromJS = function (a, c, b) {
if (arguments.length == 0) throw Error("When calling ko.fromJS, pass the object you want to convert.");
var d;
d = c || {};
if (d.create instanceof Function || d.key instanceof Function || d.arrayChanged instanceof Function) d = {"": d};
d.mappedProperties =
{};
c = d;
d = k(b, a, c);
d[m] = p(d[m], c);
return d
};
ko.mapping.fromJSON = function (a, c) {
var b = ko.utils.parseJson(a);
return ko.mapping.fromJS(b, c)
};
ko.mapping.isMapped = function (a) {
return (a = ko.utils.unwrapObservable(a)) && a[m]
};
ko.mapping.updateFromJS = function (a, c) {
if (arguments.length < 2) throw Error("When calling ko.updateFromJS, pass: the object to update and the object you want to update from.");
if (!a) throw Error("The object is undefined.");
if (!a[m]) throw Error("The object you are trying to update was not created by a 'fromJS' or 'fromJSON' mapping.");
return k(a, c, a[m])
};
ko.mapping.updateFromJSON = function (a, c, b) {
c = ko.utils.parseJson(c);
return ko.mapping.updateFromJS(a, c, b)
};
ko.mapping.toJS = function (a, c) {
g || ko.mapping.resetDefaultOptions();
if (arguments.length == 0) throw Error("When calling ko.mapping.toJS, pass the object you want to convert.");
if (!(g.ignore instanceof Array)) throw Error("ko.mapping.defaultOptions().ignore should be an array.");
if (!(g.include instanceof Array)) throw Error("ko.mapping.defaultOptions().include should be an array.");
c = c || {};
if (!(c.ignore instanceof Array)) c.ignore = [c.ignore];
c.ignore = c.ignore.concat(g.ignore);
if (!(c.include instanceof Array)) c.include = [c.include];
c.include = c.include.concat(g.include);
return ko.mapping.visitModel(a, function (a) {
return ko.utils.unwrapObservable(a)
}, c)
};
ko.mapping.toJSON = function (a, c) {
var b = ko.mapping.toJS(a, c);
return ko.utils.stringifyJson(b)
};
ko.mapping.defaultOptions = function () {
if (arguments.length > 0) g = arguments[0]; else return g
};
ko.mapping.resetDefaultOptions = function () {
g = {
include: ["_destroy"],
ignore: []
}
};
ko.mapping.visitModel = function (a, c, b) {
b = b || {};
b.visitedObjects = b.visitedObjects || new x;
var d, e = ko.utils.unwrapObservable(a);
if (w(e)) c(a, b.parentName), d = e instanceof Array ? [] : {}; else return c(a, b.parentName);
b.visitedObjects.save(a, d);
var g = b.parentName;
y(e, function (a) {
if (!(b.ignore && ko.utils.arrayIndexOf(b.ignore, a) != -1)) {
var h = e[a];
b.parentName = z(g, e, a);
if (!(b.include && ko.utils.arrayIndexOf(b.include, a) === -1) || !e[m] || !e[m].mappedProperties || e[m].mappedProperties[a] || e instanceof Array) switch (j(ko.utils.unwrapObservable(h))) {
case "object":
case "undefined":
var f =
b.visitedObjects.get(h);
d[a] = f !== void 0 ? f : ko.mapping.visitModel(h, c, b);
break;
default:
d[a] = c(h, b.parentName)
}
}
});
return d
};
ko.exportSymbol("ko.mapping", ko.mapping);
ko.exportSymbol("ko.mapping.fromJS", ko.mapping.fromJS);
ko.exportSymbol("ko.mapping.fromJSON", ko.mapping.fromJSON);
ko.exportSymbol("ko.mapping.isMapped", ko.mapping.isMapped);
ko.exportSymbol("ko.mapping.defaultOptions", ko.mapping.defaultOptions);
ko.exportSymbol("ko.mapping.toJS", ko.mapping.toJS);
ko.exportSymbol("ko.mapping.toJSON", ko.mapping.toJSON);
ko.exportSymbol("ko.mapping.updateFromJS", ko.mapping.updateFromJS);
ko.exportSymbol("ko.mapping.updateFromJSON", ko.mapping.updateFromJSON);
ko.exportSymbol("ko.mapping.visitModel", ko.mapping.visitModel)
})();
/**
* Knockout Notification plugin v1.1.0
* (c) 2011 Jan Hartigan - http://www.janhartigan.com
* License: dual (MIT, GPL)
*/
ko.bindingHandlers.notification = {
update: function (e, t, n, r) {
var i = t(), s = typeof i == "object" ? i : {message: i}, o = ko.utils.unwrapObservable(s.message),
u = s.duration !== undefined ? ko.utils.unwrapObservable(s.duration) : 5e3,
a = s.fadeoutDuration !== undefined ? ko.utils.unwrapObservable(s.fadeoutDuration) : 200,
f = s.hide !== undefined ? ko.utils.unwrapObservable(s.hide) : true,
l = s.fade !== undefined ? ko.utils.unwrapObservable(s.fade) : true,
c = s.callback !== undefined ? ko.utils.unwrapObservable(s.callback) : function () {
}, h = typeof jQuery != "undefined";
if (o === null || o === undefined) o = "";
e.innerHTML = o;
clearTimeout(e.notificationTimer);
if (o == "") {
e.style.display = "none";
return
}
if (h) jQuery(e).stop(true, true).show(); else e.style.display = "";
if (f) {
e.notificationTimer = setTimeout(function () {
if (h) {
if (l) jQuery(e).fadeOut(a, function () {
s.message("");
c()
}); else {
jQuery(e).hide();
s.message("");
c()
}
} else {
e.style.display = "none";
c()
}
}, u)
} else {
c()
}
}
};
/*
* Extension to the knockoutjs mapping plugin
* http://github.com/janhartigan/knockout-mapping-updatedata
* Requires KnockoutJS and the mapping plugin
*
* Dual licensed under the MIT or GPL Version 2 licenses.
* Jan Hartigan
*/
(function () {
/**
* A function that lets you "update from js" without overriding all the view model properties and methods. You just need to supply
* the viewModel, the original JS model on which you based your data (typically what you'd use in the mapping fromJS method), and the new JS
* object that has the updated information.
*
* @param Object viewModel
* @param Object dataModel
* @param Object jsObject
*
* @return Object (returns the viewModel)
*/
ko.mapping.updateData = function (viewModel, dataModel, jsObject) {
if (arguments.length < 3) throw new Error("When calling ko.updateData, pass: the view model, the data model, and the updated data.");
if (!viewModel) throw new Error("The view model is undefined.");
for (var i in dataModel) {
if (i in jsObject && i in viewModel && typeof dataModel[i] != 'function') {
viewModel[i](jsObject[i]);
}
}
return viewModel;
}
ko.exportSymbol('ko.mapping.updateData', ko.mapping.updateData);
})();
/*!
* accounting.js v0.3.2, copyright 2011 Joss Crowcroft, MIT license, http://josscrowcroft.github.com/accounting.js
*/
(function (p, z) {
function q(a) {
return !!("" === a || a && a.charCodeAt && a.substr)
}
function m(a) {
return u ? u(a) : "[object Array]" === v.call(a)
}
function r(a) {
return "[object Object]" === v.call(a)
}
function s(a, b) {
var d, a = a || {}, b = b || {};
for (d in b) b.hasOwnProperty(d) && null == a[d] && (a[d] = b[d]);
return a
}
function j(a, b, d) {
var c = [], e, h;
if (!a) return c;
if (w && a.map === w) return a.map(b, d);
for (e = 0, h = a.length; e < h; e++) c[e] = b.call(d, a[e], e, a);
return c
}
function n(a, b) {
a = Math.round(Math.abs(a));
return isNaN(a) ? b : a
}
function x(a) {
var b = c.settings.currency.format;
"function" === typeof a && (a = a());
return q(a) && a.match("%v") ? {
pos: a,
neg: a.replace("-", "").replace("%v", "-%v"),
zero: a
} : !a || !a.pos || !a.pos.match("%v") ? !q(b) ? b : c.settings.currency.format = {
pos: b,
neg: b.replace("%v", "-%v"),
zero: b
} : a
}
var c = {
version: "0.3.2",
settings: {
currency: {symbol: "$", format: "%s%v", decimal: ".", thousand: ",", precision: 2, grouping: 3},
number: {precision: 0, grouping: 3, thousand: ",", decimal: "."}
}
}, w = Array.prototype.map, u = Array.isArray, v = Object.prototype.toString,
o = c.unformat = c.parse = function (a, b) {
if (m(a)) return j(a, function (a) {
return o(a, b)
});
a = a || 0;
if ("number" === typeof a) return a;
var b = b || ".", c = RegExp("[^0-9-" + b + "]", ["g"]),
c = parseFloat(("" + a).replace(/\((.*)\)/, "-$1").replace(c, "").replace(b, "."));
return !isNaN(c) ? c : 0
}, y = c.toFixed = function (a, b) {
var b = n(b, c.settings.number.precision), d = Math.pow(10, b);
return (Math.round(c.unformat(a) * d) / d).toFixed(b)
}, t = c.formatNumber = function (a, b, d, i) {
if (m(a)) return j(a, function (a) {
return t(a, b, d, i)
});
var a = o(a), e = s(r(b) ? b : {precision: b, thousand: d, decimal: i}, c.settings.number), h = n(e.precision),
f = 0 > a ? "-" : "", g = parseInt(y(Math.abs(a || 0), h), 10) + "", l = 3 < g.length ? g.length % 3 : 0;
return f + (l ? g.substr(0, l) + e.thousand : "") + g.substr(l).replace(/(\d{3})(?=\d)/g, "$1" + e.thousand) + (h ? e.decimal + y(Math.abs(a), h).split(".")[1] : "")
}, A = c.formatMoney = function (a, b, d, i, e, h) {
if (m(a)) return j(a, function (a) {
return A(a, b, d, i, e, h)
});
var a = o(a),
f = s(r(b) ? b : {symbol: b, precision: d, thousand: i, decimal: e, format: h}, c.settings.currency),
g = x(f.format);
return (0 < a ? g.pos : 0 > a ? g.neg : g.zero).replace("%s", f.symbol).replace("%v", t(Math.abs(a), n(f.precision), f.thousand, f.decimal))
};
c.formatColumn = function (a, b, d, i, e, h) {
if (!a) return [];
var f = s(r(b) ? b : {symbol: b, precision: d, thousand: i, decimal: e, format: h}, c.settings.currency),
g = x(f.format), l = g.pos.indexOf("%s") < g.pos.indexOf("%v") ? !0 : !1, k = 0, a = j(a, function (a) {
if (m(a)) return c.formatColumn(a, f);
a = o(a);
a = (0 < a ? g.pos : 0 > a ? g.neg : g.zero).replace("%s", f.symbol).replace("%v", t(Math.abs(a), n(f.precision), f.thousand, f.decimal));
if (a.length > k) k = a.length;
return a
});
return j(a, function (a) {
return q(a) && a.length < k ? l ? a.replace(f.symbol, f.symbol + Array(k - a.length + 1).join(" ")) : Array(k - a.length + 1).join(" ") + a : a
})
};
if ("undefined" !== typeof exports) {
if ("undefined" !== typeof module && module.exports) exports = module.exports = c;
exports.accounting = c
} else "function" === typeof define && define.amd ? define([], function () {
return c
}) : (c.noConflict = function (a) {
return function () {
p.accounting = a;
c.noConflict = z;
return c
}
}(p.accounting), p.accounting = c)
})(this);
/*!
* Lightweight Colorpicker - jQuery Plugin
* Provides simple scalable colorpicker
*
* © 2012 Dmitriy Kubyshkin (http://kubyshkin.ru)
*
* Version: 1.0
* Requires: jQuery v1.7+
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function () {
var a = typeof WebKitCSSMatrix != "undefined" && (new WebKitCSSMatrix).m11,
b = {start: "mousedown touchstart", move: "mousemove touchmove", end: "mouseup touchend"};
Function.prototype.bind || (Function.prototype.bind = function (a) {
var b = Array.prototype.slice.call(arguments, 2), c = this;
return function () {
return c.apply(a, b.concat(Array.prototype.slice.call(arguments)))
}
});
var c = function (a) {
var b = a[0].toString(16), c = a[1].toString(16), d = a[2].toString(16);
return b.length > 1 || (b = "0" + b), c.length > 1 || (c = "0" + c), d.length > 1 || (d = "0" + d), b + c + d
}, d = function (a) {
return a = a.replace("#", ""), a.length === 3 && (a = a[0] + a[0] + a[1] + a[1] + a[2] + a[2]), [parseInt(a.substring(0, 2), 16), parseInt(a.substring(2, 4), 16), parseInt(a.substring(4, 6), 16)]
}, e = function (a) {
var b = (a[0] - Math.floor(a[0])) * 6, c = b - Math.floor(b), d = a[2] * (1 - a[1]), e = a[2] * (1 - a[1] * c),
f = a[2] * (1 - a[1] * (1 - c)), g = 0, h = 0, i = 0;
switch (Math.floor(b)) {
case 0:
g = a[2] * 255 + .5, h = f * 255 + .5, i = d * 255 + .5;
break;
case 1:
g = e * 255 + .5, h = a[2] * 255 + .5, i = d * 255 + .5;
break;
case 2:
g = d * 255 + .5, h = a[2] * 255 + .5, i = f * 255 + .5;
break;
case 3:
g = d * 255 + .5, h = e * 255 + .5, i = a[2] * 255 + .5;
break;
case 4:
g = f * 255 + .5, h = d * 255 + .5, i = a[2] * 255 + .5;
break;
case 5:
g = a[2] * 255 + .5, h = d * 255 + .5, i = e * 255 + .5
}
return [Math.floor(g), Math.floor(h), Math.floor(i)]
}, f = function (a) {
var b = a[0] / 255, c = a[1] / 255, d = a[2] / 255, e = Math.max(b, c, d), f = Math.min(b, c, d), g, h, i = e,
j = e - f;
h = e == 0 ? 0 : j / e;
if (e == f) g = 0; else {
switch (e) {
case b:
g = (c - d) / j + (c < d ? 6 : 0);
break;
case c:
g = (d - b) / j + 2;
break;
case d:
g = (b - c) / j + 4
}
g /= 6
}
return [g, h, i]
}, g = function (a) {
this.dragStart = this.dragStart.bind(this), this.dragMove = this.dragMove.bind(this), this.dragEnd = this.dragEnd.bind(this), this.onChange = this.onChange.bind(this), this.dragging = !1, this.$input = $(a).on("change input", this.onChange), this.$el = $('<div class="lw-colorpicker"/>').html(g.template).on(b.start, function (a) {
return !1
}).on(b.start, ".lw-sb, .lw-h", this.dragStart).appendTo(document.body), this.onChange(), this.updatePosition()
};
g.template = '<div class="lw-sb"> <img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAABCAYAAAAxWXB3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpi/A8EDAwMIMxAgCYkhs4mho9LjBg5euJ/FMj/o7EYpXxamPmPDuFAjbihJyY1nZOSl4jNoxg0QIABAI+56gCQgk6WAAAAAElFTkSuQmCC"> <img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAEACAYAAAByPhyYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpiYIACRiYQyUQci1gJbFySxPBLkKRkkBBM1FPHNEAS9BAbeIuoLUGTJDBICEpyKJnFA+mFEVYWQIABAG2AAvsKiLR6AAAAAElFTkSuQmCC"> <div class="lw-handle"></div> </div> <div class="lw-h"> <img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAEACAIAAAD9XIvPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALxJREFUeNp00tkKhTAMBNB07/3/n7WL7U0hwhDSh8OkKjoEaRN5oggSy5DFUA2/y4wKZJH3oyQibVp+kfMv9zumGJDdyKMZiaxr+nq/GMoE3JMcnY1uT4H3GlmCzIYCqpHVOFvPfjJkgvx6RC65uJ9bvOdXTDBAh0QNUs8W69luGAr24u1ux6slH3jDESQli2IkqpdZn7Oakf429KLNXbm2pymGZJe5iwZ5PGp+1Pxc7jWlKwPwD7sD/QUYAMWijuyJPChnAAAAAElFTkSuQmCC"> <div class="lw-handle"></div> </div>', g.prototype.destroy = function () {
this.$el.remove()
}, g.prototype.dragStart = function (a) {
if (a.which !== 1) return;
var c = $(a.currentTarget), d = c.offset();
return this.area = "h", this.areaOffset = d, this.areaDimensions = {
width: c.width(),
height: c.height()
}, this.dragging = c.find(".lw-handle"), $(document.body).on(b.move, this.dragMove), $(document.body).on(b.end, this.dragEnd), c.hasClass("lw-sb") && (this.area = "sb"), this.dragMove(a), !1
}, g.prototype.dragMove = function (a) {
if (!this.dragging) return;
var b = {top: a.pageY - this.areaOffset.top, left: 0};
this.area === "sb" && (b.left = a.pageX - this.areaOffset.left), b.left >= 0 || (b.left = 0), b.top >= 0 || (b.top = 0), b.left <= this.areaDimensions.width || (b.left = this.areaDimensions.width), b.top <= this.areaDimensions.height || (b.top = this.areaDimensions.height), this.setPosition(this.dragging, b);
var d = this.getHSB();
return this.updateInput("#" + c(e(d))), d[1] = d[2] = 1, this.$el.find(".lw-sb").css("background", "#" + c(e(d))), !1
}, g.prototype.dragEnd = function (a) {
if (!this.dragging) return;
return this.dragging = null, $(document.body).unbind(b.move, this.dragMove), $(document.body).unbind(b.end, this.dragEnd), !1
}, g.prototype.onChange = function () {
if (this.dragging) return;
var a = this.$input.val();
a.match(/^\#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/) && this.setHex(a)
}, g.prototype.getHex = function () {
return c(this.getRGB())
}, g.prototype.setHex = function (a) {
this.setRGB(d(a))
}, g.prototype.getRGB = function () {
return e(this.getHSB())
}, g.prototype.setRGB = function (a) {
this.setHSB(f(a))
}, g.prototype.getHSB = function () {
var a = this.$el.find(".lw-sb"), b = this.$el.find(".lw-h"), c = this.getPosition(a.find(".lw-handle")),
d = this.getPosition(b.find(".lw-handle"));
return [1 - d.top / b.height(), c.left / a.width(), 1 - c.top / a.height()]
}, g.prototype.setHSB = function (a) {
var b = this.$el.find(".lw-sb"), d = this.$el.find(".lw-h");
this.setPosition(b.find(".lw-handle"), {
top: Math.floor((1 - a[2]) * b.height()),
left: Math.floor(a[1] * b.width())
}), this.setPosition(d.find(".lw-handle"), {
top: Math.floor((1 - a[0]) * d.height()),
left: 0
}), a[1] = a[2] = 1, this.$el.find(".lw-sb").css("background", "#" + c(e(a)))
}, g.prototype.updateInput = function (a) {
this.$input.val(a).trigger("change")
}, g.prototype.updatePosition = function () {
var a, b, c, d, e;
a = this.$input.offset(), e = this.$el.outerWidth(), d = this.$el.outerHeight(), b = a.left, $("body").width() > b + e ? this.$el.css({left: b}) : a.left > e ? this.$el.css({left: $("body").width() - e - 31}) : this.$el.css({left: b}), this.$el.removeClass("lw-opposite-vertical"), c = a.top + this.$input.outerHeight(), $(document).height() > c + d ? this.$el.css({top: c}) : a.top > d ? (this.$el.css({top: a.top - d}), this.$el.addClass("lw-opposite-vertical")) : this.$el.css({top: c})
}, a ? (g.prototype.getPosition = function (a) {
var b = a.get(0).style.webkitTransform, c = {top: 0, left: 0};
return b && (b = b.split("(")[1].split(","), c.left = parseInt(b[0]), c.top = parseInt(b[1])), c
}, g.prototype.setPosition = function (a, b) {
a.get(0).style.webkitTransform = "translate3d(" + b.left + "px," + b.top + "px,0)"
}) : (g.prototype.getPosition = function (a) {
return a.position()
}, g.prototype.setPosition = function (a, b) {
a.css(b)
}), $(function () {
$(document).on("focus", '[data-type="color"]', function (a) {
var b = $(a.target), c = new g(b), d = function () {
c.destroy(), b.off("blur", d)
};
b.on("blur", d)
})
})
})();
window.JSON || (window.JSON = {}), function () {
function f(a) {
return a < 10 ? "0" + a : a
}
function quote(a) {
return escapable.lastIndex = 0, escapable.test(a) ? '"' + a.replace(escapable, function (a) {
var b = meta[a];
return typeof b == "string" ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
}) + '"' : '"' + a + '"'
}
function str(a, b) {
var c, d, e, f, g = gap, h, i = b[a];
i && typeof i == "object" && typeof i.toJSON == "function" && (i = i.toJSON(a)), typeof rep == "function" && (i = rep.call(b, a, i));
switch (typeof i) {
case"string":
return quote(i);
case"number":
return isFinite(i) ? String(i) : "null";
case"boolean":
case"null":
return String(i);
case"object":
if (!i) return "null";
gap += indent, h = [];
if (Object.prototype.toString.apply(i) === "[object Array]") {
f = i.length;
for (c = 0; c < f; c += 1) h[c] = str(c, i) || "null";
return e = h.length === 0 ? "[]" : gap ? "[\n" + gap + h.join(",\n" + gap) + "\n" + g + "]" : "[" + h.join(",") + "]", gap = g, e
}
if (rep && typeof rep == "object") {
f = rep.length;
for (c = 0; c < f; c += 1) d = rep[c], typeof d == "string" && (e = str(d, i), e && h.push(quote(d) + (gap ? ": " : ":") + e))
} else for (d in i) Object.hasOwnProperty.call(i, d) && (e = str(d, i), e && h.push(quote(d) + (gap ? ": " : ":") + e));
return e = h.length === 0 ? "{}" : gap ? "{\n" + gap + h.join(",\n" + gap) + "\n" + g + "}" : "{" + h.join(",") + "}", gap = g, e
}
}
"use strict", typeof Date.prototype.toJSON != "function" && (Date.prototype.toJSON = function (a) {
return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
}, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (a) {
return this.valueOf()
});
var JSON = window.JSON,
cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
gap, indent, meta = {"\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\"},
rep;
typeof JSON.stringify != "function" && (JSON.stringify = function (a, b, c) {
var d;
gap = "", indent = "";
if (typeof c == "number") for (d = 0; d < c; d += 1) indent += " "; else typeof c == "string" && (indent = c);
rep = b;
if (!b || typeof b == "function" || typeof b == "object" && typeof b.length == "number") return str("", {"": a});
throw new Error("JSON.stringify")
}), typeof JSON.parse != "function" && (JSON.parse = function (text, reviver) {
function walk(a, b) {
var c, d, e = a[b];
if (e && typeof e == "object") for (c in e) Object.hasOwnProperty.call(e, c) && (d = walk(e, c), d !== undefined ? e[c] = d : delete e[c]);
return reviver.call(a, b, e)
}
var j;
text = String(text), cx.lastIndex = 0, cx.test(text) && (text = text.replace(cx, function (a) {
return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
}));
if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return j = eval("(" + text + ")"), typeof reviver == "function" ? walk({"": j}, "") : j;
throw new SyntaxError("JSON.parse")
})
}(), function (a, b) {
"use strict";
var c = a.History = a.History || {};
if (typeof c.Adapter != "undefined") throw new Error("History.js Adapter has already been loaded...");
c.Adapter = {
handlers: {}, _uid: 1, uid: function (a) {
return a._uid || (a._uid = c.Adapter._uid++)
}, bind: function (a, b, d) {
var e = c.Adapter.uid(a);
c.Adapter.handlers[e] = c.Adapter.handlers[e] || {}, c.Adapter.handlers[e][b] = c.Adapter.handlers[e][b] || [], c.Adapter.handlers[e][b].push(d), a["on" + b] = function (a, b) {
return function (d) {
c.Adapter.trigger(a, b, d)
}
}(a, b)
}, trigger: function (a, b, d) {
d = d || {};
var e = c.Adapter.uid(a), f, g;
c.Adapter.handlers[e] = c.Adapter.handlers[e] || {}, c.Adapter.handlers[e][b] = c.Adapter.handlers[e][b] || [];
for (f = 0, g = c.Adapter.handlers[e][b].length; f < g; ++f) c.Adapter.handlers[e][b][f].apply(this, [d])
}, extractEventData: function (a, c) {
var d = c && c[a] || b;
return d
}, onDomLoad: function (b) {
var c = a.setTimeout(function () {
b()
}, 2e3);
a.onload = function () {
clearTimeout(c), b()
}
}
}, typeof c.init != "undefined" && c.init()
}(window), function (a, b) {
"use strict";
var c = a.document, d = a.setTimeout || d, e = a.clearTimeout || e, f = a.setInterval || f,
g = a.History = a.History || {};
if (typeof g.initHtml4 != "undefined") throw new Error("History.js HTML4 Support has already been loaded...");
g.initHtml4 = function () {
if (typeof g.initHtml4.initialized != "undefined") return !1;
g.initHtml4.initialized = !0, g.enabled = !0, g.savedHashes = [], g.isLastHash = function (a) {
var b = g.getHashByIndex(), c;
return c = a === b, c
}, g.saveHash = function (a) {
return g.isLastHash(a) ? !1 : (g.savedHashes.push(a), !0)
}, g.getHashByIndex = function (a) {
var b = null;
return typeof a == "undefined" ? b = g.savedHashes[g.savedHashes.length - 1] : a < 0 ? b = g.savedHashes[g.savedHashes.length + a] : b = g.savedHashes[a], b
}, g.discardedHashes = {}, g.discardedStates = {}, g.discardState = function (a, b, c) {
var d = g.getHashByState(a), e;
return e = {discardedState: a, backState: c, forwardState: b}, g.discardedStates[d] = e, !0
}, g.discardHash = function (a, b, c) {
var d = {discardedHash: a, backState: c, forwardState: b};
return g.discardedHashes[a] = d, !0
}, g.discardedState = function (a) {
var b = g.getHashByState(a), c;
return c = g.discardedStates[b] || !1, c
}, g.discardedHash = function (a) {
var b = g.discardedHashes[a] || !1;
return b
}, g.recycleState = function (a) {
var b = g.getHashByState(a);
return g.discardedState(a) && delete g.discardedStates[b], !0
}, g.emulated.hashChange && (g.hashChangeInit = function () {
g.checkerFunction = null;
var b = "", d, e, h, i;
return g.isInternetExplorer() ? (d = "historyjs-iframe", e = c.createElement("iframe"), e.setAttribute("id", d), e.style.display = "none", c.body.appendChild(e), e.contentWindow.document.open(), e.contentWindow.document.close(), h = "", i = !1, g.checkerFunction = function () {
if (i) return !1;
i = !0;
var c = g.getHash() || "", d = g.unescapeHash(e.contentWindow.document.location.hash) || "";
return c !== b ? (b = c, d !== c && (h = d = c, e.contentWindow.document.open(), e.contentWindow.document.close(), e.contentWindow.document.location.hash = g.escapeHash(c)), g.Adapter.trigger(a, "hashchange")) : d !== h && (h = d, g.setHash(d, !1)), i = !1, !0
}) : g.checkerFunction = function () {
var c = g.getHash();
return c !== b && (b = c, g.Adapter.trigger(a, "hashchange")), !0
}, g.intervalList.push(f(g.checkerFunction, g.options.hashChangeInterval)), !0
}, g.Adapter.onDomLoad(g.hashChangeInit)), g.emulated.pushState && (g.onHashChange = function (b) {
var d = b && b.newURL || c.location.href, e = g.getHashByUrl(d), f = null, h = null, i = null, j;
return g.isLastHash(e) ? (g.busy(!1), !1) : (g.doubleCheckComplete(), g.saveHash(e), e && g.isTraditionalAnchor(e) ? (g.Adapter.trigger(a, "anchorchange"), g.busy(!1), !1) : (f = g.extractState(g.getFullUrl(e || c.location.href, !1), !0), g.isLastSavedState(f) ? (g.busy(!1), !1) : (h = g.getHashByState(f), j = g.discardedState(f), j ? (g.getHashByIndex(-2) === g.getHashByState(j.forwardState) ? g.back(!1) : g.forward(!1), !1) : (g.pushState(f.data, f.title, f.url, !1), !0))))
}, g.Adapter.bind(a, "hashchange", g.onHashChange), g.pushState = function (b, d, e, f) {
if (g.getHashByUrl(e)) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");
if (f !== !1 && g.busy()) return g.pushQueue({
scope: g,
callback: g.pushState,
args: arguments,
queue: f
}), !1;
g.busy(!0);
var h = g.createStateObject(b, d, e), i = g.getHashByState(h), j = g.getState(!1), k = g.getHashByState(j),
l = g.getHash();
return g.storeState(h), g.expectedStateId = h.id, g.recycleState(h), g.setTitle(h), i === k ? (g.busy(!1), !1) : i !== l && i !== g.getShortUrl(c.location.href) ? (g.setHash(i, !1), !1) : (g.saveState(h), g.Adapter.trigger(a, "statechange"), g.busy(!1), !0)
}, g.replaceState = function (a, b, c, d) {
if (g.getHashByUrl(c)) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");
if (d !== !1 && g.busy()) return g.pushQueue({
scope: g,
callback: g.replaceState,
args: arguments,
queue: d
}), !1;
g.busy(!0);
var e = g.createStateObject(a, b, c), f = g.getState(!1), h = g.getStateByIndex(-2);
return g.discardState(f, e, h), g.pushState(e.data, e.title, e.url, !1), !0
}), g.emulated.pushState && g.getHash() && !g.emulated.hashChange && g.Adapter.onDomLoad(function () {
g.Adapter.trigger(a, "hashchange")
})
}, typeof g.init != "undefined" && g.init()
}(window), function (a, b) {
"use strict";
var c = a.console || b, d = a.document, e = a.navigator, f = a.sessionStorage || !1, g = a.setTimeout,
h = a.clearTimeout, i = a.setInterval, j = a.clearInterval, k = a.JSON, l = a.alert,
m = a.History = a.History || {}, n = a.history;
k.stringify = k.stringify || k.encode, k.parse = k.parse || k.decode;
if (typeof m.init != "undefined") throw new Error("History.js Core has already been loaded...");
m.init = function () {
return typeof m.Adapter == "undefined" ? !1 : (typeof m.initCore != "undefined" && m.initCore(), typeof m.initHtml4 != "undefined" && m.initHtml4(), !0)
}, m.initCore = function () {
if (typeof m.initCore.initialized != "undefined") return !1;
m.initCore.initialized = !0, m.options = m.options || {}, m.options.hashChangeInterval = m.options.hashChangeInterval || 100, m.options.safariPollInterval = m.options.safariPollInterval || 500, m.options.doubleCheckInterval = m.options.doubleCheckInterval || 500, m.options.storeInterval = m.options.storeInterval || 1e3, m.options.busyDelay = m.options.busyDelay || 250, m.options.debug = m.options.debug || !1, m.options.initialTitle = m.options.initialTitle || d.title, m.intervalList = [], m.clearAllIntervals = function () {
var a, b = m.intervalList;
if (typeof b != "undefined" && b !== null) {
for (a = 0; a < b.length; a++) j(b[a]);
m.intervalList = null
}
}, m.debug = function () {
(m.options.debug || !1) && m.log.apply(m, arguments)
}, m.log = function () {
var a = typeof c != "undefined" && typeof c.log != "undefined" && typeof c.log.apply != "undefined",
b = d.getElementById("log"), e, f, g, h, i;
a ? (h = Array.prototype.slice.call(arguments), e = h.shift(), typeof c.debug != "undefined" ? c.debug.apply(c, [e, h]) : c.log.apply(c, [e, h])) : e = "\n" + arguments[0] + "\n";
for (f = 1, g = arguments.length; f < g; ++f) {
i = arguments[f];
if (typeof i == "object" && typeof k != "undefined") try {
i = k.stringify(i)
} catch (j) {
}
e += "\n" + i + "\n"
}
return b ? (b.value += e + "\n-----\n", b.scrollTop = b.scrollHeight - b.clientHeight) : a || l(e), !0
}, m.getInternetExplorerMajorVersion = function () {
var a = m.getInternetExplorerMajorVersion.cached = typeof m.getInternetExplorerMajorVersion.cached != "undefined" ? m.getInternetExplorerMajorVersion.cached : function () {
var a = 3, b = d.createElement("div"), c = b.getElementsByTagName("i");
while ((b.innerHTML = "<!--[if gt IE " + ++a + "]><i></i><![endif]-->") && c[0]) ;
return a > 4 ? a : !1
}();
return a
}, m.isInternetExplorer = function () {
var a = m.isInternetExplorer.cached = typeof m.isInternetExplorer.cached != "undefined" ? m.isInternetExplorer.cached : Boolean(m.getInternetExplorerMajorVersion());
return a
}, m.emulated = {
pushState: !Boolean(a.history && a.history.pushState && a.history.replaceState && !/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(e.userAgent) && !/AppleWebKit\/5([0-2]|3[0-2])/i.test(e.userAgent)),
hashChange: Boolean(!("onhashchange" in a || "onhashchange" in d) || m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 8)
}, m.enabled = !m.emulated.pushState, m.bugs = {
setHash: Boolean(!m.emulated.pushState && e.vendor === "Apple Computer, Inc." && /AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),
safariPoll: Boolean(!m.emulated.pushState && e.vendor === "Apple Computer, Inc." && /AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),
ieDoubleCheck: Boolean(m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 8),
hashEscape: Boolean(m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 7)
}, m.isEmptyObject = function (a) {
for (var b in a) return !1;
return !0
}, m.cloneObject = function (a) {
var b, c;
return a ? (b = k.stringify(a), c = k.parse(b)) : c = {}, c
}, m.getRootUrl = function () {
var a = d.location.protocol + "//" + (d.location.hostname || d.location.host);
if (d.location.port || !1) a += ":" + d.location.port;
return a += "/", a
}, m.getBaseHref = function () {
var a = d.getElementsByTagName("base"), b = null, c = "";
return a.length === 1 && (b = a[0], c = b.href.replace(/[^\/]+$/, "")), c = c.replace(/\/+$/, ""), c && (c += "/"), c
}, m.getBaseUrl = function () {
var a = m.getBaseHref() || m.getBasePageUrl() || m.getRootUrl();
return a
}, m.getPageUrl = function () {
var a = m.getState(!1, !1), b = (a || {}).url || d.location.href, c;
return c = b.replace(/\/+$/, "").replace(/[^\/]+$/, function (a, b, c) {
return /\./.test(a) ? a : a + "/"
}), c
}, m.getBasePageUrl = function () {
var a = d.location.href.replace(/[#\?].*/, "").replace(/[^\/]+$/, function (a, b, c) {
return /[^\/]$/.test(a) ? "" : a
}).replace(/\/+$/, "") + "/";
return a
}, m.getFullUrl = function (a, b) {
var c = a, d = a.substring(0, 1);
return b = typeof b == "undefined" ? !0 : b, /[a-z]+\:\/\//.test(a) || (d === "/" ? c = m.getRootUrl() + a.replace(/^\/+/, "") : d === "#" ? c = m.getPageUrl().replace(/#.*/, "") + a : d === "?" ? c = m.getPageUrl().replace(/[\?#].*/, "") + a : b ? c = m.getBaseUrl() + a.replace(/^(\.\/)+/, "") : c = m.getBasePageUrl() + a.replace(/^(\.\/)+/, "")), c.replace(/\#$/, "")
}, m.getShortUrl = function (a) {
var b = a, c = m.getBaseUrl(), d = m.getRootUrl();
return m.emulated.pushState && (b = b.replace(c, "")), b = b.replace(d, "/"), m.isTraditionalAnchor(b) && (b = "./" + b), b = b.replace(/^(\.\/)+/g, "./").replace(/\#$/, ""), b
}, m.store = {}, m.idToState = m.idToState || {}, m.stateToId = m.stateToId || {}, m.urlToId = m.urlToId || {}, m.storedStates = m.storedStates || [], m.savedStates = m.savedStates || [], m.normalizeStore = function () {
m.store.idToState = m.store.idToState || {}, m.store.urlToId = m.store.urlToId || {}, m.store.stateToId = m.store.stateToId || {}
}, m.getState = function (a, b) {
typeof a == "undefined" && (a = !0), typeof b == "undefined" && (b = !0);
var c = m.getLastSavedState();
return !c && b && (c = m.createStateObject()), a && (c = m.cloneObject(c), c.url = c.cleanUrl || c.url), c
}, m.getIdByState = function (a) {
var b = m.extractId(a.url), c;
if (!b) {
c = m.getStateString(a);
if (typeof m.stateToId[c] != "undefined") b = m.stateToId[c]; else if (typeof m.store.stateToId[c] != "undefined") b = m.store.stateToId[c]; else {
for (; ;) {
b = (new Date).getTime() + String(Math.random()).replace(/\D/g, "");
if (typeof m.idToState[b] == "undefined" && typeof m.store.idToState[b] == "undefined") break
}
m.stateToId[c] = b, m.idToState[b] = a
}
}
return b
}, m.normalizeState = function (a) {
var b, c;
if (!a || typeof a != "object") a = {};
if (typeof a.normalized != "undefined") return a;
if (!a.data || typeof a.data != "object") a.data = {};
b = {}, b.normalized = !0, b.title = a.title || "", b.url = m.getFullUrl(m.unescapeString(a.url || d.location.href)), b.hash = m.getShortUrl(b.url), b.data = m.cloneObject(a.data), b.id = m.getIdByState(b), b.cleanUrl = b.url.replace(/\??\&_suid.*/, ""), b.url = b.cleanUrl, c = !m.isEmptyObject(b.data);
if (b.title || c) b.hash = m.getShortUrl(b.url).replace(/\??\&_suid.*/, ""), /\?/.test(b.hash) || (b.hash += "?"), b.hash += "&_suid=" + b.id;
return b.hashedUrl = m.getFullUrl(b.hash), (m.emulated.pushState || m.bugs.safariPoll) && m.hasUrlDuplicate(b) && (b.url = b.hashedUrl), b
}, m.createStateObject = function (a, b, c) {
var d = {data: a, title: b, url: c};
return d = m.normalizeState(d), d
}, m.getStateById = function (a) {
a = String(a);
var c = m.idToState[a] || m.store.idToState[a] || b;
return c
}, m.getStateString = function (a) {
var b, c, d;
return b = m.normalizeState(a), c = {data: b.data, title: a.title, url: a.url}, d = k.stringify(c), d
}, m.getStateId = function (a) {
var b, c;
return b = m.normalizeState(a), c = b.id, c
}, m.getHashByState = function (a) {
var b, c;
return b = m.normalizeState(a), c = b.hash, c
}, m.extractId = function (a) {
var b, c, d;
return c = /(.*)\&_suid=([0-9]+)$/.exec(a), d = c ? c[1] || a : a, b = c ? String(c[2] || "") : "", b || !1
}, m.isTraditionalAnchor = function (a) {
var b = !/[\/\?\.]/.test(a);
return b
}, m.extractState = function (a, b) {
var c = null, d, e;
return b = b || !1, d = m.extractId(a), d && (c = m.getStateById(d)), c || (e = m.getFullUrl(a), d = m.getIdByUrl(e) || !1, d && (c = m.getStateById(d)), !c && b && !m.isTraditionalAnchor(a) && (c = m.createStateObject(null, null, e))), c
}, m.getIdByUrl = function (a) {
var c = m.urlToId[a] || m.store.urlToId[a] || b;
return c
}, m.getLastSavedState = function () {
return m.savedStates[m.savedStates.length - 1] || b
}, m.getLastStoredState = function () {
return m.storedStates[m.storedStates.length - 1] || b
}, m.hasUrlDuplicate = function (a) {
var b = !1, c;
return c = m.extractState(a.url), b = c && c.id !== a.id, b
}, m.storeState = function (a) {
return m.urlToId[a.url] = a.id, m.storedStates.push(m.cloneObject(a)), a
}, m.isLastSavedState = function (a) {
var b = !1, c, d, e;
return m.savedStates.length && (c = a.id, d = m.getLastSavedState(), e = d.id, b = c === e), b
}, m.saveState = function (a) {
return m.isLastSavedState(a) ? !1 : (m.savedStates.push(m.cloneObject(a)), !0)
}, m.getStateByIndex = function (a) {
var b = null;
return typeof a == "undefined" ? b = m.savedStates[m.savedStates.length - 1] : a < 0 ? b = m.savedStates[m.savedStates.length + a] : b = m.savedStates[a], b
}, m.getHash = function () {
var a = m.unescapeHash(d.location.hash);
return a
}, m.unescapeString = function (b) {
var c = b, d;
for (; ;) {
d = a.unescape(c);
if (d === c) break;
c = d
}
return c
}, m.unescapeHash = function (a) {
var b = m.normalizeHash(a);
return b = m.unescapeString(b), b
}, m.normalizeHash = function (a) {
var b = a.replace(/[^#]*#/, "").replace(/#.*/, "");
return b
}, m.setHash = function (a, b) {
var c, e, f;
return b !== !1 && m.busy() ? (m.pushQueue({
scope: m,
callback: m.setHash,
args: arguments,
queue: b
}), !1) : (c = m.escapeHash(a), m.busy(!0), e = m.extractState(a, !0), e && !m.emulated.pushState ? m.pushState(e.data, e.title, e.url, !1) : d.location.hash !== c && (m.bugs.setHash ? (f = m.getPageUrl(), m.pushState(null, null, f + "#" + c, !1)) : d.location.hash = c), m)
}, m.escapeHash = function (b) {
var c = m.normalizeHash(b);
return c = a.escape(c), m.bugs.hashEscape || (c = c.replace(/\%21/g, "!").replace(/\%26/g, "&").replace(/\%3D/g, "=").replace(/\%3F/g, "?")), c
}, m.getHashByUrl = function (a) {
var b = String(a).replace(/([^#]*)#?([^#]*)#?(.*)/, "$2");
return b = m.unescapeHash(b), b
}, m.setTitle = function (a) {
var b = a.title, c;
b || (c = m.getStateByIndex(0), c && c.url === a.url && (b = c.title || m.options.initialTitle));
try {
d.getElementsByTagName("title")[0].innerHTML = b.replace("<", "&lt;").replace(">", "&gt;").replace(" & ", " &amp; ")
} catch (e) {
}
return d.title = b, m
}, m.queues = [], m.busy = function (a) {
typeof a != "undefined" ? m.busy.flag = a : typeof m.busy.flag == "undefined" && (m.busy.flag = !1);
if (!m.busy.flag) {
h(m.busy.timeout);
var b = function () {
var a, c, d;
if (m.busy.flag) return;
for (a = m.queues.length - 1; a >= 0; --a) {
c = m.queues[a];
if (c.length === 0) continue;
d = c.shift(), m.fireQueueItem(d), m.busy.timeout = g(b, m.options.busyDelay)
}
};
m.busy.timeout = g(b, m.options.busyDelay)
}
return m.busy.flag
}, m.busy.flag = !1, m.fireQueueItem = function (a) {
return a.callback.apply(a.scope || m, a.args || [])
}, m.pushQueue = function (a) {
return m.queues[a.queue || 0] = m.queues[a.queue || 0] || [], m.queues[a.queue || 0].push(a), m
}, m.queue = function (a, b) {
return typeof a == "function" && (a = {callback: a}), typeof b != "undefined" && (a.queue = b), m.busy() ? m.pushQueue(a) : m.fireQueueItem(a), m
}, m.clearQueue = function () {
return m.busy.flag = !1, m.queues = [], m
}, m.stateChanged = !1, m.doubleChecker = !1, m.doubleCheckComplete = function () {
return m.stateChanged = !0, m.doubleCheckClear(), m
}, m.doubleCheckClear = function () {
return m.doubleChecker && (h(m.doubleChecker), m.doubleChecker = !1), m
}, m.doubleCheck = function (a) {
return m.stateChanged = !1, m.doubleCheckClear(), m.bugs.ieDoubleCheck && (m.doubleChecker = g(function () {
return m.doubleCheckClear(), m.stateChanged || a(), !0
}, m.options.doubleCheckInterval)), m
}, m.safariStatePoll = function () {
var b = m.extractState(d.location.href), c;
if (!m.isLastSavedState(b)) c = b; else return;
return c || (c = m.createStateObject()), m.Adapter.trigger(a, "popstate"), m
}, m.back = function (a) {
return a !== !1 && m.busy() ? (m.pushQueue({
scope: m,
callback: m.back,
args: arguments,
queue: a
}), !1) : (m.busy(!0), m.doubleCheck(function () {
m.back(!1)
}), n.go(-1), !0)
}, m.forward = function (a) {
return a !== !1 && m.busy() ? (m.pushQueue({
scope: m,
callback: m.forward,
args: arguments,
queue: a
}), !1) : (m.busy(!0), m.doubleCheck(function () {
m.forward(!1)
}), n.go(1), !0)
}, m.go = function (a, b) {
var c;
if (a > 0) for (c = 1; c <= a; ++c) m.forward(b); else {
if (!(a < 0)) throw new Error("History.go: History.go requires a positive or negative integer passed.");
for (c = -1; c >= a; --c) m.back(b)
}
return m
};
if (m.emulated.pushState) {
var o = function () {
};
m.pushState = m.pushState || o, m.replaceState = m.replaceState || o
} else m.onPopState = function (b, c) {
var e = !1, f = !1, g, h;
return m.doubleCheckComplete(), g = m.getHash(), g ? (h = m.extractState(g || d.location.href, !0), h ? m.replaceState(h.data, h.title, h.url, !1) : (m.Adapter.trigger(a, "anchorchange"), m.busy(!1)), m.expectedStateId = !1, !1) : (e = m.Adapter.extractEventData("state", b, c) || !1, e ? f = m.getStateById(e) : m.expectedStateId ? f = m.getStateById(m.expectedStateId) : f = m.extractState(d.location.href), f || (f = m.createStateObject(null, null, d.location.href)), m.expectedStateId = !1, m.isLastSavedState(f) ? (m.busy(!1), !1) : (m.storeState(f), m.saveState(f), m.setTitle(f), m.Adapter.trigger(a, "statechange"), m.busy(!1), !0))
}, m.Adapter.bind(a, "popstate", m.onPopState), m.pushState = function (b, c, d, e) {
if (m.getHashByUrl(d) && m.emulated.pushState) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");
if (e !== !1 && m.busy()) return m.pushQueue({
scope: m,
callback: m.pushState,
args: arguments,
queue: e
}), !1;
m.busy(!0);
var f = m.createStateObject(b, c, d);
return m.isLastSavedState(f) ? m.busy(!1) : (m.storeState(f), m.expectedStateId = f.id, n.pushState(f.id, f.title, f.url), m.Adapter.trigger(a, "popstate")), !0
}, m.replaceState = function (b, c, d, e) {
if (m.getHashByUrl(d) && m.emulated.pushState) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");
if (e !== !1 && m.busy()) return m.pushQueue({
scope: m,
callback: m.replaceState,
args: arguments,
queue: e
}), !1;
m.busy(!0);
var f = m.createStateObject(b, c, d);
return m.isLastSavedState(f) ? m.busy(!1) : (m.storeState(f), m.expectedStateId = f.id, n.replaceState(f.id, f.title, f.url), m.Adapter.trigger(a, "popstate")), !0
};
if (f) {
try {
m.store = k.parse(f.getItem("History.store")) || {}
} catch (p) {
m.store = {}
}
m.normalizeStore()
} else m.store = {}, m.normalizeStore();
m.Adapter.bind(a, "beforeunload", m.clearAllIntervals), m.Adapter.bind(a, "unload", m.clearAllIntervals), m.saveState(m.storeState(m.extractState(d.location.href, !0))), f && (m.onUnload = function () {
var a, b;
try {
a = k.parse(f.getItem("History.store")) || {}
} catch (c) {
a = {}
}
a.idToState = a.idToState || {}, a.urlToId = a.urlToId || {}, a.stateToId = a.stateToId || {};
for (b in m.idToState) {
if (!m.idToState.hasOwnProperty(b)) continue;
a.idToState[b] = m.idToState[b]
}
for (b in m.urlToId) {
if (!m.urlToId.hasOwnProperty(b)) continue;
a.urlToId[b] = m.urlToId[b]
}
for (b in m.stateToId) {
if (!m.stateToId.hasOwnProperty(b)) continue;
a.stateToId[b] = m.stateToId[b]
}
m.store = a, m.normalizeStore(), f.setItem("History.store", k.stringify(a))
}, m.intervalList.push(i(m.onUnload, m.options.storeInterval)), m.Adapter.bind(a, "beforeunload", m.onUnload), m.Adapter.bind(a, "unload", m.onUnload));
if (!m.emulated.pushState) {
m.bugs.safariPoll && m.intervalList.push(i(m.safariStatePoll, m.options.safariPollInterval));
if (e.vendor === "Apple Computer, Inc." || (e.appCodeName || "") === "Mozilla") m.Adapter.bind(a, "hashchange", function () {
m.Adapter.trigger(a, "popstate")
}), m.getHash() && m.Adapter.onDomLoad(function () {
m.Adapter.trigger(a, "hashchange")
})
}
}, m.init()
}(window);
//# sourceMappingURL=base.js.map