/*! * jquery.customSelect() - v0.4.1 * http://adam.co/lab/jquery/customselect/ * 2013-05-13 * * Copyright 2013 Adam Coulombe * @license http://www.opensource.org/licenses/mit-license.html MIT License * @license http://www.gnu.org/licenses/gpl.html GPL2 License */ (function (a) { a.fn.extend({ customSelect: function (c) { if (typeof document.body.style.maxHeight === "undefined") { return this } var e = { customClass: "customSelect", mapClass: true, mapStyle: true }, c = a.extend(e, c), d = c.customClass, f = function (h, k) { var g = h.find(":selected"), j = k.children(":first"), i = g.html() || " "; j.html(i); if (g.attr("disabled")) { k.addClass(b("DisabledOption")) } else { k.removeClass(b("DisabledOption")) } setTimeout(function () { k.removeClass(b("Open")); a(document).off("mouseup." + b("Open")) }, 60) }, b = function (g) { return d + g }; return this.each(function () { var g = a(this), i = a("").addClass(b("Inner")), h = a(""); g.after(h.append(i)); h.addClass(d); if (c.mapClass) { h.addClass(g.attr("class")) } if (c.mapStyle) { h.attr("style", g.attr("style")) } g.addClass("hasCustomSelect").on("update", function () { f(g, h); var k = parseInt(g.outerWidth(), 10) - (parseInt(h.outerWidth(), 10) - parseInt(h.width(), 10)); h.css({ display: "inline-block" }); var j = h.outerHeight(); if (g.attr("disabled")) { h.addClass(b("Disabled")) } else { h.removeClass(b("Disabled")) } i.css({ width: k, display: "inline-block" }); g.css({ "-webkit-appearance": "menulist-button", width: h.outerWidth(), position: "absolute", opacity: 0, height: j, fontSize: h.css("font-size") }) }).on("change", function () { h.addClass(b("Changed")); f(g, h) }).on("keyup", function (j) { if (!h.hasClass(b("Open"))) { g.blur(); g.focus() } else { if (j.which == 13 || j.which == 27) { f(g, h) } } }).on("mousedown", function (j) { h.removeClass(b("Changed")) }).on("mouseup", function (j) { if (!h.hasClass(b("Open"))) { if (a("." + b("Open")).not(h).length > 0 && typeof InstallTrigger !== "undefined") { g.focus() } else { h.addClass(b("Open")); j.stopPropagation(); a(document).one("mouseup." + b("Open"), function (k) { if (k.target != g.get(0) && a.inArray(k.target, g.find("*").get()) < 0) { g.blur() } else { f(g, h) } }) } } }).focus(function () { h.removeClass(b("Changed")).addClass(b("Focus")) }).blur(function () { h.removeClass(b("Focus") + " " + b("Open")) }).hover(function () { h.addClass(b("Hover")) }, function () { h.removeClass(b("Hover")) }).trigger("update") }) } }) })(jQuery); //var sortable = function () { "use strict"; function e(e, t, n) { if (void 0 === n) return e && e.h5s && e.h5s.data && e.h5s.data[t]; e.h5s = e.h5s || {}, e.h5s.data = e.h5s.data || {}, e.h5s.data[t] = n } function t(e) { e.h5s && delete e.h5s.data } function n(e, t, r) { if (e instanceof Array) for (var o = 0; o < e.length; ++o) n(e[o], t, r); else e.addEventListener(t, r), p(e).setData("event" + t, r) } function r(e, t) { if (e instanceof Array) for (var n = 0; n < e.length; ++n) r(e[n], t); else e.removeEventListener(t, p(e).getData("event" + t)), p(e).deleteData("event" + t) } function o(e, t, n) { if (e instanceof Array) for (var r = 0; r < e.length; ++r) o(e[r], t, n); else e.setAttribute(t, n) } function i(e, t) { if (e instanceof Array) for (var n = 0; n < e.length; ++n) i(e[n], t); else e.removeAttribute(t) } function a(e, t) { var n = this; if (void 0 === t && (t = 250), "function" != typeof e) throw new Error("You must provide a function as the first argument for throttle."); if ("number" != typeof t) throw new Error("You must provide a number as the second argument for throttle."); var r = null; return function () { for (var o = [], i = 0; i < arguments.length; i++) o[i] = arguments[i]; var a = Date.now(); (null === r || a - r >= t) && (r = a, e.apply(n, o)) } } function l(e, t) { if (t.composedPath) return t.composedPath().find(function (e) { return e.isSortable }); for (; !0 !== e.isSortable;) e = e.parentElement; return e } function s(t, n) { var r = e(t, "opts"), o, i = f(t.children, r.items).filter(function (e) { return e.contains(n) || e.shadowRoot && e.shadowRoot.contains(n) }); return i.length > 0 ? i[0] : n } function c(t, r) { var i = String(r); return r = r || {}, "string" == typeof t && (t = document.querySelectorAll(t)), t instanceof HTMLElement && (t = [t]), t = Array.prototype.slice.call(t), /serialize/.test(i) ? t.map(function (t) { var n = e(t, "opts"); return b(t, n.itemSerializer, n.containerSerializer) }) : (t.forEach(function (t) { if (/enable|disable|destroy/.test(i)) return c[i](t);["connectWith", "disableIEFix"].forEach(function (e) { Object.prototype.hasOwnProperty.call(r, e) && null !== r[e] && console.warn('HTML5Sortable: You are using the deprecated configuration "' + e + '". This will be removed in an upcoming version, make sure to migrate to the new options when updating.') }), r = Object.assign({}, I, p(t).config, r), p(t).config = r, e(t, "opts", r), t.isSortable = !0, G(t); var a = f(t.children, r.items), u; if (null !== r.placeholder && void 0 !== r.placeholder) { var w = document.createElement(t.tagName); r.placeholder instanceof HTMLElement ? w.appendChild(r.placeholder) : w.innerHTML = r.placeholder, u = w.children[0] } p(t).placeholder = T(t, u, r.placeholderClass), e(t, "items", r.items), r.acceptFrom ? e(t, "acceptFrom", r.acceptFrom) : r.connectWith && e(t, "connectWith", r.connectWith), U(t), o(a, "role", "option"), o(a, "aria-grabbed", "false"), S(t, !0), n(t, "dragstart", function (e) { var t = x(e); if (!0 !== t.isSortable && (e.stopImmediatePropagation(), (!r.handle || t.matches(r.handle)) && "false" !== t.getAttribute("draggable"))) { var n = l(t, e), i = s(n, t); W = f(n.children, r.items), z = W.indexOf(i), N = g(i, n.children), P = n, H(e, i, r.customDragImage), Y = L(i), O = C(i), i.classList.add(r.draggingClass), o(_ = R(i, n), "aria-grabbed", "true"), n.dispatchEvent(new CustomEvent("sortstart", { detail: { origin: { elementIndex: N, index: z, container: P }, item: _, originalTarget: t } })) } }), n(t, "dragenter", function (n) { var r = x(n), o = l(r, n); o && o !== j && (F = f(o.children, e(o, "items")).filter(function (e) { return e !== p(t).placeholder }), o.dispatchEvent(new CustomEvent("sortenter", { detail: { origin: { elementIndex: N, index: z, container: P }, destination: { container: o, itemsBeforeUpdate: F }, item: _, originalTarget: r } }))), j = o }), n(t, "dragend", function (n) { if (_) { _.classList.remove(r.draggingClass), o(_, "aria-grabbed", "false"), "true" === _.getAttribute("aria-copied") && "true" !== e(_, "dropped") && _.remove(), _.style.display = _.oldDisplay, delete _.oldDisplay; var i = Array.from(d.values()).map(function (e) { return e.placeholder }).filter(function (e) { return e instanceof HTMLElement }).filter(v)[0]; i && i.remove(), t.dispatchEvent(new CustomEvent("sortstop", { detail: { origin: { elementIndex: N, index: z, container: P }, item: _ } })), j = null, _ = null, Y = null, O = null } }), n(t, "drop", function (n) { if (A(t, _.parentElement)) { n.preventDefault(), n.stopPropagation(), e(_, "dropped", "true"); var o = Array.from(d.values()).map(function (e) { return e.placeholder }).filter(function (e) { return e instanceof HTMLElement }).filter(v)[0]; E(o, _), o.remove(), t.dispatchEvent(new CustomEvent("sortstop", { detail: { origin: { elementIndex: N, index: z, container: P }, item: _ } })); var i = p(t).placeholder, a = f(P.children, r.items).filter(function (e) { return e !== i }), l = !0 === this.isSortable ? this : this.parentElement, s = f(l.children, e(l, "items")).filter(function (e) { return e !== i }), c = g(_, Array.from(_.parentElement.children).filter(function (e) { return e !== i })), u = g(_, s); N === c && P === l || t.dispatchEvent(new CustomEvent("sortupdate", { detail: { origin: { elementIndex: N, index: z, container: P, itemsBeforeUpdate: W, items: a }, destination: { index: u, elementIndex: c, container: l, itemsBeforeUpdate: F, items: s }, item: _ } })) } }); var b = h(function (e, t, n, o) { if (_) if (r.forcePlaceholderSize && (p(e).placeholder.style.height = Y + "px", p(e).placeholder.style.width = O + "px"), Array.from(e.children).indexOf(t) > -1) { var i = L(t), a = C(t), l = g(p(e).placeholder, t.parentElement.children), s = g(t, t.parentElement.children); if (i > Y || a > O) { var c = i - Y, u = a - O, h = m(t).top, v = m(t).left; if (l < s && ("vertical" === r.orientation && o < h || "horizontal" === r.orientation && n < v)) return; if (l > s && ("vertical" === r.orientation && o > h + i - c || "horizontal" === r.orientation && n > v + a - u)) return } void 0 === _.oldDisplay && (_.oldDisplay = _.style.display), "none" !== _.style.display && (_.style.display = "none"); var w = !1; try { var b = m(t).top + t.offsetHeight / 2, T = m(t).left + t.offsetWidth / 2; w = "vertical" === r.orientation && o >= b || "horizontal" === r.orientation && n >= T } catch (e) { w = l < s } w ? E(t, p(e).placeholder) : y(t, p(e).placeholder), Array.from(d.values()).filter(function (e) { return void 0 !== e.placeholder }).forEach(function (t) { t.placeholder !== p(e).placeholder && t.placeholder.remove() }) } else { var M = Array.from(d.values()).filter(function (e) { return void 0 !== e.placeholder }).map(function (e) { return e.placeholder }); -1 !== M.indexOf(t) || e !== t || f(t.children, r.items).length || (M.forEach(function (e) { return e.remove() }), t.appendChild(p(e).placeholder)) } }, r.debounce), M = function (t) { var n = t.target, r = !0 === n.isSortable ? n : l(n, t); if (n = s(r, n), _ && A(r, _.parentElement) && "true" !== e(r, "_disabled")) { var o = e(r, "opts"); parseInt(o.maxItems) && f(r.children, e(r, "items")).length >= parseInt(o.maxItems) && _.parentElement !== r || (t.preventDefault(), t.stopPropagation(), t.dataTransfer.dropEffect = !0 === p(r).getConfig("copy") ? "copy" : "move", b(r, n, t.pageX, t.pageY)) } }; n(a.concat(t), "dragover", M), n(a.concat(t), "dragenter", M) }), t) } var f = function (e, t) { if (!(e instanceof NodeList || e instanceof HTMLCollection || e instanceof Array)) throw new Error("You must provide a nodeList/HTMLCollection/Array of elements to be filtered."); return "string" != typeof t ? Array.from(e) : Array.from(e).filter(function (e) { return 1 === e.nodeType && e.matches(t) }) }, d = new Map, u = function () { function e() { this._config = new Map, this._placeholder = void 0, this._data = new Map } return Object.defineProperty(e.prototype, "config", { get: function () { var e = {}; return this._config.forEach(function (t, n) { e[n] = t }), e }, set: function (e) { if ("object" != typeof e) throw new Error("You must provide a valid configuration object to the config setter."); var t = Object.assign({}, e); this._config = new Map(Object.entries(t)) }, enumerable: !0, configurable: !0 }), e.prototype.setConfig = function (e, t) { if (!this._config.has(e)) throw new Error("Trying to set invalid configuration item: " + e); this._config.set(e, t) }, e.prototype.getConfig = function (e) { if (!this._config.has(e)) throw new Error("Invalid configuration item requested: " + e); return this._config.get(e) }, Object.defineProperty(e.prototype, "placeholder", { get: function () { return this._placeholder }, set: function (e) { if (!(e instanceof HTMLElement) && null !== e) throw new Error("A placeholder must be an html element or null."); this._placeholder = e }, enumerable: !0, configurable: !0 }), e.prototype.setData = function (e, t) { if ("string" != typeof e) throw new Error("The key must be a string."); this._data.set(e, t) }, e.prototype.getData = function (e) { if ("string" != typeof e) throw new Error("The key must be a string."); return this._data.get(e) }, e.prototype.deleteData = function (e) { if ("string" != typeof e) throw new Error("The key must be a string."); return this._data.delete(e) }, e }(), p = function (e) { if (!(e instanceof HTMLElement)) throw new Error("Please provide a sortable to the store function."); return d.has(e) || d.set(e, new u), d.get(e) }, m = function (e) { if (!e.parentElement || 0 === e.getClientRects().length) throw new Error("target element must be part of the dom"); var t = e.getClientRects()[0]; return { left: t.left + window.pageXOffset, right: t.right + window.pageXOffset, top: t.top + window.pageYOffset, bottom: t.bottom + window.pageYOffset } }, h = function (e, t) { var n; return void 0 === t && (t = 0), function () { for (var r = [], o = 0; o < arguments.length; o++) r[o] = arguments[o]; clearTimeout(n), n = setTimeout(function () { e.apply(void 0, r) }, t) } }, g = function (e, t) { if (!(e instanceof HTMLElement && (t instanceof NodeList || t instanceof HTMLCollection || t instanceof Array))) throw new Error("You must provide an element and a list of elements."); return Array.from(t).indexOf(e) }, v = function (e) { if (!(e instanceof HTMLElement)) throw new Error("Element is not a node element."); return null !== e.parentNode }, w = function (e, t, n) { if (!(e instanceof HTMLElement && e.parentElement instanceof HTMLElement)) throw new Error("target and element must be a node"); e.parentElement.insertBefore(t, "before" === n ? e : e.nextElementSibling) }, y = function (e, t) { return w(e, t, "before") }, E = function (e, t) { return w(e, t, "after") }, b = function (t, n, r) { if (void 0 === n && (n = function (e, t) { return e }), void 0 === r && (r = function (e) { return e }), !(t instanceof HTMLElement) || !0 == !t.isSortable) throw new Error("You need to provide a sortableContainer to be serialized."); if ("function" != typeof n || "function" != typeof r) throw new Error("You need to provide a valid serializer for items and the container."); var o, i = e(t, "opts").items, a = f(t.children, i), l = a.map(function (e) { return { parent: t, node: e, html: e.outerHTML, index: g(e, a) } }), s; return { container: r({ node: t, itemCount: l.length }), items: l.map(function (e) { return n(e, t) }) } }, T = function (e, t, n) { var r; if (void 0 === n && (n = "sortable-placeholder"), !(e instanceof HTMLElement)) throw new Error("You must provide a valid element as a sortable."); if (!(t instanceof HTMLElement) && void 0 !== t) throw new Error("You must provide a valid element as a placeholder or set ot to undefined."); return void 0 === t && (["UL", "OL"].includes(e.tagName) ? t = document.createElement("li") : ["TABLE", "TBODY"].includes(e.tagName) ? (t = document.createElement("tr")).innerHTML = '' : t = document.createElement("div")), "string" == typeof n && (r = t.classList).add.apply(r, n.split(" ")), t }, L = function (e) { if (!(e instanceof HTMLElement)) throw new Error("You must provide a valid dom element"); var t = window.getComputedStyle(e); return ["height", "padding-top", "padding-bottom"].map(function (e) { var n = parseInt(t.getPropertyValue(e), 10); return isNaN(n) ? 0 : n }).reduce(function (e, t) { return e + t }) }, C = function (e) { if (!(e instanceof HTMLElement)) throw new Error("You must provide a valid dom element"); var t = window.getComputedStyle(e); return ["width", "padding-left", "padding-right"].map(function (e) { var n = parseInt(t.getPropertyValue(e), 10); return isNaN(n) ? 0 : n }).reduce(function (e, t) { return e + t }) }, M = function (e, t) { if (!(e instanceof Array)) throw new Error("You must provide a Array of HTMLElements to be filtered."); return "string" != typeof t ? e : e.filter(function (e) { return e.querySelector(t) instanceof HTMLElement || e.shadowRoot && e.shadowRoot.querySelector(t) instanceof HTMLElement }).map(function (e) { return e.querySelector(t) || e.shadowRoot && e.shadowRoot.querySelector(t) }) }, x = function (e) { return e.composedPath && e.composedPath()[0] || e.target }, D = function (e, t, n) { return { element: e, posX: n.pageX - t.left, posY: n.pageY - t.top } }, H = function (e, t, n) { if (!(e instanceof Event)) throw new Error("setDragImage requires a DragEvent as the first argument."); if (!(t instanceof HTMLElement)) throw new Error("setDragImage requires the dragged element as the second argument."); if (n || (n = D), e.dataTransfer && e.dataTransfer.setDragImage) { var r, o = n(t, m(t), e); if (!(o.element instanceof HTMLElement) || "number" != typeof o.posX || "number" != typeof o.posY) throw new Error("The customDragImage function you provided must return and object with the properties element[string], posX[integer], posY[integer]."); e.dataTransfer.effectAllowed = "copyMove", e.dataTransfer.setData("text/plain", x(e).id), e.dataTransfer.setDragImage(o.element, o.posX, o.posY) } }, A = function (e, t) { if (!0 === e.isSortable) { var n = p(e).getConfig("acceptFrom"); if (null !== n && !1 !== n && "string" != typeof n) throw new Error('HTML5Sortable: Wrong argument, "acceptFrom" must be "null", "false", or a valid selector string.'); if (null !== n) return !1 !== n && n.split(",").filter(function (e) { return e.length > 0 && t.matches(e) }).length > 0; if (e === t) return !0; if (void 0 !== p(e).getConfig("connectWith") && null !== p(e).getConfig("connectWith")) return p(e).getConfig("connectWith") === p(t).getConfig("connectWith") } return !1 }, I = { items: null, connectWith: null, disableIEFix: null, acceptFrom: null, copy: !1, placeholder: null, placeholderClass: "sortable-placeholder", draggingClass: "sortable-dragging", hoverClass: !1, debounce: 0, throttleTime: 100, maxItems: 0, itemSerializer: void 0, containerSerializer: void 0, customDragImage: null, orientation: "vertical" }, S = function (e, t) { if ("string" == typeof p(e).getConfig("hoverClass")) { var o = p(e).getConfig("hoverClass").split(" "); !0 === t ? (n(e, "mousemove", a(function (t) { 0 === t.buttons && f(e.children, p(e).getConfig("items")).forEach(function (e) { var n, r; e !== t.target ? (n = e.classList).remove.apply(n, o) : (r = e.classList).add.apply(r, o) }) }, p(e).getConfig("throttleTime"))), n(e, "mouseleave", function () { f(e.children, p(e).getConfig("items")).forEach(function (e) { var t; (t = e.classList).remove.apply(t, o) }) })) : (r(e, "mousemove"), r(e, "mouseleave")) } }, _, Y, O, P, z, N, W, j, F, q = function (e) { r(e, "dragstart"), r(e, "dragend"), r(e, "dragover"), r(e, "dragenter"), r(e, "drop"), r(e, "mouseenter"), r(e, "mouseleave") }, R = function (e, t) { var n = e; return !0 === p(t).getConfig("copy") && (o(n = e.cloneNode(!0), "aria-copied", "true"), e.parentElement.appendChild(n), n.style.display = "none", n.oldDisplay = e.style.display), n }, X = function (e) { t(e), i(e, "aria-dropeffect") }, B = function (e) { i(e, "aria-grabbed"), i(e, "aria-copied"), i(e, "draggable"), i(e, "role") }, k = function (t) { var n = e(t, "opts") || {}, o = f(t.children, n.items), i = M(o, n.handle); r(t, "dragover"), r(t, "dragenter"), r(t, "dragstart"), r(t, "dragend"), r(t, "drop"), X(t), r(i, "mousedown"), q(o), B(o), t.isSortable = !1 }, U = function (t) { var r = e(t, "opts"), i = f(t.children, r.items), a = M(i, r.handle), l; (o(t, "aria-dropeffect", "move"), e(t, "_disabled", "false"), o(a, "draggable", "true"), !1 === r.disableIEFix) && ("function" == typeof (document || window.document).createElement("span").dragDrop && n(a, "mousedown", function () { if (-1 !== i.indexOf(this)) this.dragDrop(); else { for (var e = this.parentElement; -1 === i.indexOf(e);) e = e.parentElement; e.dragDrop() } })) }, V = function (t) { var n = e(t, "opts"), i = f(t.children, n.items), a = M(i, n.handle); o(t, "aria-dropeffect", "none"), e(t, "_disabled", "true"), o(a, "draggable", "false"), r(a, "mousedown") }, G = function (t) { var n = e(t, "opts"), o = f(t.children, n.items), i = M(o, n.handle); e(t, "_disabled", "false"), q(o), r(i, "mousedown"), r(t, "dragover"), r(t, "dragenter"), r(t, "drop") }; return c.destroy = function (e) { k(e) }, c.enable = function (e) { U(e) }, c.disable = function (e) { V(e) }, c.__testing = { _data: e, _removeItemEvents: q, _removeItemData: B, _removeSortableData: X }, c }(); /* * HTML5 Sortable jQuery Plugin * http://farhadi.ir/projects/html5sortable * * Copyright 2012, Ali Farhadi * Released under the MIT license. */ (function($) { var dragging, placeholders = $(); $.fn.sortable = function(options) { var method = String(options); options = $.extend({ connectWith: false }, options); return this.each(function() { if (/^enable|disable|destroy$/.test(method)) { var items = $(this).children($(this).data('items')).attr('draggable', method == 'enable'); if (method == 'destroy') { items.add(this).removeData('connectWith items') .off('dragstart.h5s dragend.h5s selectstart.h5s dragover.h5s dragenter.h5s drop.h5s'); } return; } var isHandle, index, items = $(this).children(options.items); var placeholder = $('<' + (/^ul|ol$/i.test(this.tagName) ? 'li' : 'div') + ' class="sortable-placeholder">'); items.find(options.handle).mousedown(function() { isHandle = true; }).mouseup(function() { isHandle = false; }); $(this).data('items', options.items) placeholders = placeholders.add(placeholder); if (options.connectWith) { $(options.connectWith).add(this).data('connectWith', options.connectWith); } items.attr('draggable', 'true').on('dragstart.h5s', function(e) { e.stopPropagation(); // Mod to handle nested sortables - DC if (options.handle && !isHandle) { return false; } isHandle = false; var dt = e.originalEvent.dataTransfer; dt.effectAllowed = 'move'; dt.setData('Text', 'dummy'); index = (dragging = $(this)).addClass('sortable-dragging').index(); //Custom addition by Rob to hold the index before it was moved $(this).attr('data-previndex', index); }).on('dragend.h5s', function() { dragging = $(this); dragging.removeClass('sortable-dragging').show(); placeholders.detach(); if (index != dragging.index()) { items.parent().trigger('sortupdate', {item: dragging}); } dragging = null; }).not('a[href], img').on('selectstart.h5s', function() { this.dragDrop && this.dragDrop(); return false; }).end().add([this, placeholder]).on('dragover.h5s dragenter.h5s drop.h5s', function(e) { if (!items.is(dragging) && options.connectWith !== $(dragging).parent().data('connectWith')) { return true; } if (e.type == 'drop') { e.stopPropagation(); placeholders.filter(':visible').after(dragging); return false; } e.preventDefault(); e.originalEvent.dataTransfer.dropEffect = 'move'; if (items.is(this)) { if (options.forcePlaceholderSize) { placeholder.height(dragging.outerHeight()); } dragging.hide(); $(this)[placeholder.index() < $(this).index() ? 'after' : 'before'](placeholder); placeholders.not(placeholder).detach(); } else if (!placeholders.is(this) && !$(this).children(options.items).length) { placeholders.detach(); $(this).append(placeholder); } return false; }); }); }; })(jQuery); /* * jQuery formatDateTime Plugin * * Copyright 2012 Adam Gschwender * Dual licensed under the MIT or GPL Version 2 licenses. */ ; (function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['jquery'], factory); } else { // Browser globals: jQuery or jQuery-like library, such as Zepto factory(window.jQuery || window.$); } } (function ($) { var defaults = { monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], ampmNames: ['AM', 'PM'], attribute: 'data-datetime', formatAttribute: 'data-dateformat' }; var ticksTo1970 = (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000); var formatDateTime = function (format, date, settings) { var output = ''; var literal = false; var iFormat = 0; // Check whether a format character is doubled var lookAhead = function (match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) { iFormat++; } return matches; }; // Format a number, with leading zero if necessary var formatNumber = function (match, value, len) { var num = '' + value; if (lookAhead(match)) { while (num.length < len) { num = '0' + num; } } return num; }; // Format a name, short or long as requested var formatName = function (match, value, shortNames, longNames) { return (lookAhead(match) ? longNames[value] : shortNames[value]); }; for (iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { if (format.charAt(iFormat) == "'" && !lookAhead("'")) { literal = false; } else { output += format.charAt(iFormat); } } else { switch (format.charAt(iFormat)) { case 'a': output += date.getHours() < 12 ? settings.ampmNames[0] : settings.ampmNames[1]; break; case 'd': output += formatNumber('d', date.getDate(), 2); break; case 'D': output += formatName('D', date.getDay(), settings.dayNamesShort, settings.dayNames); break; case 'o': var end = new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime(); var start = new Date(date.getFullYear(), 0, 0).getTime(); output += formatNumber( 'o', Math.round((end - start) / 86400000), 3); break; case 'g': var hour = date.getHours() % 12; output += formatNumber('g', (hour === 0 ? 12 : hour), 2); break; case 'h': output += formatNumber('h', date.getHours(), 2); break; case 'u': output += formatNumber('u', date.getMilliseconds(), 3); break; case 'i': output += formatNumber('i', date.getMinutes(), 2); break; case 'm': output += formatNumber('m', date.getMonth() + 1, 2); break; case 'M': output += formatName('M', date.getMonth(), settings.monthNamesShort, settings.monthNames); break; case 's': output += formatNumber('s', date.getSeconds(), 2); break; case 'y': output += (lookAhead('y') ? date.getFullYear() : (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); break; case '@': output += date.getTime(); break; case '!': output += date.getTime() * 10000 + ticksTo1970; break; case "'": if (lookAhead("'")) { output += "'"; } else { literal = true; } break; default: output += format.charAt(iFormat); } } } return output; }; $.fn.formatDateTime = function (format, settings) { settings = $.extend({}, defaults, settings); var date = $(this).attr(settings.attribute); // Use explicit format string first, then fallback to format attribute format = format || $(this).attr(settings.formatAttribute); if (typeof date === 'undefined' || date === false) { date = $(this).text(); } if (date === '') { $(this).text(''); } else { $(this).text(formatDateTime(format, new Date(date), settings)); } return this; }; /** Format a date object into a string value. The format can be combinations of the following: a - Ante meridiem and post meridiem d - day of month (no leading zero) dd - day of month (two digit) o - day of year (no leading zeros) oo - day of year (three digit) D - day name short DD - day name long g - 12-hour hour format of day (no leading zero) gg - 12-hour hour format of day (two digit) h - 24-hour hour format of day (no leading zero) hh - 24-hour hour format of day (two digit) u - millisecond of second (no leading zeros) uu - millisecond of second (three digit) i - minute of hour (no leading zero) ii - minute of hour (two digit) m - month of year (no leading zero) mm - month of year (two digit) M - month name short MM - month name long s - second of minute (no leading zero) ss - second of minute (two digit) y - year (two digit) yy - year (four digit) @ - Unix timestamp (ms since 01/01/1970) ! - Windows ticks (100ns since 01/01/0001) '...' - literal text '' - single quote @param format string - the desired format of the date @param date Date - the date value to format @param settings Object - attributes include: ampmNames string[2] - am/pm (optional) dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) dayNames string[7] - names of the days from Sunday (optional) monthNamesShort string[12] - abbreviated names of the months (optional) monthNames string[12] - names of the months (optional) attribute string - Attribute which stores datetime, defaults to data-datetime, only valid when called on dom element(s). If not present, uses text. @return string - the date in the above format */ $.formatDateTime = function (format, date, settings) { settings = $.extend({}, defaults, settings); if (!date) { return ''; } return formatDateTime(format, date, settings); }; })); $(function () { //Method to check if select has an option in it //$('#ctl').hasOption('a_value'); $.fn.hasOption = function (val) { if ($(this).is('select')) { return $(this).find('option').filter(function () { return $(this).val() === val; }).length !== 0; } else return false; } //Method to add an option to a select //$('#ctl').addOption('Some text to show', 'a_value'); $.fn.addOption = function (txt, val) { if ($(this).is('select') && !$(this).hasOption(val)) { var o = new Option(txt, val); $(this).append(o); } }; //Method to clear all options from a select //$('#ctl').clearOptions(false); $.fn.clearOptions = function (inclFirst) { if ($(this).is('select')) { if (!inclFirst) $(this).find('option:not(:first)').remove(); else $(this).empty(); } }; //Method to add mulitple options to a select //$('#ctl').addOptions(["v1~^~t1", "v2~^~t2"], '~^~'); $.fn.addOptions = function (data, delimiter) { if ($(this).is('select')) { if (delimiter == undefined || delimiter == null) delimiter = '~^~'; var _this = $(this); $.each(data, function (index, value) { var itm = value.split(delimiter); _this.addOption(itm[1], itm[0]); }); } }; //Method to set the selected value on a custom select //$('#ctl').setVal('a_value'); $.fn.setVal = function (val) { if ($(this).is('select')) { $(this).val(val); $(this).next('span.customSelect').find('span.customSelectInner').text($(this).find('option:selected').text()); } }; $.fn.exists = function () { return $(this).length > 0; }; $.fn.scrollTo = function (additionalOffset) { if (additionalOffset == undefined) additionalOffset = 0; $('html,body').animate({ scrollTop: $(this).offset().top - additionalOffset }); }; $.fn.encHTML = function () { return $(this).html().replace(/&/g, '&').replace(//g, '>'); }; $.fn.decHTML = function () { return $(this).html().replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); }; //Converts querystring to object $.QueryString = (function (a) { if (a == "") return {}; var b = {}; for (var i = 0; i < a.length; ++i) { var p = a[i].split('='); if (p.length != 2) continue; b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " ")); } return b; })(window.location.search.substr(1).split('&')); //http://maximeparmentier.com/2012/11/06/bind-show-hide-events-with-jquery/ $.each(['show', 'hide'], function (i, ev) { var el = $.fn[ev]; $.fn[ev] = function () { this.trigger(ev); return el.apply(this, arguments); }; }); //http://stackoverflow.com/a/14084869/880792 //Adds an event that can used to know when the show class has been added var origAddClassMethod = $.fn.addClass; $.fn.addClass = function () { var result = origAddClassMethod.apply(this, arguments); if ($.inArray('show', arguments) >= 0) $(this).trigger('showCSS'); return result; } //http://stackoverflow.com/a/14084869/880792 //Adds an event that can used to know when the show class has been removed var origRemoveClassMethod = $.fn.removeClass; $.fn.removeClass = function () { var result = origRemoveClassMethod.apply(this, arguments); if ($.inArray('show', arguments) >= 0) $(this).trigger('hideCSS'); return result; } }); //Default parameters to make and AJAX call var ajaxParams = { url: 'https://mir.mts360.com/api/ajax.asmx/', type: 'post', contentType: 'application/json; charset=utf-8', data: JSON.stringify({}), dataType: 'json', sync: true }; String.prototype.endsWith = function (str) { return (this.match(str + "$") == str) } String.prototype.startsWith = function (str) { return (this.match("$" + str) == str) } String.prototype.stripHTML = function (nbspSwapChar) { var reg = /(<([^>]+)>)/ig; return this.replace(reg, '').replace(/ /g, nbspSwapChar); } String.prototype.replaceAll = function (search, replace) { if (replace === undefined) { return this.toString(); } return this.replace(new RegExp('[' + search + ']', 'g'), replace); }; String.prototype.encHTML = function () { var d = $('
').html(this); return $(d).html(); } String.prototype.decHTML = function () { var d = $('
').html(this); return $(d).text(); } function capitaliseSentences(txt) { capText = txt.toLowerCase(); capText = capText.replace("

", "

. "); capText = capText.replace(" ", " "); console.log('capText', capText); var wordSplit = '. '; var wordArray = capText.split(wordSplit); var numWords = wordArray.length; for (x = 0; x < numWords; x++) { wordArray[x] = wordArray[x].replace(wordArray[x].charAt(0), wordArray[x].charAt(0).toUpperCase()); if (x == 0) { capText = wordArray[x] + ". "; } else if (x != numWords -1) { capText = capText + wordArray[x] + ". "; } else if (x == numWords -1) { capText = capText+wordArray[x]; } } capText = capText.replace("

. ", "

"); capText = capText.replace(" i ", " I "); return capText; } $(document).keyup(function (event) { //Ctrl+Shift+F3 to capitalise sentences if (event.ctrlKey == true && event.shiftKey == true && event.keyCode == 114) { $(event.target).html(capitaliseSentences($(event.target).html())); } }); function cleanPastedContent(content) { return content .replace(new RegExp('\r\n', 'g'), ' ') .replace(new RegExp('\n', 'g'), ' ') .trim(); } document.addEventListener("paste", function (e) { e.preventDefault(); if (e.clipboardData) { content = (e.originalEvent || e).clipboardData.getData('text/plain'); document.execCommand('insertText', false, cleanPastedContent(content)); } else if (window.clipboardData) { content = window.clipboardData.getData('Text'); document.selection.createRange().pasteHTML(cleanPastedContent(content)); } }); /* Formats the JSON response back from an AJAX call .NET Webservice call returns data.d, so this tidies it up The data.info is an object in it's own right so it too is formatted nicely */ function formatJSONResponse(data) { data = jQuery.parseJSON(data.d); info = jQuery.parseJSON(data.info); data.info = info; return data; } function showError(errMsg) { new modalAlert({ title: 'Error', text: errMsg }) .ok(function () { }); } function showAlert(title, msg) { new modalAlert({ title: title, text: msg }) .ok(function () { }); } function doDataTables(columnOrders, showAll) { if ($('.data-table').length) { if (columnOrders == undefined || columnOrders == null) columnOrders = [[0, 'asc']]; if (showAll == undefined || showAll == null) showAll = true; $('.data-table') .on('init.dt', function () { $(this).parent().find('select').customSelect(); }) .on('page.dt', function () { $(this).scrollTo(120); }) .dataTable({ retrieve: true, order: columnOrders, paging: showAll }); } } /*! Copyright 2008-2021 SpryMedia Ltd. This source file is free software, available under the following license: MIT license - http://datatables.net/license This source file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. For details please refer to: http://www.datatables.net DataTables 1.11.3 ©2008-2021 SpryMedia Ltd - datatables.net/license */ var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(l,z,A){l instanceof String&&(l=String(l));for(var q=l.length,E=0;E").css({position:"fixed",top:0,left:-1*l(z).scrollLeft(),height:1, width:1,overflow:"hidden"}).append(l("
").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(l("
").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}l.extend(a.oBrowser,u.__browser);a.oScroll.iBarWidth=u.__browser.barWidth} function Cb(a,b,c,d,e,h){var f=!1;if(c!==q){var g=c;f=!0}for(;d!==e;)a.hasOwnProperty(d)&&(g=f?b(g,a[d],d,a):a[d],f=!0,d+=h);return g}function Xa(a,b){var c=u.defaults.column,d=a.aoColumns.length;c=l.extend({},u.models.oColumn,c,{nTh:b?b:A.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=l.extend({},u.models.oSearch,c[d]);Ga(a,d,l(b).data())}function Ga(a,b,c){b=a.aoColumns[b]; var d=a.oClasses,e=l(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var h=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);h&&(b.sWidthOrig=h[1])}c!==q&&null!==c&&(Ab(c),P(u.defaults.column,c,!0),c.mDataProp===q||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),l.extend(b,c),X(b,c,"sWidth","sWidthOrig"),c.iDataSort!==q&&(b.aDataSort=[c.iDataSort]),X(b,c,"aDataSort"));var f=b.mData,g=na(f), k=b.mRender?na(b.mRender):null;c=function(m){return"string"===typeof m&&-1!==m.indexOf("@")};b._bAttrSrc=l.isPlainObject(f)&&(c(f.sort)||c(f.type)||c(f.filter));b._setter=null;b.fnGetData=function(m,n,p){var t=g(m,n,q,p);return k&&n?k(t,n,m,p):t};b.fnSetData=function(m,n,p){return ha(f)(m,n,p)};"number"!==typeof f&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==l.inArray("asc",b.asSorting);c=-1!==l.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c? (b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function ta(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ya(a);for(var c=0,d=b.length;cm[n])d(g.length+m[n],k);else if("string"===typeof m[n]){var p=0;for(f=g.length;pb&&a[e]--; -1!=d&&c===q&&a.splice(d,1)}function wa(a,b,c,d){var e=a.aoData[b],h,f=function(k,m){for(;k.childNodes.length;)k.removeChild(k.firstChild);k.innerHTML=T(a,b,m,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var g=e.anCells;if(g)if(d!==q)f(g[d],d);else for(c=0,h=g.length;c").appendTo(d));var k=0;for(b=g.length;k=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);g=a._iDisplayStart;var n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,V(a,!1);else if(!k)a.iDraw++;else if(!a.bDestroying&&!b){Gb(a);return}if(0!==m.length)for(b=k?a.aoData.length:n,f=k?0:g;f",{"class":h?e[0]:""}).append(l("",{valign:"top",colSpan:oa(a),"class":a.oClasses.sRowEmpty}).html(d))[0];F(a,"aoHeaderCallback","header",[l(a.nTHead).children("tr")[0],cb(a),g,n,m]);F(a,"aoFooterCallback", "footer",[l(a.nTFoot).children("tr")[0],cb(a),g,n,m]);e=l(a.nTBody);e.children().detach();e.append(l(c));F(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function ka(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&Hb(a);d?za(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;ja(a);a._drawHold=!1}function Ib(a){var b=a.oClasses,c=l(a.nTable);c=l("
").insertBefore(c);var d=a.oFeatures,e=l("
",{id:a.sTableId+"_wrapper", "class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var h=a.sDom.split(""),f,g,k,m,n,p,t=0;t")[0];m=h[t+1];if("'"==m||'"'==m){n="";for(p=2;h[t+p]!=m;)n+=h[t+p],p++;"H"==n?n=b.sJUIHeader:"F"==n&&(n=b.sJUIFooter);-1!=n.indexOf(".")?(m=n.split("."),k.id=m[0].substr(1,m[0].length-1),k.className=m[1]):"#"==n.charAt(0)?k.id=n.substr(1,n.length-1):k.className=n;t+=p}e.append(k); e=l(k)}else if(">"==g)e=e.parent();else if("l"==g&&d.bPaginate&&d.bLengthChange)f=Jb(a);else if("f"==g&&d.bFilter)f=Kb(a);else if("r"==g&&d.bProcessing)f=Lb(a);else if("t"==g)f=Mb(a);else if("i"==g&&d.bInfo)f=Nb(a);else if("p"==g&&d.bPaginate)f=Ob(a);else if(0!==u.ext.feature.length)for(k=u.ext.feature,p=0,m=k.length;p',g=d.sSearch;g=g.match(/_INPUT_/)?g.replace("_INPUT_",f):g+f;b=l("
",{id:h.f?null:c+"_filter","class":b.sFilter}).append(l("
").addClass(b.sLength);a.aanFeatures.l||(k[0].id=c+"_length");k.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));l("select",k).val(a._iDisplayLength).on("change.DT",function(m){jb(a,l(this).val());ja(a)});l(a.nTable).on("length.dt.DT",function(m,n,p){a===n&&l("select",k).val(p)});return k[0]}function Ob(a){var b=a.sPaginationType,c=u.ext.pager[b],d="function"===typeof c,e=function(f){ja(f)};b=l("
").addClass(a.oClasses.sPaging+b)[0]; var h=a.aanFeatures;d||c.fnInit(a,b,e);h.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(f){if(d){var g=f._iDisplayStart,k=f._iDisplayLength,m=f.fnRecordsDisplay(),n=-1===k;g=n?0:Math.ceil(g/k);k=n?1:Math.ceil(m/k);m=c(g,k);var p;n=0;for(p=h.p.length;nh&& (d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function V(a,b){a.oFeatures.bProcessing&&l(a.aanFeatures.r).css("display",b?"block":"none"); F(a,null,"processing",[a,b])}function Mb(a){var b=l(a.nTable),c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,h=a.oClasses,f=b.children("caption"),g=f.length?f[0]._captionSide:null,k=l(b[0].cloneNode(!1)),m=l(b[0].cloneNode(!1)),n=b.children("tfoot");n.length||(n=null);k=l("
",{"class":h.sScrollWrapper}).append(l("
",{"class":h.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?K(d):null:"100%"}).append(l("
",{"class":h.sScrollHeadInner}).css({"box-sizing":"content-box", width:c.sXInner||"100%"}).append(k.removeAttr("id").css("margin-left",0).append("top"===g?f:null).append(b.children("thead"))))).append(l("
",{"class":h.sScrollBody}).css({position:"relative",overflow:"auto",width:d?K(d):null}).append(b));n&&k.append(l("
",{"class":h.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?K(d):null:"100%"}).append(l("
",{"class":h.sScrollFootInner}).append(m.removeAttr("id").css("margin-left",0).append("bottom"===g?f:null).append(b.children("tfoot"))))); b=k.children();var p=b[0];h=b[1];var t=n?b[2]:null;if(d)l(h).on("scroll.DT",function(v){v=this.scrollLeft;p.scrollLeft=v;n&&(t.scrollLeft=v)});l(h).css("max-height",e);c.bCollapse||l(h).css("height",e);a.nScrollHead=p;a.nScrollBody=h;a.nScrollFoot=t;a.aoDrawCallback.push({fn:Ha,sName:"scrolling"});return k[0]}function Ha(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var h=l(a.nScrollHead),f=h[0].style,g=h.children("div"),k=g[0].style,m=g.children("table");g=a.nScrollBody;var n=l(g),p= g.style,t=l(a.nScrollFoot).children("div"),v=t.children("table"),x=l(a.nTHead),w=l(a.nTable),r=w[0],C=r.style,G=a.nTFoot?l(a.nTFoot):null,aa=a.oBrowser,L=aa.bScrollOversize;U(a.aoColumns,"nTh");var O=[],I=[],H=[],ea=[],Y,Ca=function(D){D=D.style;D.paddingTop="0";D.paddingBottom="0";D.borderTopWidth="0";D.borderBottomWidth="0";D.height=0};var fa=g.scrollHeight>g.clientHeight;if(a.scrollBarVis!==fa&&a.scrollBarVis!==q)a.scrollBarVis=fa,ta(a);else{a.scrollBarVis=fa;w.children("thead, tfoot").remove(); if(G){var ba=G.clone().prependTo(w);var la=G.find("tr");ba=ba.find("tr")}var mb=x.clone().prependTo(w);x=x.find("tr");fa=mb.find("tr");mb.find("th, td").removeAttr("tabindex");c||(p.width="100%",h[0].style.width="100%");l.each(Na(a,mb),function(D,W){Y=ua(a,D);W.style.width=a.aoColumns[Y].sWidth});G&&ca(function(D){D.style.width=""},ba);h=w.outerWidth();""===c?(C.width="100%",L&&(w.find("tbody").height()>g.offsetHeight||"scroll"==n.css("overflow-y"))&&(C.width=K(w.outerWidth()-b)),h=w.outerWidth()): ""!==d&&(C.width=K(d),h=w.outerWidth());ca(Ca,fa);ca(function(D){var W=z.getComputedStyle?z.getComputedStyle(D).width:K(l(D).width());H.push(D.innerHTML);O.push(W)},fa);ca(function(D,W){D.style.width=O[W]},x);l(fa).height(0);G&&(ca(Ca,ba),ca(function(D){ea.push(D.innerHTML);I.push(K(l(D).css("width")))},ba),ca(function(D,W){D.style.width=I[W]},la),l(ba).height(0));ca(function(D,W){D.innerHTML='
'+H[W]+"
";D.childNodes[0].style.height="0";D.childNodes[0].style.overflow= "hidden";D.style.width=O[W]},fa);G&&ca(function(D,W){D.innerHTML='
'+ea[W]+"
";D.childNodes[0].style.height="0";D.childNodes[0].style.overflow="hidden";D.style.width=I[W]},ba);w.outerWidth()g.offsetHeight||"scroll"==n.css("overflow-y")?h+b:h,L&&(g.scrollHeight>g.offsetHeight||"scroll"==n.css("overflow-y"))&&(C.width=K(la-b)),""!==c&&""===d||da(a,1,"Possible column misalignment",6)):la="100%";p.width=K(la);f.width=K(la);G&&(a.nScrollFoot.style.width= K(la));!e&&L&&(p.height=K(r.offsetHeight+b));c=w.outerWidth();m[0].style.width=K(c);k.width=K(c);d=w.height()>g.clientHeight||"scroll"==n.css("overflow-y");e="padding"+(aa.bScrollbarLeft?"Left":"Right");k[e]=d?b+"px":"0px";G&&(v[0].style.width=K(c),t[0].style.width=K(c),t[0].style[e]=d?b+"px":"0px");w.children("colgroup").insertBefore(w.children("thead"));n.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(g.scrollTop=0)}}function ca(a,b,c){for(var d=0,e=0,h=b.length,f,g;e").appendTo(g.find("tbody"));g.find("thead, tfoot").remove();g.append(l(a.nTHead).clone()).append(l(a.nTFoot).clone());g.find("tfoot th, tfoot td").css("width","");m=Na(a,g.find("thead")[0]);for(v=0;v").css({width:w.sWidthOrig, margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(v=0;v").css(h||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(g).appendTo(p);h&&f?g.width(f):h?(g.css("width","auto"),g.removeAttr("width"),g.width()").css("width",K(a)).appendTo(b||A.body);b=a[0].offsetWidth;a.remove();return b}function $b(a,b){var c=ac(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]: l("").html(T(a,c,b,"display"))[0]}function ac(a,b){for(var c,d=-1,e=-1,h=0,f=a.aoData.length;hd&&(d=c.length,e=h);return e}function K(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function pa(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=l.isPlainObject(d);var h=[];var f=function(n){n.length&&!Array.isArray(n[0])?h.push(n):l.merge(h,n)};Array.isArray(d)&&f(d); e&&d.pre&&f(d.pre);f(a.aaSorting);e&&d.post&&f(d.post);for(a=0;aG?1:0;if(0!==C)return"asc"===r.dir?C:-C}C=c[n];G=c[p];return CG?1:0}):f.sort(function(n,p){var t,v=g.length,x=e[n]._aSortData,w=e[p]._aSortData;for(t=0;tG?1:0})}a.bSorted=!0}function cc(a){var b=a.aoColumns,c=pa(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d/g,"");var k=h.nTh;k.removeAttribute("aria-sort");h.bSortable&&(0e?e+1:3))}e=0;for(h=d.length;ee?e+1:3))}a.aLastSort=d}function bc(a,b){var c=a.aoColumns[b],d=u.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,va(a,b)));for(var h,f=u.ext.type.order[c.sType+"-pre"],g=0,k=a.aoData.length;g=e.length?[0, m[1]]:m)}));b.search!==q&&l.extend(a.oPreviousSearch,Wb(b.search));if(b.columns){f=0;for(d=b.columns.length;f=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function fb(a,b){a=a.renderer;var c=u.ext.renderer[b];return l.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||c._:c._}function Q(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function Da(a,b){var c=ec.numbers_length,d=Math.floor(c/2); b<=c?a=ra(0,b):a<=d?(a=ra(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=ra(b-(c-2),b):(a=ra(a-d+2,a+d-1),a.push("ellipsis"),a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Wa(a){l.each({num:function(b){return Ta(b,a)},"num-fmt":function(b){return Ta(b,a,rb)},"html-num":function(b){return Ta(b,a,Ua)},"html-num-fmt":function(b){return Ta(b,a,Ua,rb)}},function(b,c){M.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(M.type.search[b+a]=M.type.search.html)})}function fc(a){return function(){var b= [Sa(this[u.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return u.ext.internal[a].apply(this,b)}}var u=function(a,b){if(this instanceof u)return l(a).DataTable(b);b=a;this.$=function(f,g){return this.api(!0).$(f,g)};this._=function(f,g){return this.api(!0).rows(f,g).data()};this.api=function(f){return f?new B(Sa(this[M.iApiIndex])):new B(this)};this.fnAddData=function(f,g){var k=this.api(!0);f=Array.isArray(f)&&(Array.isArray(f[0])||l.isPlainObject(f[0]))?k.rows.add(f):k.row.add(f); (g===q||g)&&k.draw();return f.flatten().toArray()};this.fnAdjustColumnSizing=function(f){var g=this.api(!0).columns.adjust(),k=g.settings()[0],m=k.oScroll;f===q||f?g.draw(!1):(""!==m.sX||""!==m.sY)&&Ha(k)};this.fnClearTable=function(f){var g=this.api(!0).clear();(f===q||f)&&g.draw()};this.fnClose=function(f){this.api(!0).row(f).child.hide()};this.fnDeleteRow=function(f,g,k){var m=this.api(!0);f=m.rows(f);var n=f.settings()[0],p=n.aoData[f[0][0]];f.remove();g&&g.call(this,n,p);(k===q||k)&&m.draw(); return p};this.fnDestroy=function(f){this.api(!0).destroy(f)};this.fnDraw=function(f){this.api(!0).draw(f)};this.fnFilter=function(f,g,k,m,n,p){n=this.api(!0);null===g||g===q?n.search(f,k,m,p):n.column(g).search(f,k,m,p);n.draw()};this.fnGetData=function(f,g){var k=this.api(!0);if(f!==q){var m=f.nodeName?f.nodeName.toLowerCase():"";return g!==q||"td"==m||"th"==m?k.cell(f,g).data():k.row(f).data()||null}return k.data().toArray()};this.fnGetNodes=function(f){var g=this.api(!0);return f!==q?g.row(f).node(): g.rows().nodes().flatten().toArray()};this.fnGetPosition=function(f){var g=this.api(!0),k=f.nodeName.toUpperCase();return"TR"==k?g.row(f).index():"TD"==k||"TH"==k?(f=g.cell(f).index(),[f.row,f.columnVisible,f.column]):null};this.fnIsOpen=function(f){return this.api(!0).row(f).child.isShown()};this.fnOpen=function(f,g,k){return this.api(!0).row(f).child(g,k).show().child()[0]};this.fnPageChange=function(f,g){f=this.api(!0).page(f);(g===q||g)&&f.draw(!1)};this.fnSetColumnVis=function(f,g,k){f=this.api(!0).column(f).visible(g); (k===q||k)&&f.columns.adjust().draw()};this.fnSettings=function(){return Sa(this[M.iApiIndex])};this.fnSort=function(f){this.api(!0).order(f).draw()};this.fnSortListener=function(f,g,k){this.api(!0).order.listener(f,g,k)};this.fnUpdate=function(f,g,k,m,n){var p=this.api(!0);k===q||null===k?p.row(g).data(f):p.cell(g,k).data(f);(n===q||n)&&p.columns.adjust();(m===q||m)&&p.draw();return 0};this.fnVersionCheck=M.fnVersionCheck;var c=this,d=b===q,e=this.length;d&&(b={});this.oApi=this.internal=M.internal; for(var h in u.ext.internal)h&&(this[h]=fc(h));this.each(function(){var f={},g=1").appendTo(t));r.nTHead=H[0];var ea=t.children("tbody");0===ea.length&&(ea=l("").insertAfter(H)); r.nTBody=ea[0];H=t.children("tfoot");0===H.length&&0").appendTo(t));0===H.length||0===H.children().length?t.addClass(C.sNoFooter):0/g,uc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,vc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,rb=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk??]/gi,Z=function(a){return a&&!0!==a&&"-"!==a?!1:!0},hc=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},ic=function(a,b){sb[b]||(sb[b]=new RegExp(ib(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g, "").replace(sb[b],"."):a},tb=function(a,b,c){var d="string"===typeof a;if(Z(a))return!0;b&&d&&(a=ic(a,b));c&&d&&(a=a.replace(rb,""));return!isNaN(parseFloat(a))&&isFinite(a)},jc=function(a,b,c){return Z(a)?!0:Z(a)||"string"===typeof a?tb(a.replace(Ua,""),b,c)?!0:null:null},U=function(a,b,c){var d=[],e=0,h=a.length;if(c!==q)for(;ea.length)){var b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d")[0],sc=Qa.textContent!==q,tc=/<.*?>/g,gb=u.util.throttle,nc=[],N=Array.prototype,wc=function(a){var b,c=u.settings,d=l.map(c,function(h,f){return h.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=l.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?b=l(a):a instanceof l&&(b=a)}else return[];if(b)return b.map(function(h){e= l.inArray(this,d);return-1!==e?c[e]:null}).toArray()};var B=function(a,b){if(!(this instanceof B))return new B(a,b);var c=[],d=function(f){(f=wc(f))&&c.push.apply(c,f)};if(Array.isArray(a))for(var e=0,h=a.length;ea?new B(b[a],this[a]):null},filter:function(a){var b=[];if(N.filter)b=N.filter.call(this,a,this);else for(var c=0,d=this.length;c").addClass(g),l("td",k).addClass(g).html(f)[0].colSpan= oa(a),e.push(k[0]))};h(c,d);b._details&&b._details.detach();b._details=l(e);b._detailsShow&&b._details.insertAfter(b.nTr)},xb=function(a,b){var c=a.context;c.length&&(a=c[0].aoData[b!==q?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=q,a._details=q,l(a.nTr).removeClass("dt-hasChild"),qa(c[0]))},qc=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];d._details&&((d._detailsShow=b)?(d._details.insertAfter(d.nTr),l(d.nTr).addClass("dt-hasChild")):(d._details.detach(), l(d.nTr).removeClass("dt-hasChild")),F(c[0],null,"childRow",[b,a.row(a[0])]),zc(c[0]),qa(c[0]))}},zc=function(a){var b=new B(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0g){var n=l.map(d,function(p,t){return p.bVisible?t:null});return[n[n.length+g]]}return[ua(a,g)];case "name":return l.map(e,function(p,t){return p===m[1]?t:null});default:return[]}if(f.nodeName&&f._DT_CellIndex)return[f._DT_CellIndex.column]; g=l(h).filter(f).map(function(){return l.inArray(this,h)}).toArray();if(g.length||!f.nodeName)return g;g=l(f).closest("*[data-dt-column]");return g.length?[g.data("dt-column")]:[]},a,c)};y("columns()",function(a,b){a===q?a="":l.isPlainObject(a)&&(b=a,a="");b=vb(b);var c=this.iterator("table",function(d){return Bc(d,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});J("columns().header()","column().header()",function(a,b){return this.iterator("column",function(c,d){return c.aoColumns[d].nTh}, 1)});J("columns().footer()","column().footer()",function(a,b){return this.iterator("column",function(c,d){return c.aoColumns[d].nTf},1)});J("columns().data()","column().data()",function(){return this.iterator("column-rows",rc,1)});J("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});J("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,h){return Ea(b.aoData,h,"search"=== a?"_aFilterData":"_aSortData",c)},1)});J("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return Ea(a.aoData,e,"anCells",b)},1)});J("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(e,h){if(a===q)return e.aoColumns[h].bVisible;var f=e.aoColumns,g=f[h],k=e.aoData,m;if(a!==q&&g.bVisible!==a){if(a){var n=l.inArray(!0,U(f,"bVisible"),h+1);f=0;for(m=k.length;fd;return!0};u.isDataTable=u.fnIsDataTable=function(a){var b= l(a).get(0),c=!1;if(a instanceof u.Api)return!0;l.each(u.settings,function(d,e){d=e.nScrollHead?l("table",e.nScrollHead)[0]:null;var h=e.nScrollFoot?l("table",e.nScrollFoot)[0]:null;if(e.nTable===b||d===b||h===b)c=!0});return c};u.tables=u.fnTables=function(a){var b=!1;l.isPlainObject(a)&&(b=a.api,a=a.visible);var c=l.map(u.settings,function(d){if(!a||a&&l(d.nTable).is(":visible"))return d.nTable});return b?new B(c):c};u.camelToHungarian=P;y("$()",function(a,b){b=this.rows(b).nodes();b=l(b);return l([].concat(b.filter(a).toArray(), b.find(a).toArray()))});l.each(["on","one","off"],function(a,b){y(b+"()",function(){var c=Array.prototype.slice.call(arguments);c[0]=l.map(c[0].split(/\s/),function(e){return e.match(/\.dt\b/)?e:e+".dt"}).join(" ");var d=l(this.tables().nodes());d[b].apply(d,c);return this})});y("clear()",function(){return this.iterator("table",function(a){Ka(a)})});y("settings()",function(){return new B(this.context,this.context)});y("init()",function(){var a=this.context;return a.length?a[0].oInit:null});y("data()", function(){return this.iterator("table",function(a){return U(a.aoData,"_aData")}).flatten()});y("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,h=b.nTBody,f=b.nTHead,g=b.nTFoot,k=l(e);h=l(h);var m=l(b.nTableWrapper),n=l.map(b.aoData,function(t){return t.nTr}),p;b.bDestroying=!0;F(b,"aoDestroyCallback","destroy",[b]);a||(new B(b)).columns().visible(!0);m.off(".DT").find(":not(tbody *)").off(".DT");l(z).off(".DT-"+b.sInstance); e!=f.parentNode&&(k.children("thead").detach(),k.append(f));g&&e!=g.parentNode&&(k.children("tfoot").detach(),k.append(g));b.aaSorting=[];b.aaSortingFixed=[];Ra(b);l(n).removeClass(b.asStripeClasses.join(" "));l("th, td",f).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);h.children().detach();h.append(n);f=a?"remove":"detach";k[f]();m[f]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),k.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&& h.children().each(function(t){l(this).addClass(b.asDestroyStripes[t%p])}));c=l.inArray(b,u.settings);-1!==c&&u.settings.splice(c,1)})});l.each(["column","row","cell"],function(a,b){y(b+"s().every()",function(c){var d=this.selector.opts,e=this;return this.iterator(b,function(h,f,g,k,m){c.call(e[b](f,"cell"===b?g:d,"cell"===b?d:q),f,g,k,m)})})});y("i18n()",function(a,b,c){var d=this.context[0];a=na(a)(d.oLanguage);a===q&&(a=b);c!==q&&l.isPlainObject(a)&&(a=a[c]!==q?a[c]:a._);return a.replace("%d",c)}); u.version="1.11.3";u.settings=[];u.models={};u.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0,"return":!1};u.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};u.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null, sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};u.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1, bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){return{}}}, fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last", sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:l.extend({},u.models.oSearch),sAjaxDataProp:"data", sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};E(u.defaults);u.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};E(u.defaults.column);u.models.oSettings= {oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{}, aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0, aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,jqXHR:null,json:q,oAjaxData:q,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==Q(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length}, fnRecordsDisplay:function(){return"ssp"==Q(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,h=e.bPaginate;return e.bServerSide?!1===h||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!h||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};u.ext=M={buttons:{},classes:{},build:"dt/dt-1.11.3", errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:u.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:u.version};l.extend(M,{afnFiltering:M.search,aTypes:M.type.detect,ofnSearch:M.type.search,oSort:M.type.order,afnSortData:M.order,aoFeatures:M.feature,oApi:M.internal,oStdClasses:M.classes,oPagination:M.pager});l.extend(u.ext.classes, {sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_desc_disabled",sSortableDesc:"sorting_asc_disabled", sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var ec= u.ext.pager;l.extend(ec,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[Da(a,b)]},simple_numbers:function(a,b){return["previous",Da(a,b),"next"]},full_numbers:function(a,b){return["first","previous",Da(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",Da(a,b),"last"]},_numbers:Da,numbers_length:7});l.extend(!0,u.ext.renderer,{pageButton:{_:function(a,b,c,d,e,h){var f=a.oClasses,g=a.oLanguage.oPaginate, k=a.oLanguage.oAria.paginate||{},m,n,p=0,t=function(x,w){var r,C=f.sPageButtonDisabled,G=function(I){lb(a,I.data.action,!0)};var aa=0;for(r=w.length;aa").appendTo(x);t(O,L)}else{m=null;n=L;O=a.iTabIndex;switch(L){case "ellipsis":x.append('');break;case "first":m=g.sFirst;0===e&&(O=-1,n+=" "+C);break;case "previous":m=g.sPrevious;0===e&&(O=-1,n+=" "+C);break;case "next":m=g.sNext;if(0=== h||e===h-1)O=-1,n+=" "+C;break;case "last":m=g.sLast;if(0===h||e===h-1)O=-1,n+=" "+C;break;default:m=a.fnFormatNumber(L+1),n=e===L?f.sPageButtonActive:""}null!==m&&(O=l("",{"class":f.sPageButton+" "+n,"aria-controls":a.sTableId,"aria-label":k[L],"data-dt-idx":p,tabindex:O,id:0===c&&"string"===typeof L?a.sTableId+"_"+L:null}).html(m).appendTo(x),ob(O,{action:L},G),p++)}}};try{var v=l(b).find(A.activeElement).data("dt-idx")}catch(x){}t(l(b).empty(),d);v!==q&&l(b).find("[data-dt-idx="+v+"]").trigger("focus")}}}); l.extend(u.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return tb(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!uc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||Z(a)?"date":null},function(a,b){b=b.oLanguage.sDecimal;return tb(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return jc(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return jc(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return Z(a)||"string"===typeof a&&-1!==a.indexOf("<")? "html":null}]);l.extend(u.ext.type.search,{html:function(a){return Z(a)?a:"string"===typeof a?a.replace(gc," ").replace(Ua,""):""},string:function(a){return Z(a)?a:"string"===typeof a?a.replace(gc," "):a}});var Ta=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=ic(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};l.extend(M.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return Z(a)?"":a.replace?a.replace(/<.*?>/g, "").toLowerCase():a+""},"string-pre":function(a){return Z(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return ab?1:0},"string-desc":function(a,b){return ab?-1:0}});Wa("");l.extend(!0,u.ext.renderer,{header:{_:function(a,b,c,d){l(a.nTable).on("order.dt.DT",function(e,h,f,g){a===h&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==g[e]?d.sSortAsc:"desc"==g[e]?d.sSortDesc:c.sSortingClass))})},jqueryui:function(a,b,c, d){l("
").addClass(d.sSortJUIWrapper).append(b.contents()).append(l("").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);l(a.nTable).on("order.dt.DT",function(e,h,f,g){a===h&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==g[e]?d.sSortAsc:"desc"==g[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"==g[e]?d.sSortJUIAsc:"desc"== g[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var yb=function(a){Array.isArray(a)&&(a=a.join(","));return"string"===typeof a?a.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""):a};u.render={number:function(a,b,c,d,e){return{display:function(h){if("number"!==typeof h&&"string"!==typeof h)return h;var f=0>h?"-":"",g=parseFloat(h);if(isNaN(g))return yb(h);g=g.toFixed(c);h=Math.abs(g);g=parseInt(h,10);h=c?b+(h-g).toFixed(c).substring(2):"";0===g&&0===parseFloat(h)&& (f="");return f+(d||"")+g.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+h+(e||"")}}},text:function(){return{display:yb,filter:yb}}};l.extend(u.ext.internal,{_fnExternApiFunc:fc,_fnBuildAjax:Oa,_fnAjaxUpdate:Gb,_fnAjaxParameters:Pb,_fnAjaxUpdateDraw:Qb,_fnAjaxDataSrc:Aa,_fnAddColumn:Xa,_fnColumnOptions:Ga,_fnAdjustColumnSizing:ta,_fnVisibleToColumnIndex:ua,_fnColumnIndexToVisible:va,_fnVisbleColumns:oa,_fnGetColumns:Ia,_fnColumnTypes:Za,_fnApplyColumnDefs:Db,_fnHungarianMap:E,_fnCamelToHungarian:P, _fnLanguageCompat:ma,_fnBrowserDetect:Bb,_fnAddData:ia,_fnAddTr:Ja,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==q?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return l.inArray(c,a.aoData[b].anCells)},_fnGetCellData:T,_fnSetCellData:Eb,_fnSplitObjNotation:bb,_fnGetObjectDataFn:na,_fnSetObjectDataFn:ha,_fnGetDataMaster:cb,_fnClearTable:Ka,_fnDeleteIndex:La,_fnInvalidate:wa,_fnGetRowElements:ab,_fnCreateTr:$a,_fnBuildHead:Fb,_fnDrawHead:ya,_fnDraw:ja,_fnReDraw:ka,_fnAddOptionsHtml:Ib, _fnDetectHeader:xa,_fnGetUniqueThs:Na,_fnFeatureHtmlFilter:Kb,_fnFilterComplete:za,_fnFilterCustom:Tb,_fnFilterColumn:Sb,_fnFilter:Rb,_fnFilterCreateSearch:hb,_fnEscapeRegex:ib,_fnFilterData:Ub,_fnFeatureHtmlInfo:Nb,_fnUpdateInfo:Xb,_fnInfoMacros:Yb,_fnInitialise:Ba,_fnInitComplete:Pa,_fnLengthChange:jb,_fnFeatureHtmlLength:Jb,_fnFeatureHtmlPaginate:Ob,_fnPageChange:lb,_fnFeatureHtmlProcessing:Lb,_fnProcessingDisplay:V,_fnFeatureHtmlTable:Mb,_fnScrollDraw:Ha,_fnApplyToChildren:ca,_fnCalculateColumnWidths:Ya, _fnThrottle:gb,_fnConvertToWidth:Zb,_fnGetWidestNode:$b,_fnGetMaxLenString:ac,_fnStringToCss:K,_fnSortFlatten:pa,_fnSort:Hb,_fnSortAria:cc,_fnSortListener:nb,_fnSortAttachListener:eb,_fnSortingClasses:Ra,_fnSortData:bc,_fnSaveState:qa,_fnLoadState:dc,_fnImplementState:pb,_fnSettingsFromNode:Sa,_fnLog:da,_fnMap:X,_fnBindAction:ob,_fnCallbackReg:R,_fnCallbackFire:F,_fnLengthOverflow:kb,_fnRenderer:fb,_fnDataSource:Q,_fnRowAttributes:db,_fnExtend:qb,_fnCalculateEnd:function(){}});l.fn.dataTable=u;u.$= l;l.fn.dataTableSettings=u.settings;l.fn.dataTableExt=u.ext;l.fn.DataTable=function(a){return l(this).dataTable(a).api()};l.each(u,function(a,b){l.fn.DataTable[a]=b});return u}); /*! DataTables styling integration ©2018 SpryMedia Ltd - datatables.net/license */ (function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net")(a,b).$);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){return c.fn.dataTable}); /** * findAndReplaceDOMText v 0.4.6 * @author James Padolsey http://james.padolsey.com * @license http://unlicense.org/UNLICENSE * * Matches the text of a DOM node against a regular expression * and replaces each match (or node-separated portions of the match) * in the specified element. */ (function (root, factory) { if (typeof module === 'object' && module.exports) { // Node/CommonJS module.exports = factory(); } else if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory); } else { // Browser globals root.findAndReplaceDOMText = factory(); } }(this, function factory() { var PORTION_MODE_RETAIN = 'retain'; var PORTION_MODE_FIRST = 'first'; var doc = document; var hasOwn = {}.hasOwnProperty; function escapeRegExp(s) { return String(s).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); } function exposed() { // Try deprecated arg signature first: return deprecated.apply(null, arguments) || findAndReplaceDOMText.apply(null, arguments); } function deprecated(regex, node, replacement, captureGroup, elFilter) { if ((node && !node.nodeType) && arguments.length <= 2) { return false; } var isReplacementFunction = typeof replacement == 'function'; if (isReplacementFunction) { replacement = (function (original) { return function (portion, match) { return original(portion.text, match.startIndex); }; }(replacement)); } // Awkward support for deprecated argument signature (<0.4.0) var instance = findAndReplaceDOMText(node, { find: regex, wrap: isReplacementFunction ? null : replacement, replace: isReplacementFunction ? replacement : '$' + (captureGroup || '&'), prepMatch: function (m, mi) { // Support captureGroup (a deprecated feature) if (!m[0]) throw 'findAndReplaceDOMText cannot handle zero-length matches'; if (captureGroup > 0) { var cg = m[captureGroup]; m.index += m[0].indexOf(cg); m[0] = cg; } m.endIndex = m.index + m[0].length; m.startIndex = m.index; m.index = mi; return m; }, filterElements: elFilter }); exposed.revert = function () { return instance.revert(); }; return true; } /** * findAndReplaceDOMText * * Locates matches and replaces with replacementNode * * @param {Node} node Element or Text node to search within * @param {RegExp} options.find The regular expression to match * @param {String|Element} [options.wrap] A NodeName, or a Node to clone * @param {String} [options.wrapClass] A classname to append to the wrapping element * @param {String|Function} [options.replace='$&'] What to replace each match with * @param {Function} [options.filterElements] A Function to be called to check whether to * process an element. (returning true = process element, * returning false = avoid element) */ function findAndReplaceDOMText(node, options) { return new Finder(node, options); } exposed.NON_PROSE_ELEMENTS = { br: 1, hr: 1, // Media / Source elements: script: 1, style: 1, img: 1, video: 1, audio: 1, canvas: 1, svg: 1, map: 1, object: 1, // Input elements input: 1, textarea: 1, select: 1, option: 1, optgroup: 1, button: 1 }; exposed.NON_CONTIGUOUS_PROSE_ELEMENTS = { // Elements that will not contain prose or block elements where we don't // want prose to be matches across element borders: // Block Elements address: 1, article: 1, aside: 1, blockquote: 1, dd: 1, div: 1, dl: 1, fieldset: 1, figcaption: 1, figure: 1, footer: 1, form: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, header: 1, hgroup: 1, hr: 1, main: 1, nav: 1, noscript: 1, ol: 1, output: 1, p: 1, pre: 1, section: 1, ul: 1, // Other misc. elements that are not part of continuous inline prose: br: 1, li: 1, summary: 1, dt: 1, details: 1, rp: 1, rt: 1, rtc: 1, // Media / Source elements: script: 1, style: 1, img: 1, video: 1, audio: 1, canvas: 1, svg: 1, map: 1, object: 1, // Input elements input: 1, textarea: 1, select: 1, option: 1, optgroup: 1, button: 1, // Table related elements: table: 1, tbody: 1, thead: 1, th: 1, tr: 1, td: 1, caption: 1, col: 1, tfoot: 1, colgroup: 1 }; exposed.NON_INLINE_PROSE = function (el) { return hasOwn.call(exposed.NON_CONTIGUOUS_PROSE_ELEMENTS, el.nodeName.toLowerCase()); }; // Presets accessed via `options.preset` when calling findAndReplaceDOMText(): exposed.PRESETS = { prose: { forceContext: exposed.NON_INLINE_PROSE, filterElements: function (el) { return !hasOwn.call(exposed.NON_PROSE_ELEMENTS, el.nodeName.toLowerCase()); } } }; exposed.Finder = Finder; /** * Finder -- encapsulates logic to find and replace. */ function Finder(node, options) { var preset = options.preset && exposed.PRESETS[options.preset]; options.portionMode = options.portionMode || PORTION_MODE_RETAIN; if (preset) { for (var i in preset) { if (hasOwn.call(preset, i) && !hasOwn.call(options, i)) { options[i] = preset[i]; } } } this.node = node; this.options = options; // Enable match-preparation method to be passed as option: this.prepMatch = options.prepMatch || this.prepMatch; this.reverts = []; this.matches = this.search(); if (this.matches.length) { this.processMatches(); } } Finder.prototype = { /** * Searches for all matches that comply with the instance's 'match' option */ search: function () { var match; var matchIndex = 0; var offset = 0; var regex = this.options.find; var textAggregation = this.getAggregateText(); var matches = []; var self = this; regex = typeof regex === 'string' ? RegExp(escapeRegExp(regex), 'g') : regex; matchAggregation(textAggregation); function matchAggregation(textAggregation) { for (var i = 0, l = textAggregation.length; i < l; ++i) { var text = textAggregation[i]; if (typeof text !== 'string') { // Deal with nested contexts: (recursive) matchAggregation(text); continue; } if (regex.global) { while (match = regex.exec(text)) { matches.push(self.prepMatch(match, matchIndex++, offset)); } } else { if (match = text.match(regex)) { matches.push(self.prepMatch(match, 0, offset)); } } offset += text.length; } } return matches; }, /** * Prepares a single match with useful meta info: */ prepMatch: function (match, matchIndex, characterOffset) { if (!match[0]) { throw new Error('findAndReplaceDOMText cannot handle zero-length matches'); } match.endIndex = characterOffset + match.index + match[0].length; match.startIndex = characterOffset + match.index; match.index = matchIndex; return match; }, /** * Gets aggregate text within subject node */ getAggregateText: function () { var elementFilter = this.options.filterElements; var forceContext = this.options.forceContext; return getText(this.node); /** * Gets aggregate text of a node without resorting * to broken innerText/textContent */ function getText(node) { if (node.nodeType === Node.TEXT_NODE) { return [node.data]; } if (elementFilter && !elementFilter(node)) { return []; } var txt = ['']; var i = 0; if (node = node.firstChild) do { if (node.nodeType === Node.TEXT_NODE) { txt[i] += node.data; continue; } var innerText = getText(node); if ( forceContext && node.nodeType === Node.ELEMENT_NODE && (forceContext === true || forceContext(node)) ) { txt[++i] = innerText; txt[++i] = ''; } else { if (typeof innerText[0] === 'string') { // Bridge nested text-node data so that they're // not considered their own contexts: // I.e. ['some', ['thing']] -> ['something'] txt[i] += innerText.shift(); } if (innerText.length) { txt[++i] = innerText; txt[++i] = ''; } } } while (node = node.nextSibling); return txt; } }, /** * Steps through the target node, looking for matches, and * calling replaceFn when a match is found. */ processMatches: function () { var matches = this.matches; var node = this.node; var elementFilter = this.options.filterElements; var startPortion, endPortion, innerPortions = [], curNode = node, match = matches.shift(), atIndex = 0, // i.e. nodeAtIndex matchIndex = 0, portionIndex = 0, doAvoidNode, nodeStack = [node]; out: while (true) { if (curNode.nodeType === Node.TEXT_NODE) { if (!endPortion && curNode.length + atIndex >= match.endIndex) { // We've found the ending // (Note that, in the case of a single portion, it'll be an // endPortion, not a startPortion.) endPortion = { node: curNode, index: portionIndex++, text: curNode.data.substring(match.startIndex - atIndex, match.endIndex - atIndex), // If it's the first match (atIndex==0) we should just return 0 indexInMatch: atIndex === 0 ? 0 : atIndex - match.startIndex, indexInNode: match.startIndex - atIndex, endIndexInNode: match.endIndex - atIndex, isEnd: true }; } else if (startPortion) { // Intersecting node innerPortions.push({ node: curNode, index: portionIndex++, text: curNode.data, indexInMatch: atIndex - match.startIndex, indexInNode: 0 // always zero for inner-portions }); } if (!startPortion && curNode.length + atIndex > match.startIndex) { // We've found the match start startPortion = { node: curNode, index: portionIndex++, indexInMatch: 0, indexInNode: match.startIndex - atIndex, endIndexInNode: match.endIndex - atIndex, text: curNode.data.substring(match.startIndex - atIndex, match.endIndex - atIndex) }; } atIndex += curNode.data.length; } doAvoidNode = curNode.nodeType === Node.ELEMENT_NODE && elementFilter && !elementFilter(curNode); if (startPortion && endPortion) { curNode = this.replaceMatch(match, startPortion, innerPortions, endPortion); // processMatches has to return the node that replaced the endNode // and then we step back so we can continue from the end of the // match: atIndex -= (endPortion.node.data.length - endPortion.endIndexInNode); startPortion = null; endPortion = null; innerPortions = []; match = matches.shift(); portionIndex = 0; matchIndex++; if (!match) { break; // no more matches } } else if ( !doAvoidNode && (curNode.firstChild || curNode.nextSibling) ) { // Move down or forward: if (curNode.firstChild) { nodeStack.push(curNode); curNode = curNode.firstChild; } else { curNode = curNode.nextSibling; } continue; } // Move forward or up: while (true) { if (curNode.nextSibling) { curNode = curNode.nextSibling; break; } curNode = nodeStack.pop(); if (curNode === node) { break out; } } } }, /** * Reverts ... TODO */ revert: function () { // Reversion occurs backwards so as to avoid nodes subsequently // replaced during the matching phase (a forward process): for (var l = this.reverts.length; l--;) { this.reverts[l](); } this.reverts = []; }, prepareReplacementString: function (string, portion, match) { var portionMode = this.options.portionMode; if ( portionMode === PORTION_MODE_FIRST && portion.indexInMatch > 0 ) { return ''; } string = string.replace(/\$(\d+|&|`|')/g, function ($0, t) { var replacement; switch (t) { case '&': replacement = match[0]; break; case '`': replacement = match.input.substring(0, match.startIndex); break; case '\'': replacement = match.input.substring(match.endIndex); break; default: replacement = match[+t] || ''; } return replacement; }); if (portionMode === PORTION_MODE_FIRST) { return string; } if (portion.isEnd) { return string.substring(portion.indexInMatch); } return string.substring(portion.indexInMatch, portion.indexInMatch + portion.text.length); }, getPortionReplacementNode: function (portion, match) { var replacement = this.options.replace || '$&'; var wrapper = this.options.wrap; var wrapperClass = this.options.wrapClass; if (wrapper && wrapper.nodeType) { // Wrapper has been provided as a stencil-node for us to clone: var clone = doc.createElement('div'); clone.innerHTML = wrapper.outerHTML || new XMLSerializer().serializeToString(wrapper); wrapper = clone.firstChild; } if (typeof replacement == 'function') { replacement = replacement(portion, match); if (replacement && replacement.nodeType) { return replacement; } return doc.createTextNode(String(replacement)); } var el = typeof wrapper == 'string' ? doc.createElement(wrapper) : wrapper; if (el && wrapperClass) { el.className = wrapperClass; } replacement = doc.createTextNode( this.prepareReplacementString( replacement, portion, match ) ); if (!replacement.data) { return replacement; } if (!el) { return replacement; } el.appendChild(replacement); return el; }, replaceMatch: function (match, startPortion, innerPortions, endPortion) { var matchStartNode = startPortion.node; var matchEndNode = endPortion.node; var precedingTextNode; var followingTextNode; if (matchStartNode === matchEndNode) { var node = matchStartNode; if (startPortion.indexInNode > 0) { // Add `before` text node (before the match) precedingTextNode = doc.createTextNode(node.data.substring(0, startPortion.indexInNode)); node.parentNode.insertBefore(precedingTextNode, node); } // Create the replacement node: var newNode = this.getPortionReplacementNode( endPortion, match ); node.parentNode.insertBefore(newNode, node); if (endPortion.endIndexInNode < node.length) { // ????? // Add `after` text node (after the match) followingTextNode = doc.createTextNode(node.data.substring(endPortion.endIndexInNode)); node.parentNode.insertBefore(followingTextNode, node); } node.parentNode.removeChild(node); this.reverts.push(function () { if (precedingTextNode === newNode.previousSibling) { precedingTextNode.parentNode.removeChild(precedingTextNode); } if (followingTextNode === newNode.nextSibling) { followingTextNode.parentNode.removeChild(followingTextNode); } newNode.parentNode.replaceChild(node, newNode); }); return newNode; } else { // Replace matchStartNode -> [innerMatchNodes...] -> matchEndNode (in that order) precedingTextNode = doc.createTextNode( matchStartNode.data.substring(0, startPortion.indexInNode) ); followingTextNode = doc.createTextNode( matchEndNode.data.substring(endPortion.endIndexInNode) ); var firstNode = this.getPortionReplacementNode( startPortion, match ); var innerNodes = []; for (var i = 0, l = innerPortions.length; i < l; ++i) { var portion = innerPortions[i]; var innerNode = this.getPortionReplacementNode( portion, match ); portion.node.parentNode.replaceChild(innerNode, portion.node); this.reverts.push((function (portion, innerNode) { return function () { innerNode.parentNode.replaceChild(portion.node, innerNode); }; }(portion, innerNode))); innerNodes.push(innerNode); } var lastNode = this.getPortionReplacementNode( endPortion, match ); matchStartNode.parentNode.insertBefore(precedingTextNode, matchStartNode); matchStartNode.parentNode.insertBefore(firstNode, matchStartNode); matchStartNode.parentNode.removeChild(matchStartNode); matchEndNode.parentNode.insertBefore(lastNode, matchEndNode); matchEndNode.parentNode.insertBefore(followingTextNode, matchEndNode); matchEndNode.parentNode.removeChild(matchEndNode); this.reverts.push(function () { precedingTextNode.parentNode.removeChild(precedingTextNode); firstNode.parentNode.replaceChild(matchStartNode, firstNode); followingTextNode.parentNode.removeChild(followingTextNode); lastNode.parentNode.replaceChild(matchEndNode, lastNode); }); return lastNode; } } }; return exposed; }));