myems-admin/js/plugins/footable/footable.all.min.js

Summary

Maintainability
F
1 wk
Test Coverage
/*!
 * FooTable - Awesome Responsive Tables
 * Version : 2.0.3
 * http://fooplugins.com/plugins/footable-jquery/
 *
 * Requires jQuery - http://jquery.com/
 *
 * Copyright 2014 Steven Usher & Brad Vincent
 * Released under the MIT license
 * You are free to use FooTable in commercial projects as long as this copyright header is left intact.
 *
 * Date: 11 Nov 2014
 */
(function(e, t) {
    function a() {
        var e = this;
        e.id = null, e.busy = !1, e.start = function(t, a) {
            e.busy || (e.stop(), e.id = setTimeout(function() {
                t(), e.id = null, e.busy = !1
            }, a), e.busy = !0)
        }, e.stop = function() {
            null !== e.id && (clearTimeout(e.id), e.id = null, e.busy = !1)
        }
    }

    function i(i, o, n) {
        var r = this;
        r.id = n, r.table = i, r.options = o, r.breakpoints = [], r.breakpointNames = "", r.columns = {}, r.plugins = t.footable.plugins.load(r);
        var l = r.options,
            d = l.classes,
            s = l.events,
            u = l.triggers,
            f = 0;
        return r.timers = {
            resize: new a,
            register: function(e) {
                return r.timers[e] = new a, r.timers[e]
            }
        }, r.init = function() {
            var a = e(t),
                i = e(r.table);
            if (t.footable.plugins.init(r), i.hasClass(d.loaded)) return r.raise(s.alreadyInitialized), undefined;
            r.raise(s.initializing), i.addClass(d.loading), i.find(l.columnDataSelector).each(function() {
                var e = r.getColumnData(this);
                r.columns[e.index] = e
            });
            for (var o in l.breakpoints) r.breakpoints.push({
                name: o,
                width: l.breakpoints[o]
            }), r.breakpointNames += o + " ";
            r.breakpoints.sort(function(e, t) {
                return e.width - t.width
            }), i.unbind(u.initialize).bind(u.initialize, function() {
                i.removeData("footable_info"), i.data("breakpoint", ""), i.trigger(u.resize), i.removeClass(d.loading), i.addClass(d.loaded).addClass(d.main), r.raise(s.initialized)
            }).unbind(u.redraw).bind(u.redraw, function() {
                r.redraw()
            }).unbind(u.resize).bind(u.resize, function() {
                r.resize()
            }).unbind(u.expandFirstRow).bind(u.expandFirstRow, function() {
                i.find(l.toggleSelector).first().not("." + d.detailShow).trigger(u.toggleRow)
            }).unbind(u.expandAll).bind(u.expandAll, function() {
                i.find(l.toggleSelector).not("." + d.detailShow).trigger(u.toggleRow)
            }).unbind(u.collapseAll).bind(u.collapseAll, function() {
                i.find("." + d.detailShow).trigger(u.toggleRow)
            }), i.trigger(u.initialize), a.bind("resize.footable", function() {
                r.timers.resize.stop(), r.timers.resize.start(function() {
                    r.raise(u.resize)
                }, l.delay)
            })
        }, r.addRowToggle = function() {
            if (l.addRowToggle) {
                var t = e(r.table),
                    a = !1;
                t.find("span." + d.toggle).remove();
                for (var i in r.columns) {
                    var o = r.columns[i];
                    if (o.toggle) {
                        a = !0;
                        var n = "> tbody > tr:not(." + d.detail + ",." + d.disabled + ") > td:nth-child(" + (parseInt(o.index, 10) + 1) + ")," + "> tbody > tr:not(." + d.detail + ",." + d.disabled + ") > th:nth-child(" + (parseInt(o.index, 10) + 1) + ")";
                        return t.find(n).not("." + d.detailCell).prepend(e(l.toggleHTMLElement).addClass(d.toggle)), undefined
                    }
                }
                a || t.find("> tbody > tr:not(." + d.detail + ",." + d.disabled + ") > td:first-child").add("> tbody > tr:not(." + d.detail + ",." + d.disabled + ") > th:first-child").not("." + d.detailCell).prepend(e(l.toggleHTMLElement).addClass(d.toggle))
            }
        }, r.setColumnClasses = function() {
            var t = e(r.table);
            for (var a in r.columns) {
                var i = r.columns[a];
                if (null !== i.className) {
                    var o = "",
                        n = !0;
                    e.each(i.matches, function(e, t) {
                        n || (o += ", "), o += "> tbody > tr:not(." + d.detail + ") > td:nth-child(" + (parseInt(t, 10) + 1) + ")", n = !1
                    }), t.find(o).not("." + d.detailCell).addClass(i.className)
                }
            }
        }, r.bindToggleSelectors = function() {
            var t = e(r.table);
            r.hasAnyBreakpointColumn() && (t.find(l.toggleSelector).unbind(u.toggleRow).bind(u.toggleRow, function() {
                var t = e(this).is("tr") ? e(this) : e(this).parents("tr:first");
                r.toggleDetail(t)
            }), t.find(l.toggleSelector).unbind("click.footable").bind("click.footable", function(a) {
                t.is(".breakpoint") && e(a.target).is("td,th,." + d.toggle) && e(this).trigger(u.toggleRow)
            }))
        }, r.parse = function(e, t) {
            var a = l.parsers[t.type] || l.parsers.alpha;
            return a(e)
        }, r.getColumnData = function(t) {
            var a = e(t),
                i = a.data("hide"),
                o = a.index();
            i = i || "", i = jQuery.map(i.split(","), function(e) {
                return jQuery.trim(e)
            });
            var n = {
                index: o,
                hide: {},
                type: a.data("type") || "alpha",
                name: a.data("name") || e.trim(a.text()),
                ignore: a.data("ignore") || !1,
                toggle: a.data("toggle") || !1,
                className: a.data("class") || null,
                matches: [],
                names: {},
                group: a.data("group") || null,
                groupName: null,
                isEditable: a.data("editable")
            };
            if (null !== n.group) {
                var d = e(r.table).find('> thead > tr.footable-group-row > th[data-group="' + n.group + '"], > thead > tr.footable-group-row > td[data-group="' + n.group + '"]').first();
                n.groupName = r.parse(d, {
                    type: "alpha"
                })
            }
            var u = parseInt(a.prev().attr("colspan") || 0, 10);
            f += u > 1 ? u - 1 : 0;
            var p = parseInt(a.attr("colspan") || 0, 10),
                c = n.index + f;
            if (p > 1) {
                var b = a.data("names");
                b = b || "", b = b.split(",");
                for (var g = 0; p > g; g++) n.matches.push(g + c), b.length > g && (n.names[g + c] = b[g])
            } else n.matches.push(c);
            n.hide["default"] = "all" === a.data("hide") || e.inArray("default", i) >= 0;
            var h = !1;
            for (var m in l.breakpoints) n.hide[m] = "all" === a.data("hide") || e.inArray(m, i) >= 0, h = h || n.hide[m];
            n.hasBreakpoint = h;
            var v = r.raise(s.columnData, {
                column: {
                    data: n,
                    th: t
                }
            });
            return v.column.data
        }, r.getViewportWidth = function() {
            return window.innerWidth || (document.body ? document.body.offsetWidth : 0)
        }, r.calculateWidth = function(e, t) {
            return jQuery.isFunction(l.calculateWidthOverride) ? l.calculateWidthOverride(e, t) : (t.viewportWidth < t.width && (t.width = t.viewportWidth), t.parentWidth < t.width && (t.width = t.parentWidth), t)
        }, r.hasBreakpointColumn = function(e) {
            for (var t in r.columns)
                if (r.columns[t].hide[e]) {
                    if (r.columns[t].ignore) continue;
                    return !0
                }
            return !1
        }, r.hasAnyBreakpointColumn = function() {
            for (var e in r.columns)
                if (r.columns[e].hasBreakpoint) return !0;
            return !1
        }, r.resize = function() {
            var t = e(r.table);
            if (t.is(":visible")) {
                if (!r.hasAnyBreakpointColumn()) return t.trigger(u.redraw), undefined;
                var a = {
                    width: t.width(),
                    viewportWidth: r.getViewportWidth(),
                    parentWidth: t.parent().width()
                };
                a = r.calculateWidth(t, a);
                var i = t.data("footable_info");
                if (t.data("footable_info", a), r.raise(s.resizing, {
                        old: i,
                        info: a
                    }), !i || i && i.width && i.width !== a.width) {
                    for (var o, n = null, l = 0; r.breakpoints.length > l; l++)
                        if (o = r.breakpoints[l], o && o.width && a.width <= o.width) {
                            n = o;
                            break
                        }
                    var d = null === n ? "default" : n.name,
                        f = r.hasBreakpointColumn(d),
                        p = t.data("breakpoint");
                    t.data("breakpoint", d).removeClass("default breakpoint").removeClass(r.breakpointNames).addClass(d + (f ? " breakpoint" : "")), d !== p && (t.trigger(u.redraw), r.raise(s.breakpoint, {
                        breakpoint: d,
                        info: a
                    }))
                }
                r.raise(s.resized, {
                    old: i,
                    info: a
                })
            }
        }, r.redraw = function() {
            r.addRowToggle(), r.bindToggleSelectors(), r.setColumnClasses();
            var t = e(r.table),
                a = t.data("breakpoint"),
                i = r.hasBreakpointColumn(a);
            t.find("> tbody > tr:not(." + d.detail + ")").data("detail_created", !1).end().find("> thead > tr:last-child > th").each(function() {
                var i = r.columns[e(this).index()],
                    o = "",
                    n = !0;
                e.each(i.matches, function(e, t) {
                    n || (o += ", ");
                    var a = t + 1;
                    o += "> tbody > tr:not(." + d.detail + ") > td:nth-child(" + a + ")", o += ", > tfoot > tr:not(." + d.detail + ") > td:nth-child(" + a + ")", o += ", > colgroup > col:nth-child(" + a + ")", n = !1
                }), o += ', > thead > tr[data-group-row="true"] > th[data-group="' + i.group + '"]';
                var l = t.find(o).add(this);
                if ("" !== a && (i.hide[a] === !1 ? l.addClass("footable-visible").show() : l.removeClass("footable-visible").hide()), 1 === t.find("> thead > tr.footable-group-row").length) {
                    var s = t.find('> thead > tr:last-child > th[data-group="' + i.group + '"]:visible, > thead > tr:last-child > th[data-group="' + i.group + '"]:visible'),
                        u = t.find('> thead > tr.footable-group-row > th[data-group="' + i.group + '"], > thead > tr.footable-group-row > td[data-group="' + i.group + '"]'),
                        f = 0;
                    e.each(s, function() {
                        f += parseInt(e(this).attr("colspan") || 1, 10)
                    }), f > 0 ? u.attr("colspan", f).show() : u.hide()
                }
            }).end().find("> tbody > tr." + d.detailShow).each(function() {
                r.createOrUpdateDetailRow(this)
            }), t.find("[data-bind-name]").each(function() {
                r.toggleInput(this)
            }), t.find("> tbody > tr." + d.detailShow + ":visible").each(function() {
                var t = e(this).next();
                t.hasClass(d.detail) && (i ? t.show() : t.hide())
            }), t.find("> thead > tr > th.footable-last-column, > tbody > tr > td.footable-last-column").removeClass("footable-last-column"), t.find("> thead > tr > th.footable-first-column, > tbody > tr > td.footable-first-column").removeClass("footable-first-column"), t.find("> thead > tr, > tbody > tr").find("> th.footable-visible:last, > td.footable-visible:last").addClass("footable-last-column").end().find("> th.footable-visible:first, > td.footable-visible:first").addClass("footable-first-column"), r.raise(s.redrawn)
        }, r.toggleDetail = function(t) {
            var a = t.jquery ? t : e(t),
                i = a.next();
            a.hasClass(d.detailShow) ? (a.removeClass(d.detailShow), i.hasClass(d.detail) && i.hide(), r.raise(s.rowCollapsed, {
                row: a[0]
            })) : (r.createOrUpdateDetailRow(a[0]), a.addClass(d.detailShow).next().show(), r.raise(s.rowExpanded, {
                row: a[0]
            }))
        }, r.removeRow = function(t) {
            var a = t.jquery ? t : e(t);
            a.hasClass(d.detail) && (a = a.prev());
            var i = a.next();
            a.data("detail_created") === !0 && i.remove(), a.remove(), r.raise(s.rowRemoved)
        }, r.appendRow = function(t) {
            var a = t.jquery ? t : e(t);
            e(r.table).find("tbody").append(a), r.redraw()
        }, r.getColumnFromTdIndex = function(t) {
            var a = null;
            for (var i in r.columns)
                if (e.inArray(t, r.columns[i].matches) >= 0) {
                    a = r.columns[i];
                    break
                }
            return a
        }, r.createOrUpdateDetailRow = function(t) {
            var a, i = e(t),
                o = i.next(),
                n = [];
            if (i.data("detail_created") === !0) return !0;
            if (i.is(":hidden")) return !1;
            if (r.raise(s.rowDetailUpdating, {
                    row: i,
                    detail: o
                }), i.find("> td:hidden").each(function() {
                    var t = e(this).index(),
                        a = r.getColumnFromTdIndex(t),
                        i = a.name;
                    if (a.ignore === !0) return !0;
                    t in a.names && (i = a.names[t]);
                    var o = e(this).attr("data-bind-name");
                    if (null != o && e(this).is(":empty")) {
                        var l = e("." + d.detailInnerValue + "[" + 'data-bind-value="' + o + '"]');
                        e(this).html(e(l).contents().detach())
                    }
                    var s;
                    return a.isEditable !== !1 && (a.isEditable || e(this).find(":input").length > 0) && (null == o && (o = "bind-" + e.now() + "-" + t, e(this).attr("data-bind-name", o)), s = e(this).contents().detach()), s || (s = e(this).contents().clone(!0, !0)), n.push({
                        name: i,
                        value: r.parse(this, a),
                        display: s,
                        group: a.group,
                        groupName: a.groupName,
                        bindName: o
                    }), !0
                }), 0 === n.length) return !1;
            var u = i.find("> td:visible").length,
                f = o.hasClass(d.detail);
            return f || (o = e('<tr class="' + d.detail + '"><td class="' + d.detailCell + '"><div class="' + d.detailInner + '"></div></td></tr>'), i.after(o)), o.find("> td:first").attr("colspan", u), a = o.find("." + d.detailInner).empty(), l.createDetail(a, n, l.createGroupedDetail, l.detailSeparator, d), i.data("detail_created", !0), r.raise(s.rowDetailUpdated, {
                row: i,
                detail: o
            }), !f
        }, r.raise = function(t, a) {
            r.options.debug === !0 && e.isFunction(r.options.log) && r.options.log(t, "event"), a = a || {};
            var i = {
                ft: r
            };
            e.extend(!0, i, a);
            var o = e.Event(t, i);
            return o.ft || e.extend(!0, o, i), e(r.table).trigger(o), o
        }, r.reset = function() {
            var t = e(r.table);
            t.removeData("footable_info").data("breakpoint", "").removeClass(d.loading).removeClass(d.loaded), t.find(l.toggleSelector).unbind(u.toggleRow).unbind("click.footable"), t.find("> tbody > tr").removeClass(d.detailShow), t.find("> tbody > tr." + d.detail).remove(), r.raise(s.reset)
        }, r.toggleInput = function(t) {
            var a = e(t).attr("data-bind-name");
            if (null != a) {
                var i = e("." + d.detailInnerValue + "[" + 'data-bind-value="' + a + '"]');
                null != i && (e(t).is(":visible") ? e(i).is(":empty") || e(t).html(e(i).contents().detach()) : e(t).is(":empty") || e(i).html(e(t).contents().detach()))
            }
        }, r.init(), r
    }
    t.footable = {
        options: {
            delay: 100,
            breakpoints: {
                phone: 480,
                tablet: 1024
            },
            parsers: {
                alpha: function(t) {
                    return e(t).data("value") || e.trim(e(t).text())
                },
                numeric: function(t) {
                    var a = e(t).data("value") || e(t).text().replace(/[^0-9.\-]/g, "");
                    return a = parseFloat(a), isNaN(a) && (a = 0), a
                }
            },
            addRowToggle: !0,
            calculateWidthOverride: null,
            toggleSelector: " > tbody > tr:not(.footable-row-detail)",
            columnDataSelector: "> thead > tr:last-child > th, > thead > tr:last-child > td",
            detailSeparator: ":",
            toggleHTMLElement: "<span />",
            createGroupedDetail: function(e) {
                for (var t = {
                        _none: {
                            name: null,
                            data: []
                        }
                    }, a = 0; e.length > a; a++) {
                    var i = e[a].group;
                    null !== i ? (i in t || (t[i] = {
                        name: e[a].groupName || e[a].group,
                        data: []
                    }), t[i].data.push(e[a])) : t._none.data.push(e[a])
                }
                return t
            },
            createDetail: function(t, a, i, o, n) {
                var r = i(a);
                for (var l in r)
                    if (0 !== r[l].data.length) {
                        "_none" !== l && t.append('<div class="' + n.detailInnerGroup + '">' + r[l].name + "</div>");
                        for (var d = 0; r[l].data.length > d; d++) {
                            var s = r[l].data[d].name ? o : "";
                            t.append(e("<div></div>").addClass(n.detailInnerRow).append(e("<div></div>").addClass(n.detailInnerName).append(r[l].data[d].name + s)).append(e("<div></div>").addClass(n.detailInnerValue).attr("data-bind-value", r[l].data[d].bindName).append(r[l].data[d].display)))
                        }
                    }
            },
            classes: {
                main: "footable",
                loading: "footable-loading",
                loaded: "footable-loaded",
                toggle: "footable-toggle",
                disabled: "footable-disabled",
                detail: "footable-row-detail",
                detailCell: "footable-row-detail-cell",
                detailInner: "footable-row-detail-inner",
                detailInnerRow: "footable-row-detail-row",
                detailInnerGroup: "footable-row-detail-group",
                detailInnerName: "footable-row-detail-name",
                detailInnerValue: "footable-row-detail-value",
                detailShow: "footable-detail-show"
            },
            triggers: {
                initialize: "footable_initialize",
                resize: "footable_resize",
                redraw: "footable_redraw",
                toggleRow: "footable_toggle_row",
                expandFirstRow: "footable_expand_first_row",
                expandAll: "footable_expand_all",
                collapseAll: "footable_collapse_all"
            },
            events: {
                alreadyInitialized: "footable_already_initialized",
                initializing: "footable_initializing",
                initialized: "footable_initialized",
                resizing: "footable_resizing",
                resized: "footable_resized",
                redrawn: "footable_redrawn",
                breakpoint: "footable_breakpoint",
                columnData: "footable_column_data",
                rowDetailUpdating: "footable_row_detail_updating",
                rowDetailUpdated: "footable_row_detail_updated",
                rowCollapsed: "footable_row_collapsed",
                rowExpanded: "footable_row_expanded",
                rowRemoved: "footable_row_removed",
                reset: "footable_reset"
            },
            debug: !1,
            log: null
        },
        version: {
            major: 0,
            minor: 5,
            toString: function() {
                return t.footable.version.major + "." + t.footable.version.minor
            },
            parse: function(e) {
                var t = /(\d+)\.?(\d+)?\.?(\d+)?/.exec(e);
                return {
                    major: parseInt(t[1], 10) || 0,
                    minor: parseInt(t[2], 10) || 0,
                    patch: parseInt(t[3], 10) || 0
                }
            }
        },
        plugins: {
            _validate: function(a) {
                if (!e.isFunction(a)) return t.footable.options.debug === !0 && console.error('Validation failed, expected type "function", received type "{0}".', typeof a), !1;
                var i = new a;
                return "string" != typeof i.name ? (t.footable.options.debug === !0 && console.error('Validation failed, plugin does not implement a string property called "name".', i), !1) : e.isFunction(i.init) ? (t.footable.options.debug === !0 && console.log('Validation succeeded for plugin "' + i.name + '".', i), !0) : (t.footable.options.debug === !0 && console.error('Validation failed, plugin "' + i.name + '" does not implement a function called "init".', i), !1)
            },
            registered: [],
            register: function(a, i) {
                t.footable.plugins._validate(a) && (t.footable.plugins.registered.push(a), "object" == typeof i && e.extend(!0, t.footable.options, i))
            },
            load: function(e) {
                var a, i, o = [];
                for (i = 0; t.footable.plugins.registered.length > i; i++) try {
                    a = t.footable.plugins.registered[i], o.push(new a(e))
                } catch (n) {
                    t.footable.options.debug === !0 && console.error(n)
                }
                return o
            },
            init: function(e) {
                for (var a = 0; e.plugins.length > a; a++) try {
                    e.plugins[a].init(e)
                } catch (i) {
                    t.footable.options.debug === !0 && console.error(i)
                }
            }
        }
    };
    var o = 0;
    e.fn.footable = function(a) {
        a = a || {};
        var n = e.extend(!0, {}, t.footable.options, a);
        return this.each(function() {
            o++;
            var t = new i(this, n, o);
            e(this).data("footable", t)
        })
    }
})(jQuery, window);;
(function(e, t, undefined) {
    function a(t) {
        var a = e("<th>" + t.title + "</th>");
        return e.isPlainObject(t.data) && a.data(t.data), e.isPlainObject(t.style) && a.css(t.style), t.className && a.addClass(t.className), a
    }

    function o(t, o) {
        var i = t.find("thead");
        0 === i.size() && (i = e("<thead>").appendTo(t));
        for (var n = e("<tr>").appendTo(i), r = 0, l = o.cols.length; l > r; r++) n.append(a(o.cols[r]))
    }

    function i(t) {
        var a = t.find("tbody");
        0 === a.size() && (a = e("<tbody>").appendTo(t))
    }

    function n(t, a, o) {
        if (o) {
            t.attr("data-page-size", o["page-size"]);
            var i = t.find("tfoot");
            0 === i.size() && (i = e('<tfoot class="hide-if-no-paging"></tfoot>').appendTo(t)), i.append("<tr><td colspan=" + a.length + "></td></tr>");
            var n = e("<div>").appendTo(i.find("tr:last-child td"));
            n.addClass(o["pagination-class"])
        }
    }

    function r(t) {
        for (var a = t[0], o = 0, i = t.length; i > o; o++) {
            var n = t[o];
            if (n.data && (n.data.toggle === !0 || "true" === n.data.toggle)) return
        }
        a.data = e.extend(a.data, {
            toggle: !0
        })
    }

    function l(e, t, a) {
        0 === e.find("tr.emptyInfo").size() && e.find("tbody").append('<tr class="emptyInfo"><td colspan="' + t.length + '">' + a + "</td></tr>")
    }

    function d(t, a, o, i) {
        t.find("tr:not(." + o + ")").each(function() {
            var t = e(this),
                o = a.data("index"),
                n = parseInt(t.data("index"), 0),
                r = n + i;
            n >= o && this !== a.get(0) && t.attr("data-index", r).data("index", r)
        })
    }

    function s() {
        function t(t, a, o) {
            var i = e("<td>");
            return t.formatter ? i.html(t.formatter(a, i, o)) : i.html(a || ""), i
        }
        var a = this;
        a.name = "Footable Grid", a.init = function(t) {
            var d = t.options.classes.toggle,
                s = t.options.classes.detail,
                f = t.options.grid;
            if (f.cols) {
                a.footable = t;
                var u = e(t.table);
                u.data("grid", a), e.isPlainObject(f.data) && u.data(f.data), a._items = [], r(f.cols), f.showCheckbox && (f.multiSelect = !0, f.cols.unshift({
                    title: f.checkboxFormatter(!0),
                    name: "",
                    data: {
                        "sort-ignore": !0
                    },
                    formatter: f.checkboxFormatter
                })), f.showIndex && f.cols.unshift({
                    title: "#",
                    name: "index",
                    data: {
                        "sort-ignore": !0
                    },
                    formatter: f.indexFormatter
                }), o(u, f), i(u), n(u, f.cols, f.pagination), u.off(".grid").on({
                    "footable_initialized.grid": function() {
                        f.url || f.ajax ? e.ajax(f.ajax || {
                            url: f.url
                        }).then(function(e) {
                            a.newItem(e), t.raise(f.events.loaded)
                        }, function() {
                            throw "load data from " + (f.url || f.ajax.url) + " fail"
                        }) : (a.newItem(f.items || []), t.raise(f.events.loaded))
                    },
                    "footable_sorted.grid footable_grid_created.grid footable_grid_removed.grid": function() {
                        f.showIndex && a.getItem().length > 0 && u.find("tbody tr:not(." + s + ")").each(function(t) {
                            var a = e(this).find("td:first");
                            a.html(f.indexFormatter(null, a, t))
                        })
                    },
                    "footable_redrawn.grid footable_row_removed.grid": function() {
                        0 === a.getItem().length && f.showEmptyInfo && l(u, f.cols, f.emptyInfo)
                    }
                }).on({
                    "click.grid": function(a) {
                        if (e(a.target).closest("td").find(">." + d).size() > 0) return !0;
                        var o = e(a.currentTarget);
                        return o.hasClass(s) ? !0 : (f.multiSelect || o.hasClass(f.activeClass) || u.find("tbody tr." + f.activeClass).removeClass(f.activeClass), o.toggleClass(f.activeClass), f.showCheckbox && o.find("input:checkbox.check").prop("checked", function(e, t) {
                            return a.target === this ? t : !t
                        }), t.toggleDetail(o), undefined)
                    }
                }, "tbody tr").on("click.grid", "thead input:checkbox.checkAll", function(e) {
                    var t = !!e.currentTarget.checked;
                    t ? u.find("tbody tr").addClass(f.activeClass) : u.find("tbody tr").removeClass(f.activeClass), u.find("tbody input:checkbox.check").prop("checked", t)
                })
            }
        }, a.getSelected = function() {
            var t = a.footable.options.grid,
                o = e(a.footable.table).find("tbody>tr." + t.activeClass);
            return o.map(function() {
                return e(this).data("index")
            })
        }, a.getItem = function(t) {
            return t !== undefined ? e.isArray(t) ? e.map(t, function(e) {
                return a._items[e]
            }) : a._items[t] : a._items
        }, a._makeRow = function(o, i) {
            var n, r = a.footable.options.grid;
            if (e.isFunction(r.template)) n = e(r.template(e.extend({}, {
                __index: i
            }, o)));
            else {
                n = e("<tr>");
                for (var l = 0, d = r.cols.length; d > l; l++) {
                    var s = r.cols[l];
                    n.append(t(s, o[s.name] || "", i))
                }
            }
            return n.attr("data-index", i), n
        }, a.newItem = function(t, o, i) {
            var n = e(a.footable.table).find("tbody"),
                r = a.footable.options.classes.detail;
            if (n.find("tr.emptyInfo").remove(), e.isArray(t)) {
                for (var l; l = t.pop();) a.newItem(l, o, !0);
                return a.footable.redraw(), a.footable.raise(a.footable.options.grid.events.created, {
                    item: t,
                    index: o
                }), undefined
            }
            if (e.isPlainObject(t)) {
                var s, f = a._items.length;
                if (o === undefined || 0 > o || o > f) s = a._makeRow(t, f++), a._items.push(t), n.append(s);
                else {
                    if (s = a._makeRow(t, o), 0 === o) a._items.unshift(t), n.prepend(s);
                    else {
                        var u = n.find("tr[data-index=" + (o - 1) + "]");
                        a._items.splice(o, 0, t), u.data("detail_created") === !0 && (u = u.next()), u.after(s)
                    }
                    d(n, s, r, 1)
                }
                i || (a.footable.redraw(), a.footable.raise(a.footable.options.grid.events.created, {
                    item: t,
                    index: o
                }))
            }
        }, a.setItem = function(t, o) {
            if (e.isPlainObject(t)) {
                var i = e(a.footable.table).find("tbody"),
                    n = a._makeRow(t, o);
                e.extend(a._items[o], t);
                var r = i.find("tr").eq(o);
                r.html(n.html()), a.footable.redraw(), a.footable.raise(a.footable.options.grid.events.updated, {
                    item: t,
                    index: o
                })
            }
        }, a.removeItem = function(t) {
            var o = e(a.footable.table).find("tbody"),
                i = a.footable.options.classes.detail,
                n = [];
            if (e.isArray(t)) {
                for (var r; r = t.pop();) n.push(a.removeItem(r));
                return a.footable.raise(a.footable.options.grid.events.removed, {
                    item: n,
                    index: t
                }), n
            }
            if (t === undefined) o.find("tr").each(function() {
                n.push(a._items.shift()), a.footable.removeRow(this)
            });
            else {
                var l = o.find("tr[data-index=" + t + "]");
                n = a._items.splice(t, 1)[0], a.footable.removeRow(l), d(o, l, i, -1)
            }
            return a.footable.raise(a.footable.options.grid.events.removed, {
                item: n,
                index: t
            }), n
        }
    }
    if (t.footable === undefined || null === t.foobox) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
    var f = {
        grid: {
            enabled: !0,
            data: null,
            template: null,
            cols: null,
            items: null,
            url: null,
            ajax: null,
            activeClass: "active",
            multiSelect: !1,
            showIndex: !1,
            showCheckbox: !1,
            showEmptyInfo: !1,
            emptyInfo: '<p class="text-center text-warning">No Data</p>',
            pagination: {
                "page-size": 20,
                "pagination-class": "pagination pagination-centered"
            },
            indexFormatter: function(e, t, a) {
                return a + 1
            },
            checkboxFormatter: function(e) {
                return '<input type="checkbox" class="' + (e ? "checkAll" : "check") + '">'
            },
            events: {
                loaded: "footable_grid_loaded",
                created: "footable_grid_created",
                removed: "footable_grid_removed",
                updated: "footable_grid_updated"
            }
        }
    };
    t.footable.plugins.register(s, f)
})(jQuery, window);;
(function(t, e, undefined) {
    function a() {
        var e = this;
        e.name = "Footable Filter", e.init = function(a) {
            if (e.footable = a, a.options.filter.enabled === !0) {
                if (t(a.table).data("filter") === !1) return;
                a.timers.register("filter"), t(a.table).unbind(".filtering").bind({
                    "footable_initialized.filtering": function() {
                        var i = t(a.table),
                            o = {
                                input: i.data("filter") || a.options.filter.input,
                                timeout: i.data("filter-timeout") || a.options.filter.timeout,
                                minimum: i.data("filter-minimum") || a.options.filter.minimum,
                                disableEnter: i.data("filter-disable-enter") || a.options.filter.disableEnter
                            };
                        o.disableEnter && t(o.input).keypress(function(t) {
                            return window.event ? 13 !== window.event.keyCode : 13 !== t.which
                        }), i.bind("footable_clear_filter", function() {
                            t(o.input).val(""), e.clearFilter()
                        }), i.bind("footable_filter", function(t, a) {
                            e.filter(a.filter)
                        }), t(o.input).keyup(function(i) {
                            a.timers.filter.stop(), 27 === i.which && t(o.input).val(""), a.timers.filter.start(function() {
                                var a = t(o.input).val() || "";
                                e.filter(a)
                            }, o.timeout)
                        })
                    },
                    "footable_redrawn.filtering": function() {
                        var i = t(a.table),
                            o = i.data("filter-string");
                        o && e.filter(o)
                    }
                }).data("footable-filter", e)
            }
        }, e.filter = function(a) {
            var i = e.footable,
                o = t(i.table),
                n = o.data("filter-minimum") || i.options.filter.minimum,
                r = !a,
                l = i.raise("footable_filtering", {
                    filter: a,
                    clear: r
                });
            if (!(l && l.result === !1 || l.filter && n > l.filter.length))
                if (l.clear) e.clearFilter();
                else {
                    var d = l.filter.split(" ");
                    o.find("> tbody > tr").hide().addClass("footable-filtered");
                    var s = o.find("> tbody > tr:not(.footable-row-detail)");
                    t.each(d, function(t, e) {
                        e && e.length > 0 && (o.data("current-filter", e), s = s.filter(i.options.filter.filterFunction))
                    }), s.each(function() {
                        e.showRow(this, i), t(this).removeClass("footable-filtered")
                    }), o.data("filter-string", l.filter), i.raise("footable_filtered", {
                        filter: l.filter,
                        clear: !1
                    })
                }
        }, e.clearFilter = function() {
            var a = e.footable,
                i = t(a.table);
            i.find("> tbody > tr:not(.footable-row-detail)").removeClass("footable-filtered").each(function() {
                e.showRow(this, a)
            }), i.removeData("filter-string"), a.raise("footable_filtered", {
                clear: !0
            })
        }, e.showRow = function(e, a) {
            var i = t(e),
                o = i.next(),
                n = t(a.table);
            i.is(":visible") || (n.hasClass("breakpoint") && i.hasClass("footable-detail-show") && o.hasClass("footable-row-detail") ? (i.add(o).show(), a.createOrUpdateDetailRow(e)) : i.show())
        }
    }
    if (e.footable === undefined || null === e.footable) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
    var i = {
        filter: {
            enabled: !0,
            input: ".footable-filter",
            timeout: 300,
            minimum: 2,
            disableEnter: !1,
            filterFunction: function() {
                var e = t(this),
                    a = e.parents("table:first"),
                    i = a.data("current-filter").toUpperCase(),
                    o = e.find("td").text();
                return a.data("filter-text-only") || e.find("td[data-value]").each(function() {
                    o += t(this).data("value")
                }), o.toUpperCase().indexOf(i) >= 0
            }
        }
    };
    e.footable.plugins.register(a, i)
})(jQuery, window);;
(function(e, t, undefined) {
    function a(t) {
        var a = e(t.table),
            i = a.data();
        this.pageNavigation = i.pageNavigation || t.options.pageNavigation, this.pageSize = i.pageSize || t.options.pageSize, this.firstText = i.firstText || t.options.firstText, this.previousText = i.previousText || t.options.previousText, this.nextText = i.nextText || t.options.nextText, this.lastText = i.lastText || t.options.lastText, this.limitNavigation = parseInt(i.limitNavigation || t.options.limitNavigation || o.limitNavigation, 10), this.limitPreviousText = i.limitPreviousText || t.options.limitPreviousText, this.limitNextText = i.limitNextText || t.options.limitNextText, this.limit = this.limitNavigation > 0, this.currentPage = i.currentPage || 0, this.pages = [], this.control = !1
    }

    function i() {
        var t = this;
        t.name = "Footable Paginate", t.init = function(a) {
            if (a.options.paginate === !0) {
                if (e(a.table).data("page") === !1) return;
                t.footable = a, e(a.table).unbind(".paging").bind({
                    "footable_initialized.paging footable_row_removed.paging footable_redrawn.paging footable_sorted.paging footable_filtered.paging": function() {
                        t.setupPaging()
                    }
                }).data("footable-paging", t)
            }
        }, t.setupPaging = function() {
            var i = t.footable,
                o = e(i.table).find("> tbody");
            i.pageInfo = new a(i), t.createPages(i, o), t.createNavigation(i, o), t.fillPage(i, o, i.pageInfo.currentPage)
        }, t.createPages = function(t, a) {
            var i = 1,
                o = t.pageInfo,
                n = i * o.pageSize,
                r = [],
                l = [];
            o.pages = [];
            var d = a.find("> tr:not(.footable-filtered,.footable-row-detail)");
            d.each(function(e, t) {
                r.push(t), e === n - 1 ? (o.pages.push(r), i++, n = i * o.pageSize, r = []) : e >= d.length - d.length % o.pageSize && l.push(t)
            }), l.length > 0 && o.pages.push(l), o.currentPage >= o.pages.length && (o.currentPage = o.pages.length - 1), 0 > o.currentPage && (o.currentPage = 0), 1 === o.pages.length ? e(t.table).addClass("no-paging") : e(t.table).removeClass("no-paging")
        }, t.createNavigation = function(a) {
            var i = e(a.table).find(a.pageInfo.pageNavigation);
            if (0 === i.length) {
                if (i = e(a.pageInfo.pageNavigation), i.parents("table:first").length > 0 && i.parents("table:first") !== e(a.table)) return;
                i.length > 1 && a.options.debug === !0 && console.error("More than one pagination control was found!")
            }
            if (0 !== i.length) {
                i.is("ul") || (0 === i.find("ul:first").length && i.append("<ul />"), i = i.find("ul")), i.find("li").remove();
                var o = a.pageInfo;
                o.control = i, o.pages.length > 0 && (i.append('<li class="footable-page-arrow"><a data-page="first" href="#first">' + a.pageInfo.firstText + "</a>"), i.append('<li class="footable-page-arrow"><a data-page="prev" href="#prev">' + a.pageInfo.previousText + "</a></li>"), o.limit && i.append('<li class="footable-page-arrow"><a data-page="limit-prev" href="#limit-prev">' + a.pageInfo.limitPreviousText + "</a></li>"), o.limit || e.each(o.pages, function(e, t) {
                    t.length > 0 && i.append('<li class="footable-page"><a data-page="' + e + '" href="#">' + (e + 1) + "</a></li>")
                }), o.limit && (i.append('<li class="footable-page-arrow"><a data-page="limit-next" href="#limit-next">' + a.pageInfo.limitNextText + "</a></li>"), t.createLimited(i, o, 0)), i.append('<li class="footable-page-arrow"><a data-page="next" href="#next">' + a.pageInfo.nextText + "</a></li>"), i.append('<li class="footable-page-arrow"><a data-page="last" href="#last">' + a.pageInfo.lastText + "</a></li>")), i.off("click", "a[data-page]").on("click", "a[data-page]", function(n) {
                    n.preventDefault();
                    var r = e(this).data("page"),
                        l = o.currentPage;
                    if ("first" === r) l = 0;
                    else if ("prev" === r) l > 0 && l--;
                    else if ("next" === r) o.pages.length - 1 > l && l++;
                    else if ("last" === r) l = o.pages.length - 1;
                    else if ("limit-prev" === r) {
                        l = -1;
                        var d = i.find(".footable-page:first a").data("page");
                        t.createLimited(i, o, d - o.limitNavigation), t.setPagingClasses(i, o.currentPage, o.pages.length)
                    } else if ("limit-next" === r) {
                        l = -1;
                        var s = i.find(".footable-page:last a").data("page");
                        t.createLimited(i, o, s + 1), t.setPagingClasses(i, o.currentPage, o.pages.length)
                    } else l = r;
                    if (l >= 0) {
                        if (o.limit && o.currentPage != l) {
                            for (var f = l; 0 !== f % o.limitNavigation;) f -= 1;
                            t.createLimited(i, o, f)
                        }
                        t.paginate(a, l)
                    }
                }), t.setPagingClasses(i, o.currentPage, o.pages.length)
            }
        }, t.createLimited = function(e, t, a) {
            a = a || 0, e.find("li.footable-page").remove();
            var i, o, n = e.find('li.footable-page-arrow > a[data-page="limit-prev"]').parent(),
                r = e.find('li.footable-page-arrow > a[data-page="limit-next"]').parent();
            for (i = t.pages.length - 1; i >= 0; i--) o = t.pages[i], i >= a && a + t.limitNavigation > i && o.length > 0 && n.after('<li class="footable-page"><a data-page="' + i + '" href="#">' + (i + 1) + "</a></li>");
            0 === a ? n.hide() : n.show(), a + t.limitNavigation >= t.pages.length ? r.hide() : r.show()
        }, t.paginate = function(a, i) {
            var o = a.pageInfo;
            if (o.currentPage !== i) {
                var n = e(a.table).find("> tbody"),
                    r = a.raise("footable_paging", {
                        page: i,
                        size: o.pageSize
                    });
                if (r && r.result === !1) return;
                t.fillPage(a, n, i), o.control.find("li").removeClass("active disabled"), t.setPagingClasses(o.control, o.currentPage, o.pages.length)
            }
        }, t.setPagingClasses = function(e, t, a) {
            e.find("li.footable-page > a[data-page=" + t + "]").parent().addClass("active"), t >= a - 1 && (e.find('li.footable-page-arrow > a[data-page="next"]').parent().addClass("disabled"), e.find('li.footable-page-arrow > a[data-page="last"]').parent().addClass("disabled")), 1 > t && (e.find('li.footable-page-arrow > a[data-page="first"]').parent().addClass("disabled"), e.find('li.footable-page-arrow > a[data-page="prev"]').parent().addClass("disabled"))
        }, t.fillPage = function(a, i, o) {
            a.pageInfo.currentPage = o, e(a.table).data("currentPage", o), i.find("> tr").hide(), e(a.pageInfo.pages[o]).each(function() {
                t.showRow(this, a)
            }), a.raise("footable_page_filled")
        }, t.showRow = function(t, a) {
            var i = e(t),
                o = i.next(),
                n = e(a.table);
            n.hasClass("breakpoint") && i.hasClass("footable-detail-show") && o.hasClass("footable-row-detail") ? (i.add(o).show(), a.createOrUpdateDetailRow(t)) : i.show()
        }
    }
    if (t.footable === undefined || null === t.footable) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
    var o = {
        paginate: !0,
        pageSize: 10,
        pageNavigation: ".pagination",
        firstText: "&laquo;",
        previousText: "&lsaquo;",
        nextText: "&rsaquo;",
        lastText: "&raquo;",
        limitNavigation: 0,
        limitPreviousText: "...",
        limitNextText: "..."
    };
    t.footable.plugins.register(i, o)
})(jQuery, window);;
(function(t, e, undefined) {
    function a() {
        var e = this;
        e.name = "Footable Sortable", e.init = function(a) {
            e.footable = a, a.options.sort === !0 && t(a.table).unbind(".sorting").bind({
                "footable_initialized.sorting": function() {
                    var i, o, n = t(a.table),
                        r = (n.find("> tbody"), a.options.classes.sort);
                    if (n.data("sort") !== !1) {
                        n.find("> thead > tr:last-child > th, > thead > tr:last-child > td").each(function() {
                            var e = t(this),
                                i = a.columns[e.index()];
                            i.sort.ignore === !0 || e.hasClass(r.sortable) || (e.addClass(r.sortable), t("<span />").addClass(r.indicator).appendTo(e))
                        }), n.find("> thead > tr:last-child > th." + r.sortable + ", > thead > tr:last-child > td." + r.sortable).unbind("click.footable").bind("click.footable", function(a) {
                            a.preventDefault(), o = t(this);
                            var i = !o.hasClass(r.sorted);
                            return e.doSort(o.index(), i), !1
                        });
                        var l = !1;
                        for (var s in a.columns)
                            if (i = a.columns[s], i.sort.initial) {
                                var d = "descending" !== i.sort.initial;
                                e.doSort(i.index, d);
                                break
                            }
                        l && a.bindToggleSelectors()
                    }
                },
                "footable_redrawn.sorting": function() {
                    var i = t(a.table),
                        o = a.options.classes.sort;
                    i.data("sorted") >= 0 && i.find("> thead > tr:last-child > th").each(function(a) {
                        var i = t(this);
                        return i.hasClass(o.sorted) || i.hasClass(o.descending) ? (e.doSort(a), undefined) : undefined
                    })
                },
                "footable_column_data.sorting": function(e) {
                    var a = t(e.column.th);
                    e.column.data.sort = e.column.data.sort || {}, e.column.data.sort.initial = a.data("sort-initial") || !1, e.column.data.sort.ignore = a.data("sort-ignore") || !1, e.column.data.sort.selector = a.data("sort-selector") || null;
                    var i = a.data("sort-match") || 0;
                    i >= e.column.data.matches.length && (i = 0), e.column.data.sort.match = e.column.data.matches[i]
                }
            }).data("footable-sort", e)
        }, e.doSort = function(a, i) {
            var o = e.footable;
            if (t(o.table).data("sort") !== !1) {
                var n = t(o.table),
                    r = n.find("> tbody"),
                    l = o.columns[a],
                    s = n.find("> thead > tr:last-child > th:eq(" + a + ")"),
                    d = o.options.classes.sort,
                    f = o.options.events.sort;
                if (i = i === undefined ? s.hasClass(d.sorted) : "toggle" === i ? !s.hasClass(d.sorted) : i, l.sort.ignore === !0) return !0;
                var u = o.raise(f.sorting, {
                    column: l,
                    direction: i ? "ASC" : "DESC"
                });
                u && u.result === !1 || (n.data("sorted", l.index), n.find("> thead > tr:last-child > th, > thead > tr:last-child > td").not(s).removeClass(d.sorted + " " + d.descending), i === undefined && (i = s.hasClass(d.sorted)), i ? s.removeClass(d.descending).addClass(d.sorted) : s.removeClass(d.sorted).addClass(d.descending), e.sort(o, r, l, i), o.bindToggleSelectors(), o.raise(f.sorted, {
                    column: l,
                    direction: i ? "ASC" : "DESC"
                }))
            }
        }, e.rows = function(e, a, i) {
            var o = [];
            return a.find("> tr").each(function() {
                var a = t(this),
                    n = null;
                if (a.hasClass(e.options.classes.detail)) return !0;
                a.next().hasClass(e.options.classes.detail) && (n = a.next().get(0));
                var r = {
                    row: a,
                    detail: n
                };
                return i !== undefined && (r.value = e.parse(this.cells[i.sort.match], i)), o.push(r), !0
            }).detach(), o
        }, e.sort = function(t, a, i, o) {
            var n = e.rows(t, a, i),
                r = t.options.sorters[i.type] || t.options.sorters.alpha;
            n.sort(function(t, e) {
                return o ? r(t.value, e.value) : r(e.value, t.value)
            });
            for (var l = 0; n.length > l; l++) a.append(n[l].row), null !== n[l].detail && a.append(n[l].detail)
        }
    }
    if (e.footable === undefined || null === e.footable) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
    var i = {
        sort: !0,
        sorters: {
            alpha: function(t, e) {
                return "string" == typeof t && (t = t.toLowerCase()), "string" == typeof e && (e = e.toLowerCase()), t === e ? 0 : e > t ? -1 : 1
            },
            numeric: function(t, e) {
                return t - e
            }
        },
        classes: {
            sort: {
                sortable: "footable-sortable",
                sorted: "footable-sorted",
                descending: "footable-sorted-desc",
                indicator: "footable-sort-indicator"
            }
        },
        events: {
            sort: {
                sorting: "footable_sorting",
                sorted: "footable_sorted"
            }
        }
    };
    e.footable.plugins.register(a, i)
})(jQuery, window);;
(function(t, e, undefined) {
    function a() {
        var e = this;
        e.name = "Footable Striping", e.init = function(a) {
            e.footable = a, t(a.table).unbind("striping").bind({
                "footable_initialized.striping footable_row_removed.striping footable_redrawn.striping footable_sorted.striping footable_filtered.striping": function() {
                    t(this).data("striping") !== !1 && e.setupStriping(a)
                }
            })
        }, e.setupStriping = function(e) {
            var a = 0;
            t(e.table).find("> tbody > tr:not(.footable-row-detail)").each(function() {
                var i = t(this);
                i.removeClass(e.options.classes.striping.even).removeClass(e.options.classes.striping.odd), 0 === a % 2 ? i.addClass(e.options.classes.striping.even) : i.addClass(e.options.classes.striping.odd), a++
            })
        }
    }
    if (e.footable === undefined || null === e.foobox) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
    var i = {
        striping: {
            enabled: !0
        },
        classes: {
            striping: {
                odd: "footable-odd",
                even: "footable-even"
            }
        }
    };
    e.footable.plugins.register(a, i)
})(jQuery, window);;
(function(t, e, undefined) {
    function a(t, e) {
        e = e ? e : location.hash;
        var a = RegExp("&" + t + "(?:=([^&]*))?(?=&|$)", "i");
        return (e = e.replace(/^\#/, "&").match(a)) ? e[1] === undefined ? "" : decodeURIComponent(e[1]) : undefined
    }

    function i(e, a) {
        var i = t(e.table).find("tbody").find("tr:not(.footable-row-detail, .footable-filtered)").length;
        t(e.table).data("status_num_total", i);
        var o = t(e.table).find("tbody").find("tr:not(.footable-row-detail)").filter(":visible").length;
        t(e.table).data("status_num_shown", o);
        var n = t(e.table).data("sorted"),
            r = t(e.table).find("th")[n],
            l = t(r).hasClass("footable-sorted-desc");
        if (t(e.table).data("status_descending", l), e.pageInfo) {
            var s = e.pageInfo.currentPage;
            t(e.table).data("status_pagenum", s)
        }
        var d = "",
            f = t(e.table).data("filter");
        t(f).length && (d = t(f).val()), t(e.table).data("status_filter_val", d);
        var u, p, c;
        if ("footable_row_expanded" == a.type && (u = a.row, u && (p = t(e.table).data("expanded_rows"), c = [], p && (c = p.split(",")), c.push(u.rowIndex), t(e.table).data("expanded_rows", c.join(",")))), "footable_row_collapsed" == a.type && (u = a.row)) {
            p = t(e.table).data("expanded_rows"), c = [], p && (c = p.split(","));
            var g = [];
            for (var b in c)
                if (c[b] == u.rowIndex) {
                    g = c.splice(b, 1);
                    break
                }
            t(e.table).data("expanded_rows", g.join(","))
        }
    }

    function o() {
        var e = this;
        e.name = "Footable LucidBookmarkable", e.init = function(e) {
            e.options.bookmarkable.enabled && t(e.table).bind({
                footable_initialized: function() {
                    var i = e.table.id,
                        o = a(i + "_f"),
                        n = a(i + "_p"),
                        r = a(i + "_s"),
                        l = a(i + "_d"),
                        s = a(i + "_e");
                    if (o) {
                        var d = t(e.table).data("filter");
                        t(d).val(o), t(e.table).trigger("footable_filter", {
                            filter: o
                        })
                    }
                    if (n && t(e.table).data("currentPage", n), r !== undefined) {
                        var f = t(e.table).data("footable-sort"),
                            u = !0;
                        "true" == l && (u = !1), f.doSort(r, u)
                    } else t(e.table).trigger("footable_setup_paging");
                    if (s) {
                        var p = s.split(",");
                        for (var c in p) {
                            var g = t(e.table.rows[p[c]]);
                            g.find("> td:first").trigger("footable_toggle_row")
                        }
                    }
                    e.lucid_bookmark_read = !0
                },
                "footable_page_filled footable_redrawn footable_filtered footable_sorted footable_row_expanded footable_row_collapsed": function(a) {
                    if (i(e, a), e.lucid_bookmark_read) {
                        var o = e.table.id,
                            n = o + "_f",
                            r = o + "_p",
                            l = o + "_s",
                            s = o + "_d",
                            d = o + "_e",
                            f = location.hash.replace(/^\#/, "&"),
                            u = [n, r, l, s, d];
                        for (var p in u) {
                            var c = RegExp("&" + u[p] + "=([^&]*)", "g");
                            f = f.replace(c, "")
                        }
                        var g = {};
                        g[n] = t(e.table).data("status_filter_val"), g[r] = t(e.table).data("status_pagenum"), g[l] = t(e.table).data("sorted"), g[s] = t(e.table).data("status_descending"), g[d] = t(e.table).data("expanded_rows");
                        var b = [];
                        for (var h in g) g[h] !== undefined && b.push(h + "=" + encodeURIComponent(g[h]));
                        f.length && b.push(f), location.hash = b.join("&")
                    }
                }
            })
        }
    }
    if (e.footable === undefined || null === e.foobox) throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");
    var n = {
        bookmarkable: {
            enabled: !1
        }
    };
    e.footable.plugins.register(o, n)
})(jQuery, window);