/*!
DataTables 1.10.16
©2008-2017 SpryMedia Ltd - datatables.net/license
*/
(function(h) {
    "function" === typeof define && define.amd ? define(["jquery"], function(E) {
        return h(E, window, document)
    }) : "object" === typeof exports ? module.exports = function(E, G) {
        E || (E = window);
        G || (G = "undefined" !== typeof window ? require("jquery") : require("jquery")(E));
        return h(G, E, E.document)
    }
    : h(jQuery, window, document)
}
)(function(h, E, G, k) {
    function X(a) {
        var b, c, d = {};
        h.each(a, function(e) {
            if ((b = e.match(/^([^A-Z]+?)([A-Z])/)) && -1 !== "a aa ai ao as b fn i m o s ".indexOf(b[1] + " "))
                c = e.replace(b[0], b[2].toLowerCase()),
                d[c] = e,
                "o" === b[1] && X(a[e])
        });
        a._hungarianMap = d
    }
    function I(a, b, c) {
        a._hungarianMap || X(a);
        var d;
        h.each(b, function(e) {
            d = a._hungarianMap[e];
            if (d !== k && (c || b[d] === k))
                "o" === d.charAt(0) ? (b[d] || (b[d] = {}),
                h.extend(!0, b[d], b[e]),
                I(a[d], b[d], c)) : b[d] = b[e]
        })
    }
    function Ca(a) {
        var b = m.defaults.oLanguage
          , c = a.sZeroRecords;
        !a.sEmptyTable && (c && "No data available in table" === b.sEmptyTable) && F(a, a, "sZeroRecords", "sEmptyTable");
        !a.sLoadingRecords && (c && "Loading..." === b.sLoadingRecords) && F(a, a, "sZeroRecords", "sLoadingRecords");
        a.sInfoThousands && (a.sThousands = a.sInfoThousands);
        (a = a.sDecimal) && cb(a)
    }
    function db(a) {
        A(a, "ordering", "bSort");
        A(a, "orderMulti", "bSortMulti");
        A(a, "orderClasses", "bSortClasses");
        A(a, "orderCellsTop", "bSortCellsTop");
        A(a, "order", "aaSorting");
        A(a, "orderFixed", "aaSortingFixed");
        A(a, "paging", "bPaginate");
        A(a, "pagingType", "sPaginationType");
        A(a, "pageLength", "iDisplayLength");
        A(a, "searching", "bFilter");
        "boolean" === typeof a.sScrollX && (a.sScrollX = a.sScrollX ? "100%" : "");
        "boolean" === typeof a.scrollX && (a.scrollX = a.scrollX ? "100%" : "");
        if (a = a.aoSearchCols)
            for (var b = 0, c = a.length; b < c; b++)
                a[b] && I(m.models.oSearch, a[b])
    }
    function eb(a) {
        A(a, "orderable", "bSortable");
        A(a, "orderData", "aDataSort");
        A(a, "orderSequence", "asSorting");
        A(a, "orderDataType", "sortDataType");
        var b = a.aDataSort;
        "number" === typeof b && !h.isArray(b) && (a.aDataSort = [b])
    }
    function fb(a) {
        if (!m.__browser) {
            var b = {};
            m.__browser = b;
            var c = h("<div/>").css({
                position: "fixed",
                top: 0,
                left: -1 * h(E).scrollLeft(),
                height: 1,
                width: 1,
                overflow: "hidden"
            }).append(h("<div/>").css({
                position: "absolute",
                top: 1,
                left: 1,
                width: 100,
                overflow: "scroll"
            }).append(h("<div/>").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()
        }
        h.extend(a.oBrowser, m.__browser);
        a.oScroll.iBarWidth = m.__browser.barWidth
    }
    function gb(a, b, c, d, e, f) {
        var g, j = !1;
        c !== k && (g = c,
        j = !0);
        for (; d !== e; )
            a.hasOwnProperty(d) && (g = j ? b(g, a[d], d, a) : a[d],
            j = !0,
            d += f);
        return g
    }
    function Da(a, b) {
        var c = m.defaults.column
          , d = a.aoColumns.length
          , c = h.extend({}, m.models.oColumn, c, {
            nTh: b ? b : G.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] = h.extend({}, m.models.oSearch, c[d]);
        ja(a, d, h(b).data())
    }
    function ja(a, b, c) {
        var b = a.aoColumns[b]
          , d = a.oClasses
          , e = h(b.nTh);
        if (!b.sWidthOrig) {
            b.sWidthOrig = e.attr("width") || null;
            var f = (e.attr("style") || "").match(/width:\s*(\d+[pxem%]+)/);
            f && (b.sWidthOrig = f[1])
        }
        c !== k && null !== c && (eb(c),
        I(m.defaults.column, c),
        c.mDataProp !== k && !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),
        h.extend(b, c),
        F(b, c, "sWidth", "sWidthOrig"),
        c.iDataSort !== k && (b.aDataSort = [c.iDataSort]),
        F(b, c, "aDataSort"));
        var g = b.mData
          , j = Q(g)
          , i = b.mRender ? Q(b.mRender) : null
          , c = function(a) {
            return "string" === typeof a && -1 !== a.indexOf("@")
        };
        b._bAttrSrc = h.isPlainObject(g) && (c(g.sort) || c(g.type) || c(g.filter));
        b._setter = null;
        b.fnGetData = function(a, b, c) {
            var d = j(a, b, k, c);
            return i && b ? i(d, b, a, c) : d
        }
        ;
        b.fnSetData = function(a, b, c) {
            return R(g)(a, b, c)
        }
        ;
        "number" !== typeof g && (a._rowReadObject = !0);
        a.oFeatures.bSort || (b.bSortable = !1,
        e.addClass(d.sSortableNone));
        a = -1 !== h.inArray("asc", b.asSorting);
        c = -1 !== h.inArray("desc", b.asSorting);
        !b.bSortable || !a && !c ? (b.sSortingClass = d.sSortableNone,
        b.sSortingClassJUI = "") : 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)
    }
    function Y(a) {
        if (!1 !== a.oFeatures.bAutoWidth) {
            var b = a.aoColumns;
            Ea(a);
            for (var c = 0, d = b.length; c < d; c++)
                b[c].nTh.style.width = b[c].sWidth
        }
        b = a.oScroll;
        ("" !== b.sY || "" !== b.sX) && ka(a);
        r(a, null, "column-sizing", [a])
    }
    function Z(a, b) {
        var c = la(a, "bVisible");
        return "number" === typeof c[b] ? c[b] : null
    }
    function $(a, b) {
        var c = la(a, "bVisible")
          , c = h.inArray(b, c);
        return -1 !== c ? c : null
    }
    function aa(a) {
        var b = 0;
        h.each(a.aoColumns, function(a, d) {
            d.bVisible && "none" !== h(d.nTh).css("display") && b++
        });
        return b
    }
    function la(a, b) {
        var c = [];
        h.map(a.aoColumns, function(a, e) {
            a[b] && c.push(e)
        });
        return c
    }
    function Fa(a) {
        var b = a.aoColumns, c = a.aoData, d = m.ext.type.detect, e, f, g, j, i, h, l, q, t;
        e = 0;
        for (f = b.length; e < f; e++)
            if (l = b[e],
            t = [],
            !l.sType && l._sManualType)
                l.sType = l._sManualType;
            else if (!l.sType) {
                g = 0;
                for (j = d.length; g < j; g++) {
                    i = 0;
                    for (h = c.length; i < h; i++) {
                        t[i] === k && (t[i] = B(a, i, e, "type"));
                        q = d[g](t[i], a);
                        if (!q && g !== d.length - 1)
                            break;
                        if ("html" === q)
                            break
                    }
                    if (q) {
                        l.sType = q;
                        break
                    }
                }
                l.sType || (l.sType = "string")
            }
    }
    function hb(a, b, c, d) {
        var e, f, g, j, i, n, l = a.aoColumns;
        if (b)
            for (e = b.length - 1; 0 <= e; e--) {
                n = b[e];
                var q = n.targets !== k ? n.targets : n.aTargets;
                h.isArray(q) || (q = [q]);
                f = 0;
                for (g = q.length; f < g; f++)
                    if ("number" === typeof q[f] && 0 <= q[f]) {
                        for (; l.length <= q[f]; )
                            Da(a);
                        d(q[f], n)
                    } else if ("number" === typeof q[f] && 0 > q[f])
                        d(l.length + q[f], n);
                    else if ("string" === typeof q[f]) {
                        j = 0;
                        for (i = l.length; j < i; j++)
                            ("_all" == q[f] || h(l[j].nTh).hasClass(q[f])) && d(j, n)
                    }
            }
        if (c) {
            e = 0;
            for (a = c.length; e < a; e++)
                d(e, c[e])
        }
    }
    function M(a, b, c, d) {
        var e = a.aoData.length
          , f = h.extend(!0, {}, m.models.oRow, {
            src: c ? "dom" : "data",
            idx: e
        });
        f._aData = b;
        a.aoData.push(f);
        for (var g = a.aoColumns, j = 0, i = g.length; j < i; j++)
            g[j].sType = null;
        a.aiDisplayMaster.push(e);
        b = a.rowIdFn(b);
        b !== k && (a.aIds[b] = f);
        (c || !a.oFeatures.bDeferRender) && Ga(a, e, c, d);
        return e
    }
    function ma(a, b) {
        var c;
        b instanceof h || (b = h(b));
        return b.map(function(b, e) {
            c = Ha(a, e);
            return M(a, c.data, e, c.cells)
        })
    }
    function B(a, b, c, d) {
        var e = a.iDraw
          , f = a.aoColumns[c]
          , g = a.aoData[b]._aData
          , j = f.sDefaultContent
          , i = f.fnGetData(g, d, {
            settings: a,
            row: b,
            col: c
        });
        if (i === k)
            return a.iDrawError != e && null === j && (J(a, 0, "Requested unknown parameter " + ("function" == typeof f.mData ? "{function}" : "'" + f.mData + "'") + " for row " + b + ", column " + c, 4),
            a.iDrawError = e),
            j;
        if ((i === g || null === i) && null !== j && d !== k)
            i = j;
        else if ("function" === typeof i)
            return i.call(g);
        return null === i && "display" == d ? "" : i
    }
    function ib(a, b, c, d) {
        a.aoColumns[c].fnSetData(a.aoData[b]._aData, d, {
            settings: a,
            row: b,
            col: c
        })
    }
    function Ia(a) {
        return h.map(a.match(/(\\.|[^\.])+/g) || [""], function(a) {
            return a.replace(/\\\./g, ".")
        })
    }
    function Q(a) {
        if (h.isPlainObject(a)) {
            var b = {};
            h.each(a, function(a, c) {
                c && (b[a] = Q(c))
            });
            return function(a, c, f, g) {
                var j = b[c] || b._;
                return j !== k ? j(a, c, f, g) : a
            }
        }
        if (null === a)
            return function(a) {
                return a
            }
            ;
        if ("function" === typeof a)
            return function(b, c, f, g) {
                return a(b, c, f, g)
            }
            ;
        if ("string" === typeof a && (-1 !== a.indexOf(".") || -1 !== a.indexOf("[") || -1 !== a.indexOf("("))) {
            var c = function(a, b, f) {
                var g, j;
                if ("" !== f) {
                    j = Ia(f);
                    for (var i = 0, n = j.length; i < n; i++) {
                        f = j[i].match(ba);
                        g = j[i].match(U);
                        if (f) {
                            j[i] = j[i].replace(ba, "");
                            "" !== j[i] && (a = a[j[i]]);
                            g = [];
                            j.splice(0, i + 1);
                            j = j.join(".");
                            if (h.isArray(a)) {
                                i = 0;
                                for (n = a.length; i < n; i++)
                                    g.push(c(a[i], b, j))
                            }
                            a = f[0].substring(1, f[0].length - 1);
                            a = "" === a ? g : g.join(a);
                            break
                        } else if (g) {
                            j[i] = j[i].replace(U, "");
                            a = a[j[i]]();
                            continue
                        }
                        if (null === a || a[j[i]] === k)
                            return k;
                        a = a[j[i]]
                    }
                }
                return a
            };
            return function(b, e) {
                return c(b, e, a)
            }
        }
        return function(b) {
            return b[a]
        }
    }
    function R(a) {
        if (h.isPlainObject(a))
            return R(a._);
        if (null === a)
            return function() {}
            ;
        if ("function" === typeof a)
            return function(b, d, e) {
                a(b, "set", d, e)
            }
            ;
        if ("string" === typeof a && (-1 !== a.indexOf(".") || -1 !== a.indexOf("[") || -1 !== a.indexOf("("))) {
            var b = function(a, d, e) {
                var e = Ia(e), f;
                f = e[e.length - 1];
                for (var g, j, i = 0, n = e.length - 1; i < n; i++) {
                    g = e[i].match(ba);
                    j = e[i].match(U);
                    if (g) {
                        e[i] = e[i].replace(ba, "");
                        a[e[i]] = [];
                        f = e.slice();
                        f.splice(0, i + 1);
                        g = f.join(".");
                        if (h.isArray(d)) {
                            j = 0;
                            for (n = d.length; j < n; j++)
                                f = {},
                                b(f, d[j], g),
                                a[e[i]].push(f)
                        } else
                            a[e[i]] = d;
                        return
                    }
                    j && (e[i] = e[i].replace(U, ""),
                    a = a[e[i]](d));
                    if (null === a[e[i]] || a[e[i]] === k)
                        a[e[i]] = {};
                    a = a[e[i]]
                }
                if (f.match(U))
                    a[f.replace(U, "")](d);
                else
                    a[f.replace(ba, "")] = d
            };
            return function(c, d) {
                return b(c, d, a)
            }
        }
        return function(b, d) {
            b[a] = d
        }
    }
    function Ja(a) {
        return D(a.aoData, "_aData")
    }
    function na(a) {
        a.aoData.length = 0;
        a.aiDisplayMaster.length = 0;
        a.aiDisplay.length = 0;
        a.aIds = {}
    }
    function oa(a, b, c) {
        for (var d = -1, e = 0, f = a.length; e < f; e++)
            a[e] == b ? d = e : a[e] > b && a[e]--;
        -1 != d && c === k && a.splice(d, 1)
    }
    function ca(a, b, c, d) {
        var e = a.aoData[b], f, g = function(c, d) {
            for (; c.childNodes.length; )
                c.removeChild(c.firstChild);
            c.innerHTML = B(a, b, d, "display")
        };
        if ("dom" === c || (!c || "auto" === c) && "dom" === e.src)
            e._aData = Ha(a, e, d, d === k ? k : e._aData).data;
        else {
            var j = e.anCells;
            if (j)
                if (d !== k)
                    g(j[d], d);
                else {
                    c = 0;
                    for (f = j.length; c < f; c++)
                        g(j[c], c)
                }
        }
        e._aSortData = null;
        e._aFilterData = null;
        g = a.aoColumns;
        if (d !== k)
            g[d].sType = null;
        else {
            c = 0;
            for (f = g.length; c < f; c++)
                g[c].sType = null;
            Ka(a, e)
        }
    }
    function Ha(a, b, c, d) {
        var e = [], f = b.firstChild, g, j, i = 0, n, l = a.aoColumns, q = a._rowReadObject, d = d !== k ? d : q ? {} : [], t = function(a, b) {
            if ("string" === typeof a) {
                var c = a.indexOf("@");
                -1 !== c && (c = a.substring(c + 1),
                R(a)(d, b.getAttribute(c)))
            }
        }, m = function(a) {
            if (c === k || c === i)
                j = l[i],
                n = h.trim(a.innerHTML),
                j && j._bAttrSrc ? (R(j.mData._)(d, n),
                t(j.mData.sort, a),
                t(j.mData.type, a),
                t(j.mData.filter, a)) : q ? (j._setter || (j._setter = R(j.mData)),
                j._setter(d, n)) : d[i] = n;
            i++
        };
        if (f)
            for (; f; ) {
                g = f.nodeName.toUpperCase();
                if ("TD" == g || "TH" == g)
                    m(f),
                    e.push(f);
                f = f.nextSibling
            }
        else {
            e = b.anCells;
            f = 0;
            for (g = e.length; f < g; f++)
                m(e[f])
        }
        if (b = b.firstChild ? b : b.nTr)
            (b = b.getAttribute("id")) && R(a.rowId)(d, b);
        return {
            data: d,
            cells: e
        }
    }
    function Ga(a, b, c, d) {
        var e = a.aoData[b], f = e._aData, g = [], j, i, n, l, q;
        if (null === e.nTr) {
            j = c || G.createElement("tr");
            e.nTr = j;
            e.anCells = g;
            j._DT_RowIndex = b;
            Ka(a, e);
            l = 0;
            for (q = a.aoColumns.length; l < q; l++) {
                n = a.aoColumns[l];
                i = c ? d[l] : G.createElement(n.sCellType);
                i._DT_CellIndex = {
                    row: b,
                    column: l
                };
                g.push(i);
                if ((!c || n.mRender || n.mData !== l) && (!h.isPlainObject(n.mData) || n.mData._ !== l + ".display"))
                    i.innerHTML = B(a, b, l, "display");
                n.sClass && (i.className += " " + n.sClass);
                n.bVisible && !c ? j.appendChild(i) : !n.bVisible && c && i.parentNode.removeChild(i);
                n.fnCreatedCell && n.fnCreatedCell.call(a.oInstance, i, B(a, b, l), f, b, l)
            }
            r(a, "aoRowCreatedCallback", null, [j, f, b])
        }
        e.nTr.setAttribute("role", "row")
    }
    function Ka(a, b) {
        var c = b.nTr
          , d = b._aData;
        if (c) {
            var e = a.rowIdFn(d);
            e && (c.id = e);
            d.DT_RowClass && (e = d.DT_RowClass.split(" "),
            b.__rowc = b.__rowc ? qa(b.__rowc.concat(e)) : e,
            h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));
            d.DT_RowAttr && h(c).attr(d.DT_RowAttr);
            d.DT_RowData && h(c).data(d.DT_RowData)
        }
    }
    function jb(a) {
        var b, c, d, e, f, g = a.nTHead, j = a.nTFoot, i = 0 === h("th, td", g).length, n = a.oClasses, l = a.aoColumns;
        i && (e = h("<tr/>").appendTo(g));
        b = 0;
        for (c = l.length; b < c; b++)
            f = l[b],
            d = h(f.nTh).addClass(f.sClass),
            i && d.appendTo(e),
            a.oFeatures.bSort && (d.addClass(f.sSortingClass),
            !1 !== f.bSortable && (d.attr("tabindex", a.iTabIndex).attr("aria-controls", a.sTableId),
            La(a, f.nTh, b))),
            f.sTitle != d[0].innerHTML && d.html(f.sTitle),
            Ma(a, "header")(a, d, f, n);
        i && da(a.aoHeader, g);
        h(g).find(">tr").attr("role", "row");
        h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);
        h(j).find(">tr>th, >tr>td").addClass(n.sFooterTH);
        if (null !== j) {
            a = a.aoFooter[0];
            b = 0;
            for (c = a.length; b < c; b++)
                f = l[b],
                f.nTf = a[b].cell,
                f.sClass && h(f.nTf).addClass(f.sClass)
        }
    }
    function ea(a, b, c) {
        var d, e, f, g = [], j = [], i = a.aoColumns.length, n;
        if (b) {
            c === k && (c = !1);
            d = 0;
            for (e = b.length; d < e; d++) {
                g[d] = b[d].slice();
                g[d].nTr = b[d].nTr;
                for (f = i - 1; 0 <= f; f--)
                    !a.aoColumns[f].bVisible && !c && g[d].splice(f, 1);
                j.push([])
            }
            d = 0;
            for (e = g.length; d < e; d++) {
                if (a = g[d].nTr)
                    for (; f = a.firstChild; )
                        a.removeChild(f);
                f = 0;
                for (b = g[d].length; f < b; f++)
                    if (n = i = 1,
                    j[d][f] === k) {
                        a.appendChild(g[d][f].cell);
                        for (j[d][f] = 1; g[d + i] !== k && g[d][f].cell == g[d + i][f].cell; )
                            j[d + i][f] = 1,
                            i++;
                        for (; g[d][f + n] !== k && g[d][f].cell == g[d][f + n].cell; ) {
                            for (c = 0; c < i; c++)
                                j[d + c][f + n] = 1;
                            n++
                        }
                        h(g[d][f].cell).attr("rowspan", i).attr("colspan", n)
                    }
            }
        }
    }
    function N(a) {
        var b = r(a, "aoPreDrawCallback", "preDraw", [a]);
        if (-1 !== h.inArray(!1, b))
            C(a, !1);
        else {
            var b = []
              , c = 0
              , d = a.asStripeClasses
              , e = d.length
              , f = a.oLanguage
              , g = a.iInitDisplayStart
              , j = "ssp" == y(a)
              , i = a.aiDisplay;
            a.bDrawing = !0;
            g !== k && -1 !== g && (a._iDisplayStart = j ? g : g >= a.fnRecordsDisplay() ? 0 : g,
            a.iInitDisplayStart = -1);
            var g = a._iDisplayStart
              , n = a.fnDisplayEnd();
            if (a.bDeferLoading)
                a.bDeferLoading = !1,
                a.iDraw++,
                C(a, !1);
            else if (j) {
                if (!a.bDestroying && !kb(a))
                    return
            } else
                a.iDraw++;
            if (0 !== i.length) {
                f = j ? a.aoData.length : n;
                for (j = j ? 0 : g; j < f; j++) {
                    var l = i[j]
                      , q = a.aoData[l];
                    null === q.nTr && Ga(a, l);
                    l = q.nTr;
                    if (0 !== e) {
                        var t = d[c % e];
                        q._sRowStripe != t && (h(l).removeClass(q._sRowStripe).addClass(t),
                        q._sRowStripe = t)
                    }
                    r(a, "aoRowCallback", null, [l, q._aData, c, j]);
                    b.push(l);
                    c++
                }
            } else
                c = f.sZeroRecords,
                1 == a.iDraw && "ajax" == y(a) ? c = f.sLoadingRecords : f.sEmptyTable && 0 === a.fnRecordsTotal() && (c = f.sEmptyTable),
                b[0] = h("<tr/>", {
                    "class": e ? d[0] : ""
                }).append(h("<td />", {
                    valign: "top",
                    colSpan: aa(a),
                    "class": a.oClasses.sRowEmpty
                }).html(c))[0];
            r(a, "aoHeaderCallback", "header", [h(a.nTHead).children("tr")[0], Ja(a), g, n, i]);
            r(a, "aoFooterCallback", "footer", [h(a.nTFoot).children("tr")[0], Ja(a), g, n, i]);
            d = h(a.nTBody);
            d.children().detach();
            d.append(h(b));
            r(a, "aoDrawCallback", "draw", [a]);
            a.bSorted = !1;
            a.bFiltered = !1;
            a.bDrawing = !1
        }
    }
    function S(a, b) {
        var c = a.oFeatures
          , d = c.bFilter;
        c.bSort && lb(a);
        d ? fa(a, a.oPreviousSearch) : a.aiDisplay = a.aiDisplayMaster.slice();
        !0 !== b && (a._iDisplayStart = 0);
        a._drawHold = b;
        N(a);
        a._drawHold = !1
    }
    function mb(a) {
        var b = a.oClasses
          , c = h(a.nTable)
          , c = h("<div/>").insertBefore(c)
          , d = a.oFeatures
          , e = h("<div/>", {
            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 f = a.sDom.split(""), g, j, i, n, l, q, k = 0; k < f.length; k++) {
            g = null;
            j = f[k];
            if ("<" == j) {
                i = h("<div/>")[0];
                n = f[k + 1];
                if ("'" == n || '"' == n) {
                    l = "";
                    for (q = 2; f[k + q] != n; )
                        l += f[k + q],
                        q++;
                    "H" == l ? l = b.sJUIHeader : "F" == l && (l = b.sJUIFooter);
                    -1 != l.indexOf(".") ? (n = l.split("."),
                    i.id = n[0].substr(1, n[0].length - 1),
                    i.className = n[1]) : "#" == l.charAt(0) ? i.id = l.substr(1, l.length - 1) : i.className = l;
                    k += q
                }
                e.append(i);
                e = h(i)
            } else if (">" == j)
                e = e.parent();
            else if ("l" == j && d.bPaginate && d.bLengthChange)
                g = nb(a);
            else if ("f" == j && d.bFilter)
                g = ob(a);
            else if ("r" == j && d.bProcessing)
                g = pb(a);
            else if ("t" == j)
                g = qb(a);
            else if ("i" == j && d.bInfo)
                g = rb(a);
            else if ("p" == j && d.bPaginate)
                g = sb(a);
            else if (0 !== m.ext.feature.length) {
                i = m.ext.feature;
                q = 0;
                for (n = i.length; q < n; q++)
                    if (j == i[q].cFeature) {
                        g = i[q].fnInit(a);
                        break
                    }
            }
            g && (i = a.aanFeatures,
            i[j] || (i[j] = []),
            i[j].push(g),
            e.append(g))
        }
        c.replaceWith(e);
        a.nHolding = null
    }
    function da(a, b) {
        var c = h(b).children("tr"), d, e, f, g, j, i, n, l, q, k;
        a.splice(0, a.length);
        f = 0;
        for (i = c.length; f < i; f++)
            a.push([]);
        f = 0;
        for (i = c.length; f < i; f++) {
            d = c[f];
            for (e = d.firstChild; e; ) {
                if ("TD" == e.nodeName.toUpperCase() || "TH" == e.nodeName.toUpperCase()) {
                    l = 1 * e.getAttribute("colspan");
                    q = 1 * e.getAttribute("rowspan");
                    l = !l || 0 === l || 1 === l ? 1 : l;
                    q = !q || 0 === q || 1 === q ? 1 : q;
                    g = 0;
                    for (j = a[f]; j[g]; )
                        g++;
                    n = g;
                    k = 1 === l ? !0 : !1;
                    for (j = 0; j < l; j++)
                        for (g = 0; g < q; g++)
                            a[f + g][n + j] = {
                                cell: e,
                                unique: k
                            },
                            a[f + g].nTr = d
                }
                e = e.nextSibling
            }
        }
    }
    function ra(a, b, c) {
        var d = [];
        c || (c = a.aoHeader,
        b && (c = [],
        da(c, b)));
        for (var b = 0, e = c.length; b < e; b++)
            for (var f = 0, g = c[b].length; f < g; f++)
                if (c[b][f].unique && (!d[f] || !a.bSortCellsTop))
                    d[f] = c[b][f].cell;
        return d
    }
    function sa(a, b, c) {
        r(a, "aoServerParams", "serverParams", [b]);
        if (b && h.isArray(b)) {
            var d = {}
              , e = /(.*?)\[\]$/;
            h.each(b, function(a, b) {
                var c = b.name.match(e);
                c ? (c = c[0],
                d[c] || (d[c] = []),
                d[c].push(b.value)) : d[b.name] = b.value
            });
            b = d
        }
        var f, g = a.ajax, j = a.oInstance, i = function(b) {
            r(a, null, "xhr", [a, b, a.jqXHR]);
            c(b)
        };
        if (h.isPlainObject(g) && g.data) {
            f = g.data;
            var n = h.isFunction(f) ? f(b, a) : f
              , b = h.isFunction(f) && n ? n : h.extend(!0, b, n);
            delete g.data
        }
        n = {
            data: b,
            success: function(b) {
                var c = b.error || b.sError;
                c && J(a, 0, c);
                a.json = b;
                i(b)
            },
            dataType: "json",
            cache: !1,
            type: a.sServerMethod,
            error: function(b, c) {
                var d = r(a, null, "xhr", [a, null, a.jqXHR]);
                -1 === h.inArray(!0, d) && ("parsererror" == c ? J(a, 0, "Invalid JSON response", 1) : 4 === b.readyState && J(a, 0, "Ajax error", 7));
                C(a, !1)
            }
        };
        a.oAjaxData = b;
        r(a, null, "preXhr", [a, b]);
        a.fnServerData ? a.fnServerData.call(j, a.sAjaxSource, h.map(b, function(a, b) {
            return {
                name: b,
                value: a
            }
        }), i, a) : a.sAjaxSource || "string" === typeof g ? a.jqXHR = h.ajax(h.extend(n, {
            url: g || a.sAjaxSource
        })) : h.isFunction(g) ? a.jqXHR = g.call(j, b, i, a) : (a.jqXHR = h.ajax(h.extend(n, g)),
        g.data = f)
    }
    function kb(a) {
        return a.bAjaxDataGet ? (a.iDraw++,
        C(a, !0),
        sa(a, tb(a), function(b) {
            ub(a, b)
        }),
        !1) : !0
    }
    function tb(a) {
        var b = a.aoColumns, c = b.length, d = a.oFeatures, e = a.oPreviousSearch, f = a.aoPreSearchCols, g, j = [], i, n, l, k = V(a);
        g = a._iDisplayStart;
        i = !1 !== d.bPaginate ? a._iDisplayLength : -1;
        var t = function(a, b) {
            j.push({
                name: a,
                value: b
            })
        };
        t("sEcho", a.iDraw);
        t("iColumns", c);
        t("sColumns", D(b, "sName").join(","));
        t("iDisplayStart", g);
        t("iDisplayLength", i);
        var pa = {
            draw: a.iDraw,
            columns: [],
            order: [],
            start: g,
            length: i,
            search: {
                value: e.sSearch,
                regex: e.bRegex
            }
        };
        for (g = 0; g < c; g++)
            n = b[g],
            l = f[g],
            i = "function" == typeof n.mData ? "function" : n.mData,
            pa.columns.push({
                data: i,
                name: n.sName,
                searchable: n.bSearchable,
                orderable: n.bSortable,
                search: {
                    value: l.sSearch,
                    regex: l.bRegex
                }
            }),
            t("mDataProp_" + g, i),
            d.bFilter && (t("sSearch_" + g, l.sSearch),
            t("bRegex_" + g, l.bRegex),
            t("bSearchable_" + g, n.bSearchable)),
            d.bSort && t("bSortable_" + g, n.bSortable);
        d.bFilter && (t("sSearch", e.sSearch),
        t("bRegex", e.bRegex));
        d.bSort && (h.each(k, function(a, b) {
            pa.order.push({
                column: b.col,
                dir: b.dir
            });
            t("iSortCol_" + a, b.col);
            t("sSortDir_" + a, b.dir)
        }),
        t("iSortingCols", k.length));
        b = m.ext.legacy.ajax;
        return null === b ? a.sAjaxSource ? j : pa : b ? j : pa
    }
    function ub(a, b) {
        var c = ta(a, b)
          , d = b.sEcho !== k ? b.sEcho : b.draw
          , e = b.iTotalRecords !== k ? b.iTotalRecords : b.recordsTotal
          , f = b.iTotalDisplayRecords !== k ? b.iTotalDisplayRecords : b.recordsFiltered;
        if (d) {
            if (1 * d < a.iDraw)
                return;
            a.iDraw = 1 * d
        }
        na(a);
        a._iRecordsTotal = parseInt(e, 10);
        a._iRecordsDisplay = parseInt(f, 10);
        d = 0;
        for (e = c.length; d < e; d++)
            M(a, c[d]);
        a.aiDisplay = a.aiDisplayMaster.slice();
        a.bAjaxDataGet = !1;
        N(a);
        a._bInitComplete || ua(a, b);
        a.bAjaxDataGet = !0;
        C(a, !1)
    }
    function ta(a, b) {
        var c = h.isPlainObject(a.ajax) && a.ajax.dataSrc !== k ? a.ajax.dataSrc : a.sAjaxDataProp;
        return "data" === c ? b.aaData || b[c] : "" !== c ? Q(c)(b) : b
    }
    function ob(a) {
        var b = a.oClasses
          , c = a.sTableId
          , d = a.oLanguage
          , e = a.oPreviousSearch
          , f = a.aanFeatures
          , g = '<input type="search" class="' + b.sFilterInput + '"/>'
          , j = d.sSearch
          , j = j.match(/_INPUT_/) ? j.replace("_INPUT_", g) : j + g
          , b = h("<div/>", {
            id: !f.f ? c + "_filter" : null,
            "class": b.sFilter
        }).append(h("<label/>").append(j))
          , f = function() {
            var b = !this.value ? "" : this.value;
            b != e.sSearch && (fa(a, {
                sSearch: b,
                bRegex: e.bRegex,
                bSmart: e.bSmart,
                bCaseInsensitive: e.bCaseInsensitive
            }),
            a._iDisplayStart = 0,
            N(a))
        }
          , g = null !== a.searchDelay ? a.searchDelay : "ssp" === y(a) ? 400 : 0
          , i = h("input", b).val(e.sSearch).attr("placeholder", d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT", g ? Na(f, g) : f).on("keypress.DT", function(a) {
            if (13 == a.keyCode)
                return !1
        }).attr("aria-controls", c);
        h(a.nTable).on("search.dt.DT", function(b, c) {
            if (a === c)
                try {
                    i[0] !== G.activeElement && i.val(e.sSearch)
                } catch (d) {}
        });
        return b[0]
    }
    function fa(a, b, c) {
        var d = a.oPreviousSearch
          , e = a.aoPreSearchCols
          , f = function(a) {
            d.sSearch = a.sSearch;
            d.bRegex = a.bRegex;
            d.bSmart = a.bSmart;
            d.bCaseInsensitive = a.bCaseInsensitive
        };
        Fa(a);
        if ("ssp" != y(a)) {
            vb(a, b.sSearch, c, b.bEscapeRegex !== k ? !b.bEscapeRegex : b.bRegex, b.bSmart, b.bCaseInsensitive);
            f(b);
            for (b = 0; b < e.length; b++)
                wb(a, e[b].sSearch, b, e[b].bEscapeRegex !== k ? !e[b].bEscapeRegex : e[b].bRegex, e[b].bSmart, e[b].bCaseInsensitive);
            xb(a)
        } else
            f(b);
        a.bFiltered = !0;
        r(a, null, "search", [a])
    }
    function xb(a) {
        for (var b = m.ext.search, c = a.aiDisplay, d, e, f = 0, g = b.length; f < g; f++) {
            for (var j = [], i = 0, n = c.length; i < n; i++)
                e = c[i],
                d = a.aoData[e],
                b[f](a, d._aFilterData, e, d._aData, i) && j.push(e);
            c.length = 0;
            h.merge(c, j)
        }
    }
    function wb(a, b, c, d, e, f) {
        if ("" !== b) {
            for (var g = [], j = a.aiDisplay, d = Oa(b, d, e, f), e = 0; e < j.length; e++)
                b = a.aoData[j[e]]._aFilterData[c],
                d.test(b) && g.push(j[e]);
            a.aiDisplay = g
        }
    }
    function vb(a, b, c, d, e, f) {
        var d = Oa(b, d, e, f), f = a.oPreviousSearch.sSearch, g = a.aiDisplayMaster, j, e = [];
        0 !== m.ext.search.length && (c = !0);
        j = yb(a);
        if (0 >= b.length)
            a.aiDisplay = g.slice();
        else {
            if (j || c || f.length > b.length || 0 !== b.indexOf(f) || a.bSorted)
                a.aiDisplay = g.slice();
            b = a.aiDisplay;
            for (c = 0; c < b.length; c++)
                d.test(a.aoData[b[c]]._sFilterRow) && e.push(b[c]);
            a.aiDisplay = e
        }
    }
    function Oa(a, b, c, d) {
        a = b ? a : Pa(a);
        c && (a = "^(?=.*?" + h.map(a.match(/"[^"]+"|[^ ]+/g) || [""], function(a) {
            if ('"' === a.charAt(0))
                var b = a.match(/^"(.*)"$/)
                  , a = b ? b[1] : a;
            return a.replace('"', "")
        }).join(")(?=.*?") + ").*$");
        return RegExp(a, d ? "i" : "")
    }
    function yb(a) {
        var b = a.aoColumns, c, d, e, f, g, j, i, h, l = m.ext.type.search;
        c = !1;
        d = 0;
        for (f = a.aoData.length; d < f; d++)
            if (h = a.aoData[d],
            !h._aFilterData) {
                j = [];
                e = 0;
                for (g = b.length; e < g; e++)
                    c = b[e],
                    c.bSearchable ? (i = B(a, d, e, "filter"),
                    l[c.sType] && (i = l[c.sType](i)),
                    null === i && (i = ""),
                    "string" !== typeof i && i.toString && (i = i.toString())) : i = "",
                    i.indexOf && -1 !== i.indexOf("&") && (va.innerHTML = i,
                    i = Wb ? va.textContent : va.innerText),
                    i.replace && (i = i.replace(/[\r\n]/g, "")),
                    j.push(i);
                h._aFilterData = j;
                h._sFilterRow = j.join("  ");
                c = !0
            }
        return c
    }
    function zb(a) {
        return {
            search: a.sSearch,
            smart: a.bSmart,
            regex: a.bRegex,
            caseInsensitive: a.bCaseInsensitive
        }
    }
    function Ab(a) {
        return {
            sSearch: a.search,
            bSmart: a.smart,
            bRegex: a.regex,
            bCaseInsensitive: a.caseInsensitive
        }
    }
    function rb(a) {
        var b = a.sTableId
          , c = a.aanFeatures.i
          , d = h("<div/>", {
            "class": a.oClasses.sInfo,
            id: !c ? b + "_info" : null
        });
        c || (a.aoDrawCallback.push({
            fn: Bb,
            sName: "information"
        }),
        d.attr("role", "status").attr("aria-live", "polite"),
        h(a.nTable).attr("aria-describedby", b + "_info"));
        return d[0]
    }
    function Bb(a) {
        var b = a.aanFeatures.i;
        if (0 !== b.length) {
            var c = a.oLanguage
              , d = a._iDisplayStart + 1
              , e = a.fnDisplayEnd()
              , f = a.fnRecordsTotal()
              , g = a.fnRecordsDisplay()
              , j = g ? c.sInfo : c.sInfoEmpty;
            g !== f && (j += " " + c.sInfoFiltered);
            j += c.sInfoPostFix;
            j = Cb(a, j);
            c = c.fnInfoCallback;
            null !== c && (j = c.call(a.oInstance, a, d, e, f, g, j));
            h(b).html(j)
        }
    }
    function Cb(a, b) {
        var c = a.fnFormatNumber
          , d = a._iDisplayStart + 1
          , e = a._iDisplayLength
          , f = a.fnRecordsDisplay()
          , g = -1 === e;
        return b.replace(/_START_/g, c.call(a, d)).replace(/_END_/g, c.call(a, a.fnDisplayEnd())).replace(/_MAX_/g, c.call(a, a.fnRecordsTotal())).replace(/_TOTAL_/g, c.call(a, f)).replace(/_PAGE_/g, c.call(a, g ? 1 : Math.ceil(d / e))).replace(/_PAGES_/g, c.call(a, g ? 1 : Math.ceil(f / e)))
    }
    function ga(a) {
        var b, c, d = a.iInitDisplayStart, e = a.aoColumns, f;
        c = a.oFeatures;
        var g = a.bDeferLoading;
        if (a.bInitialised) {
            mb(a);
            jb(a);
            ea(a, a.aoHeader);
            ea(a, a.aoFooter);
            C(a, !0);
            c.bAutoWidth && Ea(a);
            b = 0;
            for (c = e.length; b < c; b++)
                f = e[b],
                f.sWidth && (f.nTh.style.width = v(f.sWidth));
            r(a, null, "preInit", [a]);
            S(a);
            e = y(a);
            if ("ssp" != e || g)
                "ajax" == e ? sa(a, [], function(c) {
                    var f = ta(a, c);
                    for (b = 0; b < f.length; b++)
                        M(a, f[b]);
                    a.iInitDisplayStart = d;
                    S(a);
                    C(a, !1);
                    ua(a, c)
                }, a) : (C(a, !1),
                ua(a))
        } else
            setTimeout(function() {
                ga(a)
            }, 200)
    }
    function ua(a, b) {
        a._bInitComplete = !0;
        (b || a.oInit.aaData) && Y(a);
        r(a, null, "plugin-init", [a, b]);
        r(a, "aoInitComplete", "init", [a, b])
    }
    function Qa(a, b) {
        var c = parseInt(b, 10);
        a._iDisplayLength = c;
        Ra(a);
        r(a, null, "length", [a, c])
    }
    function nb(a) {
        for (var b = a.oClasses, c = a.sTableId, d = a.aLengthMenu, e = h.isArray(d[0]), f = e ? d[0] : d, d = e ? d[1] : d, e = h("<select/>", {
            name: c + "_length",
            "aria-controls": c,
            "class": b.sLengthSelect
        }), g = 0, j = f.length; g < j; g++)
            e[0][g] = new Option("number" === typeof d[g] ? a.fnFormatNumber(d[g]) : d[g],f[g]);
        var i = h("<div><label/></div>").addClass(b.sLength);
        a.aanFeatures.l || (i[0].id = c + "_length");
        i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_", e[0].outerHTML));
        h("select", i).val(a._iDisplayLength).on("change.DT", function() {
            Qa(a, h(this).val());
            N(a)
        });
        h(a.nTable).on("length.dt.DT", function(b, c, d) {
            a === c && h("select", i).val(d)
        });
        return i[0]
    }
    function sb(a) {
        var b = a.sPaginationType
          , c = m.ext.pager[b]
          , d = "function" === typeof c
          , e = function(a) {
            N(a)
        }
          , b = h("<div/>").addClass(a.oClasses.sPaging + b)[0]
          , f = a.aanFeatures;
        d || c.fnInit(a, b, e);
        f.p || (b.id = a.sTableId + "_paginate",
        a.aoDrawCallback.push({
            fn: function(a) {
                if (d) {
                    var b = a._iDisplayStart, i = a._iDisplayLength, h = a.fnRecordsDisplay(), l = -1 === i, b = l ? 0 : Math.ceil(b / i), i = l ? 1 : Math.ceil(h / i), h = c(b, i), k, l = 0;
                    for (k = f.p.length; l < k; l++)
                        Ma(a, "pageButton")(a, f.p[l], l, h, b, i)
                } else
                    c.fnUpdate(a, e)
            },
            sName: "pagination"
        }));
        return b
    }
    function Sa(a, b, c) {
        var d = a._iDisplayStart
          , e = a._iDisplayLength
          , f = a.fnRecordsDisplay();
        0 === f || -1 === e ? d = 0 : "number" === typeof b ? (d = b * e,
        d > f && (d = 0)) : "first" == b ? d = 0 : "previous" == b ? (d = 0 <= e ? d - e : 0,
        0 > d && (d = 0)) : "next" == b ? d + e < f && (d += e) : "last" == b ? d = Math.floor((f - 1) / e) * e : J(a, 0, "Unknown paging action: " + b, 5);
        b = a._iDisplayStart !== d;
        a._iDisplayStart = d;
        b && (r(a, null, "page", [a]),
        c && N(a));
        return b
    }
    function pb(a) {
        return h("<div/>", {
            id: !a.aanFeatures.r ? a.sTableId + "_processing" : null,
            "class": a.oClasses.sProcessing
        }).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]
    }
    function C(a, b) {
        a.oFeatures.bProcessing && h(a.aanFeatures.r).css("display", b ? "block" : "none");
        r(a, null, "processing", [a, b])
    }
    function qb(a) {
        var b = h(a.nTable);
        b.attr("role", "grid");
        var c = a.oScroll;
        if ("" === c.sX && "" === c.sY)
            return a.nTable;
        var d = c.sX
          , e = c.sY
          , f = a.oClasses
          , g = b.children("caption")
          , j = g.length ? g[0]._captionSide : null
          , i = h(b[0].cloneNode(!1))
          , n = h(b[0].cloneNode(!1))
          , l = b.children("tfoot");
        l.length || (l = null);
        i = h("<div/>", {
            "class": f.sScrollWrapper
        }).append(h("<div/>", {
            "class": f.sScrollHead
        }).css({
            overflow: "hidden",
            position: "relative",
            border: 0,
            width: d ? !d ? null : v(d) : "100%"
        }).append(h("<div/>", {
            "class": f.sScrollHeadInner
        }).css({
            "box-sizing": "content-box",
            width: c.sXInner || "100%"
        }).append(i.removeAttr("id").css("margin-left", 0).append("top" === j ? g : null).append(b.children("thead"))))).append(h("<div/>", {
            "class": f.sScrollBody
        }).css({
            position: "relative",
            overflow: "auto",
            width: !d ? null : v(d)
        }).append(b));
        l && i.append(h("<div/>", {
            "class": f.sScrollFoot
        }).css({
            overflow: "hidden",
            border: 0,
            width: d ? !d ? null : v(d) : "100%"
        }).append(h("<div/>", {
            "class": f.sScrollFootInner
        }).append(n.removeAttr("id").css("margin-left", 0).append("bottom" === j ? g : null).append(b.children("tfoot")))));
        var b = i.children()
          , k = b[0]
          , f = b[1]
          , t = l ? b[2] : null;
        if (d)
            h(f).on("scroll.DT", function() {
                var a = this.scrollLeft;
                k.scrollLeft = a;
                l && (t.scrollLeft = a)
            });
        h(f).css(e && c.bCollapse ? "max-height" : "height", e);
        a.nScrollHead = k;
        a.nScrollBody = f;
        a.nScrollFoot = t;
        a.aoDrawCallback.push({
            fn: ka,
            sName: "scrolling"
        });
        return i[0]
    }
    function ka(a) {
        var b = a.oScroll, c = b.sX, d = b.sXInner, e = b.sY, b = b.iBarWidth, f = h(a.nScrollHead), g = f[0].style, j = f.children("div"), i = j[0].style, n = j.children("table"), j = a.nScrollBody, l = h(j), q = j.style, t = h(a.nScrollFoot).children("div"), m = t.children("table"), o = h(a.nTHead), p = h(a.nTable), s = p[0], r = s.style, u = a.nTFoot ? h(a.nTFoot) : null, x = a.oBrowser, T = x.bScrollOversize, Xb = D(a.aoColumns, "nTh"), O, K, P, w, Ta = [], y = [], z = [], A = [], B, C = function(a) {
            a = a.style;
            a.paddingTop = "0";
            a.paddingBottom = "0";
            a.borderTopWidth = "0";
            a.borderBottomWidth = "0";
            a.height = 0
        };
        K = j.scrollHeight > j.clientHeight;
        if (a.scrollBarVis !== K && a.scrollBarVis !== k)
            a.scrollBarVis = K,
            Y(a);
        else {
            a.scrollBarVis = K;
            p.children("thead, tfoot").remove();
            u && (P = u.clone().prependTo(p),
            O = u.find("tr"),
            P = P.find("tr"));
            w = o.clone().prependTo(p);
            o = o.find("tr");
            K = w.find("tr");
            w.find("th, td").removeAttr("tabindex");
            c || (q.width = "100%",
            f[0].style.width = "100%");
            h.each(ra(a, w), function(b, c) {
                B = Z(a, b);
                c.style.width = a.aoColumns[B].sWidth
            });
            u && H(function(a) {
                a.style.width = ""
            }, P);
            f = p.outerWidth();
            if ("" === c) {
                r.width = "100%";
                if (T && (p.find("tbody").height() > j.offsetHeight || "scroll" == l.css("overflow-y")))
                    r.width = v(p.outerWidth() - b);
                f = p.outerWidth()
            } else
                "" !== d && (r.width = v(d),
                f = p.outerWidth());
            H(C, K);
            H(function(a) {
                z.push(a.innerHTML);
                Ta.push(v(h(a).css("width")))
            }, K);
            H(function(a, b) {
                if (h.inArray(a, Xb) !== -1)
                    a.style.width = Ta[b]
            }, o);
            h(K).height(0);
            u && (H(C, P),
            H(function(a) {
                A.push(a.innerHTML);
                y.push(v(h(a).css("width")))
            }, P),
            H(function(a, b) {
                a.style.width = y[b]
            }, O),
            h(P).height(0));
            H(function(a, b) {
                a.innerHTML = '<div class="dataTables_sizing" style="height:0;overflow:hidden;">' + z[b] + "</div>";
                a.style.width = Ta[b]
            }, K);
            u && H(function(a, b) {
                a.innerHTML = '<div class="dataTables_sizing" style="height:0;overflow:hidden;">' + A[b] + "</div>";
                a.style.width = y[b]
            }, P);
            if (p.outerWidth() < f) {
                O = j.scrollHeight > j.offsetHeight || "scroll" == l.css("overflow-y") ? f + b : f;
                if (T && (j.scrollHeight > j.offsetHeight || "scroll" == l.css("overflow-y")))
                    r.width = v(O - b);
                ("" === c || "" !== d) && J(a, 1, "Possible column misalignment", 6)
            } else
                O = "100%";
            q.width = v(O);
            g.width = v(O);
            u && (a.nScrollFoot.style.width = v(O));
            !e && T && (q.height = v(s.offsetHeight + b));
            c = p.outerWidth();
            n[0].style.width = v(c);
            i.width = v(c);
            d = p.height() > j.clientHeight || "scroll" == l.css("overflow-y");
            e = "padding" + (x.bScrollbarLeft ? "Left" : "Right");
            i[e] = d ? b + "px" : "0px";
            u && (m[0].style.width = v(c),
            t[0].style.width = v(c),
            t[0].style[e] = d ? b + "px" : "0px");
            p.children("colgroup").insertBefore(p.children("thead"));
            l.scroll();
            if ((a.bSorted || a.bFiltered) && !a._drawHold)
                j.scrollTop = 0
        }
    }
    function H(a, b, c) {
        for (var d = 0, e = 0, f = b.length, g, j; e < f; ) {
            g = b[e].firstChild;
            for (j = c ? c[e].firstChild : null; g; )
                1 === g.nodeType && (c ? a(g, j, d) : a(g, d),
                d++),
                g = g.nextSibling,
                j = c ? j.nextSibling : null;
            e++
        }
    }
    function Ea(a) {
        var b = a.nTable, c = a.aoColumns, d = a.oScroll, e = d.sY, f = d.sX, g = d.sXInner, j = c.length, i = la(a, "bVisible"), n = h("th", a.nTHead), l = b.getAttribute("width"), k = b.parentNode, t = !1, m, o, p = a.oBrowser, d = p.bScrollOversize;
        (m = b.style.width) && -1 !== m.indexOf("%") && (l = m);
        for (m = 0; m < i.length; m++)
            o = c[i[m]],
            null !== o.sWidth && (o.sWidth = Db(o.sWidthOrig, k),
            t = !0);
        if (d || !t && !f && !e && j == aa(a) && j == n.length)
            for (m = 0; m < j; m++)
                i = Z(a, m),
                null !== i && (c[i].sWidth = v(n.eq(m).width()));
        else {
            j = h(b).clone().css("visibility", "hidden").removeAttr("id");
            j.find("tbody tr").remove();
            var s = h("<tr/>").appendTo(j.find("tbody"));
            j.find("thead, tfoot").remove();
            j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());
            j.find("tfoot th, tfoot td").css("width", "");
            n = ra(a, j.find("thead")[0]);
            for (m = 0; m < i.length; m++)
                o = c[i[m]],
                n[m].style.width = null !== o.sWidthOrig && "" !== o.sWidthOrig ? v(o.sWidthOrig) : "",
                o.sWidthOrig && f && h(n[m]).append(h("<div/>").css({
                    width: o.sWidthOrig,
                    margin: 0,
                    padding: 0,
                    border: 0,
                    height: 1
                }));
            if (a.aoData.length)
                for (m = 0; m < i.length; m++)
                    t = i[m],
                    o = c[t],
                    h(Eb(a, t)).clone(!1).append(o.sContentPadding).appendTo(s);
            h("[name]", j).removeAttr("name");
            o = h("<div/>").css(f || e ? {
                position: "absolute",
                top: 0,
                left: 0,
                height: 1,
                right: 0,
                overflow: "hidden"
            } : {}).append(j).appendTo(k);
            f && g ? j.width(g) : f ? (j.css("width", "auto"),
            j.removeAttr("width"),
            j.width() < k.clientWidth && l && j.width(k.clientWidth)) : e ? j.width(k.clientWidth) : l && j.width(l);
            for (m = e = 0; m < i.length; m++)
                k = h(n[m]),
                g = k.outerWidth() - k.width(),
                k = p.bBounding ? Math.ceil(n[m].getBoundingClientRect().width) : k.outerWidth(),
                e += k,
                c[i[m]].sWidth = v(k - g);
            b.style.width = v(e);
            o.remove()
        }
        l && (b.style.width = v(l));
        if ((l || f) && !a._reszEvt)
            b = function() {
                h(E).on("resize.DT-" + a.sInstance, Na(function() {
                    Y(a)
                }))
            }
            ,
            d ? setTimeout(b, 1E3) : b(),
            a._reszEvt = !0
    }
    function Db(a, b) {
        if (!a)
            return 0;
        var c = h("<div/>").css("width", v(a)).appendTo(b || G.body)
          , d = c[0].offsetWidth;
        c.remove();
        return d
    }
    function Eb(a, b) {
        var c = Fb(a, b);
        if (0 > c)
            return null;
        var d = a.aoData[c];
        return !d.nTr ? h("<td/>").html(B(a, c, b, "display"))[0] : d.anCells[b]
    }
    function Fb(a, b) {
        for (var c, d = -1, e = -1, f = 0, g = a.aoData.length; f < g; f++)
            c = B(a, f, b, "display") + "",
            c = c.replace(Yb, ""),
            c = c.replace(/&nbsp;/g, " "),
            c.length > d && (d = c.length,
            e = f);
        return e
    }
    function v(a) {
        return null === a ? "0px" : "number" == typeof a ? 0 > a ? "0px" : a + "px" : a.match(/\d$/) ? a + "px" : a
    }
    function V(a) {
        var b, c, d = [], e = a.aoColumns, f, g, j, i;
        b = a.aaSortingFixed;
        c = h.isPlainObject(b);
        var n = [];
        f = function(a) {
            a.length && !h.isArray(a[0]) ? n.push(a) : h.merge(n, a)
        }
        ;
        h.isArray(b) && f(b);
        c && b.pre && f(b.pre);
        f(a.aaSorting);
        c && b.post && f(b.post);
        for (a = 0; a < n.length; a++) {
            i = n[a][0];
            f = e[i].aDataSort;
            b = 0;
            for (c = f.length; b < c; b++)
                g = f[b],
                j = e[g].sType || "string",
                n[a]._idx === k && (n[a]._idx = h.inArray(n[a][1], e[g].asSorting)),
                d.push({
                    src: i,
                    col: g,
                    dir: n[a][1],
                    index: n[a]._idx,
                    type: j,
                    formatter: m.ext.type.order[j + "-pre"]
                })
        }
        return d
    }
    function lb(a) {
        var b, c, d = [], e = m.ext.type.order, f = a.aoData, g = 0, j, i = a.aiDisplayMaster, h;
        Fa(a);
        h = V(a);
        b = 0;
        for (c = h.length; b < c; b++)
            j = h[b],
            j.formatter && g++,
            Gb(a, j.col);
        if ("ssp" != y(a) && 0 !== h.length) {
            b = 0;
            for (c = i.length; b < c; b++)
                d[i[b]] = b;
            g === h.length ? i.sort(function(a, b) {
                var c, e, g, j, i = h.length, k = f[a]._aSortData, m = f[b]._aSortData;
                for (g = 0; g < i; g++)
                    if (j = h[g],
                    c = k[j.col],
                    e = m[j.col],
                    c = c < e ? -1 : c > e ? 1 : 0,
                    0 !== c)
                        return "asc" === j.dir ? c : -c;
                c = d[a];
                e = d[b];
                return c < e ? -1 : c > e ? 1 : 0
            }) : i.sort(function(a, b) {
                var c, g, j, i, k = h.length, m = f[a]._aSortData, o = f[b]._aSortData;
                for (j = 0; j < k; j++)
                    if (i = h[j],
                    c = m[i.col],
                    g = o[i.col],
                    i = e[i.type + "-" + i.dir] || e["string-" + i.dir],
                    c = i(c, g),
                    0 !== c)
                        return c;
                c = d[a];
                g = d[b];
                return c < g ? -1 : c > g ? 1 : 0
            })
        }
        a.bSorted = !0
    }
    function Hb(a) {
        for (var b, c, d = a.aoColumns, e = V(a), a = a.oLanguage.oAria, f = 0, g = d.length; f < g; f++) {
            c = d[f];
            var j = c.asSorting;
            b = c.sTitle.replace(/<.*?>/g, "");
            var i = c.nTh;
            i.removeAttribute("aria-sort");
            c.bSortable && (0 < e.length && e[0].col == f ? (i.setAttribute("aria-sort", "asc" == e[0].dir ? "ascending" : "descending"),
            c = j[e[0].index + 1] || j[0]) : c = j[0],
            b += "asc" === c ? a.sSortAscending : a.sSortDescending);
            i.setAttribute("aria-label", b)
        }
    }
    function Ua(a, b, c, d) {
        var e = a.aaSorting
          , f = a.aoColumns[b].asSorting
          , g = function(a, b) {
            var c = a._idx;
            c === k && (c = h.inArray(a[1], f));
            return c + 1 < f.length ? c + 1 : b ? null : 0
        };
        "number" === typeof e[0] && (e = a.aaSorting = [e]);
        c && a.oFeatures.bSortMulti ? (c = h.inArray(b, D(e, "0")),
        -1 !== c ? (b = g(e[c], !0),
        null === b && 1 === e.length && (b = 0),
        null === b ? e.splice(c, 1) : (e[c][1] = f[b],
        e[c]._idx = b)) : (e.push([b, f[0], 0]),
        e[e.length - 1]._idx = 0)) : e.length && e[0][0] == b ? (b = g(e[0]),
        e.length = 1,
        e[0][1] = f[b],
        e[0]._idx = b) : (e.length = 0,
        e.push([b, f[0]]),
        e[0]._idx = 0);
        S(a);
        "function" == typeof d && d(a)
    }
    function La(a, b, c, d) {
        var e = a.aoColumns[c];
        Va(b, {}, function(b) {
            !1 !== e.bSortable && (a.oFeatures.bProcessing ? (C(a, !0),
            setTimeout(function() {
                Ua(a, c, b.shiftKey, d);
                "ssp" !== y(a) && C(a, !1)
            }, 0)) : Ua(a, c, b.shiftKey, d))
        })
    }
    function wa(a) {
        var b = a.aLastSort, c = a.oClasses.sSortColumn, d = V(a), e = a.oFeatures, f, g;
        if (e.bSort && e.bSortClasses) {
            e = 0;
            for (f = b.length; e < f; e++)
                g = b[e].src,
                h(D(a.aoData, "anCells", g)).removeClass(c + (2 > e ? e + 1 : 3));
            e = 0;
            for (f = d.length; e < f; e++)
                g = d[e].src,
                h(D(a.aoData, "anCells", g)).addClass(c + (2 > e ? e + 1 : 3))
        }
        a.aLastSort = d
    }
    function Gb(a, b) {
        var c = a.aoColumns[b], d = m.ext.order[c.sSortDataType], e;
        d && (e = d.call(a.oInstance, a, b, $(a, b)));
        for (var f, g = m.ext.type.order[c.sType + "-pre"], j = 0, i = a.aoData.length; j < i; j++)
            if (c = a.aoData[j],
            c._aSortData || (c._aSortData = []),
            !c._aSortData[b] || d)
                f = d ? e[j] : B(a, j, b, "sort"),
                c._aSortData[b] = g ? g(f) : f
    }
    function xa(a) {
        if (a.oFeatures.bStateSave && !a.bDestroying) {
            var b = {
                time: +new Date,
                start: a._iDisplayStart,
                length: a._iDisplayLength,
                order: h.extend(!0, [], a.aaSorting),
                search: zb(a.oPreviousSearch),
                columns: h.map(a.aoColumns, function(b, d) {
                    return {
                        visible: b.bVisible,
                        search: zb(a.aoPreSearchCols[d])
                    }
                })
            };
            r(a, "aoStateSaveParams", "stateSaveParams", [a, b]);
            a.oSavedState = b;
            a.fnStateSaveCallback.call(a.oInstance, a, b)
        }
    }
    function Ib(a, b, c) {
        var d, e, f = a.aoColumns, b = function(b) {
            if (b && b.time) {
                var g = r(a, "aoStateLoadParams", "stateLoadParams", [a, b]);
                if (-1 === h.inArray(!1, g) && (g = a.iStateDuration,
                !(0 < g && b.time < +new Date - 1E3 * g) && !(b.columns && f.length !== b.columns.length))) {
                    a.oLoadedState = h.extend(!0, {}, b);
                    b.start !== k && (a._iDisplayStart = b.start,
                    a.iInitDisplayStart = b.start);
                    b.length !== k && (a._iDisplayLength = b.length);
                    b.order !== k && (a.aaSorting = [],
                    h.each(b.order, function(b, c) {
                        a.aaSorting.push(c[0] >= f.length ? [0, c[1]] : c)
                    }));
                    b.search !== k && h.extend(a.oPreviousSearch, Ab(b.search));
                    if (b.columns) {
                        d = 0;
                        for (e = b.columns.length; d < e; d++)
                            g = b.columns[d],
                            g.visible !== k && (f[d].bVisible = g.visible),
                            g.search !== k && h.extend(a.aoPreSearchCols[d], Ab(g.search))
                    }
                    r(a, "aoStateLoaded", "stateLoaded", [a, b])
                }
            }
            c()
        };
        if (a.oFeatures.bStateSave) {
            var g = a.fnStateLoadCallback.call(a.oInstance, a, b);
            g !== k && b(g)
        } else
            c()
    }
    function ya(a) {
        var b = m.settings
          , a = h.inArray(a, D(b, "nTable"));
        return -1 !== a ? b[a] : null
    }
    function J(a, b, c, d) {
        c = "DataTables warning: " + (a ? "table id=" + a.sTableId + " - " : "") + c;
        d && (c += ". For more information about this error, please see http://datatables.net/tn/" + d);
        if (b)
            E.console && console.log && console.log(c);
        else if (b = m.ext,
        b = b.sErrMode || b.errMode,
        a && r(a, null, "error", [a, d, c]),
        "alert" == b)
            alert(c);
        else {
            if ("throw" == b)
                throw Error(c);
            "function" == typeof b && b(a, d, c)
        }
    }
    function F(a, b, c, d) {
        h.isArray(c) ? h.each(c, function(c, d) {
            h.isArray(d) ? F(a, b, d[0], d[1]) : F(a, b, d)
        }) : (d === k && (d = c),
        b[c] !== k && (a[d] = b[c]))
    }
    function Jb(a, b, c) {
        var d, e;
        for (e in b)
            b.hasOwnProperty(e) && (d = b[e],
            h.isPlainObject(d) ? (h.isPlainObject(a[e]) || (a[e] = {}),
            h.extend(!0, a[e], d)) : a[e] = c && "data" !== e && "aaData" !== e && h.isArray(d) ? d.slice() : d);
        return a
    }
    function Va(a, b, c) {
        h(a).on("click.DT", b, function(b) {
            a.blur();
            c(b)
        }).on("keypress.DT", b, function(a) {
            13 === a.which && (a.preventDefault(),
            c(a))
        }).on("selectstart.DT", function() {
            return !1
        })
    }
    function z(a, b, c, d) {
        c && a[b].push({
            fn: c,
            sName: d
        })
    }
    function r(a, b, c, d) {
        var e = [];
        b && (e = h.map(a[b].slice().reverse(), function(b) {
            return b.fn.apply(a.oInstance, d)
        }));
        null !== c && (b = h.Event(c + ".dt"),
        h(a.nTable).trigger(b, d),
        e.push(b.result));
        return e
    }
    function Ra(a) {
        var b = a._iDisplayStart
          , c = a.fnDisplayEnd()
          , d = a._iDisplayLength;
        b >= c && (b = c - d);
        b -= b % d;
        if (-1 === d || 0 > b)
            b = 0;
        a._iDisplayStart = b
    }
    function Ma(a, b) {
        var c = a.renderer
          , d = m.ext.renderer[b];
        return h.isPlainObject(c) && c[b] ? d[c[b]] || d._ : "string" === typeof c ? d[c] || d._ : d._
    }
    function y(a) {
        return a.oFeatures.bServerSide ? "ssp" : a.ajax || a.sAjaxSource ? "ajax" : "dom"
    }
    function ha(a, b) {
        var c = []
          , c = Kb.numbers_length
          , d = Math.floor(c / 2);
        b <= c ? c = W(0, b) : a <= d ? (c = W(0, c - 2),
        c.push("ellipsis"),
        c.push(b - 1)) : (a >= b - 1 - d ? c = W(b - (c - 2), b) : (c = W(a - d + 2, a + d - 1),
        c.push("ellipsis"),
        c.push(b - 1)),
        c.splice(0, 0, "ellipsis"),
        c.splice(0, 0, 0));
        c.DT_el = "span";
        return c
    }
    function cb(a) {
        h.each({
            num: function(b) {
                return za(b, a)
            },
            "num-fmt": function(b) {
                return za(b, a, Wa)
            },
            "html-num": function(b) {
                return za(b, a, Aa)
            },
            "html-num-fmt": function(b) {
                return za(b, a, Aa, Wa)
            }
        }, function(b, c) {
            x.type.order[b + a + "-pre"] = c;
            b.match(/^html\-/) && (x.type.search[b + a] = x.type.search.html)
        })
    }
    function Lb(a) {
        return function() {
            var b = [ya(this[m.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));
            return m.ext.internal[a].apply(this, b)
        }
    }
    var m = function(a) {
        this.$ = function(a, b) {
            return this.api(!0).$(a, b)
        }
        ;
        this._ = function(a, b) {
            return this.api(!0).rows(a, b).data()
        }
        ;
        this.api = function(a) {
            return a ? new s(ya(this[x.iApiIndex])) : new s(this)
        }
        ;
        this.fnAddData = function(a, b) {
            var c = this.api(!0)
              , d = h.isArray(a) && (h.isArray(a[0]) || h.isPlainObject(a[0])) ? c.rows.add(a) : c.row.add(a);
            (b === k || b) && c.draw();
            return d.flatten().toArray()
        }
        ;
        this.fnAdjustColumnSizing = function(a) {
            var b = this.api(!0).columns.adjust()
              , c = b.settings()[0]
              , d = c.oScroll;
            a === k || a ? b.draw(!1) : ("" !== d.sX || "" !== d.sY) && ka(c)
        }
        ;
        this.fnClearTable = function(a) {
            var b = this.api(!0).clear();
            (a === k || a) && b.draw()
        }
        ;
        this.fnClose = function(a) {
            this.api(!0).row(a).child.hide()
        }
        ;
        this.fnDeleteRow = function(a, b, c) {
            var d = this.api(!0)
              , a = d.rows(a)
              , e = a.settings()[0]
              , h = e.aoData[a[0][0]];
            a.remove();
            b && b.call(this, e, h);
            (c === k || c) && d.draw();
            return h
        }
        ;
        this.fnDestroy = function(a) {
            this.api(!0).destroy(a)
        }
        ;
        this.fnDraw = function(a) {
            this.api(!0).draw(a)
        }
        ;
        this.fnFilter = function(a, b, c, d, e, h) {
            e = this.api(!0);
            null === b || b === k ? e.search(a, c, d, h) : e.column(b).search(a, c, d, h);
            e.draw()
        }
        ;
        this.fnGetData = function(a, b) {
            var c = this.api(!0);
            if (a !== k) {
                var d = a.nodeName ? a.nodeName.toLowerCase() : "";
                return b !== k || "td" == d || "th" == d ? c.cell(a, b).data() : c.row(a).data() || null
            }
            return c.data().toArray()
        }
        ;
        this.fnGetNodes = function(a) {
            var b = this.api(!0);
            return a !== k ? b.row(a).node() : b.rows().nodes().flatten().toArray()
        }
        ;
        this.fnGetPosition = function(a) {
            var b = this.api(!0)
              , c = a.nodeName.toUpperCase();
            return "TR" == c ? b.row(a).index() : "TD" == c || "TH" == c ? (a = b.cell(a).index(),
            [a.row, a.columnVisible, a.column]) : null
        }
        ;
        this.fnIsOpen = function(a) {
            return this.api(!0).row(a).child.isShown()
        }
        ;
        this.fnOpen = function(a, b, c) {
            return this.api(!0).row(a).child(b, c).show().child()[0]
        }
        ;
        this.fnPageChange = function(a, b) {
            var c = this.api(!0).page(a);
            (b === k || b) && c.draw(!1)
        }
        ;
        this.fnSetColumnVis = function(a, b, c) {
            a = this.api(!0).column(a).visible(b);
            (c === k || c) && a.columns.adjust().draw()
        }
        ;
        this.fnSettings = function() {
            return ya(this[x.iApiIndex])
        }
        ;
        this.fnSort = function(a) {
            this.api(!0).order(a).draw()
        }
        ;
        this.fnSortListener = function(a, b, c) {
            this.api(!0).order.listener(a, b, c)
        }
        ;
        this.fnUpdate = function(a, b, c, d, e) {
            var h = this.api(!0);
            c === k || null === c ? h.row(b).data(a) : h.cell(b, c).data(a);
            (e === k || e) && h.columns.adjust();
            (d === k || d) && h.draw();
            return 0
        }
        ;
        this.fnVersionCheck = x.fnVersionCheck;
        var b = this
          , c = a === k
          , d = this.length;
        c && (a = {});
        this.oApi = this.internal = x.internal;
        for (var e in m.ext.internal)
            e && (this[e] = Lb(e));
        this.each(function() {
            var e = {}, g = 1 < d ? Jb(e, a, !0) : a, j = 0, i, e = this.getAttribute("id"), n = !1, l = m.defaults, q = h(this);
            if ("table" != this.nodeName.toLowerCase())
                J(null, 0, "Non-table node initialisation (" + this.nodeName + ")", 2);
            else {
                db(l);
                eb(l.column);
                I(l, l, !0);
                I(l.column, l.column, !0);
                I(l, h.extend(g, q.data()));
                var t = m.settings
                  , j = 0;
                for (i = t.length; j < i; j++) {
                    var o = t[j];
                    if (o.nTable == this || o.nTHead.parentNode == this || o.nTFoot && o.nTFoot.parentNode == this) {
                        var s = g.bRetrieve !== k ? g.bRetrieve : l.bRetrieve;
                        if (c || s)
                            return o.oInstance;
                        if (g.bDestroy !== k ? g.bDestroy : l.bDestroy) {
                            o.oInstance.fnDestroy();
                            break
                        } else {
                            J(o, 0, "Cannot reinitialise DataTable", 3);
                            return
                        }
                    }
                    if (o.sTableId == this.id) {
                        t.splice(j, 1);
                        break
                    }
                }
                if (null === e || "" === e)
                    this.id = e = "DataTables_Table_" + m.ext._unique++;
                var p = h.extend(!0, {}, m.models.oSettings, {
                    sDestroyWidth: q[0].style.width,
                    sInstance: e,
                    sTableId: e
                });
                p.nTable = this;
                p.oApi = b.internal;
                p.oInit = g;
                t.push(p);
                p.oInstance = 1 === b.length ? b : q.dataTable();
                db(g);
                g.oLanguage && Ca(g.oLanguage);
                g.aLengthMenu && !g.iDisplayLength && (g.iDisplayLength = h.isArray(g.aLengthMenu[0]) ? g.aLengthMenu[0][0] : g.aLengthMenu[0]);
                g = Jb(h.extend(!0, {}, l), g);
                F(p.oFeatures, g, "bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));
                F(p, g, ["asStripeClasses", "ajax", "fnServerData", "fnFormatNumber", "sServerMethod", "aaSorting", "aaSortingFixed", "aLengthMenu", "sPaginationType", "sAjaxSource", "sAjaxDataProp", "iStateDuration", "sDom", "bSortCellsTop", "iTabIndex", "fnStateLoadCallback", "fnStateSaveCallback", "renderer", "searchDelay", "rowId", ["iCookieDuration", "iStateDuration"], ["oSearch", "oPreviousSearch"], ["aoSearchCols", "aoPreSearchCols"], ["iDisplayLength", "_iDisplayLength"]]);
                F(p.oScroll, g, [["sScrollX", "sX"], ["sScrollXInner", "sXInner"], ["sScrollY", "sY"], ["bScrollCollapse", "bCollapse"]]);
                F(p.oLanguage, g, "fnInfoCallback");
                z(p, "aoDrawCallback", g.fnDrawCallback, "user");
                z(p, "aoServerParams", g.fnServerParams, "user");
                z(p, "aoStateSaveParams", g.fnStateSaveParams, "user");
                z(p, "aoStateLoadParams", g.fnStateLoadParams, "user");
                z(p, "aoStateLoaded", g.fnStateLoaded, "user");
                z(p, "aoRowCallback", g.fnRowCallback, "user");
                z(p, "aoRowCreatedCallback", g.fnCreatedRow, "user");
                z(p, "aoHeaderCallback", g.fnHeaderCallback, "user");
                z(p, "aoFooterCallback", g.fnFooterCallback, "user");
                z(p, "aoInitComplete", g.fnInitComplete, "user");
                z(p, "aoPreDrawCallback", g.fnPreDrawCallback, "user");
                p.rowIdFn = Q(g.rowId);
                fb(p);
                var u = p.oClasses;
                h.extend(u, m.ext.classes, g.oClasses);
                q.addClass(u.sTable);
                p.iInitDisplayStart === k && (p.iInitDisplayStart = g.iDisplayStart,
                p._iDisplayStart = g.iDisplayStart);
                null !== g.iDeferLoading && (p.bDeferLoading = !0,
                e = h.isArray(g.iDeferLoading),
                p._iRecordsDisplay = e ? g.iDeferLoading[0] : g.iDeferLoading,
                p._iRecordsTotal = e ? g.iDeferLoading[1] : g.iDeferLoading);
                var v = p.oLanguage;
                h.extend(!0, v, g.oLanguage);
                v.sUrl && (h.ajax({
                    dataType: "json",
                    url: v.sUrl,
                    success: function(a) {
                        Ca(a);
                        I(l.oLanguage, a);
                        h.extend(true, v, a);
                        ga(p)
                    },
                    error: function() {
                        ga(p)
                    }
                }),
                n = !0);
                null === g.asStripeClasses && (p.asStripeClasses = [u.sStripeOdd, u.sStripeEven]);
                var e = p.asStripeClasses
                  , x = q.children("tbody").find("tr").eq(0);
                -1 !== h.inArray(!0, h.map(e, function(a) {
                    return x.hasClass(a)
                })) && (h("tbody tr", this).removeClass(e.join(" ")),
                p.asDestroyStripes = e.slice());
                e = [];
                t = this.getElementsByTagName("thead");
                0 !== t.length && (da(p.aoHeader, t[0]),
                e = ra(p));
                if (null === g.aoColumns) {
                    t = [];
                    j = 0;
                    for (i = e.length; j < i; j++)
                        t.push(null)
                } else
                    t = g.aoColumns;
                j = 0;
                for (i = t.length; j < i; j++)
                    Da(p, e ? e[j] : null);
                hb(p, g.aoColumnDefs, t, function(a, b) {
                    ja(p, a, b)
                });
                if (x.length) {
                    var w = function(a, b) {
                        return a.getAttribute("data-" + b) !== null ? b : null
                    };
                    h(x[0]).children("th, td").each(function(a, b) {
                        var c = p.aoColumns[a];
                        if (c.mData === a) {
                            var d = w(b, "sort") || w(b, "order")
                              , e = w(b, "filter") || w(b, "search");
                            if (d !== null || e !== null) {
                                c.mData = {
                                    _: a + ".display",
                                    sort: d !== null ? a + ".@data-" + d : k,
                                    type: d !== null ? a + ".@data-" + d : k,
                                    filter: e !== null ? a + ".@data-" + e : k
                                };
                                ja(p, a)
                            }
                        }
                    })
                }
                var T = p.oFeatures
                  , e = function() {
                    if (g.aaSorting === k) {
                        var a = p.aaSorting;
                        j = 0;
                        for (i = a.length; j < i; j++)
                            a[j][1] = p.aoColumns[j].asSorting[0]
                    }
                    wa(p);
                    T.bSort && z(p, "aoDrawCallback", function() {
                        if (p.bSorted) {
                            var a = V(p)
                              , b = {};
                            h.each(a, function(a, c) {
                                b[c.src] = c.dir
                            });
                            r(p, null, "order", [p, a, b]);
                            Hb(p)
                        }
                    });
                    z(p, "aoDrawCallback", function() {
                        (p.bSorted || y(p) === "ssp" || T.bDeferRender) && wa(p)
                    }, "sc");
                    var a = q.children("caption").each(function() {
                        this._captionSide = h(this).css("caption-side")
                    })
                      , b = q.children("thead");
                    b.length === 0 && (b = h("<thead/>").appendTo(q));
                    p.nTHead = b[0];
                    b = q.children("tbody");
                    b.length === 0 && (b = h("<tbody/>").appendTo(q));
                    p.nTBody = b[0];
                    b = q.children("tfoot");
                    if (b.length === 0 && a.length > 0 && (p.oScroll.sX !== "" || p.oScroll.sY !== ""))
                        b = h("<tfoot/>").appendTo(q);
                    if (b.length === 0 || b.children().length === 0)
                        q.addClass(u.sNoFooter);
                    else if (b.length > 0) {
                        p.nTFoot = b[0];
                        da(p.aoFooter, p.nTFoot)
                    }
                    if (g.aaData)
                        for (j = 0; j < g.aaData.length; j++)
                            M(p, g.aaData[j]);
                    else
                        (p.bDeferLoading || y(p) == "dom") && ma(p, h(p.nTBody).children("tr"));
                    p.aiDisplay = p.aiDisplayMaster.slice();
                    p.bInitialised = true;
                    n === false && ga(p)
                };
                g.bStateSave ? (T.bStateSave = !0,
                z(p, "aoDrawCallback", xa, "state_save"),
                Ib(p, g, e)) : e()
            }
        });
        b = null;
        return this
    }, x, s, o, u, Xa = {}, Mb = /[\r\n]/g, Aa = /<.*?>/g, Zb = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/, $b = RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)", "g"), Wa = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi, L = function(a) {
        return !a || !0 === a || "-" === a ? !0 : !1
    }, Nb = function(a) {
        var b = parseInt(a, 10);
        return !isNaN(b) && isFinite(a) ? b : null
    }, Ob = function(a, b) {
        Xa[b] || (Xa[b] = RegExp(Pa(b), "g"));
        return "string" === typeof a && "." !== b ? a.replace(/\./g, "").replace(Xa[b], ".") : a
    }, Ya = function(a, b, c) {
        var d = "string" === typeof a;
        if (L(a))
            return !0;
        b && d && (a = Ob(a, b));
        c && d && (a = a.replace(Wa, ""));
        return !isNaN(parseFloat(a)) && isFinite(a)
    }, Pb = function(a, b, c) {
        return L(a) ? !0 : !(L(a) || "string" === typeof a) ? null : Ya(a.replace(Aa, ""), b, c) ? !0 : null
    }, D = function(a, b, c) {
        var d = []
          , e = 0
          , f = a.length;
        if (c !== k)
            for (; e < f; e++)
                a[e] && a[e][b] && d.push(a[e][b][c]);
        else
            for (; e < f; e++)
                a[e] && d.push(a[e][b]);
        return d
    }, ia = function(a, b, c, d) {
        var e = []
          , f = 0
          , g = b.length;
        if (d !== k)
            for (; f < g; f++)
                a[b[f]][c] && e.push(a[b[f]][c][d]);
        else
            for (; f < g; f++)
                e.push(a[b[f]][c]);
        return e
    }, W = function(a, b) {
        var c = [], d;
        b === k ? (b = 0,
        d = a) : (d = b,
        b = a);
        for (var e = b; e < d; e++)
            c.push(e);
        return c
    }, Qb = function(a) {
        for (var b = [], c = 0, d = a.length; c < d; c++)
            a[c] && b.push(a[c]);
        return b
    }, qa = function(a) {
        var b;
        a: {
            if (!(2 > a.length)) {
                b = a.slice().sort();
                for (var c = b[0], d = 1, e = b.length; d < e; d++) {
                    if (b[d] === c) {
                        b = !1;
                        break a
                    }
                    c = b[d]
                }
            }
            b = !0
        }
        if (b)
            return a.slice();
        b = [];
        var e = a.length, f, g = 0, d = 0;
        a: for (; d < e; d++) {
            c = a[d];
            for (f = 0; f < g; f++)
                if (b[f] === c)
                    continue a;
            b.push(c);
            g++
        }
        return b
    };
    m.util = {
        throttle: function(a, b) {
            var c = b !== k ? b : 200, d, e;
            return function() {
                var b = this
                  , g = +new Date
                  , j = arguments;
                d && g < d + c ? (clearTimeout(e),
                e = setTimeout(function() {
                    d = k;
                    a.apply(b, j)
                }, c)) : (d = g,
                a.apply(b, j))
            }
        },
        escapeRegex: function(a) {
            return a.replace($b, "\\$1")
        }
    };
    var A = function(a, b, c) {
        a[b] !== k && (a[c] = a[b])
    }
      , ba = /\[.*?\]$/
      , U = /\(\)$/
      , Pa = m.util.escapeRegex
      , va = h("<div>")[0]
      , Wb = va.textContent !== k
      , Yb = /<.*?>/g
      , Na = m.util.throttle
      , Rb = []
      , w = Array.prototype
      , ac = function(a) {
        var b, c, d = m.settings, e = h.map(d, function(a) {
            return a.nTable
        });
        if (a) {
            if (a.nTable && a.oApi)
                return [a];
            if (a.nodeName && "table" === a.nodeName.toLowerCase())
                return b = h.inArray(a, e),
                -1 !== b ? [d[b]] : null;
            if (a && "function" === typeof a.settings)
                return a.settings().toArray();
            "string" === typeof a ? c = h(a) : a instanceof h && (c = a)
        } else
            return [];
        if (c)
            return c.map(function() {
                b = h.inArray(this, e);
                return -1 !== b ? d[b] : null
            }).toArray()
    };
    s = function(a, b) {
        if (!(this instanceof s))
            return new s(a,b);
        var c = []
          , d = function(a) {
            (a = ac(a)) && (c = c.concat(a))
        };
        if (h.isArray(a))
            for (var e = 0, f = a.length; e < f; e++)
                d(a[e]);
        else
            d(a);
        this.context = qa(c);
        b && h.merge(this, b);
        this.selector = {
            rows: null,
            cols: null,
            opts: null
        };
        s.extend(this, this, Rb)
    }
    ;
    m.Api = s;
    h.extend(s.prototype, {
        any: function() {
            return 0 !== this.count()
        },
        concat: w.concat,
        context: [],
        count: function() {
            return this.flatten().length
        },
        each: function(a) {
            for (var b = 0, c = this.length; b < c; b++)
                a.call(this, this[b], b, this);
            return this
        },
        eq: function(a) {
            var b = this.context;
            return b.length > a ? new s(b[a],this[a]) : null
        },
        filter: function(a) {
            var b = [];
            if (w.filter)
                b = w.filter.call(this, a, this);
            else
                for (var c = 0, d = this.length; c < d; c++)
                    a.call(this, this[c], c, this) && b.push(this[c]);
            return new s(this.context,b)
        },
        flatten: function() {
            var a = [];
            return new s(this.context,a.concat.apply(a, this.toArray()))
        },
        join: w.join,
        indexOf: w.indexOf || function(a, b) {
            for (var c = b || 0, d = this.length; c < d; c++)
                if (this[c] === a)
                    return c;
            return -1
        }
        ,
        iterator: function(a, b, c, d) {
            var e = [], f, g, j, h, n, l = this.context, m, o, u = this.selector;
            "string" === typeof a && (d = c,
            c = b,
            b = a,
            a = !1);
            g = 0;
            for (j = l.length; g < j; g++) {
                var r = new s(l[g]);
                if ("table" === b)
                    f = c.call(r, l[g], g),
                    f !== k && e.push(f);
                else if ("columns" === b || "rows" === b)
                    f = c.call(r, l[g], this[g], g),
                    f !== k && e.push(f);
                else if ("column" === b || "column-rows" === b || "row" === b || "cell" === b) {
                    o = this[g];
                    "column-rows" === b && (m = Ba(l[g], u.opts));
                    h = 0;
                    for (n = o.length; h < n; h++)
                        f = o[h],
                        f = "cell" === b ? c.call(r, l[g], f.row, f.column, g, h) : c.call(r, l[g], f, g, h, m),
                        f !== k && e.push(f)
                }
            }
            return e.length || d ? (a = new s(l,a ? e.concat.apply([], e) : e),
            b = a.selector,
            b.rows = u.rows,
            b.cols = u.cols,
            b.opts = u.opts,
            a) : this
        },
        lastIndexOf: w.lastIndexOf || function(a, b) {
            return this.indexOf.apply(this.toArray.reverse(), arguments)
        }
        ,
        length: 0,
        map: function(a) {
            var b = [];
            if (w.map)
                b = w.map.call(this, a, this);
            else
                for (var c = 0, d = this.length; c < d; c++)
                    b.push(a.call(this, this[c], c));
            return new s(this.context,b)
        },
        pluck: function(a) {
            return this.map(function(b) {
                return b[a]
            })
        },
        pop: w.pop,
        push: w.push,
        reduce: w.reduce || function(a, b) {
            return gb(this, a, b, 0, this.length, 1)
        }
        ,
        reduceRight: w.reduceRight || function(a, b) {
            return gb(this, a, b, this.length - 1, -1, -1)
        }
        ,
        reverse: w.reverse,
        selector: null,
        shift: w.shift,
        slice: function() {
            return new s(this.context,this)
        },
        sort: w.sort,
        splice: w.splice,
        toArray: function() {
            return w.slice.call(this)
        },
        to$: function() {
            return h(this)
        },
        toJQuery: function() {
            return h(this)
        },
        unique: function() {
            return new s(this.context,qa(this))
        },
        unshift: w.unshift
    });
    s.extend = function(a, b, c) {
        if (c.length && b && (b instanceof s || b.__dt_wrapper)) {
            var d, e, f, g = function(a, b, c) {
                return function() {
                    var d = b.apply(a, arguments);
                    s.extend(d, d, c.methodExt);
                    return d
                }
            };
            d = 0;
            for (e = c.length; d < e; d++)
                f = c[d],
                b[f.name] = "function" === typeof f.val ? g(a, f.val, f) : h.isPlainObject(f.val) ? {} : f.val,
                b[f.name].__dt_wrapper = !0,
                s.extend(a, b[f.name], f.propExt)
        }
    }
    ;
    s.register = o = function(a, b) {
        if (h.isArray(a))
            for (var c = 0, d = a.length; c < d; c++)
                s.register(a[c], b);
        else
            for (var e = a.split("."), f = Rb, g, j, c = 0, d = e.length; c < d; c++) {
                g = (j = -1 !== e[c].indexOf("()")) ? e[c].replace("()", "") : e[c];
                var i;
                a: {
                    i = 0;
                    for (var n = f.length; i < n; i++)
                        if (f[i].name === g) {
                            i = f[i];
                            break a
                        }
                    i = null
                }
                i || (i = {
                    name: g,
                    val: {},
                    methodExt: [],
                    propExt: []
                },
                f.push(i));
                c === d - 1 ? i.val = b : f = j ? i.methodExt : i.propExt
            }
    }
    ;
    s.registerPlural = u = function(a, b, c) {
        s.register(a, c);
        s.register(b, function() {
            var a = c.apply(this, arguments);
            return a === this ? this : a instanceof s ? a.length ? h.isArray(a[0]) ? new s(a.context,a[0]) : a[0] : k : a
        })
    }
    ;
    o("tables()", function(a) {
        var b;
        if (a) {
            b = s;
            var c = this.context;
            if ("number" === typeof a)
                a = [c[a]];
            else
                var d = h.map(c, function(a) {
                    return a.nTable
                })
                  , a = h(d).filter(a).map(function() {
                    var a = h.inArray(this, d);
                    return c[a]
                }).toArray();
            b = new b(a)
        } else
            b = this;
        return b
    });
    o("table()", function(a) {
        var a = this.tables(a)
          , b = a.context;
        return b.length ? new s(b[0]) : a
    });
    u("tables().nodes()", "table().node()", function() {
        return this.iterator("table", function(a) {
            return a.nTable
        }, 1)
    });
    u("tables().body()", "table().body()", function() {
        return this.iterator("table", function(a) {
            return a.nTBody
        }, 1)
    });
    u("tables().header()", "table().header()", function() {
        return this.iterator("table", function(a) {
            return a.nTHead
        }, 1)
    });
    u("tables().footer()", "table().footer()", function() {
        return this.iterator("table", function(a) {
            return a.nTFoot
        }, 1)
    });
    u("tables().containers()", "table().container()", function() {
        return this.iterator("table", function(a) {
            return a.nTableWrapper
        }, 1)
    });
    o("draw()", function(a) {
        return this.iterator("table", function(b) {
            "page" === a ? N(b) : ("string" === typeof a && (a = "full-hold" === a ? !1 : !0),
            S(b, !1 === a))
        })
    });
    o("page()", function(a) {
        return a === k ? this.page.info().page : this.iterator("table", function(b) {
            Sa(b, a)
        })
    });
    o("page.info()", function() {
        if (0 === this.context.length)
            return k;
        var a = this.context[0]
          , b = a._iDisplayStart
          , c = a.oFeatures.bPaginate ? a._iDisplayLength : -1
          , d = a.fnRecordsDisplay()
          , e = -1 === c;
        return {
            page: e ? 0 : Math.floor(b / c),
            pages: e ? 1 : Math.ceil(d / c),
            start: b,
            end: a.fnDisplayEnd(),
            length: c,
            recordsTotal: a.fnRecordsTotal(),
            recordsDisplay: d,
            serverSide: "ssp" === y(a)
        }
    });
    o("page.len()", function(a) {
        return a === k ? 0 !== this.context.length ? this.context[0]._iDisplayLength : k : this.iterator("table", function(b) {
            Qa(b, a)
        })
    });
    var Sb = function(a, b, c) {
        if (c) {
            var d = new s(a);
            d.one("draw", function() {
                c(d.ajax.json())
            })
        }
        if ("ssp" == y(a))
            S(a, b);
        else {
            C(a, !0);
            var e = a.jqXHR;
            e && 4 !== e.readyState && e.abort();
            sa(a, [], function(c) {
                na(a);
                for (var c = ta(a, c), d = 0, e = c.length; d < e; d++)
                    M(a, c[d]);
                S(a, b);
                C(a, !1)
            })
        }
    };
    o("ajax.json()", function() {
        var a = this.context;
        if (0 < a.length)
            return a[0].json
    });
    o("ajax.params()", function() {
        var a = this.context;
        if (0 < a.length)
            return a[0].oAjaxData
    });
    o("ajax.reload()", function(a, b) {
        return this.iterator("table", function(c) {
            Sb(c, !1 === b, a)
        })
    });
    o("ajax.url()", function(a) {
        var b = this.context;
        if (a === k) {
            if (0 === b.length)
                return k;
            b = b[0];
            return b.ajax ? h.isPlainObject(b.ajax) ? b.ajax.url : b.ajax : b.sAjaxSource
        }
        return this.iterator("table", function(b) {
            h.isPlainObject(b.ajax) ? b.ajax.url = a : b.ajax = a
        })
    });
    o("ajax.url().load()", function(a, b) {
        return this.iterator("table", function(c) {
            Sb(c, !1 === b, a)
        })
    });
    var Za = function(a, b, c, d, e) {
        var f = [], g, j, i, n, l, m;
        i = typeof b;
        if (!b || "string" === i || "function" === i || b.length === k)
            b = [b];
        i = 0;
        for (n = b.length; i < n; i++) {
            j = b[i] && b[i].split && !b[i].match(/[\[\(:]/) ? b[i].split(",") : [b[i]];
            l = 0;
            for (m = j.length; l < m; l++)
                (g = c("string" === typeof j[l] ? h.trim(j[l]) : j[l])) && g.length && (f = f.concat(g))
        }
        a = x.selector[a];
        if (a.length) {
            i = 0;
            for (n = a.length; i < n; i++)
                f = a[i](d, e, f)
        }
        return qa(f)
    }
      , $a = function(a) {
        a || (a = {});
        a.filter && a.search === k && (a.search = a.filter);
        return h.extend({
            search: "none",
            order: "current",
            page: "all"
        }, a)
    }
      , ab = function(a) {
        for (var b = 0, c = a.length; b < c; b++)
            if (0 < a[b].length)
                return a[0] = a[b],
                a[0].length = 1,
                a.length = 1,
                a.context = [a.context[b]],
                a;
        a.length = 0;
        return a
    }
      , Ba = function(a, b) {
        var c, d, e, f = [], g = a.aiDisplay;
        c = a.aiDisplayMaster;
        var j = b.search;
        d = b.order;
        e = b.page;
        if ("ssp" == y(a))
            return "removed" === j ? [] : W(0, c.length);
        if ("current" == e) {
            c = a._iDisplayStart;
            for (d = a.fnDisplayEnd(); c < d; c++)
                f.push(g[c])
        } else if ("current" == d || "applied" == d)
            f = "none" == j ? c.slice() : "applied" == j ? g.slice() : h.map(c, function(a) {
                return -1 === h.inArray(a, g) ? a : null
            });
        else if ("index" == d || "original" == d) {
            c = 0;
            for (d = a.aoData.length; c < d; c++)
                "none" == j ? f.push(c) : (e = h.inArray(c, g),
                (-1 === e && "removed" == j || 0 <= e && "applied" == j) && f.push(c))
        }
        return f
    };
    o("rows()", function(a, b) {
        a === k ? a = "" : h.isPlainObject(a) && (b = a,
        a = "");
        var b = $a(b)
          , c = this.iterator("table", function(c) {
            var e = b, f;
            return Za("row", a, function(a) {
                var b = Nb(a);
                if (b !== null && !e)
                    return [b];
                f || (f = Ba(c, e));
                if (b !== null && h.inArray(b, f) !== -1)
                    return [b];
                if (a === null || a === k || a === "")
                    return f;
                if (typeof a === "function")
                    return h.map(f, function(b) {
                        var e = c.aoData[b];
                        return a(b, e._aData, e.nTr) ? b : null
                    });
                b = Qb(ia(c.aoData, f, "nTr"));
                if (a.nodeName) {
                    if (a._DT_RowIndex !== k)
                        return [a._DT_RowIndex];
                    if (a._DT_CellIndex)
                        return [a._DT_CellIndex.row];
                    b = h(a).closest("*[data-dt-row]");
                    return b.length ? [b.data("dt-row")] : []
                }
                if (typeof a === "string" && a.charAt(0) === "#") {
                    var i = c.aIds[a.replace(/^#/, "")];
                    if (i !== k)
                        return [i.idx]
                }
                return h(b).filter(a).map(function() {
                    return this._DT_RowIndex
                }).toArray()
            }, c, e)
        }, 1);
        c.selector.rows = a;
        c.selector.opts = b;
        return c
    });
    o("rows().nodes()", function() {
        return this.iterator("row", function(a, b) {
            return a.aoData[b].nTr || k
        }, 1)
    });
    o("rows().data()", function() {
        return this.iterator(!0, "rows", function(a, b) {
            return ia(a.aoData, b, "_aData")
        }, 1)
    });
    u("rows().cache()", "row().cache()", function(a) {
        return this.iterator("row", function(b, c) {
            var d = b.aoData[c];
            return "search" === a ? d._aFilterData : d._aSortData
        }, 1)
    });
    u("rows().invalidate()", "row().invalidate()", function(a) {
        return this.iterator("row", function(b, c) {
            ca(b, c, a)
        })
    });
    u("rows().indexes()", "row().index()", function() {
        return this.iterator("row", function(a, b) {
            return b
        }, 1)
    });
    u("rows().ids()", "row().id()", function(a) {
        for (var b = [], c = this.context, d = 0, e = c.length; d < e; d++)
            for (var f = 0, g = this[d].length; f < g; f++) {
                var h = c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);
                b.push((!0 === a ? "#" : "") + h)
            }
        return new s(c,b)
    });
    u("rows().remove()", "row().remove()", function() {
        var a = this;
        this.iterator("row", function(b, c, d) {
            var e = b.aoData, f = e[c], g, h, i, n, l;
            e.splice(c, 1);
            g = 0;
            for (h = e.length; g < h; g++)
                if (i = e[g],
                l = i.anCells,
                null !== i.nTr && (i.nTr._DT_RowIndex = g),
                null !== l) {
                    i = 0;
                    for (n = l.length; i < n; i++)
                        l[i]._DT_CellIndex.row = g
                }
            oa(b.aiDisplayMaster, c);
            oa(b.aiDisplay, c);
            oa(a[d], c, !1);
            0 < b._iRecordsDisplay && b._iRecordsDisplay--;
            Ra(b);
            c = b.rowIdFn(f._aData);
            c !== k && delete b.aIds[c]
        });
        this.iterator("table", function(a) {
            for (var c = 0, d = a.aoData.length; c < d; c++)
                a.aoData[c].idx = c
        });
        return this
    });
    o("rows.add()", function(a) {
        var b = this.iterator("table", function(b) {
            var c, f, g, h = [];
            f = 0;
            for (g = a.length; f < g; f++)
                c = a[f],
                c.nodeName && "TR" === c.nodeName.toUpperCase() ? h.push(ma(b, c)[0]) : h.push(M(b, c));
            return h
        }, 1)
          , c = this.rows(-1);
        c.pop();
        h.merge(c, b);
        return c
    });
    o("row()", function(a, b) {
        return ab(this.rows(a, b))
    });
    o("row().data()", function(a) {
        var b = this.context;
        if (a === k)
            return b.length && this.length ? b[0].aoData[this[0]]._aData : k;
        b[0].aoData[this[0]]._aData = a;
        ca(b[0], this[0], "data");
        return this
    });
    o("row().node()", function() {
        var a = this.context;
        return a.length && this.length ? a[0].aoData[this[0]].nTr || null : null
    });
    o("row.add()", function(a) {
        a instanceof h && a.length && (a = a[0]);
        var b = this.iterator("table", function(b) {
            return a.nodeName && "TR" === a.nodeName.toUpperCase() ? ma(b, a)[0] : M(b, a)
        });
        return this.row(b[0])
    });
    var bb = function(a, b) {
        var c = a.context;
        if (c.length && (c = c[0].aoData[b !== k ? b : a[0]]) && c._details)
            c._details.remove(),
            c._detailsShow = k,
            c._details = k
    }
      , Tb = function(a, b) {
        var c = a.context;
        if (c.length && a.length) {
            var d = c[0].aoData[a[0]];
            if (d._details) {
                (d._detailsShow = b) ? d._details.insertAfter(d.nTr) : d._details.detach();
                var e = c[0]
                  , f = new s(e)
                  , g = e.aoData;
                f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");
                0 < D(g, "_details").length && (f.on("draw.dt.DT_details", function(a, b) {
                    e === b && f.rows({
                        page: "current"
                    }).eq(0).each(function(a) {
                        a = g[a];
                        a._detailsShow && a._details.insertAfter(a.nTr)
                    })
                }),
                f.on("column-visibility.dt.DT_details", function(a, b) {
                    if (e === b)
                        for (var c, d = aa(b), f = 0, h = g.length; f < h; f++)
                            c = g[f],
                            c._details && c._details.children("td[colspan]").attr("colspan", d)
                }),
                f.on("destroy.dt.DT_details", function(a, b) {
                    if (e === b)
                        for (var c = 0, d = g.length; c < d; c++)
                            g[c]._details && bb(f, c)
                }))
            }
        }
    };
    o("row().child()", function(a, b) {
        var c = this.context;
        if (a === k)
            return c.length && this.length ? c[0].aoData[this[0]]._details : k;
        if (!0 === a)
            this.child.show();
        else if (!1 === a)
            bb(this);
        else if (c.length && this.length) {
            var d = c[0]
              , c = c[0].aoData[this[0]]
              , e = []
              , f = function(a, b) {
                if (h.isArray(a) || a instanceof h)
                    for (var c = 0, k = a.length; c < k; c++)
                        f(a[c], b);
                else
                    a.nodeName && "tr" === a.nodeName.toLowerCase() ? e.push(a) : (c = h("<tr><td/></tr>").addClass(b),
                    h("td", c).addClass(b).html(a)[0].colSpan = aa(d),
                    e.push(c[0]))
            };
            f(a, b);
            c._details && c._details.detach();
            c._details = h(e);
            c._detailsShow && c._details.insertAfter(c.nTr)
        }
        return this
    });
    o(["row().child.show()", "row().child().show()"], function() {
        Tb(this, !0);
        return this
    });
    o(["row().child.hide()", "row().child().hide()"], function() {
        Tb(this, !1);
        return this
    });
    o(["row().child.remove()", "row().child().remove()"], function() {
        bb(this);
        return this
    });
    o("row().child.isShown()", function() {
        var a = this.context;
        return a.length && this.length ? a[0].aoData[this[0]]._detailsShow || !1 : !1
    });
    var bc = /^([^:]+):(name|visIdx|visible)$/
      , Ub = function(a, b, c, d, e) {
        for (var c = [], d = 0, f = e.length; d < f; d++)
            c.push(B(a, e[d], b));
        return c
    };
    o("columns()", function(a, b) {
        a === k ? a = "" : h.isPlainObject(a) && (b = a,
        a = "");
        var b = $a(b)
          , c = this.iterator("table", function(c) {
            var e = a
              , f = b
              , g = c.aoColumns
              , j = D(g, "sName")
              , i = D(g, "nTh");
            return Za("column", e, function(a) {
                var b = Nb(a);
                if (a === "")
                    return W(g.length);
                if (b !== null)
                    return [b >= 0 ? b : g.length + b];
                if (typeof a === "function") {
                    var e = Ba(c, f);
                    return h.map(g, function(b, f) {
                        return a(f, Ub(c, f, 0, 0, e), i[f]) ? f : null
                    })
                }
                var k = typeof a === "string" ? a.match(bc) : "";
                if (k)
                    switch (k[2]) {
                    case "visIdx":
                    case "visible":
                        b = parseInt(k[1], 10);
                        if (b < 0) {
                            var m = h.map(g, function(a, b) {
                                return a.bVisible ? b : null
                            });
                            return [m[m.length + b]]
                        }
                        return [Z(c, b)];
                    case "name":
                        return h.map(j, function(a, b) {
                            return a === k[1] ? b : null
                        });
                    default:
                        return []
                    }
                if (a.nodeName && a._DT_CellIndex)
                    return [a._DT_CellIndex.column];
                b = h(i).filter(a).map(function() {
                    return h.inArray(this, i)
                }).toArray();
                if (b.length || !a.nodeName)
                    return b;
                b = h(a).closest("*[data-dt-column]");
                return b.length ? [b.data("dt-column")] : []
            }, c, f)
        }, 1);
        c.selector.cols = a;
        c.selector.opts = b;
        return c
    });
    u("columns().header()", "column().header()", function() {
        return this.iterator("column", function(a, b) {
            return a.aoColumns[b].nTh
        }, 1)
    });
    u("columns().footer()", "column().footer()", function() {
        return this.iterator("column", function(a, b) {
            return a.aoColumns[b].nTf
        }, 1)
    });
    u("columns().data()", "column().data()", function() {
        return this.iterator("column-rows", Ub, 1)
    });
    u("columns().dataSrc()", "column().dataSrc()", function() {
        return this.iterator("column", function(a, b) {
            return a.aoColumns[b].mData
        }, 1)
    });
    u("columns().cache()", "column().cache()", function(a) {
        return this.iterator("column-rows", function(b, c, d, e, f) {
            return ia(b.aoData, f, "search" === a ? "_aFilterData" : "_aSortData", c)
        }, 1)
    });
    u("columns().nodes()", "column().nodes()", function() {
        return this.iterator("column-rows", function(a, b, c, d, e) {
            return ia(a.aoData, e, "anCells", b)
        }, 1)
    });
    u("columns().visible()", "column().visible()", function(a, b) {
        var c = this.iterator("column", function(b, c) {
            if (a === k)
                return b.aoColumns[c].bVisible;
            var f = b.aoColumns, g = f[c], j = b.aoData, i, n, l;
            if (a !== k && g.bVisible !== a) {
                if (a) {
                    var m = h.inArray(!0, D(f, "bVisible"), c + 1);
                    i = 0;
                    for (n = j.length; i < n; i++)
                        l = j[i].nTr,
                        f = j[i].anCells,
                        l && l.insertBefore(f[c], f[m] || null)
                } else
                    h(D(b.aoData, "anCells", c)).detach();
                g.bVisible = a;
                ea(b, b.aoHeader);
                ea(b, b.aoFooter);
                xa(b)
            }
        });
        a !== k && (this.iterator("column", function(c, e) {
            r(c, null, "column-visibility", [c, e, a, b])
        }),
        (b === k || b) && this.columns.adjust());
        return c
    });
    u("columns().indexes()", "column().index()", function(a) {
        return this.iterator("column", function(b, c) {
            return "visible" === a ? $(b, c) : c
        }, 1)
    });
    o("columns.adjust()", function() {
        return this.iterator("table", function(a) {
            Y(a)
        }, 1)
    });
    o("column.index()", function(a, b) {
        if (0 !== this.context.length) {
            var c = this.context[0];
            if ("fromVisible" === a || "toData" === a)
                return Z(c, b);
            if ("fromData" === a || "toVisible" === a)
                return $(c, b)
        }
    });
    o("column()", function(a, b) {
        return ab(this.columns(a, b))
    });
    o("cells()", function(a, b, c) {
        h.isPlainObject(a) && (a.row === k ? (c = a,
        a = null) : (c = b,
        b = null));
        h.isPlainObject(b) && (c = b,
        b = null);
        if (null === b || b === k)
            return this.iterator("table", function(b) {
                var d = a, e = $a(c), f = b.aoData, g = Ba(b, e), j = Qb(ia(f, g, "anCells")), i = h([].concat.apply([], j)), l, n = b.aoColumns.length, m, o, u, s, r, v;
                return Za("cell", d, function(a) {
                    var c = typeof a === "function";
                    if (a === null || a === k || c) {
                        m = [];
                        o = 0;
                        for (u = g.length; o < u; o++) {
                            l = g[o];
                            for (s = 0; s < n; s++) {
                                r = {
                                    row: l,
                                    column: s
                                };
                                if (c) {
                                    v = f[l];
                                    a(r, B(b, l, s), v.anCells ? v.anCells[s] : null) && m.push(r)
                                } else
                                    m.push(r)
                            }
                        }
                        return m
                    }
                    if (h.isPlainObject(a))
                        return [a];
                    c = i.filter(a).map(function(a, b) {
                        return {
                            row: b._DT_CellIndex.row,
                            column: b._DT_CellIndex.column
                        }
                    }).toArray();
                    if (c.length || !a.nodeName)
                        return c;
                    v = h(a).closest("*[data-dt-row]");
                    return v.length ? [{
                        row: v.data("dt-row"),
                        column: v.data("dt-column")
                    }] : []
                }, b, e)
            });
        var d = this.columns(b, c), e = this.rows(a, c), f, g, j, i, n, l = this.iterator("table", function(a, b) {
            f = [];
            g = 0;
            for (j = e[b].length; g < j; g++) {
                i = 0;
                for (n = d[b].length; i < n; i++)
                    f.push({
                        row: e[b][g],
                        column: d[b][i]
                    })
            }
            return f
        }, 1);
        h.extend(l.selector, {
            cols: b,
            rows: a,
            opts: c
        });
        return l
    });
    u("cells().nodes()", "cell().node()", function() {
        return this.iterator("cell", function(a, b, c) {
            return (a = a.aoData[b]) && a.anCells ? a.anCells[c] : k
        }, 1)
    });
    o("cells().data()", function() {
        return this.iterator("cell", function(a, b, c) {
            return B(a, b, c)
        }, 1)
    });
    u("cells().cache()", "cell().cache()", function(a) {
        a = "search" === a ? "_aFilterData" : "_aSortData";
        return this.iterator("cell", function(b, c, d) {
            return b.aoData[c][a][d]
        }, 1)
    });
    u("cells().render()", "cell().render()", function(a) {
        return this.iterator("cell", function(b, c, d) {
            return B(b, c, d, a)
        }, 1)
    });
    u("cells().indexes()", "cell().index()", function() {
        return this.iterator("cell", function(a, b, c) {
            return {
                row: b,
                column: c,
                columnVisible: $(a, c)
            }
        }, 1)
    });
    u("cells().invalidate()", "cell().invalidate()", function(a) {
        return this.iterator("cell", function(b, c, d) {
            ca(b, c, a, d)
        })
    });
    o("cell()", function(a, b, c) {
        return ab(this.cells(a, b, c))
    });
    o("cell().data()", function(a) {
        var b = this.context
          , c = this[0];
        if (a === k)
            return b.length && c.length ? B(b[0], c[0].row, c[0].column) : k;
        ib(b[0], c[0].row, c[0].column, a);
        ca(b[0], c[0].row, "data", c[0].column);
        return this
    });
    o("order()", function(a, b) {
        var c = this.context;
        if (a === k)
            return 0 !== c.length ? c[0].aaSorting : k;
        "number" === typeof a ? a = [[a, b]] : a.length && !h.isArray(a[0]) && (a = Array.prototype.slice.call(arguments));
        return this.iterator("table", function(b) {
            b.aaSorting = a.slice()
        })
    });
    o("order.listener()", function(a, b, c) {
        return this.iterator("table", function(d) {
            La(d, a, b, c)
        })
    });
    o("order.fixed()", function(a) {
        if (!a) {
            var b = this.context
              , b = b.length ? b[0].aaSortingFixed : k;
            return h.isArray(b) ? {
                pre: b
            } : b
        }
        return this.iterator("table", function(b) {
            b.aaSortingFixed = h.extend(!0, {}, a)
        })
    });
    o(["columns().order()", "column().order()"], function(a) {
        var b = this;
        return this.iterator("table", function(c, d) {
            var e = [];
            h.each(b[d], function(b, c) {
                e.push([c, a])
            });
            c.aaSorting = e
        })
    });
    o("search()", function(a, b, c, d) {
        var e = this.context;
        return a === k ? 0 !== e.length ? e[0].oPreviousSearch.sSearch : k : this.iterator("table", function(e) {
            e.oFeatures.bFilter && fa(e, h.extend({}, e.oPreviousSearch, {
                sSearch: a + "",
                bRegex: null === b ? !1 : b,
                bSmart: null === c ? !0 : c,
                bCaseInsensitive: null === d ? !0 : d
            }), 1)
        })
    });
    u("columns().search()", "column().search()", function(a, b, c, d) {
        return this.iterator("column", function(e, f) {
            var g = e.aoPreSearchCols;
            if (a === k)
                return g[f].sSearch;
            e.oFeatures.bFilter && (h.extend(g[f], {
                sSearch: a + "",
                bRegex: null === b ? !1 : b,
                bSmart: null === c ? !0 : c,
                bCaseInsensitive: null === d ? !0 : d
            }),
            fa(e, e.oPreviousSearch, 1))
        })
    });
    o("state()", function() {
        return this.context.length ? this.context[0].oSavedState : null
    });
    o("state.clear()", function() {
        return this.iterator("table", function(a) {
            a.fnStateSaveCallback.call(a.oInstance, a, {})
        })
    });
    o("state.loaded()", function() {
        return this.context.length ? this.context[0].oLoadedState : null
    });
    o("state.save()", function() {
        return this.iterator("table", function(a) {
            xa(a)
        })
    });
    m.versionCheck = m.fnVersionCheck = function(a) {
        for (var b = m.version.split("."), a = a.split("."), c, d, e = 0, f = a.length; e < f; e++)
            if (c = parseInt(b[e], 10) || 0,
            d = parseInt(a[e], 10) || 0,
            c !== d)
                return c > d;
        return !0
    }
    ;
    m.isDataTable = m.fnIsDataTable = function(a) {
        var b = h(a).get(0)
          , c = !1;
        if (a instanceof m.Api)
            return !0;
        h.each(m.settings, function(a, e) {
            var f = e.nScrollHead ? h("table", e.nScrollHead)[0] : null
              , g = e.nScrollFoot ? h("table", e.nScrollFoot)[0] : null;
            if (e.nTable === b || f === b || g === b)
                c = !0
        });
        return c
    }
    ;
    m.tables = m.fnTables = function(a) {
        var b = !1;
        h.isPlainObject(a) && (b = a.api,
        a = a.visible);
        var c = h.map(m.settings, function(b) {
            if (!a || a && h(b.nTable).is(":visible"))
                return b.nTable
        });
        return b ? new s(c) : c
    }
    ;
    m.camelToHungarian = I;
    o("$()", function(a, b) {
        var c = this.rows(b).nodes()
          , c = h(c);
        return h([].concat(c.filter(a).toArray(), c.find(a).toArray()))
    });
    h.each(["on", "one", "off"], function(a, b) {
        o(b + "()", function() {
            var a = Array.prototype.slice.call(arguments);
            a[0] = h.map(a[0].split(/\s/), function(a) {
                return !a.match(/\.dt\b/) ? a + ".dt" : a
            }).join(" ");
            var d = h(this.tables().nodes());
            d[b].apply(d, a);
            return this
        })
    });
    o("clear()", function() {
        return this.iterator("table", function(a) {
            na(a)
        })
    });
    o("settings()", function() {
        return new s(this.context,this.context)
    });
    o("init()", function() {
        var a = this.context;
        return a.length ? a[0].oInit : null
    });
    o("data()", function() {
        return this.iterator("table", function(a) {
            return D(a.aoData, "_aData")
        }).flatten()
    });
    o("destroy()", function(a) {
        a = a || !1;
        return this.iterator("table", function(b) {
            var c = b.nTableWrapper.parentNode, d = b.oClasses, e = b.nTable, f = b.nTBody, g = b.nTHead, j = b.nTFoot, i = h(e), f = h(f), k = h(b.nTableWrapper), l = h.map(b.aoData, function(a) {
                return a.nTr
            }), o;
            b.bDestroying = !0;
            r(b, "aoDestroyCallback", "destroy", [b]);
            a || (new s(b)).columns().visible(!0);
            k.off(".DT").find(":not(tbody *)").off(".DT");
            h(E).off(".DT-" + b.sInstance);
            e != g.parentNode && (i.children("thead").detach(),
            i.append(g));
            j && e != j.parentNode && (i.children("tfoot").detach(),
            i.append(j));
            b.aaSorting = [];
            b.aaSortingFixed = [];
            wa(b);
            h(l).removeClass(b.asStripeClasses.join(" "));
            h("th, td", g).removeClass(d.sSortable + " " + d.sSortableAsc + " " + d.sSortableDesc + " " + d.sSortableNone);
            f.children().detach();
            f.append(l);
            g = a ? "remove" : "detach";
            i[g]();
            k[g]();
            !a && c && (c.insertBefore(e, b.nTableReinsertBefore),
            i.css("width", b.sDestroyWidth).removeClass(d.sTable),
            (o = b.asDestroyStripes.length) && f.children().each(function(a) {
                h(this).addClass(b.asDestroyStripes[a % o])
            }));
            c = h.inArray(b, m.settings);
            -1 !== c && m.settings.splice(c, 1)
        })
    });
    h.each(["column", "row", "cell"], function(a, b) {
        o(b + "s().every()", function(a) {
            var d = this.selector.opts
              , e = this;
            return this.iterator(b, function(f, g, h, i, n) {
                a.call(e[b](g, "cell" === b ? h : d, "cell" === b ? d : k), g, h, i, n)
            })
        })
    });
    o("i18n()", function(a, b, c) {
        var d = this.context[0]
          , a = Q(a)(d.oLanguage);
        a === k && (a = b);
        c !== k && h.isPlainObject(a) && (a = a[c] !== k ? a[c] : a._);
        return a.replace("%d", c)
    });
    m.version = "1.10.16";
    m.settings = [];
    m.models = {};
    m.models.oSearch = {
        bCaseInsensitive: !0,
        sSearch: "",
        bRegex: !1,
        bSmart: !0
    };
    m.models.oRow = {
        nTr: null,
        anCells: null,
        _aData: [],
        _aSortData: null,
        _aFilterData: null,
        _sFilterRow: null,
        _sRowStripe: "",
        src: null,
        idx: -1
    };
    m.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
    };
    m.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) {}
        },
        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: h.extend({}, m.models.oSearch),
        sAjaxDataProp: "data",
        sAjaxSource: null,
        sDom: "lfrtip",
        searchDelay: null,
        sPaginationType: "simple_numbers",
        sScrollX: "",
        sScrollXInner: "",
        sScrollY: "",
        sServerMethod: "GET",
        renderer: null,
        rowId: "DT_RowId"
    };
    X(m.defaults);
    m.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
    };
    X(m.defaults.column);
    m.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,
        bAjaxDataGet: !0,
        jqXHR: null,
        json: k,
        oAjaxData: k,
        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" == y(this) ? 1 * this._iRecordsTotal : this.aiDisplayMaster.length
        },
        fnRecordsDisplay: function() {
            return "ssp" == y(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
              , f = e.bPaginate;
            return e.bServerSide ? !1 === f || -1 === a ? b + d : Math.min(b + a, this._iRecordsDisplay) : !f || c > d || -1 === a ? d : c
        },
        oInstance: null,
        sInstance: null,
        iTabIndex: 0,
        nScrollHead: null,
        nScrollFoot: null,
        aLastSort: [],
        oPlugins: {},
        rowIdFn: null,
        rowId: null
    };
    m.ext = x = {
        buttons: {},
        classes: {},
        builder: "-source-",
        errMode: "alert",
        feature: [],
        search: [],
        selector: {
            cell: [],
            column: [],
            row: []
        },
        internal: {},
        legacy: {
            ajax: null
        },
        pager: {},
        renderer: {
            pageButton: {},
            header: {}
        },
        order: {},
        type: {
            detect: [],
            search: {},
            order: {}
        },
        _unique: 0,
        fnVersionCheck: m.fnVersionCheck,
        iApiIndex: 0,
        oJUIClasses: {},
        sVersion: m.version
    };
    h.extend(x, {
        afnFiltering: x.search,
        aTypes: x.type.detect,
        ofnSearch: x.type.search,
        oSort: x.type.order,
        afnSortData: x.order,
        aoFeatures: x.feature,
        oApi: x.internal,
        oStdClasses: x.classes,
        oPagination: x.pager
    });
    h.extend(m.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_asc_disabled",
        sSortableDesc: "sorting_desc_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 Kb = m.ext.pager;
    h.extend(Kb, {
        simple: function() {
            return ["previous", "next"]
        },
        full: function() {
            return ["first", "previous", "next", "last"]
        },
        numbers: function(a, b) {
            return [ha(a, b)]
        },
        simple_numbers: function(a, b) {
            return ["previous", ha(a, b), "next"]
        },
        full_numbers: function(a, b) {
            return ["first", "previous", ha(a, b), "next", "last"]
        },
        first_last_numbers: function(a, b) {
            return ["first", ha(a, b), "last"]
        },
        _numbers: ha,
        numbers_length: 7
    });
    h.extend(!0, m.ext.renderer, {
        pageButton: {
            _: function(a, b, c, d, e, f) {
                var g = a.oClasses, j = a.oLanguage.oPaginate, i = a.oLanguage.oAria.paginate || {}, n, l, m = 0, o = function(b, d) {
                    var k, s, u, r, v = function(b) {
                        Sa(a, b.data.action, true)
                    };
                    k = 0;
                    for (s = d.length; k < s; k++) {
                        r = d[k];
                        if (h.isArray(r)) {
                            u = h("<" + (r.DT_el || "div") + "/>").appendTo(b);
                            o(u, r)
                        } else {
                            n = null;
                            l = "";
                            switch (r) {
                            case "ellipsis":
                                b.append('<span class="ellipsis">&#x2026;</span>');
                                break;
                            case "first":
                                n = j.sFirst;
                                l = r + (e > 0 ? "" : " " + g.sPageButtonDisabled);
                                break;
                            case "previous":
                                n = j.sPrevious;
                                l = r + (e > 0 ? "" : " " + g.sPageButtonDisabled);
                                break;
                            case "next":
                                n = j.sNext;
                                l = r + (e < f - 1 ? "" : " " + g.sPageButtonDisabled);
                                break;
                            case "last":
                                n = j.sLast;
                                l = r + (e < f - 1 ? "" : " " + g.sPageButtonDisabled);
                                break;
                            default:
                                n = r + 1;
                                l = e === r ? g.sPageButtonActive : ""
                            }
                            if (n !== null) {
                                u = h("<a>", {
                                    "class": g.sPageButton + " " + l,
                                    "aria-controls": a.sTableId,
                                    "aria-label": i[r],
                                    "data-dt-idx": m,
                                    tabindex: a.iTabIndex,
                                    id: c === 0 && typeof r === "string" ? a.sTableId + "_" + r : null
                                }).html(n).appendTo(b);
                                Va(u, {
                                    action: r
                                }, v);
                                m++
                            }
                        }
                    }
                }, s;
                try {
                    s = h(b).find(G.activeElement).data("dt-idx")
                } catch (u) {}
                o(h(b).empty(), d);
                s !== k && h(b).find("[data-dt-idx=" + s + "]").focus()
            }
        }
    });
    h.extend(m.ext.type.detect, [function(a, b) {
        var c = b.oLanguage.sDecimal;
        return Ya(a, c) ? "num" + c : null
    }
    , function(a) {
        if (a && !(a instanceof Date) && !Zb.test(a))
            return null;
        var b = Date.parse(a);
        return null !== b && !isNaN(b) || L(a) ? "date" : null
    }
    , function(a, b) {
        var c = b.oLanguage.sDecimal;
        return Ya(a, c, !0) ? "num-fmt" + c : null
    }
    , function(a, b) {
        var c = b.oLanguage.sDecimal;
        return Pb(a, c) ? "html-num" + c : null
    }
    , function(a, b) {
        var c = b.oLanguage.sDecimal;
        return Pb(a, c, !0) ? "html-num-fmt" + c : null
    }
    , function(a) {
        return L(a) || "string" === typeof a && -1 !== a.indexOf("<") ? "html" : null
    }
    ]);
    h.extend(m.ext.type.search, {
        html: function(a) {
            return L(a) ? a : "string" === typeof a ? a.replace(Mb, " ").replace(Aa, "") : ""
        },
        string: function(a) {
            return L(a) ? a : "string" === typeof a ? a.replace(Mb, " ") : a
        }
    });
    var za = function(a, b, c, d) {
        if (0 !== a && (!a || "-" === a))
            return -Infinity;
        b && (a = Ob(a, b));
        a.replace && (c && (a = a.replace(c, "")),
        d && (a = a.replace(d, "")));
        return 1 * a
    };
    h.extend(x.type.order, {
        "date-pre": function(a) {
            return Date.parse(a) || -Infinity
        },
        "html-pre": function(a) {
            return L(a) ? "" : a.replace ? a.replace(/<.*?>/g, "").toLowerCase() : a + ""
        },
        "string-pre": function(a) {
            return L(a) ? "" : "string" === typeof a ? a.toLowerCase() : !a.toString ? "" : a.toString()
        },
        "string-asc": function(a, b) {
            return a < b ? -1 : a > b ? 1 : 0
        },
        "string-desc": function(a, b) {
            return a < b ? 1 : a > b ? -1 : 0
        }
    });
    cb("");
    h.extend(!0, m.ext.renderer, {
        header: {
            _: function(a, b, c, d) {
                h(a.nTable).on("order.dt.DT", function(e, f, g, h) {
                    if (a === f) {
                        e = c.idx;
                        b.removeClass(c.sSortingClass + " " + d.sSortAsc + " " + d.sSortDesc).addClass(h[e] == "asc" ? d.sSortAsc : h[e] == "desc" ? d.sSortDesc : c.sSortingClass)
                    }
                })
            },
            jqueryui: function(a, b, c, d) {
                h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon + " " + c.sSortingClassJUI)).appendTo(b);
                h(a.nTable).on("order.dt.DT", function(e, f, g, h) {
                    if (a === f) {
                        e = c.idx;
                        b.removeClass(d.sSortAsc + " " + d.sSortDesc).addClass(h[e] == "asc" ? d.sSortAsc : h[e] == "desc" ? d.sSortDesc : c.sSortingClass);
                        b.find("span." + d.sSortIcon).removeClass(d.sSortJUIAsc + " " + d.sSortJUIDesc + " " + d.sSortJUI + " " + d.sSortJUIAscAllowed + " " + d.sSortJUIDescAllowed).addClass(h[e] == "asc" ? d.sSortJUIAsc : h[e] == "desc" ? d.sSortJUIDesc : c.sSortingClassJUI)
                    }
                })
            }
        }
    });
    var Vb = function(a) {
        return "string" === typeof a ? a.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;") : a
    };
    m.render = {
        number: function(a, b, c, d, e) {
            return {
                display: function(f) {
                    if ("number" !== typeof f && "string" !== typeof f)
                        return f;
                    var g = 0 > f ? "-" : ""
                      , h = parseFloat(f);
                    if (isNaN(h))
                        return Vb(f);
                    h = h.toFixed(c);
                    f = Math.abs(h);
                    h = parseInt(f, 10);
                    f = c ? b + (f - h).toFixed(c).substring(2) : "";
                    return g + (d || "") + h.toString().replace(/\B(?=(\d{3})+(?!\d))/g, a) + f + (e || "")
                }
            }
        },
        text: function() {
            return {
                display: Vb
            }
        }
    };
    h.extend(m.ext.internal, {
        _fnExternApiFunc: Lb,
        _fnBuildAjax: sa,
        _fnAjaxUpdate: kb,
        _fnAjaxParameters: tb,
        _fnAjaxUpdateDraw: ub,
        _fnAjaxDataSrc: ta,
        _fnAddColumn: Da,
        _fnColumnOptions: ja,
        _fnAdjustColumnSizing: Y,
        _fnVisibleToColumnIndex: Z,
        _fnColumnIndexToVisible: $,
        _fnVisbleColumns: aa,
        _fnGetColumns: la,
        _fnColumnTypes: Fa,
        _fnApplyColumnDefs: hb,
        _fnHungarianMap: X,
        _fnCamelToHungarian: I,
        _fnLanguageCompat: Ca,
        _fnBrowserDetect: fb,
        _fnAddData: M,
        _fnAddTr: ma,
        _fnNodeToDataIndex: function(a, b) {
            return b._DT_RowIndex !== k ? b._DT_RowIndex : null
        },
        _fnNodeToColumnIndex: function(a, b, c) {
            return h.inArray(c, a.aoData[b].anCells)
        },
        _fnGetCellData: B,
        _fnSetCellData: ib,
        _fnSplitObjNotation: Ia,
        _fnGetObjectDataFn: Q,
        _fnSetObjectDataFn: R,
        _fnGetDataMaster: Ja,
        _fnClearTable: na,
        _fnDeleteIndex: oa,
        _fnInvalidate: ca,
        _fnGetRowElements: Ha,
        _fnCreateTr: Ga,
        _fnBuildHead: jb,
        _fnDrawHead: ea,
        _fnDraw: N,
        _fnReDraw: S,
        _fnAddOptionsHtml: mb,
        _fnDetectHeader: da,
        _fnGetUniqueThs: ra,
        _fnFeatureHtmlFilter: ob,
        _fnFilterComplete: fa,
        _fnFilterCustom: xb,
        _fnFilterColumn: wb,
        _fnFilter: vb,
        _fnFilterCreateSearch: Oa,
        _fnEscapeRegex: Pa,
        _fnFilterData: yb,
        _fnFeatureHtmlInfo: rb,
        _fnUpdateInfo: Bb,
        _fnInfoMacros: Cb,
        _fnInitialise: ga,
        _fnInitComplete: ua,
        _fnLengthChange: Qa,
        _fnFeatureHtmlLength: nb,
        _fnFeatureHtmlPaginate: sb,
        _fnPageChange: Sa,
        _fnFeatureHtmlProcessing: pb,
        _fnProcessingDisplay: C,
        _fnFeatureHtmlTable: qb,
        _fnScrollDraw: ka,
        _fnApplyToChildren: H,
        _fnCalculateColumnWidths: Ea,
        _fnThrottle: Na,
        _fnConvertToWidth: Db,
        _fnGetWidestNode: Eb,
        _fnGetMaxLenString: Fb,
        _fnStringToCss: v,
        _fnSortFlatten: V,
        _fnSort: lb,
        _fnSortAria: Hb,
        _fnSortListener: Ua,
        _fnSortAttachListener: La,
        _fnSortingClasses: wa,
        _fnSortData: Gb,
        _fnSaveState: xa,
        _fnLoadState: Ib,
        _fnSettingsFromNode: ya,
        _fnLog: J,
        _fnMap: F,
        _fnBindAction: Va,
        _fnCallbackReg: z,
        _fnCallbackFire: r,
        _fnLengthOverflow: Ra,
        _fnRenderer: Ma,
        _fnDataSource: y,
        _fnRowAttributes: Ka,
        _fnCalculateEnd: function() {}
    });
    h.fn.dataTable = m;
    m.$ = h;
    h.fn.dataTableSettings = m.settings;
    h.fn.dataTableExt = m.ext;
    h.fn.DataTable = function(a) {
        return h(this).dataTable(a).api()
    }
    ;
    h.each(m, function(a, b) {
        h.fn.DataTable[a] = b
    });
    return h.fn.dataTable
});
/*!
DataTables Bootstrap 3 integration
©2011-2015 SpryMedia Ltd - datatables.net/license
*/
(function(b) {
    "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function(a) {
        return b(a, window, document)
    }) : "object" === typeof exports ? module.exports = function(a, d) {
        a || (a = window);
        if (!d || !d.fn.dataTable)
            d = require("datatables.net")(a, d).$;
        return b(d, a, a.document)
    }
    : b(jQuery, window, document)
}
)(function(b, a, d, m) {
    var f = b.fn.dataTable;
    b.extend(!0, f.defaults, {
        dom: "<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",
        renderer: "bootstrap"
    });
    b.extend(f.ext.classes, {
        sWrapper: "dataTables_wrapper form-inline dt-bootstrap",
        sFilterInput: "form-control input-sm",
        sLengthSelect: "form-control input-sm",
        sProcessing: "dataTables_processing panel panel-default"
    });
    f.ext.renderer.pageButton.bootstrap = function(a, h, r, s, j, n) {
        var o = new f.Api(a), t = a.oClasses, k = a.oLanguage.oPaginate, u = a.oLanguage.oAria.paginate || {}, e, g, p = 0, q = function(d, f) {
            var l, h, i, c, m = function(a) {
                a.preventDefault();
                !b(a.currentTarget).hasClass("disabled") && o.page() != a.data.action && o.page(a.data.action).draw("page")
            };
            l = 0;
            for (h = f.length; l < h; l++)
                if (c = f[l],
                b.isArray(c))
                    q(d, c);
                else {
                    g = e = "";
                    switch (c) {
                    case "ellipsis":
                        e = "&#x2026;";
                        g = "disabled";
                        break;
                    case "first":
                        e = k.sFirst;
                        g = c + (0 < j ? "" : " disabled");
                        break;
                    case "previous":
                        e = k.sPrevious;
                        g = c + (0 < j ? "" : " disabled");
                        break;
                    case "next":
                        e = k.sNext;
                        g = c + (j < n - 1 ? "" : " disabled");
                        break;
                    case "last":
                        e = k.sLast;
                        g = c + (j < n - 1 ? "" : " disabled");
                        break;
                    default:
                        e = c + 1,
                        g = j === c ? "active" : ""
                    }
                    e && (i = b("<li>", {
                        "class": t.sPageButton + " " + g,
                        id: 0 === r && "string" === typeof c ? a.sTableId + "_" + c : null
                    }).append(b("<a>", {
                        href: "#",
                        "aria-controls": a.sTableId,
                        "aria-label": u[c],
                        "data-dt-idx": p,
                        tabindex: a.iTabIndex
                    }).html(e)).appendTo(d),
                    a.oApi._fnBindAction(i, {
                        action: c
                    }, m),
                    p++)
                }
        }, i;
        try {
            i = b(h).find(d.activeElement).data("dt-idx")
        } catch (v) {}
        q(b(h).empty().html('<ul class="pagination"/>').children("ul"), s);
        i !== m && b(h).find("[data-dt-idx=" + i + "]").focus()
    }
    ;
    return f
});
/*! X-editable - v1.5.1
* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
* http://github.com/vitalets/x-editable
* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */
!function(a) {
    "use strict";
    var b = function(b, c) {
        this.options = a.extend({}, a.fn.editableform.defaults, c),
        this.$div = a(b),
        this.options.scope || (this.options.scope = this)
    };
    b.prototype = {
        constructor: b,
        initInput: function() {
            this.input = this.options.input,
            this.value = this.input.str2value(this.options.value),
            this.input.prerender()
        },
        initTemplate: function() {
            this.$form = a(a.fn.editableform.template)
        },
        initButtons: function() {
            var b = this.$form.find(".editable-buttons");
            b.append(a.fn.editableform.buttons),
            "bottom" === this.options.showbuttons && b.addClass("editable-buttons-bottom")
        },
        render: function() {
            this.$loading = a(a.fn.editableform.loading),
            this.$div.empty().append(this.$loading),
            this.initTemplate(),
            this.options.showbuttons ? this.initButtons() : this.$form.find(".editable-buttons").remove(),
            this.showLoading(),
            this.isSaving = !1,
            this.$div.triggerHandler("rendering"),
            this.initInput(),
            this.$form.find("div.editable-input").append(this.input.$tpl),
            this.$div.append(this.$form),
            a.when(this.input.render()).then(a.proxy(function() {
                if (this.options.showbuttons || this.input.autosubmit(),
                this.$form.find(".editable-cancel").click(a.proxy(this.cancel, this)),
                this.input.error)
                    this.error(this.input.error),
                    this.$form.find(".editable-submit").attr("disabled", !0),
                    this.input.$input.attr("disabled", !0),
                    this.$form.submit(function(a) {
                        a.preventDefault()
                    });
                else {
                    this.error(!1),
                    this.input.$input.removeAttr("disabled"),
                    this.$form.find(".editable-submit").removeAttr("disabled");
                    var b = null === this.value || void 0 === this.value || "" === this.value ? this.options.defaultValue : this.value;
                    this.input.value2input(b),
                    this.$form.submit(a.proxy(this.submit, this))
                }
                this.$div.triggerHandler("rendered"),
                this.showForm(),
                this.input.postrender && this.input.postrender()
            }, this))
        },
        cancel: function() {
            this.$div.triggerHandler("cancel")
        },
        showLoading: function() {
            var a, b;
            this.$form ? (a = this.$form.outerWidth(),
            b = this.$form.outerHeight(),
            a && this.$loading.width(a),
            b && this.$loading.height(b),
            this.$form.hide()) : (a = this.$loading.parent().width(),
            a && this.$loading.width(a)),
            this.$loading.show()
        },
        showForm: function(a) {
            this.$loading.hide(),
            this.$form.show(),
            a !== !1 && this.input.activate(),
            this.$div.triggerHandler("show")
        },
        error: function(b) {
            var c, d = this.$form.find(".control-group"), e = this.$form.find(".editable-error-block");
            if (b === !1)
                d.removeClass(a.fn.editableform.errorGroupClass),
                e.removeClass(a.fn.editableform.errorBlockClass).empty().hide();
            else {
                if (b) {
                    c = ("" + b).split("\n");
                    for (var f = 0; f < c.length; f++)
                        c[f] = a("<div>").text(c[f]).html();
                    b = c.join("<br>")
                }
                d.addClass(a.fn.editableform.errorGroupClass),
                e.addClass(a.fn.editableform.errorBlockClass).html(b).show()
            }
        },
        submit: function(b) {
            b.stopPropagation(),
            b.preventDefault();
            var c = this.input.input2value()
              , d = this.validate(c);
            if ("object" === a.type(d) && void 0 !== d.newValue) {
                if (c = d.newValue,
                this.input.value2input(c),
                "string" == typeof d.msg)
                    return this.error(d.msg),
                    this.showForm(),
                    void 0
            } else if (d)
                return this.error(d),
                this.showForm(),
                void 0;
            if (!this.options.savenochange && this.input.value2str(c) == this.input.value2str(this.value))
                return this.$div.triggerHandler("nochange"),
                void 0;
            var e = this.input.value2submit(c);
            this.isSaving = !0,
            a.when(this.save(e)).done(a.proxy(function(a) {
                this.isSaving = !1;
                var b = "function" == typeof this.options.success ? this.options.success.call(this.options.scope, a, c) : null;
                return b === !1 ? (this.error(!1),
                this.showForm(!1),
                void 0) : "string" == typeof b ? (this.error(b),
                this.showForm(),
                void 0) : (b && "object" == typeof b && b.hasOwnProperty("newValue") && (c = b.newValue),
                this.error(!1),
                this.value = c,
                this.$div.triggerHandler("save", {
                    newValue: c,
                    submitValue: e,
                    response: a
                }),
                void 0)
            }, this)).fail(a.proxy(function(a) {
                this.isSaving = !1;
                var b;
                b = "function" == typeof this.options.error ? this.options.error.call(this.options.scope, a, c) : "string" == typeof a ? a : a.responseText || a.statusText || "Unknown error!",
                this.error(b),
                this.showForm()
            }, this))
        },
        save: function(b) {
            this.options.pk = a.fn.editableutils.tryParseJson(this.options.pk, !0);
            var c, d = "function" == typeof this.options.pk ? this.options.pk.call(this.options.scope) : this.options.pk, e = !!("function" == typeof this.options.url || this.options.url && ("always" === this.options.send || "auto" === this.options.send && null !== d && void 0 !== d));
            return e ? (this.showLoading(),
            c = {
                name: this.options.name || "",
                value: b,
                pk: d
            },
            "function" == typeof this.options.params ? c = this.options.params.call(this.options.scope, c) : (this.options.params = a.fn.editableutils.tryParseJson(this.options.params, !0),
            a.extend(c, this.options.params)),
            "function" == typeof this.options.url ? this.options.url.call(this.options.scope, c) : a.ajax(a.extend({
                url: this.options.url,
                data: c,
                type: "POST"
            }, this.options.ajaxOptions))) : void 0
        },
        validate: function(a) {
            return void 0 === a && (a = this.value),
            "function" == typeof this.options.validate ? this.options.validate.call(this.options.scope, a) : void 0
        },
        option: function(a, b) {
            a in this.options && (this.options[a] = b),
            "value" === a && this.setValue(b)
        },
        setValue: function(a, b) {
            this.value = b ? this.input.str2value(a) : a,
            this.$form && this.$form.is(":visible") && this.input.value2input(this.value)
        }
    },
    a.fn.editableform = function(c) {
        var d = arguments;
        return this.each(function() {
            var e = a(this)
              , f = e.data("editableform")
              , g = "object" == typeof c && c;
            f || e.data("editableform", f = new b(this,g)),
            "string" == typeof c && f[c].apply(f, Array.prototype.slice.call(d, 1))
        })
    }
    ,
    a.fn.editableform.Constructor = b,
    a.fn.editableform.defaults = {
        type: "text",
        url: null,
        params: null,
        name: null,
        pk: null,
        value: null,
        defaultValue: null,
        send: "auto",
        validate: null,
        success: null,
        error: null,
        ajaxOptions: null,
        showbuttons: !0,
        scope: null,
        savenochange: !1
    },
    a.fn.editableform.template = '<form class="form-inline editableform"><div class="control-group"><div><div class="editable-input"></div><div class="editable-buttons"></div></div><div class="editable-error-block"></div></div></form>',
    a.fn.editableform.loading = '<div class="editableform-loading"></div>',
    a.fn.editableform.buttons = '<button type="submit" class="editable-submit">ok</button><button type="button" class="editable-cancel">cancel</button>',
    a.fn.editableform.errorGroupClass = null,
    a.fn.editableform.errorBlockClass = "editable-error",
    a.fn.editableform.engine = "jquery"
}(window.jQuery),
function(a) {
    "use strict";
    a.fn.editableutils = {
        inherit: function(a, b) {
            var c = function() {};
            c.prototype = b.prototype,
            a.prototype = new c,
            a.prototype.constructor = a,
            a.superclass = b.prototype
        },
        setCursorPosition: function(a, b) {
            if (a.setSelectionRange)
                a.setSelectionRange(b, b);
            else if (a.createTextRange) {
                var c = a.createTextRange();
                c.collapse(!0),
                c.moveEnd("character", b),
                c.moveStart("character", b),
                c.select()
            }
        },
        tryParseJson: function(a, b) {
            if ("string" == typeof a && a.length && a.match(/^[\{\[].*[\}\]]$/))
                if (b)
                    try {
                        a = new Function("return " + a)()
                    } catch (c) {} finally {
                        return a
                    }
                else
                    a = new Function("return " + a)();
            return a
        },
        sliceObj: function(b, c, d) {
            var e, f, g = {};
            if (!a.isArray(c) || !c.length)
                return g;
            for (var h = 0; h < c.length; h++)
                e = c[h],
                b.hasOwnProperty(e) && (g[e] = b[e]),
                d !== !0 && (f = e.toLowerCase(),
                b.hasOwnProperty(f) && (g[e] = b[f]));
            return g
        },
        getConfigData: function(b) {
            var c = {};
            return a.each(b.data(), function(a, b) {
                ("object" != typeof b || b && "object" == typeof b && (b.constructor === Object || b.constructor === Array)) && (c[a] = b)
            }),
            c
        },
        objectKeys: function(a) {
            if (Object.keys)
                return Object.keys(a);
            if (a !== Object(a))
                throw new TypeError("Object.keys called on a non-object");
            var b, c = [];
            for (b in a)
                Object.prototype.hasOwnProperty.call(a, b) && c.push(b);
            return c
        },
        escape: function(b) {
            return a("<div>").text(b).html()
        },
        itemsByValue: function(b, c, d) {
            if (!c || null === b)
                return [];
            if ("function" != typeof d) {
                var e = d || "value";
                d = function(a) {
                    return a[e]
                }
            }
            var f = a.isArray(b)
              , g = []
              , h = this;
            return a.each(c, function(c, e) {
                if (e.children)
                    g = g.concat(h.itemsByValue(b, e.children, d));
                else if (f)
                    a.grep(b, function(a) {
                        return a == (e && "object" == typeof e ? d(e) : e)
                    }).length && g.push(e);
                else {
                    var i = e && "object" == typeof e ? d(e) : e;
                    b == i && g.push(e)
                }
            }),
            g
        },
        createInput: function(b) {
            var c, d, e, f = b.type;
            return "date" === f && ("inline" === b.mode ? a.fn.editabletypes.datefield ? f = "datefield" : a.fn.editabletypes.dateuifield && (f = "dateuifield") : a.fn.editabletypes.date ? f = "date" : a.fn.editabletypes.dateui && (f = "dateui"),
            "date" !== f || a.fn.editabletypes.date || (f = "combodate")),
            "datetime" === f && "inline" === b.mode && (f = "datetimefield"),
            "wysihtml5" !== f || a.fn.editabletypes[f] || (f = "textarea"),
            "function" == typeof a.fn.editabletypes[f] ? (c = a.fn.editabletypes[f],
            d = this.sliceObj(b, this.objectKeys(c.defaults)),
            e = new c(d)) : (a.error("Unknown type: " + f),
            !1)
        },
        supportsTransitions: function() {
            var a = document.body || document.documentElement
              , b = a.style
              , c = "transition"
              , d = ["Moz", "Webkit", "Khtml", "O", "ms"];
            if ("string" == typeof b[c])
                return !0;
            c = c.charAt(0).toUpperCase() + c.substr(1);
            for (var e = 0; e < d.length; e++)
                if ("string" == typeof b[d[e] + c])
                    return !0;
            return !1
        }
    }
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a, b) {
        this.init(a, b)
    }
      , c = function(a, b) {
        this.init(a, b)
    };
    b.prototype = {
        containerName: null,
        containerDataName: null,
        innerCss: null,
        containerClass: "editable-container editable-popup",
        defaults: {},
        init: function(c, d) {
            this.$element = a(c),
            this.options = a.extend({}, a.fn.editableContainer.defaults, d),
            this.splitOptions(),
            this.formOptions.scope = this.$element[0],
            this.initContainer(),
            this.delayedHide = !1,
            this.$element.on("destroyed", a.proxy(function() {
                this.destroy()
            }, this)),
            a(document).data("editable-handlers-attached") || (a(document).on("keyup.editable", function(b) {
                27 === b.which && a(".editable-open").editableContainer("hide")
            }),
            a(document).on("click.editable", function(c) {
                var d, e = a(c.target), f = [".editable-container", ".ui-datepicker-header", ".datepicker", ".modal-backdrop", ".bootstrap-wysihtml5-insert-image-modal", ".bootstrap-wysihtml5-insert-link-modal"];
                if (a.contains(document.documentElement, c.target) && !e.is(document)) {
                    for (d = 0; d < f.length; d++)
                        if (e.is(f[d]) || e.parents(f[d]).length)
                            return;
                    b.prototype.closeOthers(c.target)
                }
            }),
            a(document).data("editable-handlers-attached", !0))
        },
        splitOptions: function() {
            if (this.containerOptions = {},
            this.formOptions = {},
            !a.fn[this.containerName])
                throw new Error(this.containerName + " not found. Have you included corresponding js file?");
            for (var b in this.options)
                b in this.defaults ? this.containerOptions[b] = this.options[b] : this.formOptions[b] = this.options[b]
        },
        tip: function() {
            return this.container() ? this.container().$tip : null
        },
        container: function() {
            var a;
            return this.containerDataName && (a = this.$element.data(this.containerDataName)) ? a : a = this.$element.data(this.containerName)
        },
        call: function() {
            this.$element[this.containerName].apply(this.$element, arguments)
        },
        initContainer: function() {
            this.call(this.containerOptions)
        },
        renderForm: function() {
            this.$form.editableform(this.formOptions).on({
                save: a.proxy(this.save, this),
                nochange: a.proxy(function() {
                    this.hide("nochange")
                }, this),
                cancel: a.proxy(function() {
                    this.hide("cancel")
                }, this),
                show: a.proxy(function() {
                    this.delayedHide ? (this.hide(this.delayedHide.reason),
                    this.delayedHide = !1) : this.setPosition()
                }, this),
                rendering: a.proxy(this.setPosition, this),
                resize: a.proxy(this.setPosition, this),
                rendered: a.proxy(function() {
                    this.$element.triggerHandler("shown", a(this.options.scope).data("editable"))
                }, this)
            }).editableform("render")
        },
        show: function(b) {
            this.$element.addClass("editable-open"),
            b !== !1 && this.closeOthers(this.$element[0]),
            this.innerShow(),
            this.tip().addClass(this.containerClass),
            this.$form,
            this.$form = a("<div>"),
            this.tip().is(this.innerCss) ? this.tip().append(this.$form) : this.tip().find(this.innerCss).append(this.$form),
            this.renderForm()
        },
        hide: function(a) {
            if (this.tip() && this.tip().is(":visible") && this.$element.hasClass("editable-open")) {
                if (this.$form.data("editableform").isSaving)
                    return this.delayedHide = {
                        reason: a
                    },
                    void 0;
                this.delayedHide = !1,
                this.$element.removeClass("editable-open"),
                this.innerHide(),
                this.$element.triggerHandler("hidden", a || "manual")
            }
        },
        innerShow: function() {},
        innerHide: function() {},
        toggle: function(a) {
            this.container() && this.tip() && this.tip().is(":visible") ? this.hide() : this.show(a)
        },
        setPosition: function() {},
        save: function(a, b) {
            this.$element.triggerHandler("save", b),
            this.hide("save")
        },
        option: function(a, b) {
            this.options[a] = b,
            a in this.containerOptions ? (this.containerOptions[a] = b,
            this.setContainerOption(a, b)) : (this.formOptions[a] = b,
            this.$form && this.$form.editableform("option", a, b))
        },
        setContainerOption: function(a, b) {
            this.call("option", a, b)
        },
        destroy: function() {
            this.hide(),
            this.innerDestroy(),
            this.$element.off("destroyed"),
            this.$element.removeData("editableContainer")
        },
        innerDestroy: function() {},
        closeOthers: function(b) {
            a(".editable-open").each(function(c, d) {
                if (d !== b && !a(d).find(b).length) {
                    var e = a(d)
                      , f = e.data("editableContainer");
                    f && ("cancel" === f.options.onblur ? e.data("editableContainer").hide("onblur") : "submit" === f.options.onblur && e.data("editableContainer").tip().find("form").submit())
                }
            })
        },
        activate: function() {
            this.tip && this.tip().is(":visible") && this.$form && this.$form.data("editableform").input.activate()
        }
    },
    a.fn.editableContainer = function(d) {
        var e = arguments;
        return this.each(function() {
            var f = a(this)
              , g = "editableContainer"
              , h = f.data(g)
              , i = "object" == typeof d && d
              , j = "inline" === i.mode ? c : b;
            h || f.data(g, h = new j(this,i)),
            "string" == typeof d && h[d].apply(h, Array.prototype.slice.call(e, 1))
        })
    }
    ,
    a.fn.editableContainer.Popup = b,
    a.fn.editableContainer.Inline = c,
    a.fn.editableContainer.defaults = {
        value: null,
        placement: "top",
        autohide: !0,
        onblur: "cancel",
        anim: !1,
        mode: "popup"
    },
    jQuery.event.special.destroyed = {
        remove: function(a) {
            a.handler && a.handler()
        }
    }
}(window.jQuery),
function(a) {
    "use strict";
    a.extend(a.fn.editableContainer.Inline.prototype, a.fn.editableContainer.Popup.prototype, {
        containerName: "editableform",
        innerCss: ".editable-inline",
        containerClass: "editable-container editable-inline",
        initContainer: function() {
            this.$tip = a("<span></span>"),
            this.options.anim || (this.options.anim = 0)
        },
        splitOptions: function() {
            this.containerOptions = {},
            this.formOptions = this.options
        },
        tip: function() {
            return this.$tip
        },
        innerShow: function() {
            this.$element.hide(),
            this.tip().insertAfter(this.$element).show()
        },
        innerHide: function() {
            this.$tip.hide(this.options.anim, a.proxy(function() {
                this.$element.show(),
                this.innerDestroy()
            }, this))
        },
        innerDestroy: function() {
            this.tip() && this.tip().empty().remove()
        }
    })
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(b, c) {
        this.$element = a(b),
        this.options = a.extend({}, a.fn.editable.defaults, c, a.fn.editableutils.getConfigData(this.$element)),
        this.options.selector ? this.initLive() : this.init(),
        this.options.highlight && !a.fn.editableutils.supportsTransitions() && (this.options.highlight = !1)
    };
    b.prototype = {
        constructor: b,
        init: function() {
            var b, c = !1;
            if (this.options.name = this.options.name || this.$element.attr("id"),
            this.options.scope = this.$element[0],
            this.input = a.fn.editableutils.createInput(this.options),
            this.input) {
                switch (void 0 === this.options.value || null === this.options.value ? (this.value = this.input.html2value(a.trim(this.$element.html())),
                c = !0) : (this.options.value = a.fn.editableutils.tryParseJson(this.options.value, !0),
                this.value = "string" == typeof this.options.value ? this.input.str2value(this.options.value) : this.options.value),
                this.$element.addClass("editable"),
                "textarea" === this.input.type && this.$element.addClass("editable-pre-wrapped"),
                "manual" !== this.options.toggle ? (this.$element.addClass("editable-click"),
                this.$element.on(this.options.toggle + ".editable", a.proxy(function(a) {
                    if (this.options.disabled || a.preventDefault(),
                    "mouseenter" === this.options.toggle)
                        this.show();
                    else {
                        var b = "click" !== this.options.toggle;
                        this.toggle(b)
                    }
                }, this))) : this.$element.attr("tabindex", -1),
                "function" == typeof this.options.display && (this.options.autotext = "always"),
                this.options.autotext) {
                case "always":
                    b = !0;
                    break;
                case "auto":
                    b = !a.trim(this.$element.text()).length && null !== this.value && void 0 !== this.value && !c;
                    break;
                default:
                    b = !1
                }
                a.when(b ? this.render() : !0).then(a.proxy(function() {
                    this.options.disabled ? this.disable() : this.enable(),
                    this.$element.triggerHandler("init", this)
                }, this))
            }
        },
        initLive: function() {
            var b = this.options.selector;
            this.options.selector = !1,
            this.options.autotext = "never",
            this.$element.on(this.options.toggle + ".editable", b, a.proxy(function(b) {
                var c = a(b.target);
                c.data("editable") || (c.hasClass(this.options.emptyclass) && c.empty(),
                c.editable(this.options).trigger(b))
            }, this))
        },
        render: function(a) {
            return this.options.display !== !1 ? this.input.value2htmlFinal ? this.input.value2html(this.value, this.$element[0], this.options.display, a) : "function" == typeof this.options.display ? this.options.display.call(this.$element[0], this.value, a) : this.input.value2html(this.value, this.$element[0]) : void 0
        },
        enable: function() {
            this.options.disabled = !1,
            this.$element.removeClass("editable-disabled"),
            this.handleEmpty(this.isEmpty),
            "manual" !== this.options.toggle && "-1" === this.$element.attr("tabindex") && this.$element.removeAttr("tabindex")
        },
        disable: function() {
            this.options.disabled = !0,
            this.hide(),
            this.$element.addClass("editable-disabled"),
            this.handleEmpty(this.isEmpty),
            this.$element.attr("tabindex", -1)
        },
        toggleDisabled: function() {
            this.options.disabled ? this.enable() : this.disable()
        },
        option: function(b, c) {
            return b && "object" == typeof b ? (a.each(b, a.proxy(function(b, c) {
                this.option(a.trim(b), c)
            }, this)),
            void 0) : (this.options[b] = c,
            "disabled" === b ? c ? this.disable() : this.enable() : ("value" === b && this.setValue(c),
            this.container && this.container.option(b, c),
            this.input.option && this.input.option(b, c),
            void 0))
        },
        handleEmpty: function(b) {
            this.options.display !== !1 && (this.isEmpty = void 0 !== b ? b : "function" == typeof this.input.isEmpty ? this.input.isEmpty(this.$element) : "" === a.trim(this.$element.html()),
            this.options.disabled ? this.isEmpty && (this.$element.empty(),
            this.options.emptyclass && this.$element.removeClass(this.options.emptyclass)) : this.isEmpty ? (this.$element.html(this.options.emptytext),
            this.options.emptyclass && this.$element.addClass(this.options.emptyclass)) : this.options.emptyclass && this.$element.removeClass(this.options.emptyclass))
        },
        show: function(b) {
            if (!this.options.disabled) {
                if (this.container) {
                    if (this.container.tip().is(":visible"))
                        return
                } else {
                    var c = a.extend({}, this.options, {
                        value: this.value,
                        input: this.input
                    });
                    this.$element.editableContainer(c),
                    this.$element.on("save.internal", a.proxy(this.save, this)),
                    this.container = this.$element.data("editableContainer")
                }
                this.container.show(b)
            }
        },
        hide: function() {
            this.container && this.container.hide()
        },
        toggle: function(a) {
            this.container && this.container.tip().is(":visible") ? this.hide() : this.show(a)
        },
        save: function(a, b) {
            if (this.options.unsavedclass) {
                var c = !1;
                c = c || "function" == typeof this.options.url,
                c = c || this.options.display === !1,
                c = c || void 0 !== b.response,
                c = c || this.options.savenochange && this.input.value2str(this.value) !== this.input.value2str(b.newValue),
                c ? this.$element.removeClass(this.options.unsavedclass) : this.$element.addClass(this.options.unsavedclass)
            }
            if (this.options.highlight) {
                var d = this.$element
                  , e = d.css("background-color");
                d.css("background-color", this.options.highlight),
                setTimeout(function() {
                    "transparent" === e && (e = ""),
                    d.css("background-color", e),
                    d.addClass("editable-bg-transition"),
                    setTimeout(function() {
                        d.removeClass("editable-bg-transition")
                    }, 1700)
                }, 10)
            }
            this.setValue(b.newValue, !1, b.response)
        },
        validate: function() {
            return "function" == typeof this.options.validate ? this.options.validate.call(this, this.value) : void 0
        },
        setValue: function(b, c, d) {
            this.value = c ? this.input.str2value(b) : b,
            this.container && this.container.option("value", this.value),
            a.when(this.render(d)).then(a.proxy(function() {
                this.handleEmpty()
            }, this))
        },
        activate: function() {
            this.container && this.container.activate()
        },
        destroy: function() {
            this.disable(),
            this.container && this.container.destroy(),
            this.input.destroy(),
            "manual" !== this.options.toggle && (this.$element.removeClass("editable-click"),
            this.$element.off(this.options.toggle + ".editable")),
            this.$element.off("save.internal"),
            this.$element.removeClass("editable editable-open editable-disabled"),
            this.$element.removeData("editable")
        }
    },
    a.fn.editable = function(c) {
        var d = {}
          , e = arguments
          , f = "editable";
        switch (c) {
        case "validate":
            return this.each(function() {
                var b, c = a(this), e = c.data(f);
                e && (b = e.validate()) && (d[e.options.name] = b)
            }),
            d;
        case "getValue":
            return 2 === arguments.length && arguments[1] === !0 ? d = this.eq(0).data(f).value : this.each(function() {
                var b = a(this)
                  , c = b.data(f);
                c && void 0 !== c.value && null !== c.value && (d[c.options.name] = c.input.value2submit(c.value))
            }),
            d;
        case "submit":
            var g = arguments[1] || {}
              , h = this
              , i = this.editable("validate");
            if (a.isEmptyObject(i)) {
                var j = {};
                if (1 === h.length) {
                    var k = h.data("editable")
                      , l = {
                        name: k.options.name || "",
                        value: k.input.value2submit(k.value),
                        pk: "function" == typeof k.options.pk ? k.options.pk.call(k.options.scope) : k.options.pk
                    };
                    "function" == typeof k.options.params ? l = k.options.params.call(k.options.scope, l) : (k.options.params = a.fn.editableutils.tryParseJson(k.options.params, !0),
                    a.extend(l, k.options.params)),
                    j = {
                        url: k.options.url,
                        data: l,
                        type: "POST"
                    },
                    g.success = g.success || k.options.success,
                    g.error = g.error || k.options.error
                } else {
                    var m = this.editable("getValue");
                    j = {
                        url: g.url,
                        data: m,
                        type: "POST"
                    }
                }
                j.success = "function" == typeof g.success ? function(a) {
                    g.success.call(h, a, g)
                }
                : a.noop,
                j.error = "function" == typeof g.error ? function() {
                    g.error.apply(h, arguments)
                }
                : a.noop,
                g.ajaxOptions && a.extend(j, g.ajaxOptions),
                g.data && a.extend(j.data, g.data),
                a.ajax(j)
            } else
                "function" == typeof g.error && g.error.call(h, i);
            return this
        }
        return this.each(function() {
            var d = a(this)
              , g = d.data(f)
              , h = "object" == typeof c && c;
            return h && h.selector ? (g = new b(this,h),
            void 0) : (g || d.data(f, g = new b(this,h)),
            "string" == typeof c && g[c].apply(g, Array.prototype.slice.call(e, 1)),
            void 0)
        })
    }
    ,
    a.fn.editable.defaults = {
        type: "text",
        disabled: !1,
        toggle: "click",
        emptytext: "Empty",
        autotext: "auto",
        value: null,
        display: null,
        emptyclass: "editable-empty",
        unsavedclass: "editable-unsaved",
        selector: null,
        highlight: "#FFFF80"
    }
}(window.jQuery),
function(a) {
    "use strict";
    a.fn.editabletypes = {};
    var b = function() {};
    b.prototype = {
        init: function(b, c, d) {
            this.type = b,
            this.options = a.extend({}, d, c)
        },
        prerender: function() {
            this.$tpl = a(this.options.tpl),
            this.$input = this.$tpl,
            this.$clear = null,
            this.error = null
        },
        render: function() {},
        value2html: function(b, c) {
            a(c)[this.options.escape ? "text" : "html"](a.trim(b))
        },
        html2value: function(b) {
            return a("<div>").html(b).text()
        },
        value2str: function(a) {
            return a
        },
        str2value: function(a) {
            return a
        },
        value2submit: function(a) {
            return a
        },
        value2input: function(a) {
            this.$input.val(a)
        },
        input2value: function() {
            return this.$input.val()
        },
        activate: function() {
            this.$input.is(":visible") && this.$input.focus()
        },
        clear: function() {
            this.$input.val(null)
        },
        escape: function(b) {
            return a("<div>").text(b).html()
        },
        autosubmit: function() {},
        destroy: function() {},
        setClass: function() {
            this.options.inputclass && this.$input.addClass(this.options.inputclass)
        },
        setAttr: function(a) {
            void 0 !== this.options[a] && null !== this.options[a] && this.$input.attr(a, this.options[a])
        },
        option: function(a, b) {
            this.options[a] = b
        }
    },
    b.defaults = {
        tpl: "",
        inputclass: null,
        escape: !0,
        scope: null,
        showbuttons: !0
    },
    a.extend(a.fn.editabletypes, {
        abstractinput: b
    })
}(window.jQuery),
function(a) {
    "use strict";
    var b = function() {};
    a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput),
    a.extend(b.prototype, {
        render: function() {
            var b = a.Deferred();
            return this.error = null,
            this.onSourceReady(function() {
                this.renderList(),
                b.resolve()
            }, function() {
                this.error = this.options.sourceError,
                b.resolve()
            }),
            b.promise()
        },
        html2value: function() {
            return null
        },
        value2html: function(b, c, d, e) {
            var f = a.Deferred()
              , g = function() {
                "function" == typeof d ? d.call(c, b, this.sourceData, e) : this.value2htmlFinal(b, c),
                f.resolve()
            };
            return null === b ? g.call(this) : this.onSourceReady(g, function() {
                f.resolve()
            }),
            f.promise()
        },
        onSourceReady: function(b, c) {
            var d;
            if (a.isFunction(this.options.source) ? (d = this.options.source.call(this.options.scope),
            this.sourceData = null) : d = this.options.source,
            this.options.sourceCache && a.isArray(this.sourceData))
                return b.call(this),
                void 0;
            try {
                d = a.fn.editableutils.tryParseJson(d, !1)
            } catch (e) {
                return c.call(this),
                void 0
            }
            if ("string" == typeof d) {
                if (this.options.sourceCache) {
                    var f, g = d;
                    if (a(document).data(g) || a(document).data(g, {}),
                    f = a(document).data(g),
                    f.loading === !1 && f.sourceData)
                        return this.sourceData = f.sourceData,
                        this.doPrepend(),
                        b.call(this),
                        void 0;
                    if (f.loading === !0)
                        return f.callbacks.push(a.proxy(function() {
                            this.sourceData = f.sourceData,
                            this.doPrepend(),
                            b.call(this)
                        }, this)),
                        f.err_callbacks.push(a.proxy(c, this)),
                        void 0;
                    f.loading = !0,
                    f.callbacks = [],
                    f.err_callbacks = []
                }
                var h = a.extend({
                    url: d,
                    type: "get",
                    cache: !1,
                    dataType: "json",
                    success: a.proxy(function(d) {
                        f && (f.loading = !1),
                        this.sourceData = this.makeArray(d),
                        a.isArray(this.sourceData) ? (f && (f.sourceData = this.sourceData,
                        a.each(f.callbacks, function() {
                            this.call()
                        })),
                        this.doPrepend(),
                        b.call(this)) : (c.call(this),
                        f && a.each(f.err_callbacks, function() {
                            this.call()
                        }))
                    }, this),
                    error: a.proxy(function() {
                        c.call(this),
                        f && (f.loading = !1,
                        a.each(f.err_callbacks, function() {
                            this.call()
                        }))
                    }, this)
                }, this.options.sourceOptions);
                a.ajax(h)
            } else
                this.sourceData = this.makeArray(d),
                a.isArray(this.sourceData) ? (this.doPrepend(),
                b.call(this)) : c.call(this)
        },
        doPrepend: function() {
            null !== this.options.prepend && void 0 !== this.options.prepend && (a.isArray(this.prependData) || (a.isFunction(this.options.prepend) && (this.options.prepend = this.options.prepend.call(this.options.scope)),
            this.options.prepend = a.fn.editableutils.tryParseJson(this.options.prepend, !0),
            "string" == typeof this.options.prepend && (this.options.prepend = {
                "": this.options.prepend
            }),
            this.prependData = this.makeArray(this.options.prepend)),
            a.isArray(this.prependData) && a.isArray(this.sourceData) && (this.sourceData = this.prependData.concat(this.sourceData)))
        },
        renderList: function() {},
        value2htmlFinal: function() {},
        makeArray: function(b) {
            var c, d, e, f, g = [];
            if (!b || "string" == typeof b)
                return null;
            if (a.isArray(b)) {
                f = function(a, b) {
                    return d = {
                        value: a,
                        text: b
                    },
                    c++ >= 2 ? !1 : void 0
                }
                ;
                for (var h = 0; h < b.length; h++)
                    e = b[h],
                    "object" == typeof e ? (c = 0,
                    a.each(e, f),
                    1 === c ? g.push(d) : c > 1 && (e.children && (e.children = this.makeArray(e.children)),
                    g.push(e))) : g.push({
                        value: e,
                        text: e
                    })
            } else
                a.each(b, function(a, b) {
                    g.push({
                        value: a,
                        text: b
                    })
                });
            return g
        },
        option: function(a, b) {
            this.options[a] = b,
            "source" === a && (this.sourceData = null),
            "prepend" === a && (this.prependData = null)
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {
        source: null,
        prepend: !1,
        sourceError: "Error when loading list",
        sourceCache: !0,
        sourceOptions: null
    }),
    a.fn.editabletypes.list = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("text", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput),
    a.extend(b.prototype, {
        render: function() {
            this.renderClear(),
            this.setClass(),
            this.setAttr("placeholder")
        },
        activate: function() {
            this.$input.is(":visible") && (this.$input.focus(),
            a.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length),
            this.toggleClear && this.toggleClear())
        },
        renderClear: function() {
            this.options.clear && (this.$clear = a('<span class="editable-clear-x"></span>'),
            this.$input.after(this.$clear).css("padding-right", 24).keyup(a.proxy(function(b) {
                if (!~a.inArray(b.keyCode, [40, 38, 9, 13, 27])) {
                    clearTimeout(this.t);
                    var c = this;
                    this.t = setTimeout(function() {
                        c.toggleClear(b)
                    }, 100)
                }
            }, this)).parent().css("position", "relative"),
            this.$clear.click(a.proxy(this.clear, this)))
        },
        postrender: function() {},
        toggleClear: function() {
            if (this.$clear) {
                var a = this.$input.val().length
                  , b = this.$clear.is(":visible");
                a && !b && this.$clear.show(),
                !a && b && this.$clear.hide()
            }
        },
        clear: function() {
            this.$clear.hide(),
            this.$input.val("").focus()
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {
        tpl: '<input type="text">',
        placeholder: null,
        clear: !0
    }),
    a.fn.editabletypes.text = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("textarea", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput),
    a.extend(b.prototype, {
        render: function() {
            this.setClass(),
            this.setAttr("placeholder"),
            this.setAttr("rows"),
            this.$input.keydown(function(b) {
                b.ctrlKey && 13 === b.which && a(this).closest("form").submit()
            })
        },
        activate: function() {
            a.fn.editabletypes.text.prototype.activate.call(this)
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {
        tpl: "<textarea></textarea>",
        inputclass: "input-large",
        placeholder: null,
        rows: 7
    }),
    a.fn.editabletypes.textarea = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("select", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.list),
    a.extend(b.prototype, {
        renderList: function() {
            this.$input.empty();
            var b = function(c, d) {
                var e;
                if (a.isArray(d))
                    for (var f = 0; f < d.length; f++)
                        e = {},
                        d[f].children ? (e.label = d[f].text,
                        c.append(b(a("<optgroup>", e), d[f].children))) : (e.value = d[f].value,
                        d[f].disabled && (e.disabled = !0),
                        c.append(a("<option>", e).text(d[f].text)));
                return c
            };
            b(this.$input, this.sourceData),
            this.setClass(),
            this.$input.on("keydown.editable", function(b) {
                13 === b.which && a(this).closest("form").submit()
            })
        },
        value2htmlFinal: function(b, c) {
            var d = ""
              , e = a.fn.editableutils.itemsByValue(b, this.sourceData);
            e.length && (d = e[0].text),
            a.fn.editabletypes.abstractinput.prototype.value2html.call(this, d, c)
        },
        autosubmit: function() {
            this.$input.off("keydown.editable").on("change.editable", function() {
                a(this).closest("form").submit()
            })
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.list.defaults, {
        tpl: "<select></select>"
    }),
    a.fn.editabletypes.select = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("checklist", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.list),
    a.extend(b.prototype, {
        renderList: function() {
            var b;
            if (this.$tpl.empty(),
            a.isArray(this.sourceData)) {
                for (var c = 0; c < this.sourceData.length; c++)
                    b = a("<label>").append(a("<input>", {
                        type: "checkbox",
                        value: this.sourceData[c].value
                    })).append(a("<span>").text(" " + this.sourceData[c].text)),
                    a("<div>").append(b).appendTo(this.$tpl);
                this.$input = this.$tpl.find('input[type="checkbox"]'),
                this.setClass()
            }
        },
        value2str: function(b) {
            return a.isArray(b) ? b.sort().join(a.trim(this.options.separator)) : ""
        },
        str2value: function(b) {
            var c, d = null;
            return "string" == typeof b && b.length ? (c = new RegExp("\\s*" + a.trim(this.options.separator) + "\\s*"),
            d = b.split(c)) : d = a.isArray(b) ? b : [b],
            d
        },
        value2input: function(b) {
            this.$input.prop("checked", !1),
            a.isArray(b) && b.length && this.$input.each(function(c, d) {
                var e = a(d);
                a.each(b, function(a, b) {
                    e.val() == b && e.prop("checked", !0)
                })
            })
        },
        input2value: function() {
            var b = [];
            return this.$input.filter(":checked").each(function(c, d) {
                b.push(a(d).val())
            }),
            b
        },
        value2htmlFinal: function(b, c) {
            var d = []
              , e = a.fn.editableutils.itemsByValue(b, this.sourceData)
              , f = this.options.escape;
            e.length ? (a.each(e, function(b, c) {
                var e = f ? a.fn.editableutils.escape(c.text) : c.text;
                d.push(e)
            }),
            a(c).html(d.join("<br>"))) : a(c).empty()
        },
        activate: function() {
            this.$input.first().focus()
        },
        autosubmit: function() {
            this.$input.on("keydown", function(b) {
                13 === b.which && a(this).closest("form").submit()
            })
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.list.defaults, {
        tpl: '<div class="editable-checklist"></div>',
        inputclass: null,
        separator: ","
    }),
    a.fn.editabletypes.checklist = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("password", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.text),
    a.extend(b.prototype, {
        value2html: function(b, c) {
            b ? a(c).text("[hidden]") : a(c).empty()
        },
        html2value: function() {
            return null
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {
        tpl: '<input type="password">'
    }),
    a.fn.editabletypes.password = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("email", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.text),
    b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {
        tpl: '<input type="email">'
    }),
    a.fn.editabletypes.email = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("url", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.text),
    b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {
        tpl: '<input type="url">'
    }),
    a.fn.editabletypes.url = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("tel", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.text),
    b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {
        tpl: '<input type="tel">'
    }),
    a.fn.editabletypes.tel = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("number", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.text),
    a.extend(b.prototype, {
        render: function() {
            b.superclass.render.call(this),
            this.setAttr("min"),
            this.setAttr("max"),
            this.setAttr("step")
        },
        postrender: function() {
            this.$clear && this.$clear.css({
                right: 24
            })
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {
        tpl: '<input type="number">',
        inputclass: "input-mini",
        min: null,
        max: null,
        step: null
    }),
    a.fn.editabletypes.number = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("range", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.number),
    a.extend(b.prototype, {
        render: function() {
            this.$input = this.$tpl.filter("input"),
            this.setClass(),
            this.setAttr("min"),
            this.setAttr("max"),
            this.setAttr("step"),
            this.$input.on("input", function() {
                a(this).siblings("output").text(a(this).val())
            })
        },
        activate: function() {
            this.$input.focus()
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.number.defaults, {
        tpl: '<input type="range"><output style="width: 30px; display: inline-block"></output>',
        inputclass: "input-medium"
    }),
    a.fn.editabletypes.range = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("time", a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput),
    a.extend(b.prototype, {
        render: function() {
            this.setClass()
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {
        tpl: '<input type="time">'
    }),
    a.fn.editabletypes.time = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(c) {
        if (this.init("select2", c, b.defaults),
        c.select2 = c.select2 || {},
        this.sourceData = null,
        c.placeholder && (c.select2.placeholder = c.placeholder),
        !c.select2.tags && c.source) {
            var d = c.source;
            a.isFunction(c.source) && (d = c.source.call(c.scope)),
            "string" == typeof d ? (c.select2.ajax = c.select2.ajax || {},
            c.select2.ajax.data || (c.select2.ajax.data = function(a) {
                return {
                    query: a
                }
            }
            ),
            c.select2.ajax.results || (c.select2.ajax.results = function(a) {
                return {
                    results: a
                }
            }
            ),
            c.select2.ajax.url = d) : (this.sourceData = this.convertSource(d),
            c.select2.data = this.sourceData)
        }
        if (this.options.select2 = a.extend({}, b.defaults.select2, c.select2),
        this.isMultiple = this.options.select2.tags || this.options.select2.multiple,
        this.isRemote = "ajax"in this.options.select2,
        this.idFunc = this.options.select2.id,
        "function" != typeof this.idFunc) {
            var e = this.idFunc || "id";
            this.idFunc = function(a) {
                return a[e]
            }
        }
        this.formatSelection = this.options.select2.formatSelection,
        "function" != typeof this.formatSelection && (this.formatSelection = function(a) {
            return a.text
        }
        )
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput),
    a.extend(b.prototype, {
        render: function() {
            this.setClass(),
            this.isRemote && this.$input.on("select2-loaded", a.proxy(function(a) {
                this.sourceData = a.items.results
            }, this)),
            this.isMultiple && this.$input.on("change", function() {
                a(this).closest("form").parent().triggerHandler("resize")
            })
        },
        value2html: function(c, d) {
            var e, f = "", g = this;
            this.options.select2.tags ? e = c : this.sourceData && (e = a.fn.editableutils.itemsByValue(c, this.sourceData, this.idFunc)),
            a.isArray(e) ? (f = [],
            a.each(e, function(a, b) {
                f.push(b && "object" == typeof b ? g.formatSelection(b) : b)
            })) : e && (f = g.formatSelection(e)),
            f = a.isArray(f) ? f.join(this.options.viewseparator) : f,
            b.superclass.value2html.call(this, f, d)
        },
        html2value: function(a) {
            return this.options.select2.tags ? this.str2value(a, this.options.viewseparator) : null
        },
        value2input: function(b) {
            if (a.isArray(b) && (b = b.join(this.getSeparator())),
            this.$input.data("select2") ? this.$input.val(b).trigger("change", !0) : (this.$input.val(b),
            this.$input.select2(this.options.select2)),
            this.isRemote && !this.isMultiple && !this.options.select2.initSelection) {
                var c = this.options.select2.id
                  , d = this.options.select2.formatSelection;
                if (!c && !d) {
                    var e = a(this.options.scope);
                    if (!e.data("editable").isEmpty) {
                        var f = {
                            id: b,
                            text: e.text()
                        };
                        this.$input.select2("data", f)
                    }
                }
            }
        },
        input2value: function() {
            return this.$input.select2("val")
        },
        str2value: function(b, c) {
            if ("string" != typeof b || !this.isMultiple)
                return b;
            c = c || this.getSeparator();
            var d, e, f;
            if (null === b || b.length < 1)
                return null;
            for (d = b.split(c),
            e = 0,
            f = d.length; f > e; e += 1)
                d[e] = a.trim(d[e]);
            return d
        },
        autosubmit: function() {
            this.$input.on("change", function(b, c) {
                c || a(this).closest("form").submit()
            })
        },
        getSeparator: function() {
            return this.options.select2.separator || a.fn.select2.defaults.separator
        },
        convertSource: function(b) {
            if (a.isArray(b) && b.length && void 0 !== b[0].value)
                for (var c = 0; c < b.length; c++)
                    void 0 !== b[c].value && (b[c].id = b[c].value,
                    delete b[c].value);
            return b
        },
        destroy: function() {
            this.$input.data("select2") && this.$input.select2("destroy")
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {
        tpl: '<input type="hidden">',
        select2: null,
        placeholder: null,
        source: null,
        viewseparator: ", "
    }),
    a.fn.editabletypes.select2 = b
}(window.jQuery),
function(a) {
    var b = function(b, c) {
        return this.$element = a(b),
        this.$element.is("input") ? (this.options = a.extend({}, a.fn.combodate.defaults, c, this.$element.data()),
        this.init(),
        void 0) : (a.error("Combodate should be applied to INPUT element"),
        void 0)
    };
    b.prototype = {
        constructor: b,
        init: function() {
            this.map = {
                day: ["D", "date"],
                month: ["M", "month"],
                year: ["Y", "year"],
                hour: ["[Hh]", "hours"],
                minute: ["m", "minutes"],
                second: ["s", "seconds"],
                ampm: ["[Aa]", ""]
            },
            this.$widget = a('<span class="combodate"></span>').html(this.getTemplate()),
            this.initCombos(),
            this.$widget.on("change", "select", a.proxy(function(b) {
                this.$element.val(this.getValue()).change(),
                this.options.smartDays && (a(b.target).is(".month") || a(b.target).is(".year")) && this.fillCombo("day")
            }, this)),
            this.$widget.find("select").css("width", "auto"),
            this.$element.hide().after(this.$widget),
            this.setValue(this.$element.val() || this.options.value)
        },
        getTemplate: function() {
            var b = this.options.template;
            return a.each(this.map, function(a, c) {
                c = c[0];
                var d = new RegExp(c + "+")
                  , e = c.length > 1 ? c.substring(1, 2) : c;
                b = b.replace(d, "{" + e + "}")
            }),
            b = b.replace(/ /g, "&nbsp;"),
            a.each(this.map, function(a, c) {
                c = c[0];
                var d = c.length > 1 ? c.substring(1, 2) : c;
                b = b.replace("{" + d + "}", '<select class="' + a + '"></select>')
            }),
            b
        },
        initCombos: function() {
            for (var a in this.map) {
                var b = this.$widget.find("." + a);
                this["$" + a] = b.length ? b : null,
                this.fillCombo(a)
            }
        },
        fillCombo: function(a) {
            var b = this["$" + a];
            if (b) {
                var c = "fill" + a.charAt(0).toUpperCase() + a.slice(1)
                  , d = this[c]()
                  , e = b.val();
                b.empty();
                for (var f = 0; f < d.length; f++)
                    b.append('<option value="' + d[f][0] + '">' + d[f][1] + "</option>");
                b.val(e)
            }
        },
        fillCommon: function(a) {
            var b, c = [];
            if ("name" === this.options.firstItem) {
                b = moment.relativeTime || moment.langData()._relativeTime;
                var d = "function" == typeof b[a] ? b[a](1, !0, a, !1) : b[a];
                d = d.split(" ").reverse()[0],
                c.push(["", d])
            } else
                "empty" === this.options.firstItem && c.push(["", ""]);
            return c
        },
        fillDay: function() {
            var a, b, c = this.fillCommon("d"), d = -1 !== this.options.template.indexOf("DD"), e = 31;
            if (this.options.smartDays && this.$month && this.$year) {
                var f = parseInt(this.$month.val(), 10)
                  , g = parseInt(this.$year.val(), 10);
                isNaN(f) || isNaN(g) || (e = moment([g, f]).daysInMonth())
            }
            for (b = 1; e >= b; b++)
                a = d ? this.leadZero(b) : b,
                c.push([b, a]);
            return c
        },
        fillMonth: function() {
            var a, b, c = this.fillCommon("M"), d = -1 !== this.options.template.indexOf("MMMM"), e = -1 !== this.options.template.indexOf("MMM"), f = -1 !== this.options.template.indexOf("MM");
            for (b = 0; 11 >= b; b++)
                a = d ? moment().date(1).month(b).format("MMMM") : e ? moment().date(1).month(b).format("MMM") : f ? this.leadZero(b + 1) : b + 1,
                c.push([b, a]);
            return c
        },
        fillYear: function() {
            var a, b, c = [], d = -1 !== this.options.template.indexOf("YYYY");
            for (b = this.options.maxYear; b >= this.options.minYear; b--)
                a = d ? b : (b + "").substring(2),
                c[this.options.yearDescending ? "push" : "unshift"]([b, a]);
            return c = this.fillCommon("y").concat(c)
        },
        fillHour: function() {
            var a, b, c = this.fillCommon("h"), d = -1 !== this.options.template.indexOf("h"), e = (-1 !== this.options.template.indexOf("H"),
            -1 !== this.options.template.toLowerCase().indexOf("hh")), f = d ? 1 : 0, g = d ? 12 : 23;
            for (b = f; g >= b; b++)
                a = e ? this.leadZero(b) : b,
                c.push([b, a]);
            return c
        },
        fillMinute: function() {
            var a, b, c = this.fillCommon("m"), d = -1 !== this.options.template.indexOf("mm");
            for (b = 0; 59 >= b; b += this.options.minuteStep)
                a = d ? this.leadZero(b) : b,
                c.push([b, a]);
            return c
        },
        fillSecond: function() {
            var a, b, c = this.fillCommon("s"), d = -1 !== this.options.template.indexOf("ss");
            for (b = 0; 59 >= b; b += this.options.secondStep)
                a = d ? this.leadZero(b) : b,
                c.push([b, a]);
            return c
        },
        fillAmpm: function() {
            var a = -1 !== this.options.template.indexOf("a")
              , b = (-1 !== this.options.template.indexOf("A"),
            [["am", a ? "am" : "AM"], ["pm", a ? "pm" : "PM"]]);
            return b
        },
        getValue: function(b) {
            var c, d = {}, e = this, f = !1;
            return a.each(this.map, function(a) {
                if ("ampm" !== a) {
                    var b = "day" === a ? 1 : 0;
                    return d[a] = e["$" + a] ? parseInt(e["$" + a].val(), 10) : b,
                    isNaN(d[a]) ? (f = !0,
                    !1) : void 0
                }
            }),
            f ? "" : (this.$ampm && (d.hour = 12 === d.hour ? "am" === this.$ampm.val() ? 0 : 12 : "am" === this.$ampm.val() ? d.hour : d.hour + 12),
            c = moment([d.year, d.month, d.day, d.hour, d.minute, d.second]),
            this.highlight(c),
            b = void 0 === b ? this.options.format : b,
            null === b ? c.isValid() ? c : null : c.isValid() ? c.format(b) : "")
        },
        setValue: function(b) {
            function c(b, c) {
                var d = {};
                return b.children("option").each(function(b, e) {
                    var f, g = a(e).attr("value");
                    "" !== g && (f = Math.abs(g - c),
                    ("undefined" == typeof d.distance || f < d.distance) && (d = {
                        value: g,
                        distance: f
                    }))
                }),
                d.value
            }
            if (b) {
                var d = "string" == typeof b ? moment(b, this.options.format) : moment(b)
                  , e = this
                  , f = {};
                d.isValid() && (a.each(this.map, function(a, b) {
                    "ampm" !== a && (f[a] = d[b[1]]())
                }),
                this.$ampm && (f.hour >= 12 ? (f.ampm = "pm",
                f.hour > 12 && (f.hour -= 12)) : (f.ampm = "am",
                0 === f.hour && (f.hour = 12))),
                a.each(f, function(a, b) {
                    e["$" + a] && ("minute" === a && e.options.minuteStep > 1 && e.options.roundTime && (b = c(e["$" + a], b)),
                    "second" === a && e.options.secondStep > 1 && e.options.roundTime && (b = c(e["$" + a], b)),
                    e["$" + a].val(b))
                }),
                this.options.smartDays && this.fillCombo("day"),
                this.$element.val(d.format(this.options.format)).change())
            }
        },
        highlight: function(a) {
            a.isValid() ? this.options.errorClass ? this.$widget.removeClass(this.options.errorClass) : this.$widget.find("select").css("border-color", this.borderColor) : this.options.errorClass ? this.$widget.addClass(this.options.errorClass) : (this.borderColor || (this.borderColor = this.$widget.find("select").css("border-color")),
            this.$widget.find("select").css("border-color", "red"))
        },
        leadZero: function(a) {
            return 9 >= a ? "0" + a : a
        },
        destroy: function() {
            this.$widget.remove(),
            this.$element.removeData("combodate").show()
        }
    },
    a.fn.combodate = function(c) {
        var d, e = Array.apply(null, arguments);
        return e.shift(),
        "getValue" === c && this.length && (d = this.eq(0).data("combodate")) ? d.getValue.apply(d, e) : this.each(function() {
            var d = a(this)
              , f = d.data("combodate")
              , g = "object" == typeof c && c;
            f || d.data("combodate", f = new b(this,g)),
            "string" == typeof c && "function" == typeof f[c] && f[c].apply(f, e)
        })
    }
    ,
    a.fn.combodate.defaults = {
        format: "DD-MM-YYYY HH:mm",
        template: "D / MMM / YYYY   H : mm",
        value: null,
        minYear: 1970,
        maxYear: 2015,
        yearDescending: !0,
        minuteStep: 5,
        secondStep: 1,
        firstItem: "empty",
        errorClass: null,
        roundTime: !0,
        smartDays: !1
    }
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(c) {
        this.init("combodate", c, b.defaults),
        this.options.viewformat || (this.options.viewformat = this.options.format),
        c.combodate = a.fn.editableutils.tryParseJson(c.combodate, !0),
        this.options.combodate = a.extend({}, b.defaults.combodate, c.combodate, {
            format: this.options.format,
            template: this.options.template
        })
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput),
    a.extend(b.prototype, {
        render: function() {
            this.$input.combodate(this.options.combodate),
            "bs3" === a.fn.editableform.engine && this.$input.siblings().find("select").addClass("form-control"),
            this.options.inputclass && this.$input.siblings().find("select").addClass(this.options.inputclass)
        },
        value2html: function(a, c) {
            var d = a ? a.format(this.options.viewformat) : "";
            b.superclass.value2html.call(this, d, c)
        },
        html2value: function(a) {
            return a ? moment(a, this.options.viewformat) : null
        },
        value2str: function(a) {
            return a ? a.format(this.options.format) : ""
        },
        str2value: function(a) {
            return a ? moment(a, this.options.format) : null
        },
        value2submit: function(a) {
            return this.value2str(a)
        },
        value2input: function(a) {
            this.$input.combodate("setValue", a)
        },
        input2value: function() {
            return this.$input.combodate("getValue", null)
        },
        activate: function() {
            this.$input.siblings(".combodate").find("select").eq(0).focus()
        },
        autosubmit: function() {}
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {
        tpl: '<input type="text">',
        inputclass: null,
        format: "YYYY-MM-DD",
        viewformat: null,
        template: "D / MMM / YYYY",
        combodate: null
    }),
    a.fn.editabletypes.combodate = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = a.fn.editableform.Constructor.prototype.initInput;
    a.extend(a.fn.editableform.Constructor.prototype, {
        initTemplate: function() {
            this.$form = a(a.fn.editableform.template),
            this.$form.find(".control-group").addClass("form-group"),
            this.$form.find(".editable-error-block").addClass("help-block")
        },
        initInput: function() {
            b.apply(this);
            var c = null === this.input.options.inputclass || this.input.options.inputclass === !1
              , d = "input-sm"
              , e = "text,select,textarea,password,email,url,tel,number,range,time,typeaheadjs".split(",");
            ~a.inArray(this.input.type, e) && (this.input.$input.addClass("form-control"),
            c && (this.input.options.inputclass = d,
            this.input.$input.addClass(d)));
            for (var f = this.$form.find(".editable-buttons"), g = c ? [d] : this.input.options.inputclass.split(" "), h = 0; h < g.length; h++)
                "input-lg" === g[h].toLowerCase() && f.find("button").removeClass("btn-sm").addClass("btn-lg")
        }
    }),
    a.fn.editableform.buttons = '<button type="submit" class="btn btn-primary btn-sm editable-submit"><i class="glyphicon glyphicon-ok"></i></button><button type="button" class="btn btn-default btn-sm editable-cancel"><i class="glyphicon glyphicon-remove"></i></button>',
    a.fn.editableform.errorGroupClass = "has-error",
    a.fn.editableform.errorBlockClass = null,
    a.fn.editableform.engine = "bs3"
}(window.jQuery),
function(a) {
    "use strict";
    a.extend(a.fn.editableContainer.Popup.prototype, {
        containerName: "popover",
        containerDataName: "bs.popover",
        innerCss: ".popover-content",
        defaults: a.fn.popover.Constructor.DEFAULTS,
        initContainer: function() {
            a.extend(this.containerOptions, {
                trigger: "manual",
                selector: !1,
                content: " ",
                template: this.defaults.template
            });
            var b;
            this.$element.data("template") && (b = this.$element.data("template"),
            this.$element.removeData("template")),
            this.call(this.containerOptions),
            b && this.$element.data("template", b)
        },
        innerShow: function() {
            this.call("show")
        },
        innerHide: function() {
            this.call("hide")
        },
        innerDestroy: function() {
            this.call("destroy")
        },
        setContainerOption: function(a, b) {
            this.container().options[a] = b
        },
        setPosition: function() {
            !function() {
                var a = this.tip()
                  , b = "function" == typeof this.options.placement ? this.options.placement.call(this, a[0], this.$element[0]) : this.options.placement
                  , c = /\s?auto?\s?/i
                  , d = c.test(b);
                d && (b = b.replace(c, "") || "top");
                var e = this.getPosition()
                  , f = a[0].offsetWidth
                  , g = a[0].offsetHeight;
                if (d) {
                    var h = this.$element.parent()
                      , i = b
                      , j = document.documentElement.scrollTop || document.body.scrollTop
                      , k = "body" == this.options.container ? window.innerWidth : h.outerWidth()
                      , l = "body" == this.options.container ? window.innerHeight : h.outerHeight()
                      , m = "body" == this.options.container ? 0 : h.offset().left;
                    b = "bottom" == b && e.top + e.height + g - j > l ? "top" : "top" == b && e.top - j - g < 0 ? "bottom" : "right" == b && e.right + f > k ? "left" : "left" == b && e.left - f < m ? "right" : b,
                    a.removeClass(i).addClass(b)
                }
                var n = this.getCalculatedOffset(b, e, f, g);
                this.applyPlacement(n, b)
            }
            .call(this.container())
        }
    })
}(window.jQuery),
function(a) {
    function b() {
        return new Date(Date.UTC.apply(Date, arguments))
    }
    function c(b, c) {
        var d, e = a(b).data(), f = {}, g = new RegExp("^" + c.toLowerCase() + "([A-Z])"), c = new RegExp("^" + c.toLowerCase());
        for (var h in e)
            c.test(h) && (d = h.replace(g, function(a, b) {
                return b.toLowerCase()
            }),
            f[d] = e[h]);
        return f
    }
    function d(b) {
        var c = {};
        if (k[b] || (b = b.split("-")[0],
        k[b])) {
            var d = k[b];
            return a.each(j, function(a, b) {
                b in d && (c[b] = d[b])
            }),
            c
        }
    }
    var e = function(b, c) {
        this._process_options(c),
        this.element = a(b),
        this.isInline = !1,
        this.isInput = this.element.is("input"),
        this.component = this.element.is(".date") ? this.element.find(".add-on, .btn") : !1,
        this.hasInput = this.component && this.element.find("input").length,
        this.component && 0 === this.component.length && (this.component = !1),
        this.picker = a(l.template),
        this._buildEvents(),
        this._attachEvents(),
        this.isInline ? this.picker.addClass("datepicker-inline").appendTo(this.element) : this.picker.addClass("datepicker-dropdown dropdown-menu"),
        this.o.rtl && (this.picker.addClass("datepicker-rtl"),
        this.picker.find(".prev i, .next i").toggleClass("icon-arrow-left icon-arrow-right")),
        this.viewMode = this.o.startView,
        this.o.calendarWeeks && this.picker.find("tfoot th.today").attr("colspan", function(a, b) {
            return parseInt(b) + 1
        }),
        this._allow_update = !1,
        this.setStartDate(this.o.startDate),
        this.setEndDate(this.o.endDate),
        this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),
        this.fillDow(),
        this.fillMonths(),
        this._allow_update = !0,
        this.update(),
        this.showMode(),
        this.isInline && this.show()
    };
    e.prototype = {
        constructor: e,
        _process_options: function(b) {
            this._o = a.extend({}, this._o, b);
            var c = this.o = a.extend({}, this._o)
              , d = c.language;
            switch (k[d] || (d = d.split("-")[0],
            k[d] || (d = i.language)),
            c.language = d,
            c.startView) {
            case 2:
            case "decade":
                c.startView = 2;
                break;
            case 1:
            case "year":
                c.startView = 1;
                break;
            default:
                c.startView = 0
            }
            switch (c.minViewMode) {
            case 1:
            case "months":
                c.minViewMode = 1;
                break;
            case 2:
            case "years":
                c.minViewMode = 2;
                break;
            default:
                c.minViewMode = 0
            }
            c.startView = Math.max(c.startView, c.minViewMode),
            c.weekStart %= 7,
            c.weekEnd = (c.weekStart + 6) % 7;
            var e = l.parseFormat(c.format);
            c.startDate !== -1 / 0 && (c.startDate = l.parseDate(c.startDate, e, c.language)),
            1 / 0 !== c.endDate && (c.endDate = l.parseDate(c.endDate, e, c.language)),
            c.daysOfWeekDisabled = c.daysOfWeekDisabled || [],
            a.isArray(c.daysOfWeekDisabled) || (c.daysOfWeekDisabled = c.daysOfWeekDisabled.split(/[,\s]*/)),
            c.daysOfWeekDisabled = a.map(c.daysOfWeekDisabled, function(a) {
                return parseInt(a, 10)
            })
        },
        _events: [],
        _secondaryEvents: [],
        _applyEvents: function(a) {
            for (var b, c, d = 0; d < a.length; d++)
                b = a[d][0],
                c = a[d][1],
                b.on(c)
        },
        _unapplyEvents: function(a) {
            for (var b, c, d = 0; d < a.length; d++)
                b = a[d][0],
                c = a[d][1],
                b.off(c)
        },
        _buildEvents: function() {
            this.isInput ? this._events = [[this.element, {
                focus: a.proxy(this.show, this),
                keyup: a.proxy(this.update, this),
                keydown: a.proxy(this.keydown, this)
            }]] : this.component && this.hasInput ? this._events = [[this.element.find("input"), {
                focus: a.proxy(this.show, this),
                keyup: a.proxy(this.update, this),
                keydown: a.proxy(this.keydown, this)
            }], [this.component, {
                click: a.proxy(this.show, this)
            }]] : this.element.is("div") ? this.isInline = !0 : this._events = [[this.element, {
                click: a.proxy(this.show, this)
            }]],
            this._secondaryEvents = [[this.picker, {
                click: a.proxy(this.click, this)
            }], [a(window), {
                resize: a.proxy(this.place, this)
            }], [a(document), {
                mousedown: a.proxy(function(a) {
                    this.element.is(a.target) || this.element.find(a.target).size() || this.picker.is(a.target) || this.picker.find(a.target).size() || this.hide()
                }, this)
            }]]
        },
        _attachEvents: function() {
            this._detachEvents(),
            this._applyEvents(this._events)
        },
        _detachEvents: function() {
            this._unapplyEvents(this._events)
        },
        _attachSecondaryEvents: function() {
            this._detachSecondaryEvents(),
            this._applyEvents(this._secondaryEvents)
        },
        _detachSecondaryEvents: function() {
            this._unapplyEvents(this._secondaryEvents)
        },
        _trigger: function(b, c) {
            var d = c || this.date
              , e = new Date(d.getTime() + 6e4 * d.getTimezoneOffset());
            this.element.trigger({
                type: b,
                date: e,
                format: a.proxy(function(a) {
                    var b = a || this.o.format;
                    return l.formatDate(d, b, this.o.language)
                }, this)
            })
        },
        show: function(a) {
            this.isInline || this.picker.appendTo("body"),
            this.picker.show(),
            this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(),
            this.place(),
            this._attachSecondaryEvents(),
            a && a.preventDefault(),
            this._trigger("show")
        },
        hide: function() {
            this.isInline || this.picker.is(":visible") && (this.picker.hide().detach(),
            this._detachSecondaryEvents(),
            this.viewMode = this.o.startView,
            this.showMode(),
            this.o.forceParse && (this.isInput && this.element.val() || this.hasInput && this.element.find("input").val()) && this.setValue(),
            this._trigger("hide"))
        },
        remove: function() {
            this.hide(),
            this._detachEvents(),
            this._detachSecondaryEvents(),
            this.picker.remove(),
            delete this.element.data().datepicker,
            this.isInput || delete this.element.data().date
        },
        getDate: function() {
            var a = this.getUTCDate();
            return new Date(a.getTime() + 6e4 * a.getTimezoneOffset())
        },
        getUTCDate: function() {
            return this.date
        },
        setDate: function(a) {
            this.setUTCDate(new Date(a.getTime() - 6e4 * a.getTimezoneOffset()))
        },
        setUTCDate: function(a) {
            this.date = a,
            this.setValue()
        },
        setValue: function() {
            var a = this.getFormattedDate();
            this.isInput ? this.element.val(a) : this.component && this.element.find("input").val(a)
        },
        getFormattedDate: function(a) {
            return void 0 === a && (a = this.o.format),
            l.formatDate(this.date, a, this.o.language)
        },
        setStartDate: function(a) {
            this._process_options({
                startDate: a
            }),
            this.update(),
            this.updateNavArrows()
        },
        setEndDate: function(a) {
            this._process_options({
                endDate: a
            }),
            this.update(),
            this.updateNavArrows()
        },
        setDaysOfWeekDisabled: function(a) {
            this._process_options({
                daysOfWeekDisabled: a
            }),
            this.update(),
            this.updateNavArrows()
        },
        place: function() {
            if (!this.isInline) {
                var b = parseInt(this.element.parents().filter(function() {
                    return "auto" != a(this).css("z-index")
                }).first().css("z-index")) + 10
                  , c = this.component ? this.component.parent().offset() : this.element.offset()
                  , d = this.component ? this.component.outerHeight(!0) : this.element.outerHeight(!0);
                this.picker.css({
                    top: c.top + d,
                    left: c.left,
                    zIndex: b
                })
            }
        },
        _allow_update: !0,
        update: function() {
            if (this._allow_update) {
                var a, b = !1;
                arguments && arguments.length && ("string" == typeof arguments[0] || arguments[0]instanceof Date) ? (a = arguments[0],
                b = !0) : (a = this.isInput ? this.element.val() : this.element.data("date") || this.element.find("input").val(),
                delete this.element.data().date),
                this.date = l.parseDate(a, this.o.format, this.o.language),
                b && this.setValue(),
                this.viewDate = this.date < this.o.startDate ? new Date(this.o.startDate) : this.date > this.o.endDate ? new Date(this.o.endDate) : new Date(this.date),
                this.fill()
            }
        },
        fillDow: function() {
            var a = this.o.weekStart
              , b = "<tr>";
            if (this.o.calendarWeeks) {
                var c = '<th class="cw">&nbsp;</th>';
                b += c,
                this.picker.find(".datepicker-days thead tr:first-child").prepend(c)
            }
            for (; a < this.o.weekStart + 7; )
                b += '<th class="dow">' + k[this.o.language].daysMin[a++ % 7] + "</th>";
            b += "</tr>",
            this.picker.find(".datepicker-days thead").append(b)
        },
        fillMonths: function() {
            for (var a = "", b = 0; 12 > b; )
                a += '<span class="month">' + k[this.o.language].monthsShort[b++] + "</span>";
            this.picker.find(".datepicker-months td").html(a)
        },
        setRange: function(b) {
            b && b.length ? this.range = a.map(b, function(a) {
                return a.valueOf()
            }) : delete this.range,
            this.fill()
        },
        getClassNames: function(b) {
            var c = []
              , d = this.viewDate.getUTCFullYear()
              , e = this.viewDate.getUTCMonth()
              , f = this.date.valueOf()
              , g = new Date;
            return b.getUTCFullYear() < d || b.getUTCFullYear() == d && b.getUTCMonth() < e ? c.push("old") : (b.getUTCFullYear() > d || b.getUTCFullYear() == d && b.getUTCMonth() > e) && c.push("new"),
            this.o.todayHighlight && b.getUTCFullYear() == g.getFullYear() && b.getUTCMonth() == g.getMonth() && b.getUTCDate() == g.getDate() && c.push("today"),
            f && b.valueOf() == f && c.push("active"),
            (b.valueOf() < this.o.startDate || b.valueOf() > this.o.endDate || -1 !== a.inArray(b.getUTCDay(), this.o.daysOfWeekDisabled)) && c.push("disabled"),
            this.range && (b > this.range[0] && b < this.range[this.range.length - 1] && c.push("range"),
            -1 != a.inArray(b.valueOf(), this.range) && c.push("selected")),
            c
        },
        fill: function() {
            var c, d = new Date(this.viewDate), e = d.getUTCFullYear(), f = d.getUTCMonth(), g = this.o.startDate !== -1 / 0 ? this.o.startDate.getUTCFullYear() : -1 / 0, h = this.o.startDate !== -1 / 0 ? this.o.startDate.getUTCMonth() : -1 / 0, i = 1 / 0 !== this.o.endDate ? this.o.endDate.getUTCFullYear() : 1 / 0, j = 1 / 0 !== this.o.endDate ? this.o.endDate.getUTCMonth() : 1 / 0;
            this.date && this.date.valueOf(),
            this.picker.find(".datepicker-days thead th.datepicker-switch").text(k[this.o.language].months[f] + " " + e),
            this.picker.find("tfoot th.today").text(k[this.o.language].today).toggle(this.o.todayBtn !== !1),
            this.picker.find("tfoot th.clear").text(k[this.o.language].clear).toggle(this.o.clearBtn !== !1),
            this.updateNavArrows(),
            this.fillMonths();
            var m = b(e, f - 1, 28, 0, 0, 0, 0)
              , n = l.getDaysInMonth(m.getUTCFullYear(), m.getUTCMonth());
            m.setUTCDate(n),
            m.setUTCDate(n - (m.getUTCDay() - this.o.weekStart + 7) % 7);
            var o = new Date(m);
            o.setUTCDate(o.getUTCDate() + 42),
            o = o.valueOf();
            for (var p, q = []; m.valueOf() < o; ) {
                if (m.getUTCDay() == this.o.weekStart && (q.push("<tr>"),
                this.o.calendarWeeks)) {
                    var r = new Date(+m + 864e5 * ((this.o.weekStart - m.getUTCDay() - 7) % 7))
                      , s = new Date(+r + 864e5 * ((11 - r.getUTCDay()) % 7))
                      , t = new Date(+(t = b(s.getUTCFullYear(), 0, 1)) + 864e5 * ((11 - t.getUTCDay()) % 7))
                      , u = (s - t) / 864e5 / 7 + 1;
                    q.push('<td class="cw">' + u + "</td>")
                }
                p = this.getClassNames(m),
                p.push("day");
                var v = this.o.beforeShowDay(m);
                void 0 === v ? v = {} : "boolean" == typeof v ? v = {
                    enabled: v
                } : "string" == typeof v && (v = {
                    classes: v
                }),
                v.enabled === !1 && p.push("disabled"),
                v.classes && (p = p.concat(v.classes.split(/\s+/))),
                v.tooltip && (c = v.tooltip),
                p = a.unique(p),
                q.push('<td class="' + p.join(" ") + '"' + (c ? ' title="' + c + '"' : "") + ">" + m.getUTCDate() + "</td>"),
                m.getUTCDay() == this.o.weekEnd && q.push("</tr>"),
                m.setUTCDate(m.getUTCDate() + 1)
            }
            this.picker.find(".datepicker-days tbody").empty().append(q.join(""));
            var w = this.date && this.date.getUTCFullYear()
              , x = this.picker.find(".datepicker-months").find("th:eq(1)").text(e).end().find("span").removeClass("active");
            w && w == e && x.eq(this.date.getUTCMonth()).addClass("active"),
            (g > e || e > i) && x.addClass("disabled"),
            e == g && x.slice(0, h).addClass("disabled"),
            e == i && x.slice(j + 1).addClass("disabled"),
            q = "",
            e = 10 * parseInt(e / 10, 10);
            var y = this.picker.find(".datepicker-years").find("th:eq(1)").text(e + "-" + (e + 9)).end().find("td");
            e -= 1;
            for (var z = -1; 11 > z; z++)
                q += '<span class="year' + (-1 == z ? " old" : 10 == z ? " new" : "") + (w == e ? " active" : "") + (g > e || e > i ? " disabled" : "") + '">' + e + "</span>",
                e += 1;
            y.html(q)
        },
        updateNavArrows: function() {
            if (this._allow_update) {
                var a = new Date(this.viewDate)
                  , b = a.getUTCFullYear()
                  , c = a.getUTCMonth();
                switch (this.viewMode) {
                case 0:
                    this.o.startDate !== -1 / 0 && b <= this.o.startDate.getUTCFullYear() && c <= this.o.startDate.getUTCMonth() ? this.picker.find(".prev").css({
                        visibility: "hidden"
                    }) : this.picker.find(".prev").css({
                        visibility: "visible"
                    }),
                    1 / 0 !== this.o.endDate && b >= this.o.endDate.getUTCFullYear() && c >= this.o.endDate.getUTCMonth() ? this.picker.find(".next").css({
                        visibility: "hidden"
                    }) : this.picker.find(".next").css({
                        visibility: "visible"
                    });
                    break;
                case 1:
                case 2:
                    this.o.startDate !== -1 / 0 && b <= this.o.startDate.getUTCFullYear() ? this.picker.find(".prev").css({
                        visibility: "hidden"
                    }) : this.picker.find(".prev").css({
                        visibility: "visible"
                    }),
                    1 / 0 !== this.o.endDate && b >= this.o.endDate.getUTCFullYear() ? this.picker.find(".next").css({
                        visibility: "hidden"
                    }) : this.picker.find(".next").css({
                        visibility: "visible"
                    })
                }
            }
        },
        click: function(c) {
            c.preventDefault();
            var d = a(c.target).closest("span, td, th");
            if (1 == d.length)
                switch (d[0].nodeName.toLowerCase()) {
                case "th":
                    switch (d[0].className) {
                    case "datepicker-switch":
                        this.showMode(1);
                        break;
                    case "prev":
                    case "next":
                        var e = l.modes[this.viewMode].navStep * ("prev" == d[0].className ? -1 : 1);
                        switch (this.viewMode) {
                        case 0:
                            this.viewDate = this.moveMonth(this.viewDate, e);
                            break;
                        case 1:
                        case 2:
                            this.viewDate = this.moveYear(this.viewDate, e)
                        }
                        this.fill();
                        break;
                    case "today":
                        var f = new Date;
                        f = b(f.getFullYear(), f.getMonth(), f.getDate(), 0, 0, 0),
                        this.showMode(-2);
                        var g = "linked" == this.o.todayBtn ? null : "view";
                        this._setDate(f, g);
                        break;
                    case "clear":
                        var h;
                        this.isInput ? h = this.element : this.component && (h = this.element.find("input")),
                        h && h.val("").change(),
                        this._trigger("changeDate"),
                        this.update(),
                        this.o.autoclose && this.hide()
                    }
                    break;
                case "span":
                    if (!d.is(".disabled")) {
                        if (this.viewDate.setUTCDate(1),
                        d.is(".month")) {
                            var i = 1
                              , j = d.parent().find("span").index(d)
                              , k = this.viewDate.getUTCFullYear();
                            this.viewDate.setUTCMonth(j),
                            this._trigger("changeMonth", this.viewDate),
                            1 === this.o.minViewMode && this._setDate(b(k, j, i, 0, 0, 0, 0))
                        } else {
                            var k = parseInt(d.text(), 10) || 0
                              , i = 1
                              , j = 0;
                            this.viewDate.setUTCFullYear(k),
                            this._trigger("changeYear", this.viewDate),
                            2 === this.o.minViewMode && this._setDate(b(k, j, i, 0, 0, 0, 0))
                        }
                        this.showMode(-1),
                        this.fill()
                    }
                    break;
                case "td":
                    if (d.is(".day") && !d.is(".disabled")) {
                        var i = parseInt(d.text(), 10) || 1
                          , k = this.viewDate.getUTCFullYear()
                          , j = this.viewDate.getUTCMonth();
                        d.is(".old") ? 0 === j ? (j = 11,
                        k -= 1) : j -= 1 : d.is(".new") && (11 == j ? (j = 0,
                        k += 1) : j += 1),
                        this._setDate(b(k, j, i, 0, 0, 0, 0))
                    }
                }
        },
        _setDate: function(a, b) {
            b && "date" != b || (this.date = new Date(a)),
            b && "view" != b || (this.viewDate = new Date(a)),
            this.fill(),
            this.setValue(),
            this._trigger("changeDate");
            var c;
            this.isInput ? c = this.element : this.component && (c = this.element.find("input")),
            c && (c.change(),
            !this.o.autoclose || b && "date" != b || this.hide())
        },
        moveMonth: function(a, b) {
            if (!b)
                return a;
            var c, d, e = new Date(a.valueOf()), f = e.getUTCDate(), g = e.getUTCMonth(), h = Math.abs(b);
            if (b = b > 0 ? 1 : -1,
            1 == h)
                d = -1 == b ? function() {
                    return e.getUTCMonth() == g
                }
                : function() {
                    return e.getUTCMonth() != c
                }
                ,
                c = g + b,
                e.setUTCMonth(c),
                (0 > c || c > 11) && (c = (c + 12) % 12);
            else {
                for (var i = 0; h > i; i++)
                    e = this.moveMonth(e, b);
                c = e.getUTCMonth(),
                e.setUTCDate(f),
                d = function() {
                    return c != e.getUTCMonth()
                }
            }
            for (; d(); )
                e.setUTCDate(--f),
                e.setUTCMonth(c);
            return e
        },
        moveYear: function(a, b) {
            return this.moveMonth(a, 12 * b)
        },
        dateWithinRange: function(a) {
            return a >= this.o.startDate && a <= this.o.endDate
        },
        keydown: function(a) {
            if (this.picker.is(":not(:visible)"))
                return 27 == a.keyCode && this.show(),
                void 0;
            var b, c, d, e = !1;
            switch (a.keyCode) {
            case 27:
                this.hide(),
                a.preventDefault();
                break;
            case 37:
            case 39:
                if (!this.o.keyboardNavigation)
                    break;
                b = 37 == a.keyCode ? -1 : 1,
                a.ctrlKey ? (c = this.moveYear(this.date, b),
                d = this.moveYear(this.viewDate, b)) : a.shiftKey ? (c = this.moveMonth(this.date, b),
                d = this.moveMonth(this.viewDate, b)) : (c = new Date(this.date),
                c.setUTCDate(this.date.getUTCDate() + b),
                d = new Date(this.viewDate),
                d.setUTCDate(this.viewDate.getUTCDate() + b)),
                this.dateWithinRange(c) && (this.date = c,
                this.viewDate = d,
                this.setValue(),
                this.update(),
                a.preventDefault(),
                e = !0);
                break;
            case 38:
            case 40:
                if (!this.o.keyboardNavigation)
                    break;
                b = 38 == a.keyCode ? -1 : 1,
                a.ctrlKey ? (c = this.moveYear(this.date, b),
                d = this.moveYear(this.viewDate, b)) : a.shiftKey ? (c = this.moveMonth(this.date, b),
                d = this.moveMonth(this.viewDate, b)) : (c = new Date(this.date),
                c.setUTCDate(this.date.getUTCDate() + 7 * b),
                d = new Date(this.viewDate),
                d.setUTCDate(this.viewDate.getUTCDate() + 7 * b)),
                this.dateWithinRange(c) && (this.date = c,
                this.viewDate = d,
                this.setValue(),
                this.update(),
                a.preventDefault(),
                e = !0);
                break;
            case 13:
                this.hide(),
                a.preventDefault();
                break;
            case 9:
                this.hide()
            }
            if (e) {
                this._trigger("changeDate");
                var f;
                this.isInput ? f = this.element : this.component && (f = this.element.find("input")),
                f && f.change()
            }
        },
        showMode: function(a) {
            a && (this.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + a))),
            this.picker.find(">div").hide().filter(".datepicker-" + l.modes[this.viewMode].clsName).css("display", "block"),
            this.updateNavArrows()
        }
    };
    var f = function(b, c) {
        this.element = a(b),
        this.inputs = a.map(c.inputs, function(a) {
            return a.jquery ? a[0] : a
        }),
        delete c.inputs,
        a(this.inputs).datepicker(c).bind("changeDate", a.proxy(this.dateUpdated, this)),
        this.pickers = a.map(this.inputs, function(b) {
            return a(b).data("datepicker")
        }),
        this.updateDates()
    };
    f.prototype = {
        updateDates: function() {
            this.dates = a.map(this.pickers, function(a) {
                return a.date
            }),
            this.updateRanges()
        },
        updateRanges: function() {
            var b = a.map(this.dates, function(a) {
                return a.valueOf()
            });
            a.each(this.pickers, function(a, c) {
                c.setRange(b)
            })
        },
        dateUpdated: function(b) {
            var c = a(b.target).data("datepicker")
              , d = c.getUTCDate()
              , e = a.inArray(b.target, this.inputs)
              , f = this.inputs.length;
            if (-1 != e) {
                if (d < this.dates[e])
                    for (; e >= 0 && d < this.dates[e]; )
                        this.pickers[e--].setUTCDate(d);
                else if (d > this.dates[e])
                    for (; f > e && d > this.dates[e]; )
                        this.pickers[e++].setUTCDate(d);
                this.updateDates()
            }
        },
        remove: function() {
            a.map(this.pickers, function(a) {
                a.remove()
            }),
            delete this.element.data().datepicker
        }
    };
    var g = a.fn.datepicker
      , h = a.fn.datepicker = function(b) {
        var g = Array.apply(null, arguments);
        g.shift();
        var h;
        return this.each(function() {
            var j = a(this)
              , k = j.data("datepicker")
              , l = "object" == typeof b && b;
            if (!k) {
                var m = c(this, "date")
                  , n = a.extend({}, i, m, l)
                  , o = d(n.language)
                  , p = a.extend({}, i, o, m, l);
                if (j.is(".input-daterange") || p.inputs) {
                    var q = {
                        inputs: p.inputs || j.find("input").toArray()
                    };
                    j.data("datepicker", k = new f(this,a.extend(p, q)))
                } else
                    j.data("datepicker", k = new e(this,p))
            }
            return "string" == typeof b && "function" == typeof k[b] && (h = k[b].apply(k, g),
            void 0 !== h) ? !1 : void 0
        }),
        void 0 !== h ? h : this
    }
      , i = a.fn.datepicker.defaults = {
        autoclose: !1,
        beforeShowDay: a.noop,
        calendarWeeks: !1,
        clearBtn: !1,
        daysOfWeekDisabled: [],
        endDate: 1 / 0,
        forceParse: !0,
        format: "mm/dd/yyyy",
        keyboardNavigation: !0,
        language: "en",
        minViewMode: 0,
        rtl: !1,
        startDate: -1 / 0,
        startView: 0,
        todayBtn: !1,
        todayHighlight: !1,
        weekStart: 0
    }
      , j = a.fn.datepicker.locale_opts = ["format", "rtl", "weekStart"];
    a.fn.datepicker.Constructor = e;
    var k = a.fn.datepicker.dates = {
        en: {
            days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
            daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
            daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
            months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            today: "Today",
            clear: "Clear"
        }
    }
      , l = {
        modes: [{
            clsName: "days",
            navFnc: "Month",
            navStep: 1
        }, {
            clsName: "months",
            navFnc: "FullYear",
            navStep: 1
        }, {
            clsName: "years",
            navFnc: "FullYear",
            navStep: 10
        }],
        isLeapYear: function(a) {
            return 0 === a % 4 && 0 !== a % 100 || 0 === a % 400
        },
        getDaysInMonth: function(a, b) {
            return [31, l.isLeapYear(a) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][b]
        },
        validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
        nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,
        parseFormat: function(a) {
            var b = a.replace(this.validParts, "\0").split("\0")
              , c = a.match(this.validParts);
            if (!b || !b.length || !c || 0 === c.length)
                throw new Error("Invalid date format.");
            return {
                separators: b,
                parts: c
            }
        },
        parseDate: function(c, d, f) {
            if (c instanceof Date)
                return c;
            if ("string" == typeof d && (d = l.parseFormat(d)),
            /^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(c)) {
                var g, h, i = /([\-+]\d+)([dmwy])/, j = c.match(/([\-+]\d+)([dmwy])/g);
                c = new Date;
                for (var m = 0; m < j.length; m++)
                    switch (g = i.exec(j[m]),
                    h = parseInt(g[1]),
                    g[2]) {
                    case "d":
                        c.setUTCDate(c.getUTCDate() + h);
                        break;
                    case "m":
                        c = e.prototype.moveMonth.call(e.prototype, c, h);
                        break;
                    case "w":
                        c.setUTCDate(c.getUTCDate() + 7 * h);
                        break;
                    case "y":
                        c = e.prototype.moveYear.call(e.prototype, c, h)
                    }
                return b(c.getUTCFullYear(), c.getUTCMonth(), c.getUTCDate(), 0, 0, 0)
            }
            var n, o, g, j = c && c.match(this.nonpunctuation) || [], c = new Date, p = {}, q = ["yyyy", "yy", "M", "MM", "m", "mm", "d", "dd"], r = {
                yyyy: function(a, b) {
                    return a.setUTCFullYear(b)
                },
                yy: function(a, b) {
                    return a.setUTCFullYear(2e3 + b)
                },
                m: function(a, b) {
                    for (b -= 1; 0 > b; )
                        b += 12;
                    for (b %= 12,
                    a.setUTCMonth(b); a.getUTCMonth() != b; )
                        a.setUTCDate(a.getUTCDate() - 1);
                    return a
                },
                d: function(a, b) {
                    return a.setUTCDate(b)
                }
            };
            r.M = r.MM = r.mm = r.m,
            r.dd = r.d,
            c = b(c.getFullYear(), c.getMonth(), c.getDate(), 0, 0, 0);
            var s = d.parts.slice();
            if (j.length != s.length && (s = a(s).filter(function(b, c) {
                return -1 !== a.inArray(c, q)
            }).toArray()),
            j.length == s.length) {
                for (var m = 0, t = s.length; t > m; m++) {
                    if (n = parseInt(j[m], 10),
                    g = s[m],
                    isNaN(n))
                        switch (g) {
                        case "MM":
                            o = a(k[f].months).filter(function() {
                                var a = this.slice(0, j[m].length)
                                  , b = j[m].slice(0, a.length);
                                return a == b
                            }),
                            n = a.inArray(o[0], k[f].months) + 1;
                            break;
                        case "M":
                            o = a(k[f].monthsShort).filter(function() {
                                var a = this.slice(0, j[m].length)
                                  , b = j[m].slice(0, a.length);
                                return a == b
                            }),
                            n = a.inArray(o[0], k[f].monthsShort) + 1
                        }
                    p[g] = n
                }
                for (var u, m = 0; m < q.length; m++)
                    u = q[m],
                    u in p && !isNaN(p[u]) && r[u](c, p[u])
            }
            return c
        },
        formatDate: function(b, c, d) {
            "string" == typeof c && (c = l.parseFormat(c));
            var e = {
                d: b.getUTCDate(),
                D: k[d].daysShort[b.getUTCDay()],
                DD: k[d].days[b.getUTCDay()],
                m: b.getUTCMonth() + 1,
                M: k[d].monthsShort[b.getUTCMonth()],
                MM: k[d].months[b.getUTCMonth()],
                yy: b.getUTCFullYear().toString().substring(2),
                yyyy: b.getUTCFullYear()
            };
            e.dd = (e.d < 10 ? "0" : "") + e.d,
            e.mm = (e.m < 10 ? "0" : "") + e.m;
            for (var b = [], f = a.extend([], c.separators), g = 0, h = c.parts.length; h >= g; g++)
                f.length && b.push(f.shift()),
                b.push(e[c.parts[g]]);
            return b.join("")
        },
        headTemplate: '<thead><tr><th class="prev"><i class="icon-arrow-left"/></th><th colspan="5" class="datepicker-switch"></th><th class="next"><i class="icon-arrow-right"/></th></tr></thead>',
        contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
        footTemplate: '<tfoot><tr><th colspan="7" class="today"></th></tr><tr><th colspan="7" class="clear"></th></tr></tfoot>'
    };
    l.template = '<div class="datepicker"><div class="datepicker-days"><table class=" table-condensed">' + l.headTemplate + "<tbody></tbody>" + l.footTemplate + "</table>" + "</div>" + '<div class="datepicker-months">' + '<table class="table-condensed">' + l.headTemplate + l.contTemplate + l.footTemplate + "</table>" + "</div>" + '<div class="datepicker-years">' + '<table class="table-condensed">' + l.headTemplate + l.contTemplate + l.footTemplate + "</table>" + "</div>" + "</div>",
    a.fn.datepicker.DPGlobal = l,
    a.fn.datepicker.noConflict = function() {
        return a.fn.datepicker = g,
        this
    }
    ,
    a(document).on("focus.datepicker.data-api click.datepicker.data-api", '[data-provide="datepicker"]', function(b) {
        var c = a(this);
        c.data("datepicker") || (b.preventDefault(),
        h.call(c, "show"))
    }),
    a(function() {
        h.call(a('[data-provide="datepicker-inline"]'))
    })
}(window.jQuery),
function(a) {
    "use strict";
    a.fn.bdatepicker = a.fn.datepicker.noConflict(),
    a.fn.datepicker || (a.fn.datepicker = a.fn.bdatepicker);
    var b = function(a) {
        this.init("date", a, b.defaults),
        this.initPicker(a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput),
    a.extend(b.prototype, {
        initPicker: function(b, c) {
            this.options.viewformat || (this.options.viewformat = this.options.format),
            b.datepicker = a.fn.editableutils.tryParseJson(b.datepicker, !0),
            this.options.datepicker = a.extend({}, c.datepicker, b.datepicker, {
                format: this.options.viewformat
            }),
            this.options.datepicker.language = this.options.datepicker.language || "en",
            this.dpg = a.fn.bdatepicker.DPGlobal,
            this.parsedFormat = this.dpg.parseFormat(this.options.format),
            this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat)
        },
        render: function() {
            this.$input.bdatepicker(this.options.datepicker),
            this.options.clear && (this.$clear = a('<a href="#"></a>').html(this.options.clear).click(a.proxy(function(a) {
                a.preventDefault(),
                a.stopPropagation(),
                this.clear()
            }, this)),
            this.$tpl.parent().append(a('<div class="editable-clear">').append(this.$clear)))
        },
        value2html: function(a, c) {
            var d = a ? this.dpg.formatDate(a, this.parsedViewFormat, this.options.datepicker.language) : "";
            b.superclass.value2html.call(this, d, c)
        },
        html2value: function(a) {
            return this.parseDate(a, this.parsedViewFormat)
        },
        value2str: function(a) {
            return a ? this.dpg.formatDate(a, this.parsedFormat, this.options.datepicker.language) : ""
        },
        str2value: function(a) {
            return this.parseDate(a, this.parsedFormat)
        },
        value2submit: function(a) {
            return this.value2str(a)
        },
        value2input: function(a) {
            this.$input.bdatepicker("update", a)
        },
        input2value: function() {
            return this.$input.data("datepicker").date
        },
        activate: function() {},
        clear: function() {
            this.$input.data("datepicker").date = null,
            this.$input.find(".active").removeClass("active"),
            this.options.showbuttons || this.$input.closest("form").submit()
        },
        autosubmit: function() {
            this.$input.on("mouseup", ".day", function(b) {
                if (!a(b.currentTarget).is(".old") && !a(b.currentTarget).is(".new")) {
                    var c = a(this).closest("form");
                    setTimeout(function() {
                        c.submit()
                    }, 200)
                }
            })
        },
        parseDate: function(a, b) {
            var c, d = null;
            return a && (d = this.dpg.parseDate(a, b, this.options.datepicker.language),
            "string" == typeof a && (c = this.dpg.formatDate(d, b, this.options.datepicker.language),
            a !== c && (d = null))),
            d
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {
        tpl: '<div class="editable-date well"></div>',
        inputclass: null,
        format: "yyyy-mm-dd",
        viewformat: null,
        datepicker: {
            weekStart: 0,
            startView: 0,
            minViewMode: 0,
            autoclose: !1
        },
        clear: "&times; clear"
    }),
    a.fn.editabletypes.date = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("datefield", a, b.defaults),
        this.initPicker(a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.date),
    a.extend(b.prototype, {
        render: function() {
            this.$input = this.$tpl.find("input"),
            this.setClass(),
            this.setAttr("placeholder"),
            this.$tpl.bdatepicker(this.options.datepicker),
            this.$input.off("focus keydown"),
            this.$input.keyup(a.proxy(function() {
                this.$tpl.removeData("date"),
                this.$tpl.bdatepicker("update")
            }, this))
        },
        value2input: function(a) {
            this.$input.val(a ? this.dpg.formatDate(a, this.parsedViewFormat, this.options.datepicker.language) : ""),
            this.$tpl.bdatepicker("update")
        },
        input2value: function() {
            return this.html2value(this.$input.val())
        },
        activate: function() {
            a.fn.editabletypes.text.prototype.activate.call(this)
        },
        autosubmit: function() {}
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.date.defaults, {
        tpl: '<div class="input-append date"><input type="text"/><span class="add-on"><i class="icon-th"></i></span></div>',
        inputclass: "input-small",
        datepicker: {
            weekStart: 0,
            startView: 0,
            minViewMode: 0,
            autoclose: !0
        }
    }),
    a.fn.editabletypes.datefield = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("datetime", a, b.defaults),
        this.initPicker(a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput),
    a.extend(b.prototype, {
        initPicker: function(b, c) {
            this.options.viewformat || (this.options.viewformat = this.options.format),
            b.datetimepicker = a.fn.editableutils.tryParseJson(b.datetimepicker, !0),
            this.options.datetimepicker = a.extend({}, c.datetimepicker, b.datetimepicker, {
                format: this.options.viewformat
            }),
            this.options.datetimepicker.language = this.options.datetimepicker.language || "en",
            this.dpg = a.fn.datetimepicker.DPGlobal,
            this.parsedFormat = this.dpg.parseFormat(this.options.format, this.options.formatType),
            this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat, this.options.formatType)
        },
        render: function() {
            this.$input.datetimepicker(this.options.datetimepicker),
            this.$input.on("changeMode", function() {
                var b = a(this).closest("form").parent();
                setTimeout(function() {
                    b.triggerHandler("resize")
                }, 0)
            }),
            this.options.clear && (this.$clear = a('<a href="#"></a>').html(this.options.clear).click(a.proxy(function(a) {
                a.preventDefault(),
                a.stopPropagation(),
                this.clear()
            }, this)),
            this.$tpl.parent().append(a('<div class="editable-clear">').append(this.$clear)))
        },
        value2html: function(a, c) {
            var d = a ? this.dpg.formatDate(this.toUTC(a), this.parsedViewFormat, this.options.datetimepicker.language, this.options.formatType) : "";
            return c ? (b.superclass.value2html.call(this, d, c),
            void 0) : d
        },
        html2value: function(a) {
            var b = this.parseDate(a, this.parsedViewFormat);
            return b ? this.fromUTC(b) : null
        },
        value2str: function(a) {
            return a ? this.dpg.formatDate(this.toUTC(a), this.parsedFormat, this.options.datetimepicker.language, this.options.formatType) : ""
        },
        str2value: function(a) {
            var b = this.parseDate(a, this.parsedFormat);
            return b ? this.fromUTC(b) : null
        },
        value2submit: function(a) {
            return this.value2str(a)
        },
        value2input: function(a) {
            a && this.$input.data("datetimepicker").setDate(a)
        },
        input2value: function() {
            var a = this.$input.data("datetimepicker");
            return a.date ? a.getDate() : null
        },
        activate: function() {},
        clear: function() {
            this.$input.data("datetimepicker").date = null,
            this.$input.find(".active").removeClass("active"),
            this.options.showbuttons || this.$input.closest("form").submit()
        },
        autosubmit: function() {
            this.$input.on("mouseup", ".minute", function() {
                var b = a(this).closest("form");
                setTimeout(function() {
                    b.submit()
                }, 200)
            })
        },
        toUTC: function(a) {
            return a ? new Date(a.valueOf() - 6e4 * a.getTimezoneOffset()) : a
        },
        fromUTC: function(a) {
            return a ? new Date(a.valueOf() + 6e4 * a.getTimezoneOffset()) : a
        },
        parseDate: function(a, b) {
            var c, d = null;
            return a && (d = this.dpg.parseDate(a, b, this.options.datetimepicker.language, this.options.formatType),
            "string" == typeof a && (c = this.dpg.formatDate(d, b, this.options.datetimepicker.language, this.options.formatType),
            a !== c && (d = null))),
            d
        }
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {
        tpl: '<div class="editable-date well"></div>',
        inputclass: null,
        format: "yyyy-mm-dd hh:ii",
        formatType: "standard",
        viewformat: null,
        datetimepicker: {
            todayHighlight: !1,
            autoclose: !1
        },
        clear: "&times; clear"
    }),
    a.fn.editabletypes.datetime = b
}(window.jQuery),
function(a) {
    "use strict";
    var b = function(a) {
        this.init("datetimefield", a, b.defaults),
        this.initPicker(a, b.defaults)
    };
    a.fn.editableutils.inherit(b, a.fn.editabletypes.datetime),
    a.extend(b.prototype, {
        render: function() {
            this.$input = this.$tpl.find("input"),
            this.setClass(),
            this.setAttr("placeholder"),
            this.$tpl.datetimepicker(this.options.datetimepicker),
            this.$input.off("focus keydown"),
            this.$input.keyup(a.proxy(function() {
                this.$tpl.removeData("date"),
                this.$tpl.datetimepicker("update")
            }, this))
        },
        value2input: function(a) {
            this.$input.val(this.value2html(a)),
            this.$tpl.datetimepicker("update")
        },
        input2value: function() {
            return this.html2value(this.$input.val())
        },
        activate: function() {
            a.fn.editabletypes.text.prototype.activate.call(this)
        },
        autosubmit: function() {}
    }),
    b.defaults = a.extend({}, a.fn.editabletypes.datetime.defaults, {
        tpl: '<div class="input-append date"><input type="text"/><span class="add-on"><i class="icon-th"></i></span></div>',
        inputclass: "input-medium",
        datetimepicker: {
            todayHighlight: !1,
            autoclose: !0
        }
    }),
    a.fn.editabletypes.datetimefield = b
}(window.jQuery);
