/*1.5.4*/
(function () {
    var f = 0,
        k = [],
        m = {}, i = {}, a = {
            "<": "lt",
            ">": "gt",
            "&": "amp",
            '"': "quot",
            "'": "#39"
        }, l = /[<>&\"\']/g,
        b, c = window.setTimeout,
        d = {}, e;

    function h() {
        this.returnValue = false
    }
    function j() {
        this.cancelBubble = true
    }(function (n) {
        var o = n.split(/,/),
            p, r, q;
        for (p = 0; p < o.length; p += 2) {
            q = o[p + 1].split(/ /);
            for (r = 0; r < q.length; r++) {
                i[q[r]] = o[p]
            }
        }
    })("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mpga mpega mp2 mp3,audio/x-wav,wav,audio/mp4,m4a,image/bmp,bmp,image/gif,gif,image/jpeg,jpeg jpg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/vnd.rn-realvideo,rv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe");
    var g = {
        VERSION: "1.5.4",
        STOPPED: 1,
        STARTED: 2,
        QUEUED: 1,
        UPLOADING: 2,
        FAILED: 4,
        DONE: 5,
        GENERIC_ERROR: -100,
        HTTP_ERROR: -200,
        IO_ERROR: -300,
        SECURITY_ERROR: -400,
        INIT_ERROR: -500,
        FILE_SIZE_ERROR: -600,
        FILE_EXTENSION_ERROR: -601,
        IMAGE_FORMAT_ERROR: -700,
        IMAGE_MEMORY_ERROR: -701,
        IMAGE_DIMENSIONS_ERROR: -702,
        mimeTypes: i,
        ua: (function () {
            var r = navigator,
                q = r.userAgent,
                s = r.vendor,
                o, n, p;
            o = /WebKit/.test(q);
            p = o && s.indexOf("Apple") !== -1;
            n = window.opera && window.opera.buildNumber;
            return {
                windows: navigator.platform.indexOf("Win") !== -1,
                ie: !o && !n && (/MSIE/gi).test(q) && (/Explorer/gi).test(r.appName),
                webkit: o,
                gecko: !o && /Gecko/.test(q),
                safari: p,
                opera: !! n
            }
        }()),
        typeOf: function (n) {
            return ({}).toString.call(n).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()
        },
        extend: function (n) {
            g.each(arguments, function (o, p) {
                if (p > 0) {
                    g.each(o, function (r, q) {
                        n[q] = r
                    })
                }
            });
            return n
        },
        cleanName: function (n) {
            var o, p;
            p = [/[\300-\306]/g, "A", /[\340-\346]/g, "a", /\307/g, "C", /\347/g, "c", /[\310-\313]/g, "E", /[\350-\353]/g, "e", /[\314-\317]/g, "I", /[\354-\357]/g, "i", /\321/g, "N", /\361/g, "n", /[\322-\330]/g, "O", /[\362-\370]/g, "o", /[\331-\334]/g, "U", /[\371-\374]/g, "u"];
            for (o = 0; o < p.length; o += 2) {
                n = n.replace(p[o], p[o + 1])
            }
            n = n.replace(/\s+/g, "_");
            n = n.replace(/[^a-z0-9_\-\.]+/gi, "");
            return n
        },
        addRuntime: function (n, o) {
            o.name = n;
            k[n] = o;
            k.push(o);
            return o
        },
        guid: function () {
            var n = new Date().getTime().toString(32),
                o;
            for (o = 0; o < 5; o++) {
                n += Math.floor(Math.random() * 65535).toString(32)
            }
            return (g.guidPrefix || "p") + n + (f++).toString(32)
        },
        buildUrl: function (o, n) {
            var p = "";
            g.each(n, function (r, q) {
                p += (p ? "&" : "") + encodeURIComponent(q) + "=" + encodeURIComponent(r)
            });
            if (p) {
                o += (o.indexOf("?") > 0 ? "&" : "?") + p
            }
            return o
        },
        each: function (q, r) {
            var p, o, n;
            if (q) {
                p = q.length;
                if (p === b) {
                    for (o in q) {
                        if (q.hasOwnProperty(o)) {
                            if (r(q[o], o) === false) {
                                return
                            }
                        }
                    }
                } else {
                    for (n = 0; n < p; n++) {
                        if (r(q[n], n) === false) {
                            return
                        }
                    }
                }
            }
        },
        formatSize: function (n) {
            if (n === b || /\D/.test(n)) {
                return g.translate("N/A")
            }
            if (n > 1073741824) {
                return Math.round(n / 1073741824, 1) + " GB"
            }
            if (n > 1048576) {
                return Math.round(n / 1048576, 1) + " MB"
            }
            if (n > 1024) {
                return Math.round(n / 1024, 1) + " KB"
            }
            return n + " b"
        },
        getPos: function (o, s) {
            var t = 0,
                r = 0,
                v, u = document,
                p, q;
            o = o;
            s = s || u.body;

            function n(B) {
                var z, A, w = 0,
                    C = 0;
                if (B) {
                    A = B.getBoundingClientRect();
                    z = u.compatMode === "CSS1Compat" ? u.documentElement : u.body;
                    w = A.left + z.scrollLeft;
                    C = A.top + z.scrollTop
                }
                return {
                    x: w,
                    y: C
                }
            }
            if (o && o.getBoundingClientRect && ((navigator.userAgent.indexOf("MSIE") > 0) && (u.documentMode < 8))) {
                p = n(o);
                q = n(s);
                return {
                    x: p.x - q.x,
                    y: p.y - q.y
                }
            }
            v = o;
            while (v && v != s && v.nodeType) {
                t += v.offsetLeft || 0;
                r += v.offsetTop || 0;
                v = v.offsetParent
            }
            v = o.parentNode;
            while (v && v != s && v.nodeType) {
                t -= v.scrollLeft || 0;
                r -= v.scrollTop || 0;
                v = v.parentNode
            }
            return {
                x: t,
                y: r
            }
        },
        getSize: function (n) {
            return {
                w: n.offsetWidth || n.clientWidth,
                h: n.offsetHeight || n.clientHeight
            }
        },
        parseSize: function (n) {
            var o;
            if (typeof (n) == "string") {
                n = /^([0-9]+)([mgk]?)$/.exec(n.toLowerCase().replace(/[^0-9mkg]/g, ""));
                o = n[2];
                n = +n[1];
                if (o == "g") {
                    n *= 1073741824
                }
                if (o == "m") {
                    n *= 1048576
                }
                if (o == "k") {
                    n *= 1024
                }
            }
            return n
        },
        xmlEncode: function (n) {
            return n ? ("" + n).replace(l, function (o) {
                return a[o] ? "&" + a[o] + ";" : o
            }) : n
        },
        toArray: function (p) {
            var o, n = [];
            for (o = 0; o < p.length; o++) {
                n[o] = p[o]
            }
            return n
        },
        inArray: function (p, q) {
            if (q) {
                if (Array.prototype.indexOf) {
                    return Array.prototype.indexOf.call(q, p)
                }
                for (var n = 0, o = q.length; n < o; n++) {
                    if (q[n] === p) {
                        return n
                    }
                }
            }
            return -1
        },
        addI18n: function (n) {
            return g.extend(m, n)
        },
        translate: function (n) {
            return m[n] || n
        },
        isEmptyObj: function (n) {
            if (n === b) {
                return true
            }
            for (var o in n) {
                return false
            }
            return true
        },
        hasClass: function (p, o) {
            var n;
            if (p.className == "") {
                return false
            }
            n = new RegExp("(^|\\s+)" + o + "(\\s+|$)");
            return n.test(p.className)
        },
        addClass: function (o, n) {
            if (!g.hasClass(o, n)) {
                o.className = o.className == "" ? n : o.className.replace(/\s+$/, "") + " " + n
            }
        },
        removeClass: function (p, o) {
            var n = new RegExp("(^|\\s+)" + o + "(\\s+|$)");
            p.className = p.className.replace(n, function (r, q, s) {
                return q === " " && s === " " ? " " : ""
            })
        },
        getStyle: function (o, n) {
            return  $(o).css(n);
        },
        addEvent: function (s, n, t) {
            var r, q, p, o;
            o = arguments[3];
            n = n.toLowerCase();
            if (e === b) {
                e = "Plupload_" + g.guid()
            }
            if (s.addEventListener) {
                r = t;
                s.addEventListener(n, r, false)
            } else {
                if (s.attachEvent) {
                    r = function () {
                        var u = window.event;
                        if (!u.target) {
                            u.target = u.srcElement
                        }
                        u.preventDefault = h;
                        u.stopPropagation = j;
                        t(u)
                    };
                    s.attachEvent("on" + n, r)
                }
            }
            if (s[e] === b) {
                s[e] = g.guid()
            }
            if (!d.hasOwnProperty(s[e])) {
                d[s[e]] = {}
            }
            q = d[s[e]];
            if (!q.hasOwnProperty(n)) {
                q[n] = []
            }
            q[n].push({
                func: r,
                orig: t,
                key: o
            })
        },
        removeEvent: function (s, n) {
            var q, t, p;
            if (typeof (arguments[2]) == "function") {
                t = arguments[2]
            } else {
                p = arguments[2]
            }
            n = n.toLowerCase();
            if (s[e] && d[s[e]] && d[s[e]][n]) {
                q = d[s[e]][n]
            } else {
                return
            }
            for (var o = q.length - 1; o >= 0; o--) {
                if (q[o].key === p || q[o].orig === t) {
                    if (s.removeEventListener) {
                        s.removeEventListener(n, q[o].func, false)
                    } else {
                        if (s.detachEvent) {
                            s.detachEvent("on" + n, q[o].func)
                        }
                    }
                    q[o].orig = null;
                    q[o].func = null;
                    q.splice(o, 1);
                    if (t !== b) {
                        break
                    }
                }
            }
            if (!q.length) {
                delete d[s[e]][n]
            }
            if (g.isEmptyObj(d[s[e]])) {
                delete d[s[e]];
                try {
                    delete s[e]
                } catch (r) {
                    s[e] = b
                }
            }
        },
        removeAllEvents: function (o) {
            var n = arguments[1];
            if (o[e] === b || !o[e]) {
                return
            }
            g.each(d[o[e]], function (q, p) {
                g.removeEvent(o, p, n)
            })
        }
    };
    g.Uploader = function (r) {
        var o = {}, u, t = [],
            q, p = false;
        u = new g.QueueProgress();
        r = g.extend({
            chunk_size: 0,
            multipart: true,
            multi_selection: true,
            file_data_name: "file",
            filters: []
        }, r);

        function s() {
            var w, x = 0,
                v;
            if (this.state == g.STARTED) {
                for (v = 0; v < t.length; v++) {
                    if (!w && t[v].status == g.QUEUED) {
                        w = t[v];
                        w.status = g.UPLOADING;
                        if (this.trigger("BeforeUpload", w)) {
                            this.trigger("UploadFile", w)
                        }
                    } else {
                        x++
                    }
                }
                if (x == t.length) {
                    this.stop();
                    this.trigger("UploadComplete", t)
                }
            }
        }
        function n() {
            var w, v;
            u.reset();
            for (w = 0; w < t.length; w++) {
                v = t[w];
                if (v.size !== b) {
                    u.size += v.size;
                    u.loaded += v.loaded
                } else {
                    u.size = b
                }
                if (v.status == g.DONE) {
                    u.uploaded++
                } else {
                    if (v.status == g.FAILED) {
                        u.failed++
                    } else {
                        u.queued++
                    }
                }
            }
            if (u.size === b) {
                u.percent = t.length > 0 ? Math.ceil(u.uploaded / t.length * 100) : 0
            } else {
                u.bytesPerSec = Math.ceil(u.loaded / ((+new Date() - q || 1) / 1000));
                u.percent = u.size > 0 ? Math.ceil(u.loaded / u.size * 100) : 0
            }
        }
        g.extend(this, {
            state: g.STOPPED,
            runtime: "",
            features: {},
            files: t,
            settings: r,
            total: u,
            id: g.guid(),
            init: function () {
                var A = this,
                    B, x, w, z = 0,
                    y;
                if (typeof (r.preinit) == "function") {
                    r.preinit(A)
                } else {
                    g.each(r.preinit, function (D, C) {
                        A.bind(C, D)
                    })
                }
                r.page_url = r.page_url || document.location.pathname.replace(/\/[^\/]+$/g, "/");
                if (!/^(\w+:\/\/|\/)/.test(r.url)) {
                    r.url = r.page_url + r.url
                }
                r.chunk_size = g.parseSize(r.chunk_size);
                r.max_file_size = g.parseSize(r.max_file_size);
                A.bind("FilesAdded", function (C, F) {
                    var E, D, H = 0,
                        I, G = r.filters;
                    if (G && G.length) {
                        I = [];
                        g.each(G, function (J) {
                            g.each(J.extensions.split(/,/), function (K) {
                                if (/^\s*\*\s*$/.test(K)) {
                                    I.push("\\.*")
                                } else {
                                    I.push("\\." + K.replace(new RegExp("[" + ("/^$.*+?|()[]{}\\".replace(/./g, "\\$&")) + "]", "g"), "\\$&"))
                                }
                            })
                        });
                        I = new RegExp(I.join("|") + "$", "i")
                    }
                    for (E = 0; E < F.length; E++) {
                        D = F[E];
                        D.loaded = 0;
                        D.percent = 0;
                        D.status = g.QUEUED;
                        if (I && !I.test(D.name)) {
                            C.trigger("Error", {
                                code: g.FILE_EXTENSION_ERROR,
                                message: g.translate("File extension error."),
                                file: D
                            });
                            continue
                        }
                        if (D.size !== b && D.size > r.max_file_size) {
                            C.trigger("Error", {
                                code: g.FILE_SIZE_ERROR,
                                message: g.translate("File size error."),
                                file: D
                            });
                            continue
                        }
                        t.push(D);
                        H++
                    }
                    if (H) {
                        c(function () {
                            A.trigger("QueueChanged");
                            A.refresh()
                        }, 1)
                    } else {
                        return false
                    }
                });
                if (r.unique_names) {
                    A.bind("UploadFile", function (C, D) {
                        var F = D.name.match(/\.([^.]+)$/),
                            E = "tmp";
                        if (F) {
                            E = F[1]
                        }
                        D.target_name = D.id + "." + E
                    })
                }
                A.bind("UploadProgress", function (C, D) {
                    D.percent = D.size > 0 ? Math.ceil(D.loaded / D.size * 100) : 100;
                    n()
                });
                A.bind("StateChanged", function (C) {
                    if (C.state == g.STARTED) {
                        q = (+new Date())
                    } else {
                        if (C.state == g.STOPPED) {
                            for (B = C.files.length - 1; B >= 0; B--) {
                                if (C.files[B].status == g.UPLOADING) {
                                    C.files[B].status = g.QUEUED;
                                    n()
                                }
                            }
                        }
                    }
                });
                A.bind("QueueChanged", n);
                A.bind("Error", function (C, D) {
                    if (D.file) {
                        D.file.status = g.FAILED;
                        n();
                        if (C.state == g.STARTED) {
                            c(function () {
                                s.call(A)
                            }, 1)
                        }
                    }
                });
                A.bind("FileUploaded", function (C, D) {
                    D.status = g.DONE;
                    D.loaded = D.size;
                    C.trigger("UploadProgress", D);
                    c(function () {
                        s.call(A)
                    }, 1)
                });
                if (r.runtimes) {
                    x = [];
                    y = r.runtimes.split(/\s?,\s?/);
                    for (B = 0; B < y.length; B++) {
                        if (k[y[B]]) {
                            x.push(k[y[B]])
                        }
                    }
                } else {
                    x = k
                }
                function v() {
                    var F = x[z++],
                        E, C, D;
                    if (F) {
                        E = F.getFeatures();
                        C = A.settings.required_features;
                        if (C) {
                            C = C.split(",");
                            for (D = 0; D < C.length; D++) {
                                if (!E[C[D]]) {
                                    v();
                                    return
                                }
                            }
                        }
                        F.init(A, function (G) {
                            if (G && G.success) {
                                A.features = E;
                                A.runtime = F.name;
                                A.trigger("Init", {
                                    runtime: F.name
                                });
                                A.trigger("PostInit");
                                A.refresh()
                            } else {
                                v()
                            }
                        })
                    } else {
                        A.trigger("Error", {
                            code: g.INIT_ERROR,
                            message: g.translate("Init error.")
                        })
                    }
                }
                v();
                if (typeof (r.init) == "function") {
                    r.init(A)
                } else {
                    g.each(r.init, function (D, C) {
                        A.bind(C, D)
                    })
                }
            },
            refresh: function () {
                this.trigger("Refresh")
            },
            start: function () {
                if (t.length && this.state != g.STARTED) {
                    this.state = g.STARTED;
                    this.trigger("StateChanged");
                    s.call(this)
                }
            },
            stop: function () {
                if (this.state != g.STOPPED) {
                    this.state = g.STOPPED;
                    this.trigger("CancelUpload");
                    this.trigger("StateChanged")
                }
            },
            disableBrowse: function () {
                p = arguments[0] !== b ? arguments[0] : true;
                this.trigger("DisableBrowse", p)
            },
            getFile: function (w) {
                var v;
                for (v = t.length - 1; v >= 0; v--) {
                    if (t[v].id === w) {
                        return t[v]
                    }
                }
            },
            removeFile: function (w) {
                var v;
                for (v = t.length - 1; v >= 0; v--) {
                    if (t[v].id === w.id) {
                        return this.splice(v, 1)[0]
                    }
                }
            },
            splice: function (x, v) {
                var w;
                w = t.splice(x === b ? 0 : x, v === b ? t.length : v);
                this.trigger("FilesRemoved", w);
                this.trigger("QueueChanged");
                return w
            },
            trigger: function (w) {
                var y = o[w.toLowerCase()],
                    x, v;
                if (y) {
                    v = Array.prototype.slice.call(arguments);
                    v[0] = this;
                    for (x = 0; x < y.length; x++) {
                        if (y[x].func.apply(y[x].scope, v) === false) {
                            return false
                        }
                    }
                }
                return true
            },
            hasEventListener: function (v) {
                return !!o[v.toLowerCase()]
            },
            bind: function (v, x, w) {
                var y;
                v = v.toLowerCase();
                y = o[v] || [];
                y.push({
                    func: x,
                    scope: w || this
                });
                o[v] = y
            },
            unbind: function (v) {
                v = v.toLowerCase();
                var y = o[v],
                    w, x = arguments[1];
                if (y) {
                    if (x !== b) {
                        for (w = y.length - 1; w >= 0; w--) {
                            if (y[w].func === x) {
                                y.splice(w, 1);
                                break
                            }
                        }
                    } else {
                        y = []
                    }
                    if (!y.length) {
                        delete o[v]
                    }
                }
            },
            unbindAll: function () {
                var v = this;
                g.each(o, function (x, w) {
                    v.unbind(w)
                })
            },
            destroy: function () {
                this.stop();
                this.trigger("Destroy");
                this.unbindAll()
            }
        })
    };
    g.File = function (q, o, p) {
        var n = this;
        n.id = q;
        n.name = o;
        n.size = p;
        n.loaded = 0;
        n.percent = 0;
        n.status = 0
    };
    g.Runtime = function () {
        this.getFeatures = function () {};
        this.init = function (n, o) {}
    };
    g.QueueProgress = function () {
        var n = this;
        n.size = 0;
        n.loaded = 0;
        n.uploaded = 0;
        n.failed = 0;
        n.queued = 0;
        n.percent = 0;
        n.bytesPerSec = 0;
        n.reset = function () {
            n.size = n.loaded = n.uploaded = n.failed = n.queued = n.percent = n.bytesPerSec = 0
        }
    };
    g.runtimes = {};
    window.plupload = g
})();