mangroveorg/datawinners

View on GitHub
datawinners/media/javascript/data_tables/js/TableTools.min.js

Summary

Maintainability
F
1 wk
Test Coverage
// Simple Set Clipboard System
// Author: Joseph Huckaby
var ZeroClipboard_TableTools = {version:"1.0.4-TableTools2", clients:{}, moviePath:"", nextId:1, $:function (a) {
    "string" == typeof a && (a = document.getElementById(a));
    if (!a.addClass)a.hide = function () {
        this.style.display = "none"
    }, a.show = function () {
        this.style.display = ""
    }, a.addClass = function (a) {
        this.removeClass(a);
        this.className += " " + a
    }, a.removeClass = function (a) {
        this.className = this.className.replace(RegExp("\\s*" + a + "\\s*"), " ").replace(/^\s+/, "").replace(/\s+$/, "")
    }, a.hasClass = function (a) {
        return!!this.className.match(RegExp("\\s*" +
            a + "\\s*"))
    };
    return a
}, setMoviePath:function (a) {
    this.moviePath = a
}, dispatch:function (a, b, c) {
    (a = this.clients[a]) && a.receiveEvent(b, c)
}, register:function (a, b) {
    this.clients[a] = b
}, getDOMObjectPosition:function (a) {
    var b = {left:0, top:0, width:a.width ? a.width : a.offsetWidth, height:a.height ? a.height : a.offsetHeight};
    if ("" != a.style.width)b.width = a.style.width.replace("px", "");
    if ("" != a.style.height)b.height = a.style.height.replace("px", "");
    for (; a;)b.left += a.offsetLeft, b.top += a.offsetTop, a = a.offsetParent;
    return b
},
    Client:function (a) {
        this.handlers = {};
        this.id = ZeroClipboard_TableTools.nextId++;
        this.movieId = "ZeroClipboard_TableToolsMovie_" + this.id;
        ZeroClipboard_TableTools.register(this.id, this);
        a && this.glue(a)
    }};
ZeroClipboard_TableTools.Client.prototype = {id:0, ready:!1, movie:null, clipText:"", fileName:"", action:"copy", handCursorEnabled:!0, cssEffects:!0, handlers:null, sized:!1, glue:function (a, b) {
    this.domElement = ZeroClipboard_TableTools.$(a);
    var c = 99;
    this.domElement.style.zIndex && (c = parseInt(this.domElement.style.zIndex) + 1);
    var d = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);
    this.div = document.createElement("div");
    var e = this.div.style;
    e.position = "absolute";
    e.left = this.domElement.offsetLeft + "px";
    e.top = this.domElement.offsetTop + "px";
    e.width = d.width + "px";
    e.height = d.height + "px";
    e.zIndex = c;
    if ("undefined" != typeof b && "" != b)this.div.title = b;
    if (0 != d.width && 0 != d.height)this.sized = !0;
    if (this.domElement.parentNode)this.domElement.parentNode.appendChild(this.div), this.div.innerHTML = this.getHTML(d.width, d.height)
}, positionElement:function () {
    var a = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement), b = this.div.style;
    b.position = "absolute";
    b.left = this.domElement.offsetLeft + "px";
    b.top = this.domElement.offsetTop +
        "px";
    b.width = a.width + "px";
    b.height = a.height + "px";
    if (0 != a.width && 0 != a.height)this.sized = !0, b = this.div.childNodes[0], b.width = a.width, b.height = a.height
}, getHTML:function (a, b) {
    var c = "", d = "id=" + this.id + "&width=" + a + "&height=" + b;
    if (navigator.userAgent.match(/MSIE/))var e = location.href.match(/^https/i) ? "https://" : "http://", c = c + ('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="' + e + 'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="' + a + '" height="' +
        b + '" id="' + this.movieId + '" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="' + ZeroClipboard_TableTools.moviePath + '" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="' + d + '"/><param name="wmode" value="transparent"/></object>'); else c += '<embed id="' + this.movieId + '" src="' + ZeroClipboard_TableTools.moviePath +
        '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="' + a + '" height="' + b + '" name="' + this.movieId + '" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="' + d + '" wmode="transparent" />';
    return c
}, hide:function () {
    if (this.div)this.div.style.left = "-2000px"
}, show:function () {
    this.reposition()
}, destroy:function () {
    if (this.domElement && this.div) {
        this.hide();
        this.div.innerHTML =
            "";
        var a = document.getElementsByTagName("body")[0];
        try {
            a.removeChild(this.div)
        } catch (b) {
        }
        this.div = this.domElement = null
    }
}, reposition:function (a) {
    if (a)(this.domElement = ZeroClipboard_TableTools.$(a)) || this.hide();
    if (this.domElement && this.div) {
        var a = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement), b = this.div.style;
        b.left = "" + a.left + "px";
        b.top = "" + a.top + "px"
    }
}, clearText:function () {
    this.clipText = "";
    this.ready && this.movie.clearText()
}, appendText:function (a) {
    this.clipText += a;
    this.ready && this.movie.appendText(a)
},
    setText:function (a) {
        this.clipText = a;
        this.ready && this.movie.setText(a)
    }, setCharSet:function (a) {
        this.charSet = a;
        this.ready && this.movie.setCharSet(a)
    }, setBomInc:function (a) {
        this.incBom = a;
        this.ready && this.movie.setBomInc(a)
    }, setFileName:function (a) {
        this.fileName = a;
        this.ready && this.movie.setFileName(a)
    }, setAction:function (a) {
        this.action = a;
        this.ready && this.movie.setAction(a)
    }, addEventListener:function (a, b) {
        a = a.toString().toLowerCase().replace(/^on/, "");
        this.handlers[a] || (this.handlers[a] = []);
        this.handlers[a].push(b)
    },
    setHandCursor:function (a) {
        this.handCursorEnabled = a;
        this.ready && this.movie.setHandCursor(a)
    }, setCSSEffects:function (a) {
        this.cssEffects = !!a
    }, receiveEvent:function (a, b) {
        a = a.toString().toLowerCase().replace(/^on/, "");
        switch (a) {
            case "load":
                this.movie = document.getElementById(this.movieId);
                if (!this.movie) {
                    var c = this;
                    setTimeout(function () {
                        c.receiveEvent("load", null)
                    }, 1);
                    return
                }
                if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
                    c = this;
                    setTimeout(function () {
                        c.receiveEvent("load",
                            null)
                    }, 100);
                    this.ready = !0;
                    return
                }
                this.ready = !0;
                this.movie.clearText();
                this.movie.appendText(this.clipText);
                this.movie.setFileName(this.fileName);
                this.movie.setAction(this.action);
                this.movie.setCharSet(this.charSet);
                this.movie.setBomInc(this.incBom);
                this.movie.setHandCursor(this.handCursorEnabled);
                break;
            case "mouseover":
                this.domElement && this.cssEffects && this.recoverActive && this.domElement.addClass("active");
                break;
            case "mouseout":
                if (this.domElement && this.cssEffects && (this.recoverActive = !1, this.domElement.hasClass("active")))this.domElement.removeClass("active"),
                    this.recoverActive = !0;
                break;
            case "mousedown":
                this.domElement && this.cssEffects && this.domElement.addClass("active");
                break;
            case "mouseup":
                if (this.domElement && this.cssEffects)this.domElement.removeClass("active"), this.recoverActive = !1
        }
        if (this.handlers[a])for (var d = 0, e = this.handlers[a].length; d < e; d++) {
            var f = this.handlers[a][d];
            if ("function" == typeof f)f(this, b); else if ("object" == typeof f && 2 == f.length)f[0][f[1]](this, b); else if ("string" == typeof f)window[f](this, b)
        }
    }};


/*
 * File:        TableTools.min.js
 * Version:     2.0.3
 * Author:      Allan Jardine (www.sprymedia.co.uk)
 * 
 * Copyright 2009-2011 Allan Jardine, all rights reserved.
 *
 * This source file is free software, under either the GPL v2 license or a
 * BSD (3 point) style license, as supplied with this software.
 * 
 * This source file is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
 */
var TableTools;
(function (e, m, f) {
    TableTools = function (a, b) {
        (!this.CLASS || "TableTools" != this.CLASS) && alert("Warning: TableTools must be initialised with the keyword 'new'");
        this.s = {that:this, dt:null, print:{saveStart:-1, saveLength:-1, saveScroll:-1, funcEnd:function () {
        }}, buttonCounter:0, select:{type:"", selected:[], preRowSelect:null, postSelected:null, postDeselected:null, all:!1, selectedClass:""}, custom:{}, swfPath:"", buttonSet:[], master:!1};
        this.dom = {container:null, table:null, print:{hidden:[], message:null}, collection:{collection:null,
            background:null}};
        this.fnSettings = function () {
            return this.s
        };
        "undefined" == typeof b && (b = {});
        this.s.dt = a.fnSettings();
        this._fnConstruct(b);
        return this
    };
    TableTools.prototype = {fnGetSelected:function () {
        return this._fnGetMasterSettings().select.selected
    }, fnGetSelectedData:function () {
        for (var a = this._fnGetMasterSettings().select.selected, b = [], c = 0, d = a.length; c < d; c++)b.push(this.s.dt.oInstance.fnGetData(a[c]));
        return b
    }, fnIsSelected:function (a) {
        for (var b = this.fnGetSelected(), c = 0, d = b.length; c < d; c++)if (a == b[c])return!0;
        return!1
    }, fnSelectAll:function () {
        this._fnGetMasterSettings().that._fnRowSelectAll()
    }, fnSelectNone:function () {
        this._fnGetMasterSettings().that._fnRowDeselectAll()
    }, fnSelect:function (a) {
        this.fnIsSelected(a) || ("single" == this.s.select.type ? this._fnRowSelectSingle(a) : "multi" == this.s.select.type && this._fnRowSelectMulti(a))
    }, fnDeselect:function (a) {
        this.fnIsSelected(a) && ("single" == this.s.select.type ? this._fnRowSelectSingle(a) : "multi" == this.s.select.type && this._fnRowSelectMulti(a))
    }, fnGetTitle:function (a) {
        var b =
            "";
        if ("undefined" != typeof a.sTitle && "" !== a.sTitle)b = a.sTitle; else if (a = f.getElementsByTagName("title"), 0 < a.length)b = a[0].innerHTML;
        return 4 > "\u00a1".toString().length ? b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, "") : b.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g, "")
    }, fnCalcColRatios:function (a) {
        var b = this.s.dt.aoColumns, a = this._fnColumnTargets(a.mColumns), c = [], d = 0, e = 0, g, f;
        for (g = 0, f = a.length; g < f; g++)if (a[g])d = b[g].nTh.offsetWidth, e += d, c.push(d);
        for (g = 0, f = c.length; g < f; g++)c[g] /= e;
        return c.join("\t")
    },
        fnGetTableData:function (a) {
            if (this.s.dt)return this._fnGetDataTablesData(a)
        }, fnSetText:function (a, b) {
            this._fnFlashSetText(a, b)
        }, fnResizeButtons:function () {
            for (var a in ZeroClipboard_TableTools.clients)if (a) {
                var b = ZeroClipboard_TableTools.clients[a];
                "undefined" != typeof b.domElement && b.domElement.parentNode == this.dom.container && b.positionElement()
            }
        }, fnResizeRequired:function () {
            for (var a in ZeroClipboard_TableTools.clients)if (a) {
                var b = ZeroClipboard_TableTools.clients[a];
                if ("undefined" != typeof b.domElement &&
                    b.domElement.parentNode == this.dom.container && !1 === b.sized)return!0
            }
            return!1
        }, _fnConstruct:function (a) {
            var b = this;
            this._fnCustomiseSettings(a);
            this.dom.container = f.createElement("div");
            this.dom.container.className = !this.s.dt.bJUI ? "DTTT_container" : "DTTT_container ui-buttonset ui-buttonset-multi";
            "none" != this.s.select.type && this._fnRowSelectConfig();
            this._fnButtonDefinations(this.s.buttonSet, this.dom.container);
            this.s.dt.aoDestroyCallback.push({sName:"TableTools", fn:function () {
                b.dom.container.innerHTML =
                    ""
            }})
        }, _fnCustomiseSettings:function (a) {
            if ("undefined" == typeof this.s.dt._TableToolsInit)this.s.master = !0, this.s.dt._TableToolsInit = !0;
            this.dom.table = this.s.dt.nTable;
            this.s.custom = e.extend({}, TableTools.DEFAULTS, a);
            this.s.swfPath = this.s.custom.sSwfPath;
            if ("undefined" != typeof ZeroClipboard_TableTools)ZeroClipboard_TableTools.moviePath = this.s.swfPath;
            this.s.select.type = this.s.custom.sRowSelect;
            this.s.select.preRowSelect = this.s.custom.fnPreRowSelect;
            this.s.select.postSelected = this.s.custom.fnRowSelected;
            this.s.select.postDeselected = this.s.custom.fnRowDeselected;
            this.s.select.selectedClass = this.s.custom.sSelectedClass;
            this.s.buttonSet = this.s.custom.aButtons
        }, _fnButtonDefinations:function (a, b) {
            for (var c, d = 0, j = a.length; d < j; d++) {
                if ("string" == typeof a[d]) {
                    if ("undefined" == typeof TableTools.BUTTONS[a[d]]) {
                        alert("TableTools: Warning - unknown button type: " + a[d]);
                        continue
                    }
                    c = e.extend({}, TableTools.BUTTONS[a[d]], !0)
                } else {
                    if ("undefined" == typeof TableTools.BUTTONS[a[d].sExtends]) {
                        alert("TableTools: Warning - unknown button type: " +
                            a[d].sExtends);
                        continue
                    }
                    c = e.extend({}, TableTools.BUTTONS[a[d].sExtends], !0);
                    c = e.extend(c, a[d], !0)
                }
                this.s.dt.bJUI ? (c.sButtonClass += " ui-button ui-state-default", c.sButtonClassHover += " ui-state-hover") : c.sButtonClassHover += " DTTT_button_hover";
                b.appendChild(this._fnCreateButton(c))
            }
        }, _fnCreateButton:function (a) {
            var b = "div" == a.sAction ? this._fnDivBase(a) : this._fnButtonBase(a);
            "print" == a.sAction ? this._fnPrintConfig(b, a) : a.sAction.match(/flash/) ? this._fnFlashConfig(b, a) : "text" == a.sAction ? this._fnTextConfig(b,
                a) : "div" == a.sAction ? this._fnTextConfig(b, a) : "collection" == a.sAction && (this._fnTextConfig(b, a), this._fnCollectionConfig(b, a));
            return b
        }, _fnButtonBase:function (a) {
            var b = f.createElement("button"), c = f.createElement("span"), d = this._fnGetMasterSettings();
            b.className = "DTTT_button " + a.sButtonClass;
            b.setAttribute("id", "ToolTables_" + this.s.dt.sInstance + "_" + d.buttonCounter);
            b.appendChild(c);
            c.innerHTML = a.sButtonText;
            d.buttonCounter++;
            return b
        }, _fnDivBase:function (a) {
            var b = f.createElement("div"), c = this._fnGetMasterSettings();
            b.className = a.sButtonClass;
            b.setAttribute("id", "ToolTables_" + this.s.dt.sInstance + "_" + c.buttonCounter);
            b.innerHTML = a.sButtonText;
            null !== a.nContent && b.appendChild(a.nContent);
            c.buttonCounter++;
            return b
        }, _fnGetMasterSettings:function () {
            if (this.s.master)return this.s;
            for (var a = TableTools._aInstances, b = 0, c = a.length; b < c; b++)if (this.dom.table == a[b].s.dt.nTable)return a[b].s
        }, _fnCollectionConfig:function (a, b) {
            var c = f.createElement("div");
            c.style.display = "none";
            c.className = !this.s.dt.bJUI ? "DTTT_collection" :
                "DTTT_collection ui-buttonset ui-buttonset-multi";
            b._collection = c;
            f.body.appendChild(c);
            this._fnButtonDefinations(b.aButtons, c)
        }, _fnCollectionShow:function (a, b) {
            var c = this, d = e(a).offset(), j = b._collection, g = d.left, d = d.top + e(a).outerHeight(), o = e(m).height(), h = e(f).height(), k = e(m).width(), n = e(f).width();
            j.style.position = "absolute";
            j.style.left = g + "px";
            j.style.top = d + "px";
            j.style.display = "block";
            e(j).css("opacity", 0);
            var l = f.createElement("div");
            l.style.position = "absolute";
            l.style.left = "0px";
            l.style.top =
                "0px";
            l.style.height = (o > h ? o : h) + "px";
            l.style.width = (k > n ? k : n) + "px";
            l.className = "DTTT_collection_background";
            e(l).css("opacity", 0);
            f.body.appendChild(l);
            f.body.appendChild(j);
            o = e(j).outerWidth();
            k = e(j).outerHeight();
            if (g + o > n)j.style.left = n - o + "px";
            if (d + k > h)j.style.top = d - k - e(a).outerHeight() + "px";
            this.dom.collection.collection = j;
            this.dom.collection.background = l;
            setTimeout(function () {
                e(j).animate({opacity:1}, 500);
                e(l).animate({opacity:0.25}, 500)
            }, 10);
            e(l).click(function () {
                c._fnCollectionHide.call(c, null,
                    null)
            })
        }, _fnCollectionHide:function (a, b) {
            if (!(null !== b && "collection" == b.sExtends) && null !== this.dom.collection.collection)e(this.dom.collection.collection).animate({opacity:0}, 500, function () {
                this.style.display = "none"
            }), e(this.dom.collection.background).animate({opacity:0}, 500, function () {
                this.parentNode.removeChild(this)
            }), this.dom.collection.collection = null, this.dom.collection.background = null
        }, _fnRowSelectConfig:function () {
            if (this.s.master) {
                var a = this;
                e(a.s.dt.nTable).addClass("DTTT_selectable");
                e("tr",
                    a.s.dt.nTBody).live("click", function (b) {
                        if (this.parentNode == a.s.dt.nTBody) {
                            var c = a.s.dt.oInstance.fnGetNodes();
                            -1 === e.inArray(this, c) || null !== a.s.select.preRowSelect && !a.s.select.preRowSelect.call(a, b) || ("single" == a.s.select.type ? a._fnRowSelectSingle.call(a, this) : a._fnRowSelectMulti.call(a, this))
                        }
                    });
                a.s.dt.aoDrawCallback.push({fn:function () {
                    a.s.select.all && a.s.dt.oFeatures.bServerSide && a.fnSelectAll()
                }, sName:"TableTools_select"})
            }
        }, _fnRowSelectSingle:function (a) {
            this.s.master && !e("td", a).hasClass(this.s.dt.oClasses.sRowEmpty) &&
            (e(a).hasClass(this.s.select.selectedClass) ? this._fnRowDeselect(a) : (0 !== this.s.select.selected.length && this._fnRowDeselectAll(), this.s.select.selected.push(a), e(a).addClass(this.s.select.selectedClass), null !== this.s.select.postSelected && this.s.select.postSelected.call(this, a)), TableTools._fnEventDispatch(this, "select", a))
        }, _fnRowSelectMulti:function (a) {
            this.s.master && !e("td", a).hasClass(this.s.dt.oClasses.sRowEmpty) && (e(a).hasClass(this.s.select.selectedClass) ? this._fnRowDeselect(a) : (this.s.select.selected.push(a),
                e(a).addClass(this.s.select.selectedClass), null !== this.s.select.postSelected && this.s.select.postSelected.call(this, a)), TableTools._fnEventDispatch(this, "select", a))
        }, _fnRowSelectAll:function () {
            if (this.s.master) {
                for (var a, b = 0, c = this.s.dt.aiDisplayMaster.length; b < c; b++)a = this.s.dt.aoData[this.s.dt.aiDisplayMaster[b]].nTr, e(a).hasClass(this.s.select.selectedClass) || (this.s.select.selected.push(a), e(a).addClass(this.s.select.selectedClass));
                null !== this.s.select.postSelected && this.s.select.postSelected.call(this,
                    null);
                this.s.select.all = !0;
                TableTools._fnEventDispatch(this, "select", null)
            }
        }, _fnRowDeselectAll:function () {
            if (this.s.master) {
                for (var a = this.s.select.selected.length - 1; 0 <= a; a--)this._fnRowDeselect(a, !1);
                null !== this.s.select.postDeselected && this.s.select.postDeselected.call(this, null);
                this.s.select.all = !1;
                TableTools._fnEventDispatch(this, "select", null)
            }
        }, _fnRowDeselect:function (a, b) {
            "undefined" != typeof a.nodeName && (a = e.inArray(a, this.s.select.selected));
            var c = this.s.select.selected[a];
            e(c).removeClass(this.s.select.selectedClass);
            this.s.select.selected.splice(a, 1);
            ("undefined" == typeof b || b) && null !== this.s.select.postDeselected && this.s.select.postDeselected.call(this, c);
            this.s.select.all = !1
        }, _fnTextConfig:function (a, b) {
            var c = this;
            null !== b.fnInit && b.fnInit.call(this, a, b);
            if ("" !== b.sToolTip)a.title = b.sToolTip;
            e(a).hover(function () {
                e(a).addClass(b.sButtonClassHover);
                null !== b.fnMouseover && b.fnMouseover.call(this, a, b, null)
            }, function () {
                e(a).removeClass(b.sButtonClassHover);
                null !== b.fnMouseout && b.fnMouseout.call(this, a, b, null)
            });
            null !== b.fnSelect && TableTools._fnEventListen(this, "select", function (d) {
                b.fnSelect.call(c, a, b, d)
            });
            e(a).click(function (d) {
                d.preventDefault();
                null !== b.fnClick && b.fnClick.call(c, a, b, null);
                null !== b.fnComplete && b.fnComplete.call(c, a, b, null, null);
                c._fnCollectionHide(a, b)
            })
        }, _fnFlashConfig:function (a, b) {
            var c = this, d = new ZeroClipboard_TableTools.Client;
            null !== b.fnInit && b.fnInit.call(this, a, b);
            d.setHandCursor(!0);
            "flash_save" == b.sAction ? (d.setAction("save"), d.setCharSet("utf16le" == b.sCharSet ? "UTF16LE" : "UTF8"),
                d.setBomInc(b.bBomInc), d.setFileName(b.sFileName.replace("*", this.fnGetTitle(b)))) : "flash_pdf" == b.sAction ? (d.setAction("pdf"), d.setFileName(b.sFileName.replace("*", this.fnGetTitle(b)))) : d.setAction("copy");
            d.addEventListener("mouseOver", function () {
                e(a).addClass(b.sButtonClassHover);
                null !== b.fnMouseover && b.fnMouseover.call(c, a, b, d)
            });
            d.addEventListener("mouseOut", function () {
                e(a).removeClass(b.sButtonClassHover);
                null !== b.fnMouseout && b.fnMouseout.call(c, a, b, d)
            });
            d.addEventListener("mouseDown", function () {
                null !==
                    b.fnClick && b.fnClick.call(c, a, b, d)
            });
            d.addEventListener("complete", function (e, g) {
                null !== b.fnComplete && b.fnComplete.call(c, a, b, d, g);
                c._fnCollectionHide(a, b)
            });
            this._fnFlashGlue(d, a, b.sToolTip)
        }, _fnFlashGlue:function (a, b, c) {
            var d = this, e = b.getAttribute("id");
            if (f.getElementById(e)) {
                if (a.glue(b, c), a.domElement.parentNode != a.div.parentNode && "undefined" == typeof d.__bZCWarning)d.s.dt.oApi._fnLog(this.s.dt, 0, "It looks like you are using the version of ZeroClipboard which came with TableTools 1. Please update to use the version that came with TableTools 2."),
                    d.__bZCWarning = !0
            } else setTimeout(function () {
                d._fnFlashGlue(a, b, c)
            }, 100)
        }, _fnFlashSetText:function (a, b) {
            var c = this._fnChunkData(b, 8192);
            a.clearText();
            for (var d = 0, e = c.length; d < e; d++)a.appendText(c[d])
        }, _fnColumnTargets:function (a) {
            var b = [], c = this.s.dt;
            if ("object" == typeof a) {
                for (i = 0, iLen = c.aoColumns.length; i < iLen; i++)b.push(!1);
                for (i = 0, iLen = a.length; i < iLen; i++)b[a[i]] = !0
            } else if ("visible" == a)for (i = 0, iLen = c.aoColumns.length; i < iLen; i++)b.push(c.aoColumns[i].bVisible ? !0 : !1); else if ("hidden" == a)for (i = 0,
                                                                                                                                                                      iLen = c.aoColumns.length; i < iLen; i++)b.push(c.aoColumns[i].bVisible ? !1 : !0); else if ("sortable" == a)for (i = 0, iLen = c.aoColumns.length; i < iLen; i++)b.push(c.aoColumns[i].bSortable ? !0 : !1); else for (i = 0, iLen = c.aoColumns.length; i < iLen; i++)b.push(!0);
            return b
        }, _fnNewline:function (a) {
            return"auto" == a.sNewLine ? navigator.userAgent.match(/Windows/) ? "\r\n" : "\n" : a.sNewLine
        }, _fnGetDataTablesData:function (a) {
            var b, c, d, j, g, f = [], h = "", k = this.s.dt, n = RegExp(a.sFieldBoundary, "g"), l = this._fnColumnTargets(a.mColumns), m = "undefined" != typeof a.bSelectedOnly ? a.bSelectedOnly : !1;
            if (a.bHeader) {
                g = [];
                for (b = 0, c = k.aoColumns.length; b < c; b++)l[b] && (h = k.aoColumns[b].sTitle.replace(/\n/g, " ").replace(/<.*?>/g, "").replace(/^\s+|\s+$/g, ""), h = this._fnHtmlDecode(h), g.push(this._fnBoundData(h, a.sFieldBoundary, n)));
                f.push(g.join(a.sFieldSeperator))
            }
            for (d = 0, j = k.aiDisplay.length; d < j; d++)if ("none" == this.s.select.type || !m || m && e(k.aoData[k.aiDisplay[d]].nTr).hasClass(this.s.select.selectedClass) || m && 0 == this.s.select.selected.length) {
                g = [];
                for (b = 0, c = k.aoColumns.length; b <
                    c; b++)l[b] && (h = k.oApi._fnGetCellData(k, k.aiDisplay[d], b, "display"), a.fnCellRender ? h = a.fnCellRender(h, b) + "" : "string" == typeof h ? (h = h.replace(/\n/g, " "), h = h.replace(/<img.*?\s+alt\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+)).*?>/gi, "$1$2$3"), h = h.replace(/<.*?>/g, "")) : h += "", h = h.replace(/^\s+/, "").replace(/\s+$/, ""), h = this._fnHtmlDecode(h), g.push(this._fnBoundData(h, a.sFieldBoundary, n)));
                f.push(g.join(a.sFieldSeperator))
            }
            if (a.bFooter && null !== k.nTFoot) {
                g = [];
                for (b = 0, c = k.aoColumns.length; b < c; b++)l[b] && null !==
                    k.aoColumns[b].nTf && (h = k.aoColumns[b].nTf.innerHTML.replace(/\n/g, " ").replace(/<.*?>/g, ""), h = this._fnHtmlDecode(h), g.push(this._fnBoundData(h, a.sFieldBoundary, n)));
                f.push(g.join(a.sFieldSeperator))
            }
            return _sLastData = f.join(this._fnNewline(a))
        }, _fnBoundData:function (a, b, c) {
            return"" === b ? a : b + a.replace(c, b + b) + b
        }, _fnChunkData:function (a, b) {
            for (var c = [], d = a.length, e = 0; e < d; e += b)e + b < d ? c.push(a.substring(e, e + b)) : c.push(a.substring(e, d));
            return c
        }, _fnHtmlDecode:function (a) {
            if (-1 == a.indexOf("&"))return a;
            var a =
                this._fnChunkData(a, 2048), b = f.createElement("div"), c, d, e, g = "";
            for (c = 0, d = a.length; c < d; c++)e = a[c].lastIndexOf("&"), -1 != e && 8 <= a[c].length && e > a[c].length - 8 && (a[c].substr(e), a[c] = a[c].substr(0, e)), b.innerHTML = a[c], g += b.childNodes[0].nodeValue;
            return g
        }, _fnPrintConfig:function (a, b) {
            var c = this;
            null !== b.fnInit && b.fnInit.call(this, a, b);
            if ("" !== b.sToolTip)a.title = b.sToolTip;
            e(a).hover(function () {
                e(a).addClass(b.sButtonClassHover)
            }, function () {
                e(a).removeClass(b.sButtonClassHover)
            });
            null !== b.fnSelect && TableTools._fnEventListen(this,
                "select", function (d) {
                    b.fnSelect.call(c, a, b, d)
                });
            e(a).click(function (d) {
                d.preventDefault();
                c._fnPrintStart.call(c, d, b);
                null !== b.fnClick && b.fnClick.call(c, a, b, null);
                null !== b.fnComplete && b.fnComplete.call(c, a, b, null, null);
                c._fnCollectionHide(a, b)
            })
        }, _fnPrintStart:function (a, b) {
            var c = this, d = this.s.dt;
            this._fnPrintHideNodes(d.nTable);
            this.s.print.saveStart = d._iDisplayStart;
            this.s.print.saveLength = d._iDisplayLength;
            if (b.bShowAll)d._iDisplayStart = 0, d._iDisplayLength = -1, d.oApi._fnCalculateEnd(d), d.oApi._fnDraw(d);
            ("" !== d.oScroll.sX || "" !== d.oScroll.sY) && this._fnPrintScrollStart(d);
            var d = d.aanFeatures, j;
            for (j in d)if ("i" != j && "t" != j && 1 == j.length)for (var g = 0, o = d[j].length; g < o; g++)this.dom.print.hidden.push({node:d[j][g], display:"block"}), d[j][g].style.display = "none";
            e(f.body).addClass("DTTT_Print");
            if ("" !== b.sInfo) {
                var h = f.createElement("div");
                h.className = "DTTT_print_info";
                h.innerHTML = b.sInfo;
                f.body.appendChild(h);
                setTimeout(function () {
                    e(h).fadeOut("normal", function () {
                        f.body.removeChild(h)
                    })
                }, 2E3)
            }
            if ("" !== b.sMessage)this.dom.print.message =
                f.createElement("div"), this.dom.print.message.className = "DTTT_PrintMessage", this.dom.print.message.innerHTML = b.sMessage, f.body.insertBefore(this.dom.print.message, f.body.childNodes[0]);
            this.s.print.saveScroll = e(m).scrollTop();
            m.scrollTo(0, 0);
            this.s.print.funcEnd = function (a) {
                c._fnPrintEnd.call(c, a)
            };
            e(f).bind("keydown", null, this.s.print.funcEnd)
        }, _fnPrintEnd:function (a) {
            if (27 == a.keyCode) {
                a.preventDefault();
                var a = this.s.dt, b = this.s.print, c = this.dom.print;
                this._fnPrintShowNodes();
                ("" !== a.oScroll.sX ||
                    "" !== a.oScroll.sY) && this._fnPrintScrollEnd();
                m.scrollTo(0, b.saveScroll);
                if (null !== c.message)f.body.removeChild(c.message), c.message = null;
                e(f.body).removeClass("DTTT_Print");
                a._iDisplayStart = b.saveStart;
                a._iDisplayLength = b.saveLength;
                a.oApi._fnCalculateEnd(a);
                a.oApi._fnDraw(a);
                e(f).unbind("keydown", this.s.print.funcEnd);
                this.s.print.funcEnd = null
            }
        }, _fnPrintScrollStart:function () {
            var a = this.s.dt;
            a.nScrollHead.getElementsByTagName("div")[0].getElementsByTagName("table");
            var b = a.nTable.parentNode, c = a.nTable.getElementsByTagName("thead");
            0 < c.length && a.nTable.removeChild(c[0]);
            null !== a.nTFoot && (c = a.nTable.getElementsByTagName("tfoot"), 0 < c.length && a.nTable.removeChild(c[0]));
            c = a.nTHead.cloneNode(!0);
            a.nTable.insertBefore(c, a.nTable.childNodes[0]);
            null !== a.nTFoot && (c = a.nTFoot.cloneNode(!0), a.nTable.insertBefore(c, a.nTable.childNodes[1]));
            if ("" !== a.oScroll.sX)a.nTable.style.width = e(a.nTable).outerWidth() + "px", b.style.width = e(a.nTable).outerWidth() + "px", b.style.overflow = "visible";
            if ("" !== a.oScroll.sY)b.style.height = e(a.nTable).outerHeight() +
                "px", b.style.overflow = "visible"
        }, _fnPrintScrollEnd:function () {
            var a = this.s.dt, b = a.nTable.parentNode;
            if ("" !== a.oScroll.sX)b.style.width = a.oApi._fnStringToCss(a.oScroll.sX), b.style.overflow = "auto";
            if ("" !== a.oScroll.sY)b.style.height = a.oApi._fnStringToCss(a.oScroll.sY), b.style.overflow = "auto"
        }, _fnPrintShowNodes:function () {
            for (var a = this.dom.print.hidden, b = 0, c = a.length; b < c; b++)a[b].node.style.display = a[b].display;
            a.splice(0, a.length)
        }, _fnPrintHideNodes:function (a) {
            for (var b = this.dom.print.hidden, c = a.parentNode,
                     d = c.childNodes, j = 0, g = d.length; j < g; j++)if (d[j] != a && 1 == d[j].nodeType) {
                var f = e(d[j]).css("display");
                if ("none" != f)b.push({node:d[j], display:f}), d[j].style.display = "none"
            }
            "BODY" != c.nodeName && this._fnPrintHideNodes(c)
        }};
    TableTools._aInstances = [];
    TableTools._aListeners = [];
    TableTools.fnGetMasters = function () {
        for (var a = [], b = 0, c = TableTools._aInstances.length; b < c; b++)TableTools._aInstances[b].s.master && a.push(TableTools._aInstances[b]);
        return a
    };
    TableTools.fnGetInstance = function (a) {
        "object" != typeof a && (a = f.getElementById(a));
        for (var b = 0, c = TableTools._aInstances.length; b < c; b++)if (TableTools._aInstances[b].s.master && TableTools._aInstances[b].dom.table == a)return TableTools._aInstances[b];
        return null
    };
    TableTools._fnEventListen = function (a, b, c) {
        TableTools._aListeners.push({that:a, type:b, fn:c})
    };
    TableTools._fnEventDispatch = function (a, b, c) {
        for (var d = TableTools._aListeners, e = 0, f = d.length; e < f; e++)a.dom.table == d[e].that.dom.table && d[e].type == b && d[e].fn(c)
    };
    TableTools.BUTTONS = {csv:{sAction:"flash_save", sCharSet:"utf8", bBomInc:!1,
        sFileName:"*.csv", sFieldBoundary:'"', sFieldSeperator:",", sNewLine:"auto", sTitle:"", sToolTip:"", sButtonClass:"DTTT_button_csv", sButtonClassHover:"DTTT_button_csv_hover", sButtonText:"CSV", mColumns:"all", bHeader:!0, bFooter:!0, bSelectedOnly:!1, fnMouseover:null, fnMouseout:null, fnClick:function (a, b, c) {
            this.fnSetText(c, this.fnGetTableData(b))
        }, fnSelect:null, fnComplete:null, fnInit:null, fnCellRender:null}, xls:{sAction:"flash_save", sCharSet:"utf16le", bBomInc:!0, sFileName:"*.csv", sFieldBoundary:"", sFieldSeperator:"\t",
        sNewLine:"auto", sTitle:"", sToolTip:"", sButtonClass:"DTTT_button_xls", sButtonClassHover:"DTTT_button_xls_hover", sButtonText:"Excel", mColumns:"all", bHeader:!0, bFooter:!0, bSelectedOnly:!1, fnMouseover:null, fnMouseout:null, fnClick:function (a, b, c) {
            this.fnSetText(c, this.fnGetTableData(b))
        }, fnSelect:null, fnComplete:null, fnInit:null, fnCellRender:null}, copy:{sAction:"flash_copy", sFieldBoundary:"", sFieldSeperator:"\t", sNewLine:"auto", sToolTip:"", sButtonClass:"DTTT_button_copy", sButtonClassHover:"DTTT_button_copy_hover",
        sButtonText:"Copy", mColumns:"all", bHeader:!0, bFooter:!0, bSelectedOnly:!1, fnMouseover:null, fnMouseout:null, fnClick:function (a, b, c) {
            this.fnSetText(c, this.fnGetTableData(b))
        }, fnSelect:null, fnComplete:function (a, b, c, d) {
            a = d.split("\n").length;
            a = null === this.s.dt.nTFoot ? a - 1 : a - 2;
            alert("Copied " + a + " row" + (1 == a ? "" : "s") + " to the clipboard")
        }, fnInit:null, fnCellRender:null}, pdf:{sAction:"flash_pdf", sFieldBoundary:"", sFieldSeperator:"\t", sNewLine:"\n", sFileName:"*.pdf", sToolTip:"", sTitle:"", sButtonClass:"DTTT_button_pdf",
        sButtonClassHover:"DTTT_button_pdf_hover", sButtonText:"PDF", mColumns:"all", bHeader:!0, bFooter:!1, bSelectedOnly:!1, fnMouseover:null, fnMouseout:null, sPdfOrientation:"portrait", sPdfSize:"A4", sPdfMessage:"", fnClick:function (a, b, c) {
            this.fnSetText(c, "title:" + this.fnGetTitle(b) + "\nmessage:" + b.sPdfMessage + "\ncolWidth:" + this.fnCalcColRatios(b) + "\norientation:" + b.sPdfOrientation + "\nsize:" + b.sPdfSize + "\n--/TableToolsOpts--\n" + this.fnGetTableData(b))
        }, fnSelect:null, fnComplete:null, fnInit:null, fnCellRender:null},
        print:{sAction:"print", sInfo:"<h6>Print view</h6><p>Please use your browser's print function to print this table. Press escape when finished.", sMessage:"", bShowAll:!0, sToolTip:"View print view", sButtonClass:"DTTT_button_print", sButtonClassHover:"DTTT_button_print_hover", sButtonText:"Print", fnMouseover:null, fnMouseout:null, fnClick:null, fnSelect:null, fnComplete:null, fnInit:null, fnCellRender:null}, text:{sAction:"text", sToolTip:"", sButtonClass:"DTTT_button_text", sButtonClassHover:"DTTT_button_text_hover",
            sButtonText:"Text button", mColumns:"all", bHeader:!0, bFooter:!0, bSelectedOnly:!1, fnMouseover:null, fnMouseout:null, fnClick:null, fnSelect:null, fnComplete:null, fnInit:null, fnCellRender:null}, select:{sAction:"text", sToolTip:"", sButtonClass:"DTTT_button_text", sButtonClassHover:"DTTT_button_text_hover", sButtonText:"Select button", mColumns:"all", bHeader:!0, bFooter:!0, fnMouseover:null, fnMouseout:null, fnClick:null, fnSelect:function (a) {
            0 !== this.fnGetSelected().length ? e(a).removeClass("DTTT_disabled") : e(a).addClass("DTTT_disabled")
        },
            fnComplete:null, fnInit:function (a) {
                e(a).addClass("DTTT_disabled")
            }, fnCellRender:null}, select_single:{sAction:"text", sToolTip:"", sButtonClass:"DTTT_button_text", sButtonClassHover:"DTTT_button_text_hover", sButtonText:"Select button", mColumns:"all", bHeader:!0, bFooter:!0, fnMouseover:null, fnMouseout:null, fnClick:null, fnSelect:function (a) {
            1 == this.fnGetSelected().length ? e(a).removeClass("DTTT_disabled") : e(a).addClass("DTTT_disabled")
        }, fnComplete:null, fnInit:function (a) {
            e(a).addClass("DTTT_disabled")
        }, fnCellRender:null},
        select_all:{sAction:"text", sToolTip:"", sButtonClass:"DTTT_button_text", sButtonClassHover:"DTTT_button_text_hover", sButtonText:"Select all", mColumns:"all", bHeader:!0, bFooter:!0, fnMouseover:null, fnMouseout:null, fnClick:function () {
            this.fnSelectAll()
        }, fnSelect:function (a) {
            this.fnGetSelected().length == this.s.dt.fnRecordsDisplay() ? e(a).addClass("DTTT_disabled") : e(a).removeClass("DTTT_disabled")
        }, fnComplete:null, fnInit:null, fnCellRender:null}, select_none:{sAction:"text", sToolTip:"", sButtonClass:"DTTT_button_text",
            sButtonClassHover:"DTTT_button_text_hover", sButtonText:"Deselect all", mColumns:"all", bHeader:!0, bFooter:!0, fnMouseover:null, fnMouseout:null, fnClick:function () {
                this.fnSelectNone()
            }, fnSelect:function (a) {
                0 !== this.fnGetSelected().length ? e(a).removeClass("DTTT_disabled") : e(a).addClass("DTTT_disabled")
            }, fnComplete:null, fnInit:function (a) {
                e(a).addClass("DTTT_disabled")
            }, fnCellRender:null}, ajax:{sAction:"text", sFieldBoundary:"", sFieldSeperator:"\t", sNewLine:"\n", sAjaxUrl:"/xhr.php", sToolTip:"", sButtonClass:"DTTT_button_text",
            sButtonClassHover:"DTTT_button_text_hover", sButtonText:"Ajax button", mColumns:"all", bHeader:!0, bFooter:!0, bSelectedOnly:!1, fnMouseover:null, fnMouseout:null, fnClick:function (a, b) {
                var c = this.fnGetTableData(b);
                e.ajax({url:b.sAjaxUrl, data:[
                    {name:"tableData", value:c}
                ], success:b.fnAjaxComplete, dataType:"json", type:"POST", cache:!1, error:function () {
                    alert("Error detected when sending table data to server")
                }})
            }, fnSelect:null, fnComplete:null, fnInit:null, fnAjaxComplete:function () {
                alert("Ajax complete")
            }, fnCellRender:null},
        div:{sAction:"div", sToolTip:"", sButtonClass:"DTTT_nonbutton", sButtonClassHover:"", sButtonText:"Text button", fnMouseover:null, fnMouseout:null, fnClick:null, fnSelect:null, fnComplete:null, fnInit:null, nContent:null, fnCellRender:null}, collection:{sAction:"collection", sToolTip:"", sButtonClass:"DTTT_button_collection", sButtonClassHover:"DTTT_button_collection_hover", sButtonText:"Collection", fnMouseover:null, fnMouseout:null, fnClick:function (a, b) {
            this._fnCollectionShow(a, b)
        }, fnSelect:null, fnComplete:null, fnInit:null,
            fnCellRender:null}};
    TableTools.DEFAULTS = {sSwfPath:"media/swf/copy_csv_xls_pdf.swf", sRowSelect:"none", sSelectedClass:"DTTT_selected", fnPreRowSelect:null, fnRowSelected:null, fnRowDeselected:null, aButtons:["copy", "csv", "xls", "pdf", "print"]};
    TableTools.prototype.CLASS = "TableTools";
    TableTools.VERSION = "2.0.3";
    TableTools.prototype.VERSION = TableTools.VERSION;
    "function" == typeof e.fn.dataTable && "function" == typeof e.fn.dataTableExt.fnVersionCheck && e.fn.dataTableExt.fnVersionCheck("1.8.2") ? e.fn.dataTableExt.aoFeatures.push({fnInit:function (a) {
        a =
            new TableTools(a.oInstance, "undefined" != typeof a.oInit.oTableTools ? a.oInit.oTableTools : {});
        TableTools._aInstances.push(a);
        return a.dom.container
    }, cFeature:"T", sFeature:"TableTools"}) : alert("Warning: TableTools 2 requires DataTables 1.8.2 or newer - www.datatables.net/download")
})(jQuery, window, document);