From 0dc8f2b501e5dac2c31963b6ad1fd9e0c5038b8a Mon Sep 17 00:00:00 2001 From: Christian Basler Date: Mon, 22 Feb 2021 07:26:24 +0100 Subject: [PATCH] Initial commit --- background.js | 80 +++++++++++++++++++++++++++++++++++++++ contentScript.js | 88 +++++++++++++++++++++++++++++++++++++++++++ images/calendar.png | Bin 0 -> 20485 bytes images/email.png | Bin 0 -> 15702 bytes images/icon_128.png | Bin 0 -> 20226 bytes images/icon_32.png | Bin 0 -> 3181 bytes images/icon_48.png | Bin 0 -> 5006 bytes jquery.3.3.1.slim.js | 2 + manifest.json | 40 ++++++++++++++++++++ options.html | 54 ++++++++++++++++++++++++++ options.js | 14 +++++++ popup.html | 72 +++++++++++++++++++++++++++++++++++ popup.js | 24 ++++++++++++ 13 files changed, 374 insertions(+) create mode 100644 background.js create mode 100644 contentScript.js create mode 100644 images/calendar.png create mode 100644 images/email.png create mode 100644 images/icon_128.png create mode 100644 images/icon_32.png create mode 100644 images/icon_48.png create mode 100644 jquery.3.3.1.slim.js create mode 100644 manifest.json create mode 100644 options.html create mode 100644 options.js create mode 100644 popup.html create mode 100644 popup.js diff --git a/background.js b/background.js new file mode 100644 index 0000000..335a4e1 --- /dev/null +++ b/background.js @@ -0,0 +1,80 @@ +'use strict'; + +console.log("Loading background script...."); + +let notificationMap = {}; + +chrome.runtime.onMessage.addListener( + function (message, sender) { + if (message.type === 'quick-links') { + chrome.storage.sync.get('showQuickLinks', (data) => { + if (data.showQuickLinks) { + chrome.tabs.executeScript(sender.tab.id, { code: "$('#quick-links').show()" }); + } + }); + } else if (message.type === 'email') { + const { from, subject, body } = message; + chrome.notifications.create(null, { + type: "basic", + iconUrl: "images/email.png", + title: subject, + message: `From: ${from}\n${body}`, + requireInteraction: true + }, (notificationId) => { + notificationMap[notificationId] = { type: 'email', tabId: sender.tab.id, windowId: sender.tab.windowId }; + startCloseNotificationTimer(notificationId, 'email'); + }); + } else { + const { title, duration } = message; + chrome.notifications.create(null, { + type: "basic", + iconUrl: "images/calendar.png", + title, + message: duration, + requireInteraction: true + }, (notificationId) => { + notificationMap[notificationId] = { type: 'calendar', tabId: sender.tab.id, windowId: sender.tab.windowId }; + startCloseNotificationTimer(notificationId, 'calendar'); + }); + } + } +); + +chrome.notifications.onClicked.addListener((notificationId) => { + if (notificationMap[notificationId]) { + const { type, tabId, windowId } = notificationMap[notificationId]; + chrome.tabs.update(tabId, { active: true, highlighted: true }); + chrome.windows.update(windowId, { focused: true }); + chrome.notifications.clear(notificationId); + if (type === 'email') { + chrome.tabs.executeScript(tabId, { code: `$('#quick-link-mail')[0].click()` }); + } else { + chrome.tabs.executeScript(tabId, { code: `$('#quick-link-calendar')[0].click()` }); + } + } +}); + +chrome.runtime.onInstalled.addListener(function() { + chrome.storage.sync.set({emailDelay: -1, calendarDelay: -1, showQuickLinks: true}); + + chrome.declarativeContent.onPageChanged.removeRules(undefined, function() { + chrome.declarativeContent.onPageChanged.addRules([{ + conditions: [new chrome.declarativeContent.PageStateMatcher({ + css: ["body[aria-label='Outlook']"] + })], + actions: [new chrome.declarativeContent.ShowPageAction()] + }]); + }); +}); + +function startCloseNotificationTimer(notificationId, type) { + chrome.storage.sync.get(`${type}Delay`, (data) => { + const delay = data[`${type}Delay`]; + if (delay > 0 ) { + console.log(`Showing notification for ${delay} seconds`); + setTimeout(() => { + chrome.notifications.clear(notificationId); + }, delay * 1000); + } + }); +} diff --git a/contentScript.js b/contentScript.js new file mode 100644 index 0000000..6355111 --- /dev/null +++ b/contentScript.js @@ -0,0 +1,88 @@ +const MutationObserver = window.MutationObserver || window.WebKitMutationObserver; +const bodyObserver = new MutationObserver(bodyMutationHandler); +const popUpObserver = new MutationObserver(popUpAreaHandler); +const obsConfig = { childList: true }; +let insertedQuickLinks = false; + +bodyObserver.observe($('body').get()[0], obsConfig); + +$('body').append(` + +`) + +function bodyMutationHandler (mutationRecords) { + if ($('.o365cs-nav-leftAlign').length && !insertedQuickLinks) { + $(` + `).insertBefore($('.o365cs-nav-leftAlign').find('.o365cs-nav-topItem').last()); + insertedQuickLinks = true; + chrome.runtime.sendMessage(null, { type: 'quick-links' }); + } + + if ($(".o365cs-notifications-notificationPopupArea").length === 1 && $(".o365cs-notifications-notificationPopup").length > 0) { + bodyObserver.disconnect(); + console.log('Attaching popup observer...'); + popUpObserver.observe($(".o365cs-notifications-notificationPopup").get()[0], obsConfig); + sendMessages(); + } +} + +function popUpAreaHandler(mutationRecords) { + mutationRecords.forEach(function (mutation) { + if (mutation.addedNodes.length > 0) { + sendMessages(); + } + }); +} + +function sendMessages() { + $('.o365cs-notifications-notificationPopup').each(function () { + const textNodes = $(this).find('.o365cs-notifications-text'); + if (textNodes.length) { + console.log('New message...'); + const from = $(textNodes[1]).text(); + const subject = $(textNodes[2]).text(); + const body = $(textNodes[3]).text(); + chrome.runtime.sendMessage(null, { type: 'email', from, subject, body }); + } + + if ($(this).find('.o365cs-notifications-reminders-listPanel').length) { + console.log('New calendar reminder...'); + $(this).find('.o365cs-notifications-reminders-container').each(function () { + const title = $(this).find('.o365cs-notifications-reminders-title').text(); + const duration = $(this).find('.o365cs-notifications-reminders-timeDuration').text(); + chrome.runtime.sendMessage(null, { type: 'calendar', title, duration }); + }); + } + }); +} \ No newline at end of file diff --git a/images/calendar.png b/images/calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3de278631402d43f2dd0b62ed3a4c8494dcc62 GIT binary patch literal 20485 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 z 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 M07*qoM6N<$f|`mPr~m)} literal 0 HcmV?d00001 diff --git a/images/email.png b/images/email.png new file mode 100644 index 0000000000000000000000000000000000000000..88f61d382f833bfa01e60a52f425d598815e2b08 GIT binary patch literal 15702 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%0DOmRQv{T!tv3(9 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 literal 0 HcmV?d00001 diff --git a/images/icon_128.png b/images/icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..339f4cdd2a3d6b11f7c0950a685e3c382b9d8993 GIT binary patch literal 20226 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
6rwZ!Bw!lHp09f|7+;U6y^2;y3 z;Dr}naBXdwWyADs^8^g;(d~EuAcCcN&D|q>Y;ElGCxTdGN|-6X{@;*bpk__cSVH3I z26^V8f08d=M(53tRi4f>{`!OQZ16js!;AItcI;ASI6{rUGet%Y2@qnyWySJrfs9_G zv^7`^^XNlm%rO&X?z|Q93;mS>wAF)#0n}QL-f+VWrAovYZX7Xpm;wtQ$R`-YgbNHl zEPLAD6AngAKs*SK)2{YQ>E5WjAH{AL)k@XECSAJ3vpwgpB*FGq0%Pn*h$<*7?>V9{? zKxZE(mnZ}LEW{?+LBRkJM{f{#fvxIc;k&{uU@@64ii}4 z9WsZuh!qARt|3gpXY2qNfd8|h9zY4cx3Y4O0z%tzHWnSUSVTB-Xd&QqHX_B*9kTGn z$7uH}!-&XPAC&#Ewpa;;*7nl^TA$0D6>?Y`Leee!$N=d8{!u@XDv<`g#t~!Xm=RTS zMO~9T8fL@6Ff#~FUEkc?Tt0vP{M*hx`|LI9`Zb?--gy`3ew|8qOc`RC8i8w+s3X-| zxKjUC(u0usdNnmQQP62C)45u;ZKyr>bM#6KX;X39^Cl=6x^%!%R>R((-!F zaP=lS+a!L{M7i+MH(gu6O@l5JtOMSzNbrX4Fht3tk3RbFqs+q&fVSA1T$5gT<(18< z=O-w%k7XSMmFmiS?ztzX|F2R+7&dX@#9C#BVwy`Lyx1d3WFKH88@hiY zNJO#p?$@r6L!MYBr|xW%mpo1lDh7ypXQ)ehyNGsrz@vTVB>x-5cu%25b)PLkTRIqH zMBx5sGHOIxgG#=KS=y8lV#)|b1fIwm(rF7RN7_LHq~Bc0o;e4xVmW8KdJ*r+qTn)^uZ$6zEoY+7$)T+jeVT42ekIh*>UZtH`w{%DCk#fbcRqkpS3wimDUd`Fh>^xHBY}U%M)g&^A2Q+nDd^ZCtCwPw3v|nP;SD zmMYIU?LMYwT~7<`^J^Yi9fqhk4%+p&{h!R(J!k z+RKq;f zAtL&S-5x}Wgs`en_UyD6+0W6j>)L&plXv3EfhEE?qauXO5LmMsqS|)ebd6sslCP+_tR8 zi8lYYFeJsfJ)?hnK(^#D!~3z6(xJCWhFIPsP(!0c&OThuRt6~gQ(^!K+22V&n=?q)fa zppqxn?w0(KSXdvMGD(K)f>>VACtN+$m*JSpgL-SSYxn5%PwkJ%`UNy219-xiSgCzpeXhc13}g?p!FGQV?>ciu^f^9t~XS#UZsa;>Zbd{$~AlbBA6) z;d|FMJyEYzz_PTlz_L#(JH^!=7_L@DTCY~F|KCN4IIDveNqr*b)~PIIZa`GOOS1xL zxnCeVY%}D$d*Oz`iNvI_&%x3uvVX|MHz0Ts;TlaY1`f|t$&IPFp$mApWSS~ zw}hCbGf&P6LNaD;@S{&Gm1k#7mCwgxGUZA2Lps$5Ic`X>v~0T$b``|bGdh&z8apU( z2{@@;S*T)IFw3{STPl+oiL&G@i(d~Z4VJBKYjlKi?jXy?=6vxd>kX%<6D$jsjPHSY zWBb2!RqKGaTm^&;rjm;z3!wT!7}qBm7$tg8NDe8B9-VdtC&qx9xRsq##+fKx=^l| zTE0tOnzvs5XC~*?hl+k&RKSNFp~U+yoxe^V)qUf*Dmi|5sZ4C?mckKb5+9>PS)>Hn ztOROP!mCP1kxNp-Wp=fzz^0`^Q6o92O3LaxB>L(GDJ_gic4vpA3gQwiua}(uzp#}> z#dDH9dAt-UqU3&`lE_#^0KJ!6LA?`|qr{&wRC1~&a<6QX&P}b-TGt_wbxqRNnUcrb zl5)R~mg34}`phtlII&>aH#$~tP#3q#&aX~^I-8{aL^ z1z}s05?!*xF$oM4SLrt6H5y{74lnVop%9e$4!MJ#0VwdK-|isTLNoRDSQNv8P?i>o zhL9r_LXK?68;ORlY0Od_3TbCT@r|tXomxudxx%rK^Vm}n^#27I0LMLOh`0XhjsO4v M07*qoM6N<$f*goQBme*a literal 0 HcmV?d00001 diff --git a/images/icon_32.png b/images/icon_32.png new file mode 100644 index 0000000000000000000000000000000000000000..afea98a9d27de267ca9b7dfd4af5d44cbcadde57 GIT binary patch literal 3181 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 z

j>*I!hyRzJyLN^WG%0;}}-La0pxgh(X;8xPS!rNLWl z9{Y3=RtKbF)Us`t1Jg>@oSu*#Uv?NtJinSLm#n|@NL7knmf?9p-rQD3BdzY$d22&j ze3mpL$KYK|dTu#&E;##4X-mR}ZjF-0@|hcbiQjhxAUyV}D&0HqyrQ3f$Z#gs#&--o G+5ZPgNfVU- literal 0 HcmV?d00001 diff --git a/jquery.3.3.1.slim.js b/jquery.3.3.1.slim.js new file mode 100644 index 0000000..25e5e18 --- /dev/null +++ b/jquery.3.3.1.slim.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector | (c) JS Foundation and other contributors | jquery.org/license */ +!function (e, t) { "use strict"; "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function (e) { if (!e.document) throw new Error("jQuery requires a window with a document"); return t(e) } : t(e) }("undefined" != typeof window ? window : this, function (e, t) { "use strict"; var n = [], r = e.document, i = Object.getPrototypeOf, o = n.slice, a = n.concat, u = n.push, s = n.indexOf, l = {}, c = l.toString, f = l.hasOwnProperty, d = f.toString, p = d.call(Object), h = {}, g = function e(t) { return "function" == typeof t && "number" != typeof t.nodeType }, v = function e(t) { return null != t && t === t.window }, y = { type: !0, src: !0, noModule: !0 }; function m(e, t, n) { var i, o = (t = t || r).createElement("script"); if (o.text = e, n) for (i in y) n[i] && (o[i] = n[i]); t.head.appendChild(o).parentNode.removeChild(o) } function b(e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? l[c.call(e)] || "object" : typeof e } var x = "3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector", w = function (e, t) { return new w.fn.init(e, t) }, C = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; w.fn = w.prototype = { jquery: x, constructor: w, length: 0, toArray: function () { return o.call(this) }, get: function (e) { return null == e ? o.call(this) : e < 0 ? this[e + this.length] : this[e] }, pushStack: function (e) { var t = w.merge(this.constructor(), e); return t.prevObject = this, t }, each: function (e) { return w.each(this, e) }, map: function (e) { return this.pushStack(w.map(this, function (t, n) { return e.call(t, n, t) })) }, slice: function () { return this.pushStack(o.apply(this, arguments)) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, eq: function (e) { var t = this.length, n = +e + (e < 0 ? t : 0); return this.pushStack(n >= 0 && n < t ? [this[n]] : []) }, end: function () { return this.prevObject || this.constructor() }, push: u, sort: n.sort, splice: n.splice }, w.extend = w.fn.extend = function () { var e, t, n, r, i, o, a = arguments[0] || {}, u = 1, s = arguments.length, l = !1; for ("boolean" == typeof a && (l = a, a = arguments[u] || {}, u++), "object" == typeof a || g(a) || (a = {}), u === s && (a = this, u--); u < s; u++)if (null != (e = arguments[u])) for (t in e) n = a[t], a !== (r = e[t]) && (l && r && (w.isPlainObject(r) || (i = Array.isArray(r))) ? (i ? (i = !1, o = n && Array.isArray(n) ? n : []) : o = n && w.isPlainObject(n) ? n : {}, a[t] = w.extend(l, o, r)) : void 0 !== r && (a[t] = r)); return a }, w.extend({ expando: "jQuery" + (x + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) { throw new Error(e) }, noop: function () { }, isPlainObject: function (e) { var t, n; return !(!e || "[object Object]" !== c.call(e)) && (!(t = i(e)) || "function" == typeof (n = f.call(t, "constructor") && t.constructor) && d.call(n) === p) }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0 }, globalEval: function (e) { m(e) }, each: function (e, t) { var n, r = 0; if (T(e)) { for (n = e.length; r < n; r++)if (!1 === t.call(e[r], r, e[r])) break } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break; return e }, trim: function (e) { return null == e ? "" : (e + "").replace(C, "") }, makeArray: function (e, t) { var n = t || []; return null != e && (T(Object(e)) ? w.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n }, inArray: function (e, t, n) { return null == t ? -1 : s.call(t, e, n) }, merge: function (e, t) { for (var n = +t.length, r = 0, i = e.length; r < n; r++)e[i++] = t[r]; return e.length = i, e }, grep: function (e, t, n) { for (var r, i = [], o = 0, a = e.length, u = !n; o < a; o++)(r = !t(e[o], o)) !== u && i.push(e[o]); return i }, map: function (e, t, n) { var r, i, o = 0, u = []; if (T(e)) for (r = e.length; o < r; o++)null != (i = t(e[o], o, n)) && u.push(i); else for (o in e) null != (i = t(e[o], o, n)) && u.push(i); return a.apply([], u) }, guid: 1, support: h }), "function" == typeof Symbol && (w.fn[Symbol.iterator] = n[Symbol.iterator]), w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) { l["[object " + t + "]"] = t.toLowerCase() }); function T(e) { var t = !!e && "length" in e && e.length, n = b(e); return !g(e) && !v(e) && ("array" === n || 0 === t || "number" == typeof t && t > 0 && t - 1 in e) } var E = function (e) { var t, n, r, i, o, a, u, s, l, c, f, d, p, h, g, v, y, m, b, x = "sizzle" + 1 * new Date, w = e.document, C = 0, T = 0, E = ae(), N = ae(), k = ae(), A = function (e, t) { return e === t && (f = !0), 0 }, D = {}.hasOwnProperty, S = [], L = S.pop, j = S.push, q = S.push, O = S.slice, P = function (e, t) { for (var n = 0, r = e.length; n < r; n++)if (e[n] === t) return n; return -1 }, H = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", I = "[\\x20\\t\\r\\n\\f]", R = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", B = "\\[" + I + "*(" + R + ")(?:" + I + "*([*^$|!~]?=)" + I + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + R + "))|)" + I + "*\\]", M = ":(" + R + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + B + ")*)|.*)\\)|)", W = new RegExp(I + "+", "g"), $ = new RegExp("^" + I + "+|((?:^|[^\\\\])(?:\\\\.)*)" + I + "+$", "g"), F = new RegExp("^" + I + "*," + I + "*"), z = new RegExp("^" + I + "*([>+~]|" + I + ")" + I + "*"), _ = new RegExp("=" + I + "*([^\\]'\"]*?)" + I + "*\\]", "g"), U = new RegExp(M), V = new RegExp("^" + R + "$"), X = { ID: new RegExp("^#(" + R + ")"), CLASS: new RegExp("^\\.(" + R + ")"), TAG: new RegExp("^(" + R + "|[*])"), ATTR: new RegExp("^" + B), PSEUDO: new RegExp("^" + M), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + I + "*(even|odd|(([+-]|)(\\d*)n|)" + I + "*(?:([+-]|)" + I + "*(\\d+)|))" + I + "*\\)|)", "i"), bool: new RegExp("^(?:" + H + ")$", "i"), needsContext: new RegExp("^" + I + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + I + "*((?:-\\d)?\\d*)" + I + "*\\)|)(?=[^-]|$)", "i") }, Q = /^(?:input|select|textarea|button)$/i, Y = /^h\d$/i, G = /^[^{]+\{\s*\[native \w/, K = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, J = /[+~]/, Z = new RegExp("\\\\([\\da-f]{1,6}" + I + "?|(" + I + ")|.)", "ig"), ee = function (e, t, n) { var r = "0x" + t - 65536; return r !== r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320) }, te = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, ne = function (e, t) { return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e }, re = function () { d() }, ie = me(function (e) { return !0 === e.disabled && ("form" in e || "label" in e) }, { dir: "parentNode", next: "legend" }); try { q.apply(S = O.call(w.childNodes), w.childNodes), S[w.childNodes.length].nodeType } catch (e) { q = { apply: S.length ? function (e, t) { j.apply(e, O.call(t)) } : function (e, t) { var n = e.length, r = 0; while (e[n++] = t[r++]); e.length = n - 1 } } } function oe(e, t, r, i) { var o, u, l, c, f, h, y, m = t && t.ownerDocument, C = t ? t.nodeType : 9; if (r = r || [], "string" != typeof e || !e || 1 !== C && 9 !== C && 11 !== C) return r; if (!i && ((t ? t.ownerDocument || t : w) !== p && d(t), t = t || p, g)) { if (11 !== C && (f = K.exec(e))) if (o = f[1]) { if (9 === C) { if (!(l = t.getElementById(o))) return r; if (l.id === o) return r.push(l), r } else if (m && (l = m.getElementById(o)) && b(t, l) && l.id === o) return r.push(l), r } else { if (f[2]) return q.apply(r, t.getElementsByTagName(e)), r; if ((o = f[3]) && n.getElementsByClassName && t.getElementsByClassName) return q.apply(r, t.getElementsByClassName(o)), r } if (n.qsa && !k[e + " "] && (!v || !v.test(e))) { if (1 !== C) m = t, y = e; else if ("object" !== t.nodeName.toLowerCase()) { (c = t.getAttribute("id")) ? c = c.replace(te, ne) : t.setAttribute("id", c = x), u = (h = a(e)).length; while (u--) h[u] = "#" + c + " " + ye(h[u]); y = h.join(","), m = J.test(e) && ge(t.parentNode) || t } if (y) try { return q.apply(r, m.querySelectorAll(y)), r } catch (e) { } finally { c === x && t.removeAttribute("id") } } } return s(e.replace($, "$1"), t, r, i) } function ae() { var e = []; function t(n, i) { return e.push(n + " ") > r.cacheLength && delete t[e.shift()], t[n + " "] = i } return t } function ue(e) { return e[x] = !0, e } function se(e) { var t = p.createElement("fieldset"); try { return !!e(t) } catch (e) { return !1 } finally { t.parentNode && t.parentNode.removeChild(t), t = null } } function le(e, t) { var n = e.split("|"), i = n.length; while (i--) r.attrHandle[n[i]] = t } function ce(e, t) { var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex; if (r) return r; if (n) while (n = n.nextSibling) if (n === t) return -1; return e ? 1 : -1 } function fe(e) { return function (t) { return "input" === t.nodeName.toLowerCase() && t.type === e } } function de(e) { return function (t) { var n = t.nodeName.toLowerCase(); return ("input" === n || "button" === n) && t.type === e } } function pe(e) { return function (t) { return "form" in t ? t.parentNode && !1 === t.disabled ? "label" in t ? "label" in t.parentNode ? t.parentNode.disabled === e : t.disabled === e : t.isDisabled === e || t.isDisabled !== !e && ie(t) === e : t.disabled === e : "label" in t && t.disabled === e } } function he(e) { return ue(function (t) { return t = +t, ue(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])) }) }) } function ge(e) { return e && "undefined" != typeof e.getElementsByTagName && e } n = oe.support = {}, o = oe.isXML = function (e) { var t = e && (e.ownerDocument || e).documentElement; return !!t && "HTML" !== t.nodeName }, d = oe.setDocument = function (e) { var t, i, a = e ? e.ownerDocument || e : w; return a !== p && 9 === a.nodeType && a.documentElement ? (p = a, h = p.documentElement, g = !o(p), w !== p && (i = p.defaultView) && i.top !== i && (i.addEventListener ? i.addEventListener("unload", re, !1) : i.attachEvent && i.attachEvent("onunload", re)), n.attributes = se(function (e) { return e.className = "i", !e.getAttribute("className") }), n.getElementsByTagName = se(function (e) { return e.appendChild(p.createComment("")), !e.getElementsByTagName("*").length }), n.getElementsByClassName = G.test(p.getElementsByClassName), n.getById = se(function (e) { return h.appendChild(e).id = x, !p.getElementsByName || !p.getElementsByName(x).length }), n.getById ? (r.filter.ID = function (e) { var t = e.replace(Z, ee); return function (e) { return e.getAttribute("id") === t } }, r.find.ID = function (e, t) { if ("undefined" != typeof t.getElementById && g) { var n = t.getElementById(e); return n ? [n] : [] } }) : (r.filter.ID = function (e) { var t = e.replace(Z, ee); return function (e) { var n = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id"); return n && n.value === t } }, r.find.ID = function (e, t) { if ("undefined" != typeof t.getElementById && g) { var n, r, i, o = t.getElementById(e); if (o) { if ((n = o.getAttributeNode("id")) && n.value === e) return [o]; i = t.getElementsByName(e), r = 0; while (o = i[r++]) if ((n = o.getAttributeNode("id")) && n.value === e) return [o] } return [] } }), r.find.TAG = n.getElementsByTagName ? function (e, t) { return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : n.qsa ? t.querySelectorAll(e) : void 0 } : 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 }, r.find.CLASS = n.getElementsByClassName && function (e, t) { if ("undefined" != typeof t.getElementsByClassName && g) return t.getElementsByClassName(e) }, y = [], v = [], (n.qsa = G.test(p.querySelectorAll)) && (se(function (e) { h.appendChild(e).innerHTML = "", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + I + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + I + "*(?:value|" + H + ")"), e.querySelectorAll("[id~=" + x + "-]").length || v.push("~="), e.querySelectorAll(":checked").length || v.push(":checked"), e.querySelectorAll("a#" + x + "+*").length || v.push(".#.+[+~]") }), se(function (e) { e.innerHTML = ""; var t = p.createElement("input"); t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + I + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"), h.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:") })), (n.matchesSelector = G.test(m = h.matches || h.webkitMatchesSelector || h.mozMatchesSelector || h.oMatchesSelector || h.msMatchesSelector)) && se(function (e) { n.disconnectedMatch = m.call(e, "*"), m.call(e, "[s!='']:x"), y.push("!=", M) }), v = v.length && new RegExp(v.join("|")), y = y.length && new RegExp(y.join("|")), t = G.test(h.compareDocumentPosition), b = t || G.test(h.contains) ? 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 }, A = t ? function (e, t) { if (e === t) return f = !0, 0; var r = !e.compareDocumentPosition - !t.compareDocumentPosition; return r || (1 & (r = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !n.sortDetached && t.compareDocumentPosition(e) === r ? e === p || e.ownerDocument === w && b(w, e) ? -1 : t === p || t.ownerDocument === w && b(w, t) ? 1 : c ? P(c, e) - P(c, t) : 0 : 4 & r ? -1 : 1) } : function (e, t) { if (e === t) return f = !0, 0; var n, r = 0, i = e.parentNode, o = t.parentNode, a = [e], u = [t]; if (!i || !o) return e === p ? -1 : t === p ? 1 : i ? -1 : o ? 1 : c ? P(c, e) - P(c, t) : 0; if (i === o) return ce(e, t); n = e; while (n = n.parentNode) a.unshift(n); n = t; while (n = n.parentNode) u.unshift(n); while (a[r] === u[r]) r++; return r ? ce(a[r], u[r]) : a[r] === w ? -1 : u[r] === w ? 1 : 0 }, p) : p }, oe.matches = function (e, t) { return oe(e, null, null, t) }, oe.matchesSelector = function (e, t) { if ((e.ownerDocument || e) !== p && d(e), t = t.replace(_, "='$1']"), n.matchesSelector && g && !k[t + " "] && (!y || !y.test(t)) && (!v || !v.test(t))) try { var r = m.call(e, t); if (r || n.disconnectedMatch || e.document && 11 !== e.document.nodeType) return r } catch (e) { } return oe(t, p, null, [e]).length > 0 }, oe.contains = function (e, t) { return (e.ownerDocument || e) !== p && d(e), b(e, t) }, oe.attr = function (e, t) { (e.ownerDocument || e) !== p && d(e); var i = r.attrHandle[t.toLowerCase()], o = i && D.call(r.attrHandle, t.toLowerCase()) ? i(e, t, !g) : void 0; return void 0 !== o ? o : n.attributes || !g ? e.getAttribute(t) : (o = e.getAttributeNode(t)) && o.specified ? o.value : null }, oe.escape = function (e) { return (e + "").replace(te, ne) }, oe.error = function (e) { throw new Error("Syntax error, unrecognized expression: " + e) }, oe.uniqueSort = function (e) { var t, r = [], i = 0, o = 0; if (f = !n.detectDuplicates, c = !n.sortStable && e.slice(0), e.sort(A), f) { while (t = e[o++]) t === e[o] && (i = r.push(o)); while (i--) e.splice(r[i], 1) } return c = null, e }, i = oe.getText = function (e) { var t, n = "", r = 0, o = e.nodeType; if (o) { if (1 === o || 9 === o || 11 === o) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling)n += i(e) } else if (3 === o || 4 === o) return e.nodeValue } else while (t = e[r++]) n += i(t); return n }, (r = oe.selectors = { cacheLength: 50, createPseudo: ue, match: X, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (e) { return e[1] = e[1].replace(Z, ee), e[3] = (e[3] || e[4] || e[5] || "").replace(Z, ee), "~=" === 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] || oe.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] && oe.error(e[0]), e }, PSEUDO: function (e) { var t, n = !e[6] && e[2]; return X.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && U.test(n) && (t = a(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) { var t = e.replace(Z, ee).toLowerCase(); return "*" === e ? function () { return !0 } : function (e) { return e.nodeName && e.nodeName.toLowerCase() === t } }, CLASS: function (e) { var t = E[e + " "]; return t || (t = new RegExp("(^|" + I + ")" + e + "(" + I + "|$)")) && E(e, function (e) { return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "") }) }, ATTR: function (e, t, n) { return function (r) { var i = oe.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.replace(W, " ") + " ").indexOf(n) > -1 : "|=" === t && (i === n || i.slice(0, n.length + 1) === n + "-")) } }, CHILD: function (e, t, n, r, i) { var o = "nth" !== e.slice(0, 3), a = "last" !== e.slice(-4), u = "of-type" === t; return 1 === r && 0 === i ? function (e) { return !!e.parentNode } : function (t, n, s) { var l, c, f, d, p, h, g = o !== a ? "nextSibling" : "previousSibling", v = t.parentNode, y = u && t.nodeName.toLowerCase(), m = !s && !u, b = !1; if (v) { if (o) { while (g) { d = t; while (d = d[g]) if (u ? d.nodeName.toLowerCase() === y : 1 === d.nodeType) return !1; h = g = "only" === e && !h && "nextSibling" } return !0 } if (h = [a ? v.firstChild : v.lastChild], a && m) { b = (p = (l = (c = (f = (d = v)[x] || (d[x] = {}))[d.uniqueID] || (f[d.uniqueID] = {}))[e] || [])[0] === C && l[1]) && l[2], d = p && v.childNodes[p]; while (d = ++p && d && d[g] || (b = p = 0) || h.pop()) if (1 === d.nodeType && ++b && d === t) { c[e] = [C, p, b]; break } } else if (m && (b = p = (l = (c = (f = (d = t)[x] || (d[x] = {}))[d.uniqueID] || (f[d.uniqueID] = {}))[e] || [])[0] === C && l[1]), !1 === b) while (d = ++p && d && d[g] || (b = p = 0) || h.pop()) if ((u ? d.nodeName.toLowerCase() === y : 1 === d.nodeType) && ++b && (m && ((c = (f = d[x] || (d[x] = {}))[d.uniqueID] || (f[d.uniqueID] = {}))[e] = [C, b]), d === t)) break; return (b -= i) === r || b % r == 0 && b / r >= 0 } } }, PSEUDO: function (e, t) { var n, i = r.pseudos[e] || r.setFilters[e.toLowerCase()] || oe.error("unsupported pseudo: " + e); return i[x] ? i(t) : i.length > 1 ? (n = [e, e, "", t], r.setFilters.hasOwnProperty(e.toLowerCase()) ? ue(function (e, n) { var r, o = i(e, t), a = o.length; while (a--) e[r = P(e, o[a])] = !(n[r] = o[a]) }) : function (e) { return i(e, 0, n) }) : i } }, pseudos: { not: ue(function (e) { var t = [], n = [], r = u(e.replace($, "$1")); return r[x] ? ue(function (e, t, n, i) { var o, a = r(e, null, i, []), u = e.length; while (u--) (o = a[u]) && (e[u] = !(t[u] = o)) }) : function (e, i, o) { return t[0] = e, r(t, null, o, n), t[0] = null, !n.pop() } }), has: ue(function (e) { return function (t) { return oe(e, t).length > 0 } }), contains: ue(function (e) { return e = e.replace(Z, ee), function (t) { return (t.textContent || t.innerText || i(t)).indexOf(e) > -1 } }), lang: ue(function (e) { return V.test(e || "") || oe.error("unsupported lang: " + e), e = e.replace(Z, ee).toLowerCase(), function (t) { var n; do { if (n = g ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang")) return (n = n.toLowerCase()) === 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 === h }, focus: function (e) { return e === p.activeElement && (!p.hasFocus || p.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) }, enabled: pe(!1), disabled: pe(!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, !0 === e.selected }, empty: function (e) { for (e = e.firstChild; e; e = e.nextSibling)if (e.nodeType < 6) return !1; return !0 }, parent: function (e) { return !r.pseudos.empty(e) }, header: function (e) { return Y.test(e.nodeName) }, input: function (e) { return Q.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")) || "text" === t.toLowerCase()) }, first: he(function () { return [0] }), last: he(function (e, t) { return [t - 1] }), eq: he(function (e, t, n) { return [n < 0 ? n + t : n] }), even: he(function (e, t) { for (var n = 0; n < t; n += 2)e.push(n); return e }), odd: he(function (e, t) { for (var n = 1; n < t; n += 2)e.push(n); return e }), lt: he(function (e, t, n) { for (var r = n < 0 ? n + t : n; --r >= 0;)e.push(r); return e }), gt: he(function (e, t, n) { for (var r = n < 0 ? n + t : n; ++r < t;)e.push(r); return e }) } }).pseudos.nth = r.pseudos.eq; for (t in { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) r.pseudos[t] = fe(t); for (t in { submit: !0, reset: !0 }) r.pseudos[t] = de(t); function ve() { } ve.prototype = r.filters = r.pseudos, r.setFilters = new ve, a = oe.tokenize = function (e, t) { var n, i, o, a, u, s, l, c = N[e + " "]; if (c) return t ? 0 : c.slice(0); u = e, s = [], l = r.preFilter; while (u) { n && !(i = F.exec(u)) || (i && (u = u.slice(i[0].length) || u), s.push(o = [])), n = !1, (i = z.exec(u)) && (n = i.shift(), o.push({ value: n, type: i[0].replace($, " ") }), u = u.slice(n.length)); for (a in r.filter) !(i = X[a].exec(u)) || l[a] && !(i = l[a](i)) || (n = i.shift(), o.push({ value: n, type: a, matches: i }), u = u.slice(n.length)); if (!n) break } return t ? u.length : u ? oe.error(e) : N(e, s).slice(0) }; function ye(e) { for (var t = 0, n = e.length, r = ""; t < n; t++)r += e[t].value; return r } function me(e, t, n) { var r = t.dir, i = t.next, o = i || r, a = n && "parentNode" === o, u = T++; return t.first ? function (t, n, i) { while (t = t[r]) if (1 === t.nodeType || a) return e(t, n, i); return !1 } : function (t, n, s) { var l, c, f, d = [C, u]; if (s) { while (t = t[r]) if ((1 === t.nodeType || a) && e(t, n, s)) return !0 } else while (t = t[r]) if (1 === t.nodeType || a) if (f = t[x] || (t[x] = {}), c = f[t.uniqueID] || (f[t.uniqueID] = {}), i && i === t.nodeName.toLowerCase()) t = t[r] || t; else { if ((l = c[o]) && l[0] === C && l[1] === u) return d[2] = l[2]; if (c[o] = d, d[2] = e(t, n, s)) return !0 } return !1 } } function be(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 xe(e, t, n) { for (var r = 0, i = t.length; r < i; r++)oe(e, t[r], n); return n } function we(e, t, n, r, i) { for (var o, a = [], u = 0, s = e.length, l = null != t; u < s; u++)(o = e[u]) && (n && !n(o, r, i) || (a.push(o), l && t.push(u))); return a } function Ce(e, t, n, r, i, o) { return r && !r[x] && (r = Ce(r)), i && !i[x] && (i = Ce(i, o)), ue(function (o, a, u, s) { var l, c, f, d = [], p = [], h = a.length, g = o || xe(t || "*", u.nodeType ? [u] : u, []), v = !e || !o && t ? g : we(g, d, e, u, s), y = n ? i || (o ? e : h || r) ? [] : a : v; if (n && n(v, y, u, s), r) { l = we(y, p), r(l, [], u, s), c = l.length; while (c--) (f = l[c]) && (y[p[c]] = !(v[p[c]] = f)) } if (o) { if (i || e) { if (i) { l = [], c = y.length; while (c--) (f = y[c]) && l.push(v[c] = f); i(null, y = [], l, s) } c = y.length; while (c--) (f = y[c]) && (l = i ? P(o, f) : d[c]) > -1 && (o[l] = !(a[l] = f)) } } else y = we(y === a ? y.splice(h, y.length) : y), i ? i(null, a, y, s) : q.apply(a, y) }) } function Te(e) { for (var t, n, i, o = e.length, a = r.relative[e[0].type], u = a || r.relative[" "], s = a ? 1 : 0, c = me(function (e) { return e === t }, u, !0), f = me(function (e) { return P(t, e) > -1 }, u, !0), d = [function (e, n, r) { var i = !a && (r || n !== l) || ((t = n).nodeType ? c(e, n, r) : f(e, n, r)); return t = null, i }]; s < o; s++)if (n = r.relative[e[s].type]) d = [me(be(d), n)]; else { if ((n = r.filter[e[s].type].apply(null, e[s].matches))[x]) { for (i = ++s; i < o; i++)if (r.relative[e[i].type]) break; return Ce(s > 1 && be(d), s > 1 && ye(e.slice(0, s - 1).concat({ value: " " === e[s - 2].type ? "*" : "" })).replace($, "$1"), n, s < i && Te(e.slice(s, i)), i < o && Te(e = e.slice(i)), i < o && ye(e)) } d.push(n) } return be(d) } function Ee(e, t) { var n = t.length > 0, i = e.length > 0, o = function (o, a, u, s, c) { var f, h, v, y = 0, m = "0", b = o && [], x = [], w = l, T = o || i && r.find.TAG("*", c), E = C += null == w ? 1 : Math.random() || .1, N = T.length; for (c && (l = a === p || a || c); m !== N && null != (f = T[m]); m++) { if (i && f) { h = 0, a || f.ownerDocument === p || (d(f), u = !g); while (v = e[h++]) if (v(f, a || p, u)) { s.push(f); break } c && (C = E) } n && ((f = !v && f) && y-- , o && b.push(f)) } if (y += m, n && m !== y) { h = 0; while (v = t[h++]) v(b, x, a, u); if (o) { if (y > 0) while (m--) b[m] || x[m] || (x[m] = L.call(s)); x = we(x) } q.apply(s, x), c && !o && x.length > 0 && y + t.length > 1 && oe.uniqueSort(s) } return c && (C = E, l = w), b }; return n ? ue(o) : o } return u = oe.compile = function (e, t) { var n, r = [], i = [], o = k[e + " "]; if (!o) { t || (t = a(e)), n = t.length; while (n--) (o = Te(t[n]))[x] ? r.push(o) : i.push(o); (o = k(e, Ee(i, r))).selector = e } return o }, s = oe.select = function (e, t, n, i) { var o, s, l, c, f, d = "function" == typeof e && e, p = !i && a(e = d.selector || e); if (n = n || [], 1 === p.length) { if ((s = p[0] = p[0].slice(0)).length > 2 && "ID" === (l = s[0]).type && 9 === t.nodeType && g && r.relative[s[1].type]) { if (!(t = (r.find.ID(l.matches[0].replace(Z, ee), t) || [])[0])) return n; d && (t = t.parentNode), e = e.slice(s.shift().value.length) } o = X.needsContext.test(e) ? 0 : s.length; while (o--) { if (l = s[o], r.relative[c = l.type]) break; if ((f = r.find[c]) && (i = f(l.matches[0].replace(Z, ee), J.test(s[0].type) && ge(t.parentNode) || t))) { if (s.splice(o, 1), !(e = i.length && ye(s))) return q.apply(n, i), n; break } } } return (d || u(e, p))(i, t, !g, n, !t || J.test(e) && ge(t.parentNode) || t), n }, n.sortStable = x.split("").sort(A).join("") === x, n.detectDuplicates = !!f, d(), n.sortDetached = se(function (e) { return 1 & e.compareDocumentPosition(p.createElement("fieldset")) }), se(function (e) { return e.innerHTML = "", "#" === e.firstChild.getAttribute("href") }) || le("type|href|height|width", function (e, t, n) { if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2) }), n.attributes && se(function (e) { return e.innerHTML = "", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value") }) || le("value", function (e, t, n) { if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue }), se(function (e) { return null == e.getAttribute("disabled") }) || le(H, function (e, t, n) { var r; if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null }), oe }(e); w.find = E, w.expr = E.selectors, w.expr[":"] = w.expr.pseudos, w.uniqueSort = w.unique = E.uniqueSort, w.text = E.getText, w.isXMLDoc = E.isXML, w.contains = E.contains, w.escapeSelector = E.escape; var N = function (e, t, n) { var r = [], i = void 0 !== n; while ((e = e[t]) && 9 !== e.nodeType) if (1 === e.nodeType) { if (i && w(e).is(n)) break; r.push(e) } return r }, k = function (e, t) { for (var n = []; e; e = e.nextSibling)1 === e.nodeType && e !== t && n.push(e); return n }, A = w.expr.match.needsContext; function D(e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() } var S = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; function L(e, t, n) { return g(t) ? w.grep(e, function (e, r) { return !!t.call(e, r, e) !== n }) : t.nodeType ? w.grep(e, function (e) { return e === t !== n }) : "string" != typeof t ? w.grep(e, function (e) { return s.call(t, e) > -1 !== n }) : w.filter(t, e, n) } w.filter = function (e, t, n) { var r = t[0]; return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? w.find.matchesSelector(r, e) ? [r] : [] : w.find.matches(e, w.grep(t, function (e) { return 1 === e.nodeType })) }, w.fn.extend({ find: function (e) { var t, n, r = this.length, i = this; if ("string" != typeof e) return this.pushStack(w(e).filter(function () { for (t = 0; t < r; t++)if (w.contains(i[t], this)) return !0 })); for (n = this.pushStack([]), t = 0; t < r; t++)w.find(e, i[t], n); return r > 1 ? w.uniqueSort(n) : n }, filter: function (e) { return this.pushStack(L(this, e || [], !1)) }, not: function (e) { return this.pushStack(L(this, e || [], !0)) }, is: function (e) { return !!L(this, "string" == typeof e && A.test(e) ? w(e) : e || [], !1).length } }); var j, q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; (w.fn.init = function (e, t, n) { var i, o; if (!e) return this; if (n = n || j, "string" == typeof e) { if (!(i = "<" === e[0] && ">" === e[e.length - 1] && e.length >= 3 ? [null, e, null] : q.exec(e)) || !i[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); if (i[1]) { if (t = t instanceof w ? t[0] : t, w.merge(this, w.parseHTML(i[1], t && t.nodeType ? t.ownerDocument || t : r, !0)), S.test(i[1]) && w.isPlainObject(t)) for (i in t) g(this[i]) ? this[i](t[i]) : this.attr(i, t[i]); return this } return (o = r.getElementById(i[2])) && (this[0] = o, this.length = 1), this } return e.nodeType ? (this[0] = e, this.length = 1, this) : g(e) ? void 0 !== n.ready ? n.ready(e) : e(w) : w.makeArray(e, this) }).prototype = w.fn, j = w(r); var O = /^(?:parents|prev(?:Until|All))/, P = { children: !0, contents: !0, next: !0, prev: !0 }; w.fn.extend({ has: function (e) { var t = w(e, this), n = t.length; return this.filter(function () { for (var e = 0; e < n; e++)if (w.contains(this, t[e])) return !0 }) }, closest: function (e, t) { var n, r = 0, i = this.length, o = [], a = "string" != typeof e && w(e); if (!A.test(e)) for (; r < i; r++)for (n = this[r]; n && n !== t; n = n.parentNode)if (n.nodeType < 11 && (a ? a.index(n) > -1 : 1 === n.nodeType && w.find.matchesSelector(n, e))) { o.push(n); break } return this.pushStack(o.length > 1 ? w.uniqueSort(o) : o) }, index: function (e) { return e ? "string" == typeof e ? s.call(w(e), this[0]) : s.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function (e, t) { return this.pushStack(w.uniqueSort(w.merge(this.get(), w(e, t)))) }, addBack: function (e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) } }); function H(e, t) { while ((e = e[t]) && 1 !== e.nodeType); return e } w.each({ parent: function (e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null }, parents: function (e) { return N(e, "parentNode") }, parentsUntil: function (e, t, n) { return N(e, "parentNode", n) }, next: function (e) { return H(e, "nextSibling") }, prev: function (e) { return H(e, "previousSibling") }, nextAll: function (e) { return N(e, "nextSibling") }, prevAll: function (e) { return N(e, "previousSibling") }, nextUntil: function (e, t, n) { return N(e, "nextSibling", n) }, prevUntil: function (e, t, n) { return N(e, "previousSibling", n) }, siblings: function (e) { return k((e.parentNode || {}).firstChild, e) }, children: function (e) { return k(e.firstChild) }, contents: function (e) { return D(e, "iframe") ? e.contentDocument : (D(e, "template") && (e = e.content || e), w.merge([], e.childNodes)) } }, function (e, t) { w.fn[e] = function (n, r) { var i = w.map(this, t, n); return "Until" !== e.slice(-5) && (r = n), r && "string" == typeof r && (i = w.filter(r, i)), this.length > 1 && (P[e] || w.uniqueSort(i), O.test(e) && i.reverse()), this.pushStack(i) } }); var I = /[^\x20\t\r\n\f]+/g; function R(e) { var t = {}; return w.each(e.match(I) || [], function (e, n) { t[n] = !0 }), t } w.Callbacks = function (e) { e = "string" == typeof e ? R(e) : w.extend({}, e); var t, n, r, i, o = [], a = [], u = -1, s = function () { for (i = i || e.once, r = t = !0; a.length; u = -1) { n = a.shift(); while (++u < o.length) !1 === o[u].apply(n[0], n[1]) && e.stopOnFalse && (u = o.length, n = !1) } e.memory || (n = !1), t = !1, i && (o = n ? [] : "") }, l = { add: function () { return o && (n && !t && (u = o.length - 1, a.push(n)), function t(n) { w.each(n, function (n, r) { g(r) ? e.unique && l.has(r) || o.push(r) : r && r.length && "string" !== b(r) && t(r) }) }(arguments), n && !t && s()), this }, remove: function () { return w.each(arguments, function (e, t) { var n; while ((n = w.inArray(t, o, n)) > -1) o.splice(n, 1), n <= u && u-- }), this }, has: function (e) { return e ? w.inArray(e, o) > -1 : o.length > 0 }, empty: function () { return o && (o = []), this }, disable: function () { return i = a = [], o = n = "", this }, disabled: function () { return !o }, lock: function () { return i = a = [], n || t || (o = n = ""), this }, locked: function () { return !!i }, fireWith: function (e, n) { return i || (n = [e, (n = n || []).slice ? n.slice() : n], a.push(n), t || s()), this }, fire: function () { return l.fireWith(this, arguments), this }, fired: function () { return !!r } }; return l }; function B(e) { return e } function M(e) { throw e } function W(e, t, n, r) { var i; try { e && g(i = e.promise) ? i.call(e).done(t).fail(n) : e && g(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r)) } catch (e) { n.apply(void 0, [e]) } } w.extend({ Deferred: function (t) { var n = [["notify", "progress", w.Callbacks("memory"), w.Callbacks("memory"), 2], ["resolve", "done", w.Callbacks("once memory"), w.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", w.Callbacks("once memory"), w.Callbacks("once memory"), 1, "rejected"]], r = "pending", i = { state: function () { return r }, always: function () { return o.done(arguments).fail(arguments), this }, "catch": function (e) { return i.then(null, e) }, pipe: function () { var e = arguments; return w.Deferred(function (t) { w.each(n, function (n, r) { var i = g(e[r[4]]) && e[r[4]]; o[r[1]](function () { var e = i && i.apply(this, arguments); e && g(e.promise) ? e.promise().progress(t.notify).done(t.resolve).fail(t.reject) : t[r[0] + "With"](this, i ? [e] : arguments) }) }), e = null }).promise() }, then: function (t, r, i) { var o = 0; function a(t, n, r, i) { return function () { var u = this, s = arguments, l = function () { var e, l; if (!(t < o)) { if ((e = r.apply(u, s)) === n.promise()) throw new TypeError("Thenable self-resolution"); l = e && ("object" == typeof e || "function" == typeof e) && e.then, g(l) ? i ? l.call(e, a(o, n, B, i), a(o, n, M, i)) : (o++ , l.call(e, a(o, n, B, i), a(o, n, M, i), a(o, n, B, n.notifyWith))) : (r !== B && (u = void 0, s = [e]), (i || n.resolveWith)(u, s)) } }, c = i ? l : function () { try { l() } catch (e) { w.Deferred.exceptionHook && w.Deferred.exceptionHook(e, c.stackTrace), t + 1 >= o && (r !== M && (u = void 0, s = [e]), n.rejectWith(u, s)) } }; t ? c() : (w.Deferred.getStackHook && (c.stackTrace = w.Deferred.getStackHook()), e.setTimeout(c)) } } return w.Deferred(function (e) { n[0][3].add(a(0, e, g(i) ? i : B, e.notifyWith)), n[1][3].add(a(0, e, g(t) ? t : B)), n[2][3].add(a(0, e, g(r) ? r : M)) }).promise() }, promise: function (e) { return null != e ? w.extend(e, i) : i } }, o = {}; return w.each(n, function (e, t) { var a = t[2], u = t[5]; i[t[1]] = a.add, u && a.add(function () { r = u }, n[3 - e][2].disable, n[3 - e][3].disable, n[0][2].lock, n[0][3].lock), a.add(t[3].fire), o[t[0]] = function () { return o[t[0] + "With"](this === o ? void 0 : this, arguments), this }, o[t[0] + "With"] = a.fireWith }), i.promise(o), t && t.call(o, o), o }, when: function (e) { var t = arguments.length, n = t, r = Array(n), i = o.call(arguments), a = w.Deferred(), u = function (e) { return function (n) { r[e] = this, i[e] = arguments.length > 1 ? o.call(arguments) : n, --t || a.resolveWith(r, i) } }; if (t <= 1 && (W(e, a.done(u(n)).resolve, a.reject, !t), "pending" === a.state() || g(i[n] && i[n].then))) return a.then(); while (n--) W(i[n], u(n), a.reject); return a.promise() } }); var $ = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; w.Deferred.exceptionHook = function (t, n) { e.console && e.console.warn && t && $.test(t.name) && e.console.warn("jQuery.Deferred exception: " + t.message, t.stack, n) }, w.readyException = function (t) { e.setTimeout(function () { throw t }) }; var F = w.Deferred(); w.fn.ready = function (e) { return F.then(e)["catch"](function (e) { w.readyException(e) }), this }, w.extend({ isReady: !1, readyWait: 1, ready: function (e) { (!0 === e ? --w.readyWait : w.isReady) || (w.isReady = !0, !0 !== e && --w.readyWait > 0 || F.resolveWith(r, [w])) } }), w.ready.then = F.then; function z() { r.removeEventListener("DOMContentLoaded", z), e.removeEventListener("load", z), w.ready() } "complete" === r.readyState || "loading" !== r.readyState && !r.documentElement.doScroll ? e.setTimeout(w.ready) : (r.addEventListener("DOMContentLoaded", z), e.addEventListener("load", z)); var _ = function (e, t, n, r, i, o, a) { var u = 0, s = e.length, l = null == n; if ("object" === b(n)) { i = !0; for (u in n) _(e, t, u, n[u], !0, o, a) } else if (void 0 !== r && (i = !0, g(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) { return l.call(w(e), n) })), t)) for (; u < s; u++)t(e[u], n, a ? r : r.call(e[u], u, t(e[u], n))); return i ? e : l ? t.call(e) : s ? t(e[0], n) : o }, U = /^-ms-/, V = /-([a-z])/g; function X(e, t) { return t.toUpperCase() } function Q(e) { return e.replace(U, "ms-").replace(V, X) } var Y = function (e) { return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType }; function G() { this.expando = w.expando + G.uid++ } G.uid = 1, G.prototype = { cache: function (e) { var t = e[this.expando]; return t || (t = {}, Y(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t }, set: function (e, t, n) { var r, i = this.cache(e); if ("string" == typeof t) i[Q(t)] = n; else for (r in t) i[Q(r)] = t[r]; return i }, get: function (e, t) { return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][Q(t)] }, access: function (e, t, n) { return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t) }, remove: function (e, t) { var n, r = e[this.expando]; if (void 0 !== r) { if (void 0 !== t) { n = (t = Array.isArray(t) ? t.map(Q) : (t = Q(t)) in r ? [t] : t.match(I) || []).length; while (n--) delete r[t[n]] } (void 0 === t || w.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando]) } }, hasData: function (e) { var t = e[this.expando]; return void 0 !== t && !w.isEmptyObject(t) } }; var K = new G, J = new G, Z = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, ee = /[A-Z]/g; function te(e) { return "true" === e || "false" !== e && ("null" === e ? null : e === +e + "" ? +e : Z.test(e) ? JSON.parse(e) : e) } function ne(e, t, n) { var r; if (void 0 === n && 1 === e.nodeType) if (r = "data-" + t.replace(ee, "-$&").toLowerCase(), "string" == typeof (n = e.getAttribute(r))) { try { n = te(n) } catch (e) { } J.set(e, t, n) } else n = void 0; return n } w.extend({ hasData: function (e) { return J.hasData(e) || K.hasData(e) }, data: function (e, t, n) { return J.access(e, t, n) }, removeData: function (e, t) { J.remove(e, t) }, _data: function (e, t, n) { return K.access(e, t, n) }, _removeData: function (e, t) { K.remove(e, t) } }), w.fn.extend({ data: function (e, t) { var n, r, i, o = this[0], a = o && o.attributes; if (void 0 === e) { if (this.length && (i = J.get(o), 1 === o.nodeType && !K.get(o, "hasDataAttrs"))) { n = a.length; while (n--) a[n] && 0 === (r = a[n].name).indexOf("data-") && (r = Q(r.slice(5)), ne(o, r, i[r])); K.set(o, "hasDataAttrs", !0) } return i } return "object" == typeof e ? this.each(function () { J.set(this, e) }) : _(this, function (t) { var n; if (o && void 0 === t) { if (void 0 !== (n = J.get(o, e))) return n; if (void 0 !== (n = ne(o, e))) return n } else this.each(function () { J.set(this, e, t) }) }, null, t, arguments.length > 1, null, !0) }, removeData: function (e) { return this.each(function () { J.remove(this, e) }) } }), w.extend({ queue: function (e, t, n) { var r; if (e) return t = (t || "fx") + "queue", r = K.get(e, t), n && (!r || Array.isArray(n) ? r = K.access(e, t, w.makeArray(n)) : r.push(n)), r || [] }, dequeue: function (e, t) { t = t || "fx"; var n = w.queue(e, t), r = n.length, i = n.shift(), o = w._queueHooks(e, t), a = function () { w.dequeue(e, t) }; "inprogress" === i && (i = n.shift(), r--), 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 K.get(e, n) || K.access(e, n, { empty: w.Callbacks("once memory").add(function () { K.remove(e, [t + "queue", n]) }) }) } }), w.fn.extend({ queue: function (e, t) { var n = 2; return "string" != typeof e && (t = e, e = "fx", n--), arguments.length < n ? w.queue(this[0], e) : void 0 === t ? this : this.each(function () { var n = w.queue(this, e, t); w._queueHooks(this, e), "fx" === e && "inprogress" !== n[0] && w.dequeue(this, e) }) }, dequeue: function (e) { return this.each(function () { w.dequeue(this, e) }) }, clearQueue: function (e) { return this.queue(e || "fx", []) }, promise: function (e, t) { var n, r = 1, i = w.Deferred(), o = this, a = this.length, u = function () { --r || i.resolveWith(o, [o]) }; "string" != typeof e && (t = e, e = void 0), e = e || "fx"; while (a--) (n = K.get(o[a], e + "queueHooks")) && n.empty && (r++ , n.empty.add(u)); return u(), i.promise(t) } }); var re = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, ie = new RegExp("^(?:([+-])=|)(" + re + ")([a-z%]*)$", "i"), oe = ["Top", "Right", "Bottom", "Left"], ae = function (e, t) { return "none" === (e = t || e).style.display || "" === e.style.display && w.contains(e.ownerDocument, e) && "none" === w.css(e, "display") }, ue = 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 }; function se(e, t, n, r) { var i, o, a = 20, u = r ? function () { return r.cur() } : function () { return w.css(e, t, "") }, s = u(), l = n && n[3] || (w.cssNumber[t] ? "" : "px"), c = (w.cssNumber[t] || "px" !== l && +s) && ie.exec(w.css(e, t)); if (c && c[3] !== l) { s /= 2, l = l || c[3], c = +s || 1; while (a--) w.style(e, t, c + l), (1 - o) * (1 - (o = u() / s || .5)) <= 0 && (a = 0), c /= o; c *= 2, w.style(e, t, c + l), n = n || [] } return n && (c = +c || +s || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i } var le = {}; function ce(e) { var t, n = e.ownerDocument, r = e.nodeName, i = le[r]; return i || (t = n.body.appendChild(n.createElement(r)), i = w.css(t, "display"), t.parentNode.removeChild(t), "none" === i && (i = "block"), le[r] = i, i) } function fe(e, t) { for (var n, r, i = [], o = 0, a = e.length; o < a; o++)(r = e[o]).style && (n = r.style.display, t ? ("none" === n && (i[o] = K.get(r, "display") || null, i[o] || (r.style.display = "")), "" === r.style.display && ae(r) && (i[o] = ce(r))) : "none" !== n && (i[o] = "none", K.set(r, "display", n))); for (o = 0; o < a; o++)null != i[o] && (e[o].style.display = i[o]); return e } w.fn.extend({ show: function () { return fe(this, !0) }, hide: function () { return fe(this) }, toggle: function (e) { return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () { ae(this) ? w(this).show() : w(this).hide() }) } }); var de = /^(?:checkbox|radio)$/i, pe = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i, he = /^$|^module$|\/(?:java|ecma)script/i, ge = { option: [1, ""], thead: [1, "", "
"], col: [2, "", "
"], tr: [2, "", "
"], td: [3, "", "
"], _default: [0, "", ""] }; ge.optgroup = ge.option, ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td; function ve(e, t) { var n; return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && D(e, t) ? w.merge([e], n) : n } function ye(e, t) { for (var n = 0, r = e.length; n < r; n++)K.set(e[n], "globalEval", !t || K.get(t[n], "globalEval")) } var me = /<|&#?\w+;/; function be(e, t, n, r, i) { for (var o, a, u, s, l, c, f = t.createDocumentFragment(), d = [], p = 0, h = e.length; p < h; p++)if ((o = e[p]) || 0 === o) if ("object" === b(o)) w.merge(d, o.nodeType ? [o] : o); else if (me.test(o)) { a = a || f.appendChild(t.createElement("div")), u = (pe.exec(o) || ["", ""])[1].toLowerCase(), s = ge[u] || ge._default, a.innerHTML = s[1] + w.htmlPrefilter(o) + s[2], c = s[0]; while (c--) a = a.lastChild; w.merge(d, a.childNodes), (a = f.firstChild).textContent = "" } else d.push(t.createTextNode(o)); f.textContent = "", p = 0; while (o = d[p++]) if (r && w.inArray(o, r) > -1) i && i.push(o); else if (l = w.contains(o.ownerDocument, o), a = ve(f.appendChild(o), "script"), l && ye(a), n) { c = 0; while (o = a[c++]) he.test(o.type || "") && n.push(o) } return f } !function () { var e = r.createDocumentFragment().appendChild(r.createElement("div")), t = r.createElement("input"); t.setAttribute("type", "radio"), t.setAttribute("checked", "checked"), t.setAttribute("name", "t"), e.appendChild(t), h.checkClone = e.cloneNode(!0).cloneNode(!0).lastChild.checked, e.innerHTML = "", h.noCloneChecked = !!e.cloneNode(!0).lastChild.defaultValue }(); var xe = r.documentElement, we = /^key/, Ce = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, Te = /^([^.]*)(?:\.(.+)|)/; function Ee() { return !0 } function Ne() { return !1 } function ke() { try { return r.activeElement } catch (e) { } } function Ae(e, t, n, r, i, o) { var a, u; if ("object" == typeof t) { "string" != typeof n && (r = r || n, n = void 0); for (u in t) Ae(e, u, n, r, t[u], o); return e } if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = Ne; else if (!i) return e; return 1 === o && (a = i, (i = function (e) { return w().off(e), a.apply(this, arguments) }).guid = a.guid || (a.guid = w.guid++)), e.each(function () { w.event.add(this, t, i, r, n) }) } w.event = { global: {}, add: function (e, t, n, r, i) { var o, a, u, s, l, c, f, d, p, h, g, v = K.get(e); if (v) { n.handler && (n = (o = n).handler, i = o.selector), i && w.find.matchesSelector(xe, i), n.guid || (n.guid = w.guid++), (s = v.events) || (s = v.events = {}), (a = v.handle) || (a = v.handle = function (t) { return "undefined" != typeof w && w.event.triggered !== t.type ? w.event.dispatch.apply(e, arguments) : void 0 }), l = (t = (t || "").match(I) || [""]).length; while (l--) p = g = (u = Te.exec(t[l]) || [])[1], h = (u[2] || "").split(".").sort(), p && (f = w.event.special[p] || {}, p = (i ? f.delegateType : f.bindType) || p, f = w.event.special[p] || {}, c = w.extend({ type: p, origType: g, data: r, handler: n, guid: n.guid, selector: i, needsContext: i && w.expr.match.needsContext.test(i), namespace: h.join(".") }, o), (d = s[p]) || ((d = s[p] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(e, r, h, a) || e.addEventListener && e.addEventListener(p, a)), f.add && (f.add.call(e, c), c.handler.guid || (c.handler.guid = n.guid)), i ? d.splice(d.delegateCount++, 0, c) : d.push(c), w.event.global[p] = !0) } }, remove: function (e, t, n, r, i) { var o, a, u, s, l, c, f, d, p, h, g, v = K.hasData(e) && K.get(e); if (v && (s = v.events)) { l = (t = (t || "").match(I) || [""]).length; while (l--) if (u = Te.exec(t[l]) || [], p = g = u[1], h = (u[2] || "").split(".").sort(), p) { f = w.event.special[p] || {}, d = s[p = (r ? f.delegateType : f.bindType) || p] || [], u = u[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = d.length; while (o--) c = d[o], !i && g !== c.origType || n && n.guid !== c.guid || u && !u.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (d.splice(o, 1), c.selector && d.delegateCount-- , f.remove && f.remove.call(e, c)); a && !d.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || w.removeEvent(e, p, v.handle), delete s[p]) } else for (p in s) w.event.remove(e, p + t[l], n, r, !0); w.isEmptyObject(s) && K.remove(e, "handle events") } }, dispatch: function (e) { var t = w.event.fix(e), n, r, i, o, a, u, s = new Array(arguments.length), l = (K.get(this, "events") || {})[t.type] || [], c = w.event.special[t.type] || {}; for (s[0] = t, n = 1; n < arguments.length; n++)s[n] = arguments[n]; if (t.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, t)) { u = w.event.handlers.call(this, t, l), n = 0; while ((o = u[n++]) && !t.isPropagationStopped()) { t.currentTarget = o.elem, r = 0; while ((a = o.handlers[r++]) && !t.isImmediatePropagationStopped()) t.rnamespace && !t.rnamespace.test(a.namespace) || (t.handleObj = a, t.data = a.data, void 0 !== (i = ((w.event.special[a.origType] || {}).handle || a.handler).apply(o.elem, s)) && !1 === (t.result = i) && (t.preventDefault(), t.stopPropagation())) } return c.postDispatch && c.postDispatch.call(this, t), t.result } }, handlers: function (e, t) { var n, r, i, o, a, u = [], s = t.delegateCount, l = e.target; if (s && l.nodeType && !("click" === e.type && e.button >= 1)) for (; l !== this; l = l.parentNode || this)if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) { for (o = [], a = {}, n = 0; n < s; n++)void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? w(i, this).index(l) > -1 : w.find(i, this, null, [l]).length), a[i] && o.push(r); o.length && u.push({ elem: l, handlers: o }) } return l = this, s < t.length && u.push({ elem: l, handlers: t.slice(s) }), u }, addProp: function (e, t) { Object.defineProperty(w.Event.prototype, e, { enumerable: !0, configurable: !0, get: g(t) ? function () { if (this.originalEvent) return t(this.originalEvent) } : function () { if (this.originalEvent) return this.originalEvent[e] }, set: function (t) { Object.defineProperty(this, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) } }) }, fix: function (e) { return e[w.expando] ? e : new w.Event(e) }, special: { load: { noBubble: !0 }, focus: { trigger: function () { if (this !== ke() && this.focus) return this.focus(), !1 }, delegateType: "focusin" }, blur: { trigger: function () { if (this === ke() && this.blur) return this.blur(), !1 }, delegateType: "focusout" }, click: { trigger: function () { if ("checkbox" === this.type && this.click && D(this, "input")) return this.click(), !1 }, _default: function (e) { return D(e.target, "a") } }, beforeunload: { postDispatch: function (e) { void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result) } } } }, w.removeEvent = function (e, t, n) { e.removeEventListener && e.removeEventListener(t, n) }, w.Event = function (e, t) { if (!(this instanceof w.Event)) return new w.Event(e, t); e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? Ee : Ne, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && w.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[w.expando] = !0 }, w.Event.prototype = { constructor: w.Event, isDefaultPrevented: Ne, isPropagationStopped: Ne, isImmediatePropagationStopped: Ne, isSimulated: !1, preventDefault: function () { var e = this.originalEvent; this.isDefaultPrevented = Ee, e && !this.isSimulated && e.preventDefault() }, stopPropagation: function () { var e = this.originalEvent; this.isPropagationStopped = Ee, e && !this.isSimulated && e.stopPropagation() }, stopImmediatePropagation: function () { var e = this.originalEvent; this.isImmediatePropagationStopped = Ee, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation() } }, w.each({ altKey: !0, bubbles: !0, cancelable: !0, changedTouches: !0, ctrlKey: !0, detail: !0, eventPhase: !0, metaKey: !0, pageX: !0, pageY: !0, shiftKey: !0, view: !0, "char": !0, charCode: !0, key: !0, keyCode: !0, button: !0, buttons: !0, clientX: !0, clientY: !0, offsetX: !0, offsetY: !0, pointerId: !0, pointerType: !0, screenX: !0, screenY: !0, targetTouches: !0, toElement: !0, touches: !0, which: function (e) { var t = e.button; return null == e.which && we.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && Ce.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which } }, w.event.addProp), w.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function (e, t) { w.event.special[e] = { delegateType: t, bindType: t, handle: function (e) { var n, r = this, i = e.relatedTarget, o = e.handleObj; return i && (i === r || w.contains(r, i)) || (e.type = o.origType, n = o.handler.apply(this, arguments), e.type = t), n } } }), w.fn.extend({ on: function (e, t, n, r) { return Ae(this, e, t, n, r) }, one: function (e, t, n, r) { return Ae(this, e, t, n, r, 1) }, off: function (e, t, n) { var r, i; if (e && e.preventDefault && e.handleObj) return r = e.handleObj, w(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; if ("object" == typeof e) { for (i in e) this.off(i, t, e[i]); return this } return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = Ne), this.each(function () { w.event.remove(this, e, n, t) }) } }); var De = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, Se = /\s*$/g; function qe(e, t) { return D(e, "table") && D(11 !== t.nodeType ? t : t.firstChild, "tr") ? w(e).children("tbody")[0] || e : e } function Oe(e) { return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e } function Pe(e) { return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e } function He(e, t) { var n, r, i, o, a, u, s, l; if (1 === t.nodeType) { if (K.hasData(e) && (o = K.access(e), a = K.set(t, o), l = o.events)) { delete a.handle, a.events = {}; for (i in l) for (n = 0, r = l[i].length; n < r; n++)w.event.add(t, i, l[i][n]) } J.hasData(e) && (u = J.access(e), s = w.extend({}, u), J.set(t, s)) } } function Ie(e, t) { var n = t.nodeName.toLowerCase(); "input" === n && de.test(e.type) ? t.checked = e.checked : "input" !== n && "textarea" !== n || (t.defaultValue = e.defaultValue) } function Re(e, t, n, r) { t = a.apply([], t); var i, o, u, s, l, c, f = 0, d = e.length, p = d - 1, v = t[0], y = g(v); if (y || d > 1 && "string" == typeof v && !h.checkClone && Le.test(v)) return e.each(function (i) { var o = e.eq(i); y && (t[0] = v.call(this, i, o.html())), Re(o, t, n, r) }); if (d && (i = be(t, e[0].ownerDocument, !1, e, r), o = i.firstChild, 1 === i.childNodes.length && (i = o), o || r)) { for (s = (u = w.map(ve(i, "script"), Oe)).length; f < d; f++)l = i, f !== p && (l = w.clone(l, !0, !0), s && w.merge(u, ve(l, "script"))), n.call(e[f], l, f); if (s) for (c = u[u.length - 1].ownerDocument, w.map(u, Pe), f = 0; f < s; f++)l = u[f], he.test(l.type || "") && !K.access(l, "globalEval") && w.contains(c, l) && (l.src && "module" !== (l.type || "").toLowerCase() ? w._evalUrl && w._evalUrl(l.src) : m(l.textContent.replace(je, ""), c, l)) } return e } function Be(e, t, n) { for (var r, i = t ? w.filter(t, e) : e, o = 0; null != (r = i[o]); o++)n || 1 !== r.nodeType || w.cleanData(ve(r)), r.parentNode && (n && w.contains(r.ownerDocument, r) && ye(ve(r, "script")), r.parentNode.removeChild(r)); return e } w.extend({ htmlPrefilter: function (e) { return e.replace(De, "<$1>") }, clone: function (e, t, n) { var r, i, o, a, u = e.cloneNode(!0), s = w.contains(e.ownerDocument, e); if (!(h.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || w.isXMLDoc(e))) for (a = ve(u), r = 0, i = (o = ve(e)).length; r < i; r++)Ie(o[r], a[r]); if (t) if (n) for (o = o || ve(e), a = a || ve(u), r = 0, i = o.length; r < i; r++)He(o[r], a[r]); else He(e, u); return (a = ve(u, "script")).length > 0 && ye(a, !s && ve(e, "script")), u }, cleanData: function (e) { for (var t, n, r, i = w.event.special, o = 0; void 0 !== (n = e[o]); o++)if (Y(n)) { if (t = n[K.expando]) { if (t.events) for (r in t.events) i[r] ? w.event.remove(n, r) : w.removeEvent(n, r, t.handle); n[K.expando] = void 0 } n[J.expando] && (n[J.expando] = void 0) } } }), w.fn.extend({ detach: function (e) { return Be(this, e, !0) }, remove: function (e) { return Be(this, e) }, text: function (e) { return _(this, function (e) { return void 0 === e ? w.text(this) : this.empty().each(function () { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e) }) }, null, e, arguments.length) }, append: function () { return Re(this, arguments, function (e) { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || qe(this, e).appendChild(e) }) }, prepend: function () { return Re(this, arguments, function (e) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var t = qe(this, e); t.insertBefore(e, t.firstChild) } }) }, before: function () { return Re(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this) }) }, after: function () { return Re(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) }) }, empty: function () { for (var e, t = 0; null != (e = this[t]); t++)1 === e.nodeType && (w.cleanData(ve(e, !1)), e.textContent = ""); return this }, clone: function (e, t) { return e = null != e && e, t = null == t ? e : t, this.map(function () { return w.clone(this, e, t) }) }, html: function (e) { return _(this, function (e) { var t = this[0] || {}, n = 0, r = this.length; if (void 0 === e && 1 === t.nodeType) return t.innerHTML; if ("string" == typeof e && !Se.test(e) && !ge[(pe.exec(e) || ["", ""])[1].toLowerCase()]) { e = w.htmlPrefilter(e); try { for (; n < r; n++)1 === (t = this[n] || {}).nodeType && (w.cleanData(ve(t, !1)), t.innerHTML = e); t = 0 } catch (e) { } } t && this.empty().append(e) }, null, e, arguments.length) }, replaceWith: function () { var e = []; return Re(this, arguments, function (t) { var n = this.parentNode; w.inArray(this, e) < 0 && (w.cleanData(ve(this)), n && n.replaceChild(t, this)) }, e) } }), w.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function (e, t) { w.fn[e] = function (e) { for (var n, r = [], i = w(e), o = i.length - 1, a = 0; a <= o; a++)n = a === o ? this : this.clone(!0), w(i[a])[t](n), u.apply(r, n.get()); return this.pushStack(r) } }); var Me = new RegExp("^(" + re + ")(?!px)[a-z%]+$", "i"), We = function (t) { var n = t.ownerDocument.defaultView; return n && n.opener || (n = e), n.getComputedStyle(t) }, $e = new RegExp(oe.join("|"), "i"); !function () { function t() { if (c) { l.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", c.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", xe.appendChild(l).appendChild(c); var t = e.getComputedStyle(c); i = "1%" !== t.top, s = 12 === n(t.marginLeft), c.style.right = "60%", u = 36 === n(t.right), o = 36 === n(t.width), c.style.position = "absolute", a = 36 === c.offsetWidth || "absolute", xe.removeChild(l), c = null } } function n(e) { return Math.round(parseFloat(e)) } var i, o, a, u, s, l = r.createElement("div"), c = r.createElement("div"); c.style && (c.style.backgroundClip = "content-box", c.cloneNode(!0).style.backgroundClip = "", h.clearCloneStyle = "content-box" === c.style.backgroundClip, w.extend(h, { boxSizingReliable: function () { return t(), o }, pixelBoxStyles: function () { return t(), u }, pixelPosition: function () { return t(), i }, reliableMarginLeft: function () { return t(), s }, scrollboxSize: function () { return t(), a } })) }(); function Fe(e, t, n) { var r, i, o, a, u = e.style; return (n = n || We(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || w.contains(e.ownerDocument, e) || (a = w.style(e, t)), !h.pixelBoxStyles() && Me.test(a) && $e.test(t) && (r = u.width, i = u.minWidth, o = u.maxWidth, u.minWidth = u.maxWidth = u.width = a, a = n.width, u.width = r, u.minWidth = i, u.maxWidth = o)), void 0 !== a ? a + "" : a } function ze(e, t) { return { get: function () { if (!e()) return (this.get = t).apply(this, arguments); delete this.get } } } var _e = /^(none|table(?!-c[ea]).+)/, Ue = /^--/, Ve = { position: "absolute", visibility: "hidden", display: "block" }, Xe = { letterSpacing: "0", fontWeight: "400" }, Qe = ["Webkit", "Moz", "ms"], Ye = r.createElement("div").style; function Ge(e) { if (e in Ye) return e; var t = e[0].toUpperCase() + e.slice(1), n = Qe.length; while (n--) if ((e = Qe[n] + t) in Ye) return e } function Ke(e) { var t = w.cssProps[e]; return t || (t = w.cssProps[e] = Ge(e) || e), t } function Je(e, t, n) { var r = ie.exec(t); return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t } function Ze(e, t, n, r, i, o) { var a = "width" === t ? 1 : 0, u = 0, s = 0; if (n === (r ? "border" : "content")) return 0; for (; a < 4; a += 2)"margin" === n && (s += w.css(e, n + oe[a], !0, i)), r ? ("content" === n && (s -= w.css(e, "padding" + oe[a], !0, i)), "margin" !== n && (s -= w.css(e, "border" + oe[a] + "Width", !0, i))) : (s += w.css(e, "padding" + oe[a], !0, i), "padding" !== n ? s += w.css(e, "border" + oe[a] + "Width", !0, i) : u += w.css(e, "border" + oe[a] + "Width", !0, i)); return !r && o >= 0 && (s += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - s - u - .5))), s } function et(e, t, n) { var r = We(e), i = Fe(e, t, r), o = "border-box" === w.css(e, "boxSizing", !1, r), a = o; if (Me.test(i)) { if (!n) return i; i = "auto" } return a = a && (h.boxSizingReliable() || i === e.style[t]), ("auto" === i || !parseFloat(i) && "inline" === w.css(e, "display", !1, r)) && (i = e["offset" + t[0].toUpperCase() + t.slice(1)], a = !0), (i = parseFloat(i) || 0) + Ze(e, t, n || (o ? "border" : "content"), a, r, i) + "px" } w.extend({ cssHooks: { opacity: { get: function (e, t) { if (t) { var n = Fe(e, "opacity"); return "" === n ? "1" : n } } } }, cssNumber: { animationIterationCount: !0, columnCount: !0, fillOpacity: !0, flexGrow: !0, flexShrink: !0, fontWeight: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0 }, cssProps: {}, style: function (e, t, n, r) { if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { var i, o, a, u = Q(t), s = Ue.test(t), l = e.style; if (s || (t = Ke(u)), a = w.cssHooks[t] || w.cssHooks[u], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t]; "string" == (o = typeof n) && (i = ie.exec(n)) && i[1] && (n = se(e, t, i), o = "number"), null != n && n === n && ("number" === o && (n += i && i[3] || (w.cssNumber[u] ? "" : "px")), h.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (s ? l.setProperty(t, n) : l[t] = n)) } }, css: function (e, t, n, r) { var i, o, a, u = Q(t); return Ue.test(t) || (t = Ke(u)), (a = w.cssHooks[t] || w.cssHooks[u]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = Fe(e, t, r)), "normal" === i && t in Xe && (i = Xe[t]), "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i } }), w.each(["height", "width"], function (e, t) { w.cssHooks[t] = { get: function (e, n, r) { if (n) return !_e.test(w.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? et(e, t, r) : ue(e, Ve, function () { return et(e, t, r) }) }, set: function (e, n, r) { var i, o = We(e), a = "border-box" === w.css(e, "boxSizing", !1, o), u = r && Ze(e, t, r, a, o); return a && h.scrollboxSize() === o.position && (u -= Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - parseFloat(o[t]) - Ze(e, t, "border", !1, o) - .5)), u && (i = ie.exec(n)) && "px" !== (i[3] || "px") && (e.style[t] = n, n = w.css(e, t)), Je(e, n, u) } } }), w.cssHooks.marginLeft = ze(h.reliableMarginLeft, function (e, t) { if (t) return (parseFloat(Fe(e, "marginLeft")) || e.getBoundingClientRect().left - ue(e, { marginLeft: 0 }, function () { return e.getBoundingClientRect().left })) + "px" }), w.each({ margin: "", padding: "", border: "Width" }, function (e, t) { w.cssHooks[e + t] = { expand: function (n) { for (var r = 0, i = {}, o = "string" == typeof n ? n.split(" ") : [n]; r < 4; r++)i[e + oe[r] + t] = o[r] || o[r - 2] || o[0]; return i } }, "margin" !== e && (w.cssHooks[e + t].set = Je) }), w.fn.extend({ css: function (e, t) { return _(this, function (e, t, n) { var r, i, o = {}, a = 0; if (Array.isArray(t)) { for (r = We(e), i = t.length; a < i; a++)o[t[a]] = w.css(e, t[a], !1, r); return o } return void 0 !== n ? w.style(e, t, n) : w.css(e, t) }, e, t, arguments.length > 1) } }), w.fn.delay = function (t, n) { return t = w.fx ? w.fx.speeds[t] || t : t, n = n || "fx", this.queue(n, function (n, r) { var i = e.setTimeout(n, t); r.stop = function () { e.clearTimeout(i) } }) }, function () { var e = r.createElement("input"), t = r.createElement("select").appendChild(r.createElement("option")); e.type = "checkbox", h.checkOn = "" !== e.value, h.optSelected = t.selected, (e = r.createElement("input")).value = "t", e.type = "radio", h.radioValue = "t" === e.value }(); var tt, nt = w.expr.attrHandle; w.fn.extend({ attr: function (e, t) { return _(this, w.attr, e, t, arguments.length > 1) }, removeAttr: function (e) { return this.each(function () { w.removeAttr(this, e) }) } }), w.extend({ attr: function (e, t, n) { var r, i, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? w.prop(e, t, n) : (1 === o && w.isXMLDoc(e) || (i = w.attrHooks[t.toLowerCase()] || (w.expr.match.bool.test(t) ? tt : void 0)), void 0 !== n ? null === n ? void w.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = w.find.attr(e, t)) ? void 0 : r) }, attrHooks: { type: { set: function (e, t) { if (!h.radioValue && "radio" === t && D(e, "input")) { var n = e.value; return e.setAttribute("type", t), n && (e.value = n), t } } } }, removeAttr: function (e, t) { var n, r = 0, i = t && t.match(I); if (i && 1 === e.nodeType) while (n = i[r++]) e.removeAttribute(n) } }), tt = { set: function (e, t, n) { return !1 === t ? w.removeAttr(e, n) : e.setAttribute(n, n), n } }, w.each(w.expr.match.bool.source.match(/\w+/g), function (e, t) { var n = nt[t] || w.find.attr; nt[t] = function (e, t, r) { var i, o, a = t.toLowerCase(); return r || (o = nt[a], nt[a] = i, i = null != n(e, t, r) ? a : null, nt[a] = o), i } }); var rt = /^(?:input|select|textarea|button)$/i, it = /^(?:a|area)$/i; w.fn.extend({ prop: function (e, t) { return _(this, w.prop, e, t, arguments.length > 1) }, removeProp: function (e) { return this.each(function () { delete this[w.propFix[e] || e] }) } }), w.extend({ prop: function (e, t, n) { var r, i, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return 1 === o && w.isXMLDoc(e) || (t = w.propFix[t] || t, i = w.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t] }, propHooks: { tabIndex: { get: function (e) { var t = w.find.attr(e, "tabindex"); return t ? parseInt(t, 10) : rt.test(e.nodeName) || it.test(e.nodeName) && e.href ? 0 : -1 } } }, propFix: { "for": "htmlFor", "class": "className" } }), h.optSelected || (w.propHooks.selected = { get: function (e) { var t = e.parentNode; return t && t.parentNode && t.parentNode.selectedIndex, null }, set: function (e) { var t = e.parentNode; t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex) } }), w.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () { w.propFix[this.toLowerCase()] = this }); function ot(e) { return (e.match(I) || []).join(" ") } function at(e) { return e.getAttribute && e.getAttribute("class") || "" } function ut(e) { return Array.isArray(e) ? e : "string" == typeof e ? e.match(I) || [] : [] } w.fn.extend({ addClass: function (e) { var t, n, r, i, o, a, u, s = 0; if (g(e)) return this.each(function (t) { w(this).addClass(e.call(this, t, at(this))) }); if ((t = ut(e)).length) while (n = this[s++]) if (i = at(n), r = 1 === n.nodeType && " " + ot(i) + " ") { a = 0; while (o = t[a++]) r.indexOf(" " + o + " ") < 0 && (r += o + " "); i !== (u = ot(r)) && n.setAttribute("class", u) } return this }, removeClass: function (e) { var t, n, r, i, o, a, u, s = 0; if (g(e)) return this.each(function (t) { w(this).removeClass(e.call(this, t, at(this))) }); if (!arguments.length) return this.attr("class", ""); if ((t = ut(e)).length) while (n = this[s++]) if (i = at(n), r = 1 === n.nodeType && " " + ot(i) + " ") { a = 0; while (o = t[a++]) while (r.indexOf(" " + o + " ") > -1) r = r.replace(" " + o + " ", " "); i !== (u = ot(r)) && n.setAttribute("class", u) } return this }, toggleClass: function (e, t) { var n = typeof e, r = "string" === n || Array.isArray(e); return "boolean" == typeof t && r ? t ? this.addClass(e) : this.removeClass(e) : g(e) ? this.each(function (n) { w(this).toggleClass(e.call(this, n, at(this), t), t) }) : this.each(function () { var t, i, o, a; if (r) { i = 0, o = w(this), a = ut(e); while (t = a[i++]) o.hasClass(t) ? o.removeClass(t) : o.addClass(t) } else void 0 !== e && "boolean" !== n || ((t = at(this)) && K.set(this, "__className__", t), this.setAttribute && this.setAttribute("class", t || !1 === e ? "" : K.get(this, "__className__") || "")) }) }, hasClass: function (e) { var t, n, r = 0; t = " " + e + " "; while (n = this[r++]) if (1 === n.nodeType && (" " + ot(at(n)) + " ").indexOf(t) > -1) return !0; return !1 } }); var st = /\r/g; w.fn.extend({ val: function (e) { var t, n, r, i = this[0]; { if (arguments.length) return r = g(e), this.each(function (n) { var i; 1 === this.nodeType && (null == (i = r ? e.call(this, n, w(this).val()) : e) ? i = "" : "number" == typeof i ? i += "" : Array.isArray(i) && (i = w.map(i, function (e) { return null == e ? "" : e + "" })), (t = w.valHooks[this.type] || w.valHooks[this.nodeName.toLowerCase()]) && "set" in t && void 0 !== t.set(this, i, "value") || (this.value = i)) }); if (i) return (t = w.valHooks[i.type] || w.valHooks[i.nodeName.toLowerCase()]) && "get" in t && void 0 !== (n = t.get(i, "value")) ? n : "string" == typeof (n = i.value) ? n.replace(st, "") : null == n ? "" : n } } }), w.extend({ valHooks: { option: { get: function (e) { var t = w.find.attr(e, "value"); return null != t ? t : ot(w.text(e)) } }, select: { get: function (e) { var t, n, r, i = e.options, o = e.selectedIndex, a = "select-one" === e.type, u = a ? null : [], s = a ? o + 1 : i.length; for (r = o < 0 ? s : a ? o : 0; r < s; r++)if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !D(n.parentNode, "optgroup"))) { if (t = w(n).val(), a) return t; u.push(t) } return u }, set: function (e, t) { var n, r, i = e.options, o = w.makeArray(t), a = i.length; while (a--) ((r = i[a]).selected = w.inArray(w.valHooks.option.get(r), o) > -1) && (n = !0); return n || (e.selectedIndex = -1), o } } } }), w.each(["radio", "checkbox"], function () { w.valHooks[this] = { set: function (e, t) { if (Array.isArray(t)) return e.checked = w.inArray(w(e).val(), t) > -1 } }, h.checkOn || (w.valHooks[this].get = function (e) { return null === e.getAttribute("value") ? "on" : e.value }) }), h.focusin = "onfocusin" in e; var lt = /^(?:focusinfocus|focusoutblur)$/, ct = function (e) { e.stopPropagation() }; w.extend(w.event, { trigger: function (t, n, i, o) { var a, u, s, l, c, d, p, h, y = [i || r], m = f.call(t, "type") ? t.type : t, b = f.call(t, "namespace") ? t.namespace.split(".") : []; if (u = h = s = i = i || r, 3 !== i.nodeType && 8 !== i.nodeType && !lt.test(m + w.event.triggered) && (m.indexOf(".") > -1 && (m = (b = m.split(".")).shift(), b.sort()), c = m.indexOf(":") < 0 && "on" + m, t = t[w.expando] ? t : new w.Event(m, "object" == typeof t && t), t.isTrigger = o ? 2 : 3, t.namespace = b.join("."), t.rnamespace = t.namespace ? new RegExp("(^|\\.)" + b.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, t.result = void 0, t.target || (t.target = i), n = null == n ? [t] : w.makeArray(n, [t]), p = w.event.special[m] || {}, o || !p.trigger || !1 !== p.trigger.apply(i, n))) { if (!o && !p.noBubble && !v(i)) { for (l = p.delegateType || m, lt.test(l + m) || (u = u.parentNode); u; u = u.parentNode)y.push(u), s = u; s === (i.ownerDocument || r) && y.push(s.defaultView || s.parentWindow || e) } a = 0; while ((u = y[a++]) && !t.isPropagationStopped()) h = u, t.type = a > 1 ? l : p.bindType || m, (d = (K.get(u, "events") || {})[t.type] && K.get(u, "handle")) && d.apply(u, n), (d = c && u[c]) && d.apply && Y(u) && (t.result = d.apply(u, n), !1 === t.result && t.preventDefault()); return t.type = m, o || t.isDefaultPrevented() || p._default && !1 !== p._default.apply(y.pop(), n) || !Y(i) || c && g(i[m]) && !v(i) && ((s = i[c]) && (i[c] = null), w.event.triggered = m, t.isPropagationStopped() && h.addEventListener(m, ct), i[m](), t.isPropagationStopped() && h.removeEventListener(m, ct), w.event.triggered = void 0, s && (i[c] = s)), t.result } }, simulate: function (e, t, n) { var r = w.extend(new w.Event, n, { type: e, isSimulated: !0 }); w.event.trigger(r, null, t) } }), w.fn.extend({ trigger: function (e, t) { return this.each(function () { w.event.trigger(e, t, this) }) }, triggerHandler: function (e, t) { var n = this[0]; if (n) return w.event.trigger(e, t, n, !0) } }), h.focusin || w.each({ focus: "focusin", blur: "focusout" }, function (e, t) { var n = function (e) { w.event.simulate(t, e.target, w.event.fix(e)) }; w.event.special[t] = { setup: function () { var r = this.ownerDocument || this, i = K.access(r, t); i || r.addEventListener(e, n, !0), K.access(r, t, (i || 0) + 1) }, teardown: function () { var r = this.ownerDocument || this, i = K.access(r, t) - 1; i ? K.access(r, t, i) : (r.removeEventListener(e, n, !0), K.remove(r, t)) } } }); var ft = /\[\]$/, dt = /\r?\n/g, pt = /^(?:submit|button|image|reset|file)$/i, ht = /^(?:input|select|textarea|keygen)/i; function gt(e, t, n, r) { var i; if (Array.isArray(t)) w.each(t, function (t, i) { n || ft.test(e) ? r(e, i) : gt(e + "[" + ("object" == typeof i && null != i ? t : "") + "]", i, n, r) }); else if (n || "object" !== b(t)) r(e, t); else for (i in t) gt(e + "[" + i + "]", t[i], n, r) } w.param = function (e, t) { var n, r = [], i = function (e, t) { var n = g(t) ? t() : t; r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n) }; if (Array.isArray(e) || e.jquery && !w.isPlainObject(e)) w.each(e, function () { i(this.name, this.value) }); else for (n in e) gt(n, e[n], t, i); return r.join("&") }, w.fn.extend({ serialize: function () { return w.param(this.serializeArray()) }, serializeArray: function () { return this.map(function () { var e = w.prop(this, "elements"); return e ? w.makeArray(e) : this }).filter(function () { var e = this.type; return this.name && !w(this).is(":disabled") && ht.test(this.nodeName) && !pt.test(e) && (this.checked || !de.test(e)) }).map(function (e, t) { var n = w(this).val(); return null == n ? null : Array.isArray(n) ? w.map(n, function (e) { return { name: t.name, value: e.replace(dt, "\r\n") } }) : { name: t.name, value: n.replace(dt, "\r\n") } }).get() } }), w.fn.extend({ wrapAll: function (e) { var t; return this[0] && (g(e) && (e = e.call(this[0])), t = w(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function () { var e = this; while (e.firstElementChild) e = e.firstElementChild; return e }).append(this)), this }, wrapInner: function (e) { return g(e) ? this.each(function (t) { w(this).wrapInner(e.call(this, t)) }) : this.each(function () { var t = w(this), n = t.contents(); n.length ? n.wrapAll(e) : t.append(e) }) }, wrap: function (e) { var t = g(e); return this.each(function (n) { w(this).wrapAll(t ? e.call(this, n) : e) }) }, unwrap: function (e) { return this.parent(e).not("body").each(function () { w(this).replaceWith(this.childNodes) }), this } }), w.expr.pseudos.hidden = function (e) { return !w.expr.pseudos.visible(e) }, w.expr.pseudos.visible = function (e) { return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, h.createHTMLDocument = function () { var e = r.implementation.createHTMLDocument("").body; return e.innerHTML = "

", 2 === e.childNodes.length }(), w.parseHTML = function (e, t, n) { if ("string" != typeof e) return []; "boolean" == typeof t && (n = t, t = !1); var i, o, a; return t || (h.createHTMLDocument ? ((i = (t = r.implementation.createHTMLDocument("")).createElement("base")).href = r.location.href, t.head.appendChild(i)) : t = r), o = S.exec(e), a = !n && [], o ? [t.createElement(o[1])] : (o = be([e], t, a), a && a.length && w(a).remove(), w.merge([], o.childNodes)) }, w.offset = { setOffset: function (e, t, n) { var r, i, o, a, u, s, l, c = w.css(e, "position"), f = w(e), d = {}; "static" === c && (e.style.position = "relative"), u = f.offset(), o = w.css(e, "top"), s = w.css(e, "left"), (l = ("absolute" === c || "fixed" === c) && (o + s).indexOf("auto") > -1) ? (a = (r = f.position()).top, i = r.left) : (a = parseFloat(o) || 0, i = parseFloat(s) || 0), g(t) && (t = t.call(e, n, w.extend({}, u))), null != t.top && (d.top = t.top - u.top + a), null != t.left && (d.left = t.left - u.left + i), "using" in t ? t.using.call(e, d) : f.css(d) } }, w.fn.extend({ offset: function (e) { if (arguments.length) return void 0 === e ? this : this.each(function (t) { w.offset.setOffset(this, e, t) }); var t, n, r = this[0]; if (r) return r.getClientRects().length ? (t = r.getBoundingClientRect(), n = r.ownerDocument.defaultView, { top: t.top + n.pageYOffset, left: t.left + n.pageXOffset }) : { top: 0, left: 0 } }, position: function () { if (this[0]) { var e, t, n, r = this[0], i = { top: 0, left: 0 }; if ("fixed" === w.css(r, "position")) t = r.getBoundingClientRect(); else { t = this.offset(), n = r.ownerDocument, e = r.offsetParent || n.documentElement; while (e && (e === n.body || e === n.documentElement) && "static" === w.css(e, "position")) e = e.parentNode; e && e !== r && 1 === e.nodeType && ((i = w(e).offset()).top += w.css(e, "borderTopWidth", !0), i.left += w.css(e, "borderLeftWidth", !0)) } return { top: t.top - i.top - w.css(r, "marginTop", !0), left: t.left - i.left - w.css(r, "marginLeft", !0) } } }, offsetParent: function () { return this.map(function () { var e = this.offsetParent; while (e && "static" === w.css(e, "position")) e = e.offsetParent; return e || xe }) } }), w.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function (e, t) { var n = "pageYOffset" === t; w.fn[e] = function (r) { return _(this, function (e, r, i) { var o; if (v(e) ? o = e : 9 === e.nodeType && (o = e.defaultView), void 0 === i) return o ? o[t] : e[r]; o ? o.scrollTo(n ? o.pageXOffset : i, n ? i : o.pageYOffset) : e[r] = i }, e, r, arguments.length) } }), w.each(["top", "left"], function (e, t) { w.cssHooks[t] = ze(h.pixelPosition, function (e, n) { if (n) return n = Fe(e, t), Me.test(n) ? w(e).position()[t] + "px" : n }) }), w.each({ Height: "height", Width: "width" }, function (e, t) { w.each({ padding: "inner" + e, content: t, "": "outer" + e }, function (n, r) { w.fn[r] = function (i, o) { var a = arguments.length && (n || "boolean" != typeof i), u = n || (!0 === i || !0 === o ? "margin" : "border"); return _(this, function (t, n, i) { var o; return v(t) ? 0 === r.indexOf("outer") ? t["inner" + e] : t.document.documentElement["client" + e] : 9 === t.nodeType ? (o = t.documentElement, Math.max(t.body["scroll" + e], o["scroll" + e], t.body["offset" + e], o["offset" + e], o["client" + e])) : void 0 === i ? w.css(t, n, u) : w.style(t, n, i, u) }, t, a ? i : void 0, a) } }) }), w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function (e, t) { w.fn[t] = function (e, n) { return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t) } }), w.fn.extend({ hover: function (e, t) { return this.mouseenter(e).mouseleave(t || e) } }), w.fn.extend({ 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) } }), w.proxy = function (e, t) { var n, r, i; if ("string" == typeof t && (n = e[t], t = e, e = n), g(e)) return r = o.call(arguments, 2), i = function () { return e.apply(t || this, r.concat(o.call(arguments))) }, i.guid = e.guid = e.guid || w.guid++ , i }, w.holdReady = function (e) { e ? w.readyWait++ : w.ready(!0) }, w.isArray = Array.isArray, w.parseJSON = JSON.parse, w.nodeName = D, w.isFunction = g, w.isWindow = v, w.camelCase = Q, w.type = b, w.now = Date.now, w.isNumeric = function (e) { var t = w.type(e); return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e)) }, "function" == typeof define && define.amd && define("jquery", [], function () { return w }); var vt = e.jQuery, yt = e.$; return w.noConflict = function (t) { return e.$ === w && (e.$ = yt), t && e.jQuery === w && (e.jQuery = vt), w }, t || (e.jQuery = e.$ = w), w }); \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..e4ab371 --- /dev/null +++ b/manifest.json @@ -0,0 +1,40 @@ +{ + "name": "A Toasty OWA", + "version": "1.0.1", + "description": "Show desktop notifications for new mail and calendar alerts", + "permissions": [ + "activeTab", + "declarativeContent", + "storage", + "notifications", + "tabs", + "http://*/*", + "https://*/*" + ], + "background": { + "scripts": [ + "background.js" + ], + "persistent": false + }, + "page_action": { + "default_popup": "popup.html" + }, + "content_scripts": [ + { + "matches": [ + "https://*/owa/*" + ], + "js": [ + "jquery.3.3.1.slim.js", + "contentScript.js" + ] + } + ], + "icons": { + "32": "images/icon_32.png", + "48": "images/icon_48.png", + "128": "images/icon_128.png" + }, + "manifest_version": 2 +} diff --git a/options.html b/options.html new file mode 100644 index 0000000..3c853ce --- /dev/null +++ b/options.html @@ -0,0 +1,54 @@ + + + + + + + + +

A Toast to OWA

+

Settings

+
+ + +
+
+ + +
+ + + diff --git a/options.js b/options.js new file mode 100644 index 0000000..e22585d --- /dev/null +++ b/options.js @@ -0,0 +1,14 @@ +'use strict'; + +$('#emailDelay').change((event) => { + chrome.storage.sync.set({ emailDelay: parseInt(event.target.value) }); +}); + +$('#calendarDelay').change((event) => { + chrome.storage.sync.set({ calendarDelay: parseInt(event.target.value) }); +}); + +chrome.storage.sync.get(null, (data) => { + $('#emailDelay').val(data.emailDelay); + $('#calendarDelay').val(data.calendarDelay); +}); \ No newline at end of file diff --git a/popup.html b/popup.html new file mode 100644 index 0000000..4df5651 --- /dev/null +++ b/popup.html @@ -0,0 +1,72 @@ + + + + + + + + + +

A Toast to OWA

+
+ + +
+
+ + +
+
+ + +
+ + + + \ No newline at end of file diff --git a/popup.js b/popup.js new file mode 100644 index 0000000..451109a --- /dev/null +++ b/popup.js @@ -0,0 +1,24 @@ +'use strict'; + +$('#emailDelay').change((event) => { + chrome.storage.sync.set({ emailDelay: parseInt(event.target.value) }); +}); + +$('#calendarDelay').change((event) => { + chrome.storage.sync.set({ calendarDelay: parseInt(event.target.value) }); +}); + +$('#quickLinks').change((event) => { + chrome.storage.sync.set({ showQuickLinks: $('#quickLinks').prop('checked') }); + if ($('#quickLinks').prop('checked')) { + chrome.tabs.executeScript({ code: "$('#quick-links').show()" }); + } else { + chrome.tabs.executeScript({ code: "$('#quick-links').hide()" }); + } +}); + +chrome.storage.sync.get(null, (data) => { + $('#emailDelay').val(data.emailDelay); + $('#calendarDelay').val(data.calendarDelay); + $('#quickLinks').prop('checked', data.showQuickLinks); +}); \ No newline at end of file