Matho/refinerycms-photo-gallery

View on GitHub
app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.full.js

Summary

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

    function h() {
        this.returnValue = false
    }

    function k() {
        this.cancelBubble = true
    }

    (function (o) {
        var p = o.split(/,/), q, s, r;
        for (q = 0; q < p.length; q += 2) {
            r = p[q + 1].split(/ /);
            for (s = 0; s < r.length; s++) {
                j[r[s]] = p[q]
            }
        }
    })("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:j, ua:(function () {
        var s = navigator, r = s.userAgent, t = s.vendor, p, o, q;
        p = /WebKit/.test(r);
        q = p && t.indexOf("Apple") !== -1;
        o = window.opera && window.opera.buildNumber;
        return{windows:navigator.platform.indexOf("Win") !== -1, ie:!p && !o && (/MSIE/gi).test(r) && (/Explorer/gi).test(s.appName), webkit:p, gecko:!p && /Gecko/.test(r), safari:q, opera:!!o}
    }()), typeOf:function (p) {
        return({}).toString.call(p).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()
    }, extend:function (o) {
        g.each(arguments, function (p, q) {
            if (q > 0) {
                g.each(p, function (s, r) {
                    o[r] = s
                })
            }
        });
        return o
    }, cleanName:function (o) {
        var p, q;
        q = [/[\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 (p = 0; p < q.length; p += 2) {
            o = o.replace(q[p], q[p + 1])
        }
        o = o.replace(/\s+/g, "_");
        o = o.replace(/[^a-z0-9_\-\.]+/gi, "");
        return o
    }, addRuntime:function (o, p) {
        p.name = o;
        l[o] = p;
        l.push(p);
        return p
    }, guid:function () {
        var o = new Date().getTime().toString(32), p;
        for (p = 0; p < 5; p++) {
            o += Math.floor(Math.random() * 65535).toString(32)
        }
        return(g.guidPrefix || "p") + o + (f++).toString(32)
    }, buildUrl:function (p, o) {
        var q = "";
        g.each(o, function (s, r) {
            q += (q ? "&" : "") + encodeURIComponent(r) + "=" + encodeURIComponent(s)
        });
        if (q) {
            p += (p.indexOf("?") > 0 ? "&" : "?") + q
        }
        return p
    }, each:function (r, s) {
        var q, p, o;
        if (r) {
            q = r.length;
            if (q === b) {
                for (p in r) {
                    if (r.hasOwnProperty(p)) {
                        if (s(r[p], p) === false) {
                            return
                        }
                    }
                }
            } else {
                for (o = 0; o < q; o++) {
                    if (s(r[o], o) === false) {
                        return
                    }
                }
            }
        }
    }, formatSize:function (o) {
        if (o === b || /\D/.test(o)) {
            return g.translate("N/A")
        }
        if (o > 1073741824) {
            return Math.round(o / 1073741824, 1) + " GB"
        }
        if (o > 1048576) {
            return Math.round(o / 1048576, 1) + " MB"
        }
        if (o > 1024) {
            return Math.round(o / 1024, 1) + " KB"
        }
        return o + " b"
    }, getPos:function (p, t) {
        var u = 0, s = 0, w, v = document, q, r;
        p = p;
        t = t || v.body;
        function o(C) {
            var A, B, z = 0, D = 0;
            if (C) {
                B = C.getBoundingClientRect();
                A = v.compatMode === "CSS1Compat" ? v.documentElement : v.body;
                z = B.left + A.scrollLeft;
                D = B.top + A.scrollTop
            }
            return{x:z, y:D}
        }

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

        function o() {
            var x, w;
            v.reset();
            for (x = 0; x < u.length; x++) {
                w = u[x];
                if (w.size !== b) {
                    v.size += w.size;
                    v.loaded += w.loaded
                } else {
                    v.size = b
                }
                if (w.status == g.DONE) {
                    v.uploaded++
                } else {
                    if (w.status == g.FAILED) {
                        v.failed++
                    } else {
                        v.queued++
                    }
                }
            }
            if (v.size === b) {
                v.percent = u.length > 0 ? Math.ceil(v.uploaded / u.length * 100) : 0
            } else {
                v.bytesPerSec = Math.ceil(v.loaded / ((+new Date() - r || 1) / 1000));
                v.percent = v.size > 0 ? Math.ceil(v.loaded / v.size * 100) : 0
            }
        }

        g.extend(this, {state:g.STOPPED, runtime:"", features:{}, files:u, settings:s, total:v, id:g.guid(), init:function () {
            var B = this, C, y, x, A = 0, z;
            if (typeof(s.preinit) == "function") {
                s.preinit(B)
            } else {
                g.each(s.preinit, function (E, D) {
                    B.bind(D, E)
                })
            }
            s.page_url = s.page_url || document.location.pathname.replace(/\/[^\/]+$/g, "/");
            if (!/^(\w+:\/\/|\/)/.test(s.url)) {
                s.url = s.page_url + s.url
            }
            s.chunk_size = g.parseSize(s.chunk_size);
            s.max_file_size = g.parseSize(s.max_file_size);
            B.bind("FilesAdded", function (D, G) {
                var F, E, I = 0, J, H = s.filters;
                if (H && H.length) {
                    J = [];
                    g.each(H, function (K) {
                        g.each(K.extensions.split(/,/), function (L) {
                            if (/^\s*\*\s*$/.test(L)) {
                                J.push("\\.*")
                            } else {
                                J.push("\\." + L.replace(new RegExp("[" + ("/^$.*+?|()[]{}\\".replace(/./g, "\\$&")) + "]", "g"), "\\$&"))
                            }
                        })
                    });
                    J = new RegExp(J.join("|") + "$", "i")
                }
                for (F = 0; F < G.length; F++) {
                    E = G[F];
                    E.loaded = 0;
                    E.percent = 0;
                    E.status = g.QUEUED;
                    if (J && !J.test(E.name)) {
                        D.trigger("Error", {code:g.FILE_EXTENSION_ERROR, message:g.translate("File extension error."), file:E});
                        continue
                    }
                    if (E.size !== b && E.size > s.max_file_size) {
                        D.trigger("Error", {code:g.FILE_SIZE_ERROR, message:g.translate("File size error."), file:E});
                        continue
                    }
                    u.push(E);
                    I++
                }
                if (I) {
                    c(function () {
                        B.trigger("QueueChanged");
                        B.refresh()
                    }, 1)
                } else {
                    return false
                }
            });
            if (s.unique_names) {
                B.bind("UploadFile", function (D, E) {
                    var G = E.name.match(/\.([^.]+)$/), F = "tmp";
                    if (G) {
                        F = G[1]
                    }
                    E.target_name = E.id + "." + F
                })
            }
            B.bind("UploadProgress", function (D, E) {
                E.percent = E.size > 0 ? Math.ceil(E.loaded / E.size * 100) : 100;
                o()
            });
            B.bind("StateChanged", function (D) {
                if (D.state == g.STARTED) {
                    r = (+new Date())
                } else {
                    if (D.state == g.STOPPED) {
                        for (C = D.files.length - 1; C >= 0; C--) {
                            if (D.files[C].status == g.UPLOADING) {
                                D.files[C].status = g.QUEUED;
                                o()
                            }
                        }
                    }
                }
            });
            B.bind("QueueChanged", o);
            B.bind("Error", function (D, E) {
                if (E.file) {
                    E.file.status = g.FAILED;
                    o();
                    if (D.state == g.STARTED) {
                        c(function () {
                            t.call(B)
                        }, 1)
                    }
                }
            });
            B.bind("FileUploaded", function (D, E) {
                E.status = g.DONE;
                E.loaded = E.size;
                D.trigger("UploadProgress", E);
                c(function () {
                    t.call(B)
                }, 1)
            });
            if (s.runtimes) {
                y = [];
                z = s.runtimes.split(/\s?,\s?/);
                for (C = 0; C < z.length; C++) {
                    if (l[z[C]]) {
                        y.push(l[z[C]])
                    }
                }
            } else {
                y = l
            }
            function w() {
                var G = y[A++], F, D, E;
                if (G) {
                    F = G.getFeatures();
                    D = B.settings.required_features;
                    if (D) {
                        D = D.split(",");
                        for (E = 0; E < D.length; E++) {
                            if (!F[D[E]]) {
                                w();
                                return
                            }
                        }
                    }
                    G.init(B, function (H) {
                        if (H && H.success) {
                            B.features = F;
                            B.runtime = G.name;
                            B.trigger("Init", {runtime:G.name});
                            B.trigger("PostInit");
                            B.refresh()
                        } else {
                            w()
                        }
                    })
                } else {
                    B.trigger("Error", {code:g.INIT_ERROR, message:g.translate("Init error.")})
                }
            }

            w();
            if (typeof(s.init) == "function") {
                s.init(B)
            } else {
                g.each(s.init, function (E, D) {
                    B.bind(D, E)
                })
            }
        }, refresh:function () {
            this.trigger("Refresh")
        }, start:function () {
            if (u.length && this.state != g.STARTED) {
                this.state = g.STARTED;
                this.trigger("StateChanged");
                t.call(this)
            }
        }, stop:function () {
            if (this.state != g.STOPPED) {
                this.state = g.STOPPED;
                this.trigger("CancelUpload");
                this.trigger("StateChanged")
            }
        }, disableBrowse:function () {
            q = arguments[0] !== b ? arguments[0] : true;
            this.trigger("DisableBrowse", q)
        }, getFile:function (x) {
            var w;
            for (w = u.length - 1; w >= 0; w--) {
                if (u[w].id === x) {
                    return u[w]
                }
            }
        }, removeFile:function (x) {
            var w;
            for (w = u.length - 1; w >= 0; w--) {
                if (u[w].id === x.id) {
                    return this.splice(w, 1)[0]
                }
            }
        }, splice:function (y, w) {
            var x;
            x = u.splice(y === b ? 0 : y, w === b ? u.length : w);
            this.trigger("FilesRemoved", x);
            this.trigger("QueueChanged");
            return x
        }, trigger:function (x) {
            var z = p[x.toLowerCase()], y, w;
            if (z) {
                w = Array.prototype.slice.call(arguments);
                w[0] = this;
                for (y = 0; y < z.length; y++) {
                    if (z[y].func.apply(z[y].scope, w) === false) {
                        return false
                    }
                }
            }
            return true
        }, hasEventListener:function (w) {
            return !!p[w.toLowerCase()]
        }, bind:function (w, y, x) {
            var z;
            w = w.toLowerCase();
            z = p[w] || [];
            z.push({func:y, scope:x || this});
            p[w] = z
        }, unbind:function (w) {
            w = w.toLowerCase();
            var z = p[w], x, y = arguments[1];
            if (z) {
                if (y !== b) {
                    for (x = z.length - 1; x >= 0; x--) {
                        if (z[x].func === y) {
                            z.splice(x, 1);
                            break
                        }
                    }
                } else {
                    z = []
                }
                if (!z.length) {
                    delete p[w]
                }
            }
        }, unbindAll:function () {
            var w = this;
            g.each(p, function (y, x) {
                w.unbind(x)
            })
        }, destroy:function () {
            this.stop();
            this.trigger("Destroy");
            this.unbindAll()
        }})
    };
    g.File = function (r, p, q) {
        var o = this;
        o.id = r;
        o.name = p;
        o.size = q;
        o.loaded = 0;
        o.percent = 0;
        o.status = 0
    };
    g.Runtime = function () {
        this.getFeatures = function () {
        };
        this.init = function (o, p) {
        }
    };
    g.QueueProgress = function () {
        var o = this;
        o.size = 0;
        o.loaded = 0;
        o.uploaded = 0;
        o.failed = 0;
        o.queued = 0;
        o.percent = 0;
        o.bytesPerSec = 0;
        o.reset = function () {
            o.size = o.loaded = o.uploaded = o.failed = o.queued = o.percent = o.bytesPerSec = 0
        }
    };
    g.runtimes = {};
    window.plupload = g
})();
(function () {
    if (window.google && google.gears) {
        return
    }
    var a = null;
    if (typeof GearsFactory != "undefined") {
        a = new GearsFactory()
    } else {
        try {
            a = new ActiveXObject("Gears.Factory");
            if (a.getBuildInfo().indexOf("ie_mobile") != -1) {
                a.privateSetGlobalObject(this)
            }
        } catch (b) {
            if ((typeof navigator.mimeTypes != "undefined") && navigator.mimeTypes["application/x-googlegears"]) {
                a = document.createElement("object");
                a.style.display = "none";
                a.width = 0;
                a.height = 0;
                a.type = "application/x-googlegears";
                document.documentElement.appendChild(a)
            }
        }
    }
    if (!a) {
        return
    }
    if (!window.google) {
        window.google = {}
    }
    if (!google.gears) {
        google.gears = {factory:a}
    }
})();
(function (e, b, c, d) {
    var f = {};

    function a(h, k, m) {
        var g, j, l, o;
        j = google.gears.factory.create("beta.canvas");
        try {
            j.decode(h);
            if (!k.width) {
                k.width = j.width
            }
            if (!k.height) {
                k.height = j.height
            }
            o = Math.min(width / j.width, height / j.height);
            if (o < 1 || (o === 1 && m === "image/jpeg")) {
                j.resize(Math.round(j.width * o), Math.round(j.height * o));
                if (k.quality) {
                    return j.encode(m, {quality:k.quality / 100})
                }
                return j.encode(m)
            }
        } catch (n) {
        }
        return h
    }

    c.runtimes.Gears = c.addRuntime("gears", {getFeatures:function () {
        return{dragdrop:true, jpgresize:true, pngresize:true, chunks:true, progress:true, multipart:true, multi_selection:true}
    }, init:function (l, n) {
        var m, h, g = false;
        if (!e.google || !google.gears) {
            return n({success:false})
        }
        try {
            m = google.gears.factory.create("beta.desktop")
        } catch (k) {
            return n({success:false})
        }
        function j(q) {
            var p, o, r = [], s;
            for (o = 0; o < q.length; o++) {
                p = q[o];
                s = c.guid();
                f[s] = p.blob;
                r.push(new c.File(s, p.name, p.blob.length))
            }
            l.trigger("FilesAdded", r)
        }

        l.bind("PostInit", function () {
            var p = l.settings, o = b.getElementById(p.drop_element);
            if (o) {
                c.addEvent(o, "dragover", function (q) {
                    m.setDropEffect(q, "copy");
                    q.preventDefault()
                }, l.id);
                c.addEvent(o, "drop", function (r) {
                    var q = m.getDragData(r, "application/x-gears-files");
                    if (q) {
                        j(q.files)
                    }
                    r.preventDefault()
                }, l.id);
                o = 0
            }
            c.addEvent(b.getElementById(p.browse_button), "click", function (u) {
                var t = [], r, q, s;
                u.preventDefault();
                if (g) {
                    return
                }
                no_type_restriction:for (r = 0; r < p.filters.length; r++) {
                    s = p.filters[r].extensions.split(",");
                    for (q = 0; q < s.length; q++) {
                        if (s[q] === "*") {
                            t = [];
                            break no_type_restriction
                        }
                        t.push("." + s[q])
                    }
                }
                m.openFiles(j, {singleFile:!p.multi_selection, filter:t})
            }, l.id)
        });
        l.bind("CancelUpload", function () {
            if (h.abort) {
                h.abort()
            }
        });
        l.bind("UploadFile", function (u, r) {
            var w = 0, v, s, t = 0, q = u.settings.resize, o;
            if (q && /\.(png|jpg|jpeg)$/i.test(r.name)) {
                f[r.id] = a(f[r.id], q, /\.png$/i.test(r.name) ? "image/png" : "image/jpeg")
            }
            r.size = f[r.id].length;
            s = u.settings.chunk_size;
            o = s > 0;
            v = Math.ceil(r.size / s);
            if (!o) {
                s = r.size;
                v = 1
            }
            function p() {
                var C, y = u.settings.multipart, x = 0, B = {name:r.target_name || r.name}, z = u.settings.url;

                function A(E) {
                    var D, J = "----pluploadboundary" + c.guid(), G = "--", I = "\r\n", F, H;
                    if (y) {
                        h.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + J);
                        D = google.gears.factory.create("beta.blobbuilder");
                        c.each(c.extend(B, u.settings.multipart_params), function (L, K) {
                            D.append(G + J + I + 'Content-Disposition: form-data; name="' + K + '"' + I + I);
                            D.append(L + I)
                        });
                        H = c.mimeTypes[r.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream";
                        D.append(G + J + I + 'Content-Disposition: form-data; name="' + u.settings.file_data_name + '"; filename="' + r.name + '"' + I + "Content-Type: " + H + I + I);
                        D.append(E);
                        D.append(I + G + J + G + I);
                        F = D.getAsBlob();
                        x = F.length - E.length;
                        E = F
                    }
                    h.send(E)
                }

                if (r.status == c.DONE || r.status == c.FAILED || u.state == c.STOPPED) {
                    return
                }
                if (o) {
                    B.chunk = w;
                    B.chunks = v
                }
                C = Math.min(s, r.size - (w * s));
                if (!y) {
                    z = c.buildUrl(u.settings.url, B)
                }
                h = google.gears.factory.create("beta.httprequest");
                h.open("POST", z);
                if (!y) {
                    h.setRequestHeader("Content-Disposition", 'attachment; filename="' + r.name + '"');
                    h.setRequestHeader("Content-Type", "application/octet-stream")
                }
                c.each(u.settings.headers, function (E, D) {
                    h.setRequestHeader(D, E)
                });
                h.upload.onprogress = function (D) {
                    r.loaded = t + D.loaded - x;
                    u.trigger("UploadProgress", r)
                };
                h.onreadystatechange = function () {
                    var D;
                    if (h.readyState == 4 && u.state !== c.STOPPED) {
                        if (h.status == 200) {
                            D = {chunk:w, chunks:v, response:h.responseText, status:h.status};
                            u.trigger("ChunkUploaded", r, D);
                            if (D.cancelled) {
                                r.status = c.FAILED;
                                return
                            }
                            t += C;
                            if (++w >= v) {
                                r.status = c.DONE;
                                u.trigger("FileUploaded", r, {response:h.responseText, status:h.status})
                            } else {
                                p()
                            }
                        } else {
                            u.trigger("Error", {code:c.HTTP_ERROR, message:c.translate("HTTP Error."), file:r, chunk:w, chunks:v, status:h.status})
                        }
                    }
                };
                if (w < v) {
                    A(f[r.id].slice(w * s, C))
                }
            }

            p()
        });
        l.bind("DisableBrowse", function (o, p) {
            g = p
        });
        l.bind("Destroy", function (o) {
            var p, q, r = {browseButton:o.settings.browse_button, dropElm:o.settings.drop_element};
            for (p in r) {
                q = b.getElementById(r[p]);
                if (q) {
                    c.removeAllEvents(q, o.id)
                }
            }
        });
        n({success:true})
    }})
})(window, document, plupload);
(function (g, b, d, e) {
    var a = {}, h = {};

    function c(o) {
        var n, m = typeof o, j, l, k;
        if (o === e || o === null) {
            return"null"
        }
        if (m === "string") {
            n = "\bb\tt\nn\ff\rr\"\"''\\\\";
            return'"' + o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g, function (r, q) {
                var p = n.indexOf(q);
                if (p + 1) {
                    return"\\" + n.charAt(p + 1)
                }
                r = q.charCodeAt().toString(16);
                return"\\u" + "0000".substring(r.length) + r
            }) + '"'
        }
        if (m == "object") {
            j = o.length !== e;
            n = "";
            if (j) {
                for (l = 0; l < o.length; l++) {
                    if (n) {
                        n += ","
                    }
                    n += c(o[l])
                }
                n = "[" + n + "]"
            } else {
                for (k in o) {
                    if (o.hasOwnProperty(k)) {
                        if (n) {
                            n += ","
                        }
                        n += c(k) + ":" + c(o[k])
                    }
                }
                n = "{" + n + "}"
            }
            return n
        }
        return"" + o
    }

    function f(s) {
        var v = false, j = null, o = null, k, l, m, u, n, q = 0;
        try {
            try {
                o = new ActiveXObject("AgControl.AgControl");
                if (o.IsVersionSupported(s)) {
                    v = true
                }
                o = null
            } catch (r) {
                var p = navigator.plugins["Silverlight Plug-In"];
                if (p) {
                    k = p.description;
                    if (k === "1.0.30226.2") {
                        k = "2.0.30226.2"
                    }
                    l = k.split(".");
                    while (l.length > 3) {
                        l.pop()
                    }
                    while (l.length < 4) {
                        l.push(0)
                    }
                    m = s.split(".");
                    while (m.length > 4) {
                        m.pop()
                    }
                    do {
                        u = parseInt(m[q], 10);
                        n = parseInt(l[q], 10);
                        q++
                    } while (q < m.length && u === n);
                    if (u <= n && !isNaN(u)) {
                        v = true
                    }
                }
            }
        } catch (t) {
            v = false
        }
        return v
    }

    d.silverlight = {trigger:function (n, k) {
        var m = a[n], l, j;
        if (m) {
            j = d.toArray(arguments).slice(1);
            j[0] = "Silverlight:" + k;
            setTimeout(function () {
                m.trigger.apply(m, j)
            }, 0)
        }
    }};
    d.runtimes.Silverlight = d.addRuntime("silverlight", {getFeatures:function () {
        return{jpgresize:true, pngresize:true, chunks:true, progress:true, multipart:true, multi_selection:true}
    }, init:function (p, q) {
        var o, m = "", n = p.settings.filters, l, k = b.body;
        if (!f("2.0.31005.0") || (g.opera && g.opera.buildNumber)) {
            q({success:false});
            return
        }
        h[p.id] = false;
        a[p.id] = p;
        o = b.createElement("div");
        o.id = p.id + "_silverlight_container";
        d.extend(o.style, {position:"absolute", top:"0px", background:p.settings.shim_bgcolor || "transparent", zIndex:99999, width:"100px", height:"100px", overflow:"hidden", opacity:p.settings.shim_bgcolor || b.documentMode > 8 ? "" : 0.01});
        o.className = "plupload silverlight";
        if (p.settings.container) {
            k = b.getElementById(p.settings.container);
            if (d.getStyle(k, "position") === "static") {
                k.style.position = "relative"
            }
        }
        k.appendChild(o);
        for (l = 0; l < n.length; l++) {
            m += (m != "" ? "|" : "") + n[l].title + " | *." + n[l].extensions.replace(/,/g, ";*.")
        }
        o.innerHTML = '<object id="' + p.id + '_silverlight" data="data:application/x-silverlight," type="application/x-silverlight-2" style="outline:none;" width="1024" height="1024"><param name="source" value="' + p.settings.silverlight_xap_url + '"/><param name="background" value="Transparent"/><param name="windowless" value="true"/><param name="enablehtmlaccess" value="true"/><param name="initParams" value="id=' + p.id + ",filter=" + m + ",multiselect=" + p.settings.multi_selection + '"/></object>';
        function j() {
            return b.getElementById(p.id + "_silverlight").content.Upload
        }

        p.bind("Silverlight:Init", function () {
            var r, s = {};
            if (h[p.id]) {
                return
            }
            h[p.id] = true;
            p.bind("Silverlight:StartSelectFiles", function (t) {
                r = []
            });
            p.bind("Silverlight:SelectFile", function (t, w, u, v) {
                var x;
                x = d.guid();
                s[x] = w;
                s[w] = x;
                r.push(new d.File(x, u, v))
            });
            p.bind("Silverlight:SelectSuccessful", function () {
                if (r.length) {
                    p.trigger("FilesAdded", r)
                }
            });
            p.bind("Silverlight:UploadChunkError", function (t, w, u, x, v) {
                p.trigger("Error", {code:d.IO_ERROR, message:"IO Error.", details:v, file:t.getFile(s[w])})
            });
            p.bind("Silverlight:UploadFileProgress", function (t, x, u, w) {
                var v = t.getFile(s[x]);
                if (v.status != d.FAILED) {
                    v.size = w;
                    v.loaded = u;
                    t.trigger("UploadProgress", v)
                }
            });
            p.bind("Refresh", function (t) {
                var u, v, w;
                u = b.getElementById(t.settings.browse_button);
                if (u) {
                    v = d.getPos(u, b.getElementById(t.settings.container));
                    w = d.getSize(u);
                    d.extend(b.getElementById(t.id + "_silverlight_container").style, {top:v.y + "px", left:v.x + "px", width:w.w + "px", height:w.h + "px"})
                }
            });
            p.bind("Silverlight:UploadChunkSuccessful", function (t, w, u, z, y) {
                var x, v = t.getFile(s[w]);
                x = {chunk:u, chunks:z, response:y};
                t.trigger("ChunkUploaded", v, x);
                if (v.status != d.FAILED && t.state !== d.STOPPED) {
                    j().UploadNextChunk()
                }
                if (u == z - 1) {
                    v.status = d.DONE;
                    t.trigger("FileUploaded", v, {response:y})
                }
            });
            p.bind("Silverlight:UploadSuccessful", function (t, w, u) {
                var v = t.getFile(s[w]);
                v.status = d.DONE;
                t.trigger("FileUploaded", v, {response:u})
            });
            p.bind("FilesRemoved", function (t, v) {
                var u;
                for (u = 0; u < v.length; u++) {
                    j().RemoveFile(s[v[u].id])
                }
            });
            p.bind("UploadFile", function (t, v) {
                var w = t.settings, u = w.resize || {};
                j().UploadFile(s[v.id], t.settings.url, c({name:v.target_name || v.name, mime:d.mimeTypes[v.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream", chunk_size:w.chunk_size, image_width:u.width, image_height:u.height, image_quality:u.quality || 90, multipart:!!w.multipart, multipart_params:w.multipart_params || {}, file_data_name:w.file_data_name, headers:w.headers}))
            });
            p.bind("CancelUpload", function () {
                j().CancelUpload()
            });
            p.bind("Silverlight:MouseEnter", function (t) {
                var u, v;
                u = b.getElementById(p.settings.browse_button);
                v = t.settings.browse_button_hover;
                if (u && v) {
                    d.addClass(u, v)
                }
            });
            p.bind("Silverlight:MouseLeave", function (t) {
                var u, v;
                u = b.getElementById(p.settings.browse_button);
                v = t.settings.browse_button_hover;
                if (u && v) {
                    d.removeClass(u, v)
                }
            });
            p.bind("Silverlight:MouseLeftButtonDown", function (t) {
                var u, v;
                u = b.getElementById(p.settings.browse_button);
                v = t.settings.browse_button_active;
                if (u && v) {
                    d.addClass(u, v);
                    d.addEvent(b.body, "mouseup", function () {
                        d.removeClass(u, v)
                    })
                }
            });
            p.bind("Sliverlight:StartSelectFiles", function (t) {
                var u, v;
                u = b.getElementById(p.settings.browse_button);
                v = t.settings.browse_button_active;
                if (u && v) {
                    d.removeClass(u, v)
                }
            });
            p.bind("DisableBrowse", function (t, u) {
                j().DisableBrowse(u)
            });
            p.bind("Destroy", function (t) {
                var u;
                d.removeAllEvents(b.body, t.id);
                delete h[t.id];
                delete a[t.id];
                u = b.getElementById(t.id + "_silverlight_container");
                if (u) {
                    k.removeChild(u)
                }
            });
            q({success:true})
        })
    }})
})(window, document, plupload);
(function (f, b, d, e) {
    var a = {}, g = {};

    function c() {
        var h;
        try {
            h = navigator.plugins["Shockwave Flash"];
            h = h.description
        } catch (k) {
            try {
                h = new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")
            } catch (j) {
                h = "0.0"
            }
        }
        h = h.match(/\d+/g);
        return parseFloat(h[0] + "." + h[1])
    }

    d.flash = {trigger:function (k, h, j) {
        setTimeout(function () {
            var n = a[k], m, l;
            if (n) {
                n.trigger("Flash:" + h, j)
            }
        }, 0)
    }};
    d.runtimes.Flash = d.addRuntime("flash", {getFeatures:function () {
        return{jpgresize:true, pngresize:true, maxWidth:8091, maxHeight:8091, chunks:true, progress:true, multipart:true, multi_selection:true}
    }, init:function (n, p) {
        var l, m, h = 0, j = b.body;
        if (c() < 10) {
            p({success:false});
            return
        }
        g[n.id] = false;
        a[n.id] = n;
        l = b.getElementById(n.settings.browse_button);
        m = b.createElement("div");
        m.id = n.id + "_flash_container";
        d.extend(m.style, {position:"absolute", top:"0px", background:n.settings.shim_bgcolor || "transparent", zIndex:99999, width:"100%", height:"100%"});
        m.className = "plupload flash";
        if (n.settings.container) {
            j = b.getElementById(n.settings.container);
            if (d.getStyle(j, "position") === "static") {
                j.style.position = "relative"
            }
        }
        j.appendChild(m);
        (function () {
            var q, r;
            q = '<object id="' + n.id + '_flash" type="application/x-shockwave-flash" data="' + n.settings.flash_swf_url + '" ';
            if (d.ua.ie) {
                q += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '
            }
            q += 'width="100%" height="100%" style="outline:0"><param name="movie" value="' + n.settings.flash_swf_url + '" /><param name="flashvars" value="id=' + escape(n.id) + '" /><param name="wmode" value="transparent" /><param name="allowscriptaccess" value="always" /></object>';
            if (d.ua.ie) {
                r = b.createElement("div");
                m.appendChild(r);
                r.outerHTML = q;
                r = null
            } else {
                m.innerHTML = q
            }
        }());
        function o() {
            return b.getElementById(n.id + "_flash")
        }

        function k() {
            if (h++ > 5000) {
                p({success:false});
                return
            }
            if (g[n.id] === false) {
                setTimeout(k, 1)
            }
        }

        k();
        l = m = null;
        n.bind("Destroy", function (q) {
            var r;
            d.removeAllEvents(b.body, q.id);
            delete g[q.id];
            delete a[q.id];
            r = b.getElementById(q.id + "_flash_container");
            if (r) {
                j.removeChild(r)
            }
        });
        n.bind("Flash:Init", function () {
            var s = {}, r;
            try {
                o().setFileFilters(n.settings.filters, n.settings.multi_selection)
            } catch (q) {
                p({success:false});
                return
            }
            if (g[n.id]) {
                return
            }
            g[n.id] = true;
            n.bind("UploadFile", function (t, v) {
                var w = t.settings, u = n.settings.resize || {};
                o().uploadFile(s[v.id], w.url, {name:v.target_name || v.name, mime:d.mimeTypes[v.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream", chunk_size:w.chunk_size, width:u.width, height:u.height, quality:u.quality, multipart:w.multipart, multipart_params:w.multipart_params || {}, file_data_name:w.file_data_name, format:/\.(jpg|jpeg)$/i.test(v.name) ? "jpg" : "png", headers:w.headers, urlstream_upload:w.urlstream_upload})
            });
            n.bind("CancelUpload", function () {
                o().cancelUpload()
            });
            n.bind("Flash:UploadProcess", function (u, t) {
                var v = u.getFile(s[t.id]);
                if (v.status != d.FAILED) {
                    v.loaded = t.loaded;
                    v.size = t.size;
                    u.trigger("UploadProgress", v)
                }
            });
            n.bind("Flash:UploadChunkComplete", function (t, v) {
                var w, u = t.getFile(s[v.id]);
                w = {chunk:v.chunk, chunks:v.chunks, response:v.text};
                t.trigger("ChunkUploaded", u, w);
                if (u.status !== d.FAILED && t.state !== d.STOPPED) {
                    o().uploadNextChunk()
                }
                if (v.chunk == v.chunks - 1) {
                    u.status = d.DONE;
                    t.trigger("FileUploaded", u, {response:v.text})
                }
            });
            n.bind("Flash:SelectFiles", function (t, w) {
                var v, u, x = [], y;
                for (u = 0; u < w.length; u++) {
                    v = w[u];
                    y = d.guid();
                    s[y] = v.id;
                    s[v.id] = y;
                    x.push(new d.File(y, v.name, v.size))
                }
                if (x.length) {
                    n.trigger("FilesAdded", x)
                }
            });
            n.bind("Flash:SecurityError", function (t, u) {
                n.trigger("Error", {code:d.SECURITY_ERROR, message:d.translate("Security error."), details:u.message, file:n.getFile(s[u.id])})
            });
            n.bind("Flash:GenericError", function (t, u) {
                n.trigger("Error", {code:d.GENERIC_ERROR, message:d.translate("Generic error."), details:u.message, file:n.getFile(s[u.id])})
            });
            n.bind("Flash:IOError", function (t, u) {
                n.trigger("Error", {code:d.IO_ERROR, message:d.translate("IO error."), details:u.message, file:n.getFile(s[u.id])})
            });
            n.bind("Flash:ImageError", function (t, u) {
                n.trigger("Error", {code:parseInt(u.code, 10), message:d.translate("Image error."), file:n.getFile(s[u.id])})
            });
            n.bind("Flash:StageEvent:rollOver", function (t) {
                var u, v;
                u = b.getElementById(n.settings.browse_button);
                v = t.settings.browse_button_hover;
                if (u && v) {
                    d.addClass(u, v)
                }
            });
            n.bind("Flash:StageEvent:rollOut", function (t) {
                var u, v;
                u = b.getElementById(n.settings.browse_button);
                v = t.settings.browse_button_hover;
                if (u && v) {
                    d.removeClass(u, v)
                }
            });
            n.bind("Flash:StageEvent:mouseDown", function (t) {
                var u, v;
                u = b.getElementById(n.settings.browse_button);
                v = t.settings.browse_button_active;
                if (u && v) {
                    d.addClass(u, v);
                    d.addEvent(b.body, "mouseup", function () {
                        d.removeClass(u, v)
                    }, t.id)
                }
            });
            n.bind("Flash:StageEvent:mouseUp", function (t) {
                var u, v;
                u = b.getElementById(n.settings.browse_button);
                v = t.settings.browse_button_active;
                if (u && v) {
                    d.removeClass(u, v)
                }
            });
            n.bind("Flash:ExifData", function (t, u) {
                n.trigger("ExifData", n.getFile(s[u.id]), u.data)
            });
            n.bind("Flash:GpsData", function (t, u) {
                n.trigger("GpsData", n.getFile(s[u.id]), u.data)
            });
            n.bind("QueueChanged", function (t) {
                n.refresh()
            });
            n.bind("FilesRemoved", function (t, v) {
                var u;
                for (u = 0; u < v.length; u++) {
                    o().removeFile(s[v[u].id])
                }
            });
            n.bind("StateChanged", function (t) {
                n.refresh()
            });
            n.bind("Refresh", function (t) {
                var u, v, w;
                o().setFileFilters(n.settings.filters, n.settings.multi_selection);
                u = b.getElementById(t.settings.browse_button);
                if (u) {
                    v = d.getPos(u, b.getElementById(t.settings.container));
                    w = d.getSize(u);
                    d.extend(b.getElementById(t.id + "_flash_container").style, {top:v.y + "px", left:v.x + "px", width:w.w + "px", height:w.h + "px"})
                }
            });
            n.bind("DisableBrowse", function (t, u) {
                o().disableBrowse(u)
            });
            p({success:true})
        })
    }})
})(window, document, plupload);
(function (a) {
    a.runtimes.BrowserPlus = a.addRuntime("browserplus", {getFeatures:function () {
        return{dragdrop:true, jpgresize:true, pngresize:true, chunks:true, progress:true, multipart:true, multi_selection:true}
    }, init:function (g, j) {
        var e = window.BrowserPlus, h = {}, d = g.settings, c = d.resize;

        function f(o) {
            var n, m, k = [], l, p;
            for (m = 0; m < o.length; m++) {
                l = o[m];
                p = a.guid();
                h[p] = l;
                k.push(new a.File(p, l.name, l.size))
            }
            if (m) {
                g.trigger("FilesAdded", k)
            }
        }

        function b() {
            var k = false;
            g.bind("PostInit", function () {
                var o, m = d.drop_element, q = g.id + "_droptarget", l = document.getElementById(m), n;

                function r(t, s) {
                    e.DragAndDrop.AddDropTarget({id:t}, function (u) {
                        e.DragAndDrop.AttachCallbacks({id:t, hover:function (v) {
                            if (!v && s) {
                                s()
                            }
                        }, drop:function (v) {
                            if (s) {
                                s()
                            }
                            f(v)
                        }}, function () {
                        })
                    })
                }

                function p() {
                    document.getElementById(q).style.top = "-1000px"
                }

                if (l) {
                    if (document.attachEvent && (/MSIE/gi).test(navigator.userAgent)) {
                        o = document.createElement("div");
                        o.setAttribute("id", q);
                        a.extend(o.style, {position:"absolute", top:"-1000px", background:"red", filter:"alpha(opacity=0)", opacity:0});
                        document.body.appendChild(o);
                        a.addEvent(l, "dragenter", function (t) {
                            var s, u;
                            s = document.getElementById(m);
                            u = a.getPos(s);
                            a.extend(document.getElementById(q).style, {top:u.y + "px", left:u.x + "px", width:s.offsetWidth + "px", height:s.offsetHeight + "px"})
                        });
                        r(q, p)
                    } else {
                        r(m)
                    }
                }
                a.addEvent(document.getElementById(d.browse_button), "click", function (y) {
                    var s = [], u, t, x = d.filters, w, v;
                    y.preventDefault();
                    if (k) {
                        return
                    }
                    no_type_restriction:for (u = 0; u < x.length; u++) {
                        w = x[u].extensions.split(",");
                        for (t = 0; t < w.length; t++) {
                            if (w[t] === "*") {
                                s = [];
                                break no_type_restriction
                            }
                            v = a.mimeTypes[w[t]];
                            if (v && a.inArray(v, s) === -1) {
                                s.push(a.mimeTypes[w[t]])
                            }
                        }
                    }
                    e.FileBrowse.OpenBrowseDialog({mimeTypes:s}, function (z) {
                        if (z.success) {
                            f(z.value)
                        }
                    })
                });
                l = o = null
            });
            g.bind("CancelUpload", function () {
                e.Uploader.cancel({}, function () {
                })
            });
            g.bind("DisableBrowse", function (l, m) {
                k = m
            });
            g.bind("UploadFile", function (o, l) {
                var n = h[l.id], t = {}, m = o.settings.chunk_size, p, q = [];

                function s(u, w) {
                    var v;
                    if (l.status == a.FAILED) {
                        return
                    }
                    t.name = l.target_name || l.name;
                    if (m) {
                        t.chunk = "" + u;
                        t.chunks = "" + w
                    }
                    v = q.shift();
                    e.Uploader.upload({url:o.settings.url, files:{file:v}, cookies:document.cookies, postvars:a.extend(t, o.settings.multipart_params), progressCallback:function (z) {
                        var y, x = 0;
                        p[u] = parseInt(z.filePercent * v.size / 100, 10);
                        for (y = 0; y < p.length; y++) {
                            x += p[y]
                        }
                        l.loaded = x;
                        o.trigger("UploadProgress", l)
                    }}, function (y) {
                        var x, z;
                        if (y.success) {
                            x = y.value.statusCode;
                            if (m) {
                                o.trigger("ChunkUploaded", l, {chunk:u, chunks:w, response:y.value.body, status:x})
                            }
                            if (q.length > 0) {
                                s(++u, w)
                            } else {
                                l.status = a.DONE;
                                o.trigger("FileUploaded", l, {response:y.value.body, status:x});
                                if (x >= 400) {
                                    o.trigger("Error", {code:a.HTTP_ERROR, message:a.translate("HTTP Error."), file:l, status:x})
                                }
                            }
                        } else {
                            o.trigger("Error", {code:a.GENERIC_ERROR, message:a.translate("Generic Error."), file:l, details:y.error})
                        }
                    })
                }

                function r(u) {
                    l.size = u.size;
                    if (m) {
                        e.FileAccess.chunk({file:u, chunkSize:m}, function (x) {
                            if (x.success) {
                                var y = x.value, v = y.length;
                                p = Array(v);
                                for (var w = 0; w < v; w++) {
                                    p[w] = 0;
                                    q.push(y[w])
                                }
                                s(0, v)
                            }
                        })
                    } else {
                        p = Array(1);
                        q.push(u);
                        s(0, 1)
                    }
                }

                if (c && /\.(png|jpg|jpeg)$/i.test(l.name)) {
                    BrowserPlus.ImageAlter.transform({file:n, quality:c.quality || 90, actions:[
                        {scale:{maxwidth:c.width, maxheight:c.height}}
                    ]}, function (u) {
                        if (u.success) {
                            r(u.value.file)
                        }
                    })
                } else {
                    r(n)
                }
            });
            j({success:true})
        }

        if (e) {
            e.init(function (l) {
                var k = [
                    {service:"Uploader", version:"3"},
                    {service:"DragAndDrop", version:"1"},
                    {service:"FileBrowse", version:"1"},
                    {service:"FileAccess", version:"2"}
                ];
                if (c) {
                    k.push({service:"ImageAlter", version:"4"})
                }
                if (l.success) {
                    e.require({services:k}, function (m) {
                        if (m.success) {
                            b()
                        } else {
                            j()
                        }
                    })
                } else {
                    j()
                }
            })
        } else {
            j()
        }
    }})
})(plupload);
(function (h, k, j, e) {
    var c = {}, g;

    function m(o, p) {
        var n;
        if ("FileReader" in h) {
            n = new FileReader();
            n.readAsDataURL(o);
            n.onload = function () {
                p(n.result)
            }
        } else {
            return p(o.getAsDataURL())
        }
    }

    function l(o, p) {
        var n;
        if ("FileReader" in h) {
            n = new FileReader();
            n.readAsBinaryString(o);
            n.onload = function () {
                p(n.result)
            }
        } else {
            return p(o.getAsBinary())
        }
    }

    function d(r, p, n, v) {
        var q, o, u, s, t = this;
        m(c[r.id], function (w) {
            q = k.createElement("canvas");
            q.style.display = "none";
            k.body.appendChild(q);
            o = q.getContext("2d");
            u = new Image();
            u.onerror = u.onabort = function () {
                v({success:false})
            };
            u.onload = function () {
                var B, x, z, y, A;
                if (!p.width) {
                    p.width = u.width
                }
                if (!p.height) {
                    p.height = u.height
                }
                s = Math.min(p.width / u.width, p.height / u.height);
                if (s < 1 || (s === 1 && n === "image/jpeg")) {
                    B = Math.round(u.width * s);
                    x = Math.round(u.height * s);
                    q.width = B;
                    q.height = x;
                    o.drawImage(u, 0, 0, B, x);
                    if (n === "image/jpeg") {
                        y = new f(atob(w.substring(w.indexOf("base64,") + 7)));
                        if (y.headers && y.headers.length) {
                            A = new a();
                            if (A.init(y.get("exif")[0])) {
                                A.setExif("PixelXDimension", B);
                                A.setExif("PixelYDimension", x);
                                y.set("exif", A.getBinary());
                                if (t.hasEventListener("ExifData")) {
                                    t.trigger("ExifData", r, A.EXIF())
                                }
                                if (t.hasEventListener("GpsData")) {
                                    t.trigger("GpsData", r, A.GPS())
                                }
                            }
                        }
                        if (p.quality) {
                            try {
                                w = q.toDataURL(n, p.quality / 100)
                            } catch (C) {
                                w = q.toDataURL(n)
                            }
                        }
                    } else {
                        w = q.toDataURL(n)
                    }
                    w = w.substring(w.indexOf("base64,") + 7);
                    w = atob(w);
                    if (y && y.headers && y.headers.length) {
                        w = y.restore(w);
                        y.purge()
                    }
                    q.parentNode.removeChild(q);
                    v({success:true, data:w})
                } else {
                    v({success:false})
                }
            };
            u.src = w
        })
    }

    j.runtimes.Html5 = j.addRuntime("html5", {getFeatures:function () {
        var s, o, r, q, p, n;
        o = r = p = n = false;
        if (h.XMLHttpRequest) {
            s = new XMLHttpRequest();
            r = !!s.upload;
            o = !!(s.sendAsBinary || s.upload)
        }
        if (o) {
            q = !!(s.sendAsBinary || (h.Uint8Array && h.ArrayBuffer));
            p = !!(File && (File.prototype.getAsDataURL || h.FileReader) && q);
            n = !!(File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice))
        }
        g = j.ua.safari && j.ua.windows;
        return{html5:o, dragdrop:(function () {
            var t = k.createElement("div");
            return("draggable" in t) || ("ondragstart" in t && "ondrop" in t)
        }()), jpgresize:p, pngresize:p, multipart:p || !!h.FileReader || !!h.FormData, canSendBinary:q, cantSendBlobInFormData:!!(j.ua.gecko && h.FormData && h.FileReader && !FileReader.prototype.readAsArrayBuffer), progress:r, chunks:n, multi_selection:!(j.ua.safari && j.ua.windows), triggerDialog:(j.ua.gecko && h.FormData || j.ua.webkit)}
    }, init:function (p, r) {
        var n, q;

        function o(w) {
            var u, t, v = [], x, s = {};
            for (t = 0; t < w.length; t++) {
                u = w[t];
                if (s[u.name]) {
                    continue
                }
                s[u.name] = true;
                x = j.guid();
                c[x] = u;
                v.push(new j.File(x, u.fileName || u.name, u.fileSize || u.size))
            }
            if (v.length) {
                p.trigger("FilesAdded", v)
            }
        }

        n = this.getFeatures();
        if (!n.html5) {
            r({success:false});
            return
        }
        p.bind("Init", function (w) {
            var G, F, C = [], v, D, t = w.settings.filters, u, B, s = k.body, E;
            G = k.createElement("div");
            G.id = w.id + "_html5_container";
            j.extend(G.style, {position:"absolute", background:p.settings.shim_bgcolor || "transparent", width:"100px", height:"100px", overflow:"hidden", zIndex:99999, opacity:p.settings.shim_bgcolor ? "" : 0});
            G.className = "plupload html5";
            if (p.settings.container) {
                s = k.getElementById(p.settings.container);
                if (j.getStyle(s, "position") === "static") {
                    s.style.position = "relative"
                }
            }
            s.appendChild(G);
            no_type_restriction:for (v = 0; v < t.length; v++) {
                u = t[v].extensions.split(/,/);
                for (D = 0; D < u.length; D++) {
                    if (u[D] === "*") {
                        C = [];
                        break no_type_restriction
                    }
                    B = j.mimeTypes[u[D]];
                    if (B && j.inArray(B, C) === -1) {
                        C.push(B)
                    }
                }
            }
            G.innerHTML = '<input id="' + p.id + '_html5"  style="font-size:999px" type="file"  ' + (p.settings.multi_selection && p.features.multi_selection ? 'multiple="multiple"' : "") + " />";
            G.scrollTop = 100;
            E = k.getElementById(p.id + "_html5");
            if (w.features.triggerDialog) {
                j.extend(E.style, {position:"absolute", width:"100%", height:"100%"})
            } else {
                j.extend(E.style, {cssFloat:"right", styleFloat:"right"})
            }
            E.onchange = function () {
                o(this.files);
                this.value = ""
            };
            F = k.getElementById(w.settings.browse_button);
            if (F) {
                var z = w.settings.browse_button_hover, A = w.settings.browse_button_active, x = w.features.triggerDialog ? F : G;
                if (z) {
                    j.addEvent(x, "mouseover", function () {
                        j.addClass(F, z)
                    }, w.id);
                    j.addEvent(x, "mouseout", function () {
                        j.removeClass(F, z)
                    }, w.id)
                }
                if (A) {
                    j.addEvent(x, "mousedown", function () {
                        j.addClass(F, A)
                    }, w.id);
                    j.addEvent(k.body, "mouseup", function () {
                        j.removeClass(F, A)
                    }, w.id)
                }
                if (w.features.triggerDialog) {
                    j.addEvent(F, "click", function (H) {
                        var y = k.getElementById(w.id + "_html5");
                        if (y && !y.disabled) {
                            y.click()
                        }
                        H.preventDefault()
                    }, w.id)
                }
            }
        });
        p.bind("PostInit", function () {
            var s = k.getElementById(p.settings.drop_element);
            if (s) {
                if (g) {
                    j.addEvent(s, "dragenter", function (w) {
                        var v, t, u;
                        v = k.getElementById(p.id + "_drop");
                        if (!v) {
                            v = k.createElement("input");
                            v.setAttribute("type", "file");
                            v.setAttribute("id", p.id + "_drop");
                            v.setAttribute("multiple", "multiple");
                            j.addEvent(v, "change", function () {
                                o(this.files);
                                j.removeEvent(v, "change", p.id);
                                v.parentNode.removeChild(v)
                            }, p.id);
                            s.appendChild(v)
                        }
                        t = j.getPos(s, k.getElementById(p.settings.container));
                        u = j.getSize(s);
                        if (j.getStyle(s, "position") === "static") {
                            j.extend(s.style, {position:"relative"})
                        }
                        j.extend(v.style, {position:"absolute", display:"block", top:0, left:0, width:u.w + "px", height:u.h + "px", opacity:0})
                    }, p.id);
                    return
                }
                j.addEvent(s, "dragover", function (t) {
                    t.preventDefault()
                }, p.id);
                j.addEvent(s, "drop", function (u) {
                    var t = u.dataTransfer;
                    if (t && t.files) {
                        o(t.files)
                    }
                    u.preventDefault()
                }, p.id)
            }
        });
        p.bind("Refresh", function (s) {
            var t, u, v, x, w;
            t = k.getElementById(p.settings.browse_button);
            if (t) {
                u = j.getPos(t, k.getElementById(s.settings.container));
                v = j.getSize(t);
                x = k.getElementById(p.id + "_html5_container");
                j.extend(x.style, {top:u.y + "px", left:u.x + "px", width:v.w + "px", height:v.h + "px"});
                if (p.features.triggerDialog) {
                    if (j.getStyle(t, "position") === "static") {
                        j.extend(t.style, {position:"relative"})
                    }
                    w = parseInt(j.getStyle(t, "z-index"), 10);
                    if (isNaN(w)) {
                        w = 0
                    }
                    j.extend(t.style, {zIndex:w});
                    j.extend(x.style, {zIndex:w - 1})
                }
            }
        });
        p.bind("DisableBrowse", function (s, u) {
            var t = k.getElementById(s.id + "_html5");
            if (t) {
                t.disabled = u
            }
        });
        p.bind("CancelUpload", function () {
            if (q && q.abort) {
                q.abort()
            }
        });
        p.bind("UploadFile", function (s, u) {
            var v = s.settings, y, t;

            function x(A, D, z) {
                var B;
                if (File.prototype.slice) {
                    try {
                        A.slice();
                        return A.slice(D, z)
                    } catch (C) {
                        return A.slice(D, z - D)
                    }
                } else {
                    if (B = File.prototype.webkitSlice || File.prototype.mozSlice) {
                        return B.call(A, D, z)
                    } else {
                        return null
                    }
                }
            }

            function w(A) {
                var D = 0, C = 0, z = ("FileReader" in h) ? new FileReader : null;

                function B() {
                    var I, M, K, L, H, J, F, E = s.settings.url;

                    function G(V) {
                        var T = 0, N = "----pluploadboundary" + j.guid(), O, P = "--", U = "\r\n", R = "";
                        q = new XMLHttpRequest;
                        if (q.upload) {
                            q.upload.onprogress = function (W) {
                                u.loaded = Math.min(u.size, C + W.loaded - T);
                                s.trigger("UploadProgress", u)
                            }
                        }
                        q.onreadystatechange = function () {
                            var W, Y;
                            if (q.readyState == 4 && s.state !== j.STOPPED) {
                                try {
                                    W = q.status
                                } catch (X) {
                                    W = 0
                                }
                                if (W >= 400) {
                                    s.trigger("Error", {code:j.HTTP_ERROR, message:j.translate("HTTP Error."), file:u, status:W})
                                } else {
                                    if (K) {
                                        Y = {chunk:D, chunks:K, response:q.responseText, status:W};
                                        s.trigger("ChunkUploaded", u, Y);
                                        C += J;
                                        if (Y.cancelled) {
                                            u.status = j.FAILED;
                                            return
                                        }
                                        u.loaded = Math.min(u.size, (D + 1) * H)
                                    } else {
                                        u.loaded = u.size
                                    }
                                    s.trigger("UploadProgress", u);
                                    V = I = O = R = null;
                                    if (!K || ++D >= K) {
                                        u.status = j.DONE;
                                        s.trigger("FileUploaded", u, {response:q.responseText, status:W})
                                    } else {
                                        B()
                                    }
                                }
                            }
                        };
                        if (s.settings.multipart && n.multipart) {
                            L.name = u.target_name || u.name;
                            q.open("post", E, true);
                            j.each(s.settings.headers, function (X, W) {
                                q.setRequestHeader(W, X)
                            });
                            if (typeof(V) !== "string" && !!h.FormData) {
                                O = new FormData();
                                j.each(j.extend(L, s.settings.multipart_params), function (X, W) {
                                    O.append(W, X)
                                });
                                O.append(s.settings.file_data_name, V);
                                q.send(O);
                                return
                            }
                            if (typeof(V) === "string") {
                                q.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + N);
                                j.each(j.extend(L, s.settings.multipart_params), function (X, W) {
                                    R += P + N + U + 'Content-Disposition: form-data; name="' + W + '"' + U + U;
                                    R += unescape(encodeURIComponent(X)) + U
                                });
                                F = j.mimeTypes[u.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream";
                                R += P + N + U + 'Content-Disposition: form-data; name="' + s.settings.file_data_name + '"; filename="' + unescape(encodeURIComponent(u.name)) + '"' + U + "Content-Type: " + F + U + U + V + U + P + N + P + U;
                                T = R.length - V.length;
                                V = R;
                                if (q.sendAsBinary) {
                                    q.sendAsBinary(V)
                                } else {
                                    if (n.canSendBinary) {
                                        var S = new Uint8Array(V.length);
                                        for (var Q = 0; Q < V.length; Q++) {
                                            S[Q] = (V.charCodeAt(Q) & 255)
                                        }
                                        q.send(S.buffer)
                                    }
                                }
                                return
                            }
                        }
                        E = j.buildUrl(s.settings.url, j.extend(L, s.settings.multipart_params));
                        q.open("post", E, true);
                        q.setRequestHeader("Content-Type", "application/octet-stream");
                        j.each(s.settings.headers, function (X, W) {
                            q.setRequestHeader(W, X)
                        });
                        q.send(V)
                    }

                    if (u.status == j.DONE || u.status == j.FAILED || s.state == j.STOPPED) {
                        return
                    }
                    L = {name:u.target_name || u.name};
                    if (v.chunk_size && u.size > v.chunk_size && (n.chunks || typeof(A) == "string")) {
                        H = v.chunk_size;
                        K = Math.ceil(u.size / H);
                        J = Math.min(H, u.size - (D * H));
                        if (typeof(A) == "string") {
                            I = A.substring(D * H, D * H + J)
                        } else {
                            I = x(A, D * H, D * H + J)
                        }
                        L.chunk = D;
                        L.chunks = K
                    } else {
                        J = u.size;
                        I = A
                    }
                    if (s.settings.multipart && n.multipart && typeof(I) !== "string" && z && n.cantSendBlobInFormData && n.chunks && s.settings.chunk_size) {
                        z.onload = function () {
                            G(z.result)
                        };
                        z.readAsBinaryString(I)
                    } else {
                        G(I)
                    }
                }

                B()
            }

            y = c[u.id];
            if (n.jpgresize && s.settings.resize && /\.(png|jpg|jpeg)$/i.test(u.name)) {
                d.call(s, u, s.settings.resize, /\.png$/i.test(u.name) ? "image/png" : "image/jpeg", function (z) {
                    if (z.success) {
                        u.size = z.data.length;
                        w(z.data)
                    } else {
                        if (n.chunks) {
                            w(y)
                        } else {
                            l(y, w)
                        }
                    }
                })
            } else {
                if (!n.chunks && n.jpgresize) {
                    l(y, w)
                } else {
                    w(y)
                }
            }
        });
        p.bind("Destroy", function (s) {
            var u, v, t = k.body, w = {inputContainer:s.id + "_html5_container", inputFile:s.id + "_html5", browseButton:s.settings.browse_button, dropElm:s.settings.drop_element};
            for (u in w) {
                v = k.getElementById(w[u]);
                if (v) {
                    j.removeAllEvents(v, s.id)
                }
            }
            j.removeAllEvents(k.body, s.id);
            if (s.settings.container) {
                t = k.getElementById(s.settings.container)
            }
            t.removeChild(k.getElementById(w.inputContainer))
        });
        r({success:true})
    }});
    function b() {
        var q = false, o;

        function r(t, v) {
            var s = q ? 0 : -8 * (v - 1), w = 0, u;
            for (u = 0; u < v; u++) {
                w |= (o.charCodeAt(t + u) << Math.abs(s + u * 8))
            }
            return w
        }

        function n(u, s, t) {
            var t = arguments.length === 3 ? t : o.length - s - 1;
            o = o.substr(0, s) + u + o.substr(t + s)
        }

        function p(t, u, w) {
            var x = "", s = q ? 0 : -8 * (w - 1), v;
            for (v = 0; v < w; v++) {
                x += String.fromCharCode((u >> Math.abs(s + v * 8)) & 255)
            }
            n(x, t, w)
        }

        return{II:function (s) {
            if (s === e) {
                return q
            } else {
                q = s
            }
        }, init:function (s) {
            q = false;
            o = s
        }, SEGMENT:function (s, u, t) {
            switch (arguments.length) {
                case 1:
                    return o.substr(s, o.length - s - 1);
                case 2:
                    return o.substr(s, u);
                case 3:
                    n(t, s, u);
                    break;
                default:
                    return o
            }
        }, BYTE:function (s) {
            return r(s, 1)
        }, SHORT:function (s) {
            return r(s, 2)
        }, LONG:function (s, t) {
            if (t === e) {
                return r(s, 4)
            } else {
                p(s, t, 4)
            }
        }, SLONG:function (s) {
            var t = r(s, 4);
            return(t > 2147483647 ? t - 4294967296 : t)
        }, STRING:function (s, t) {
            var u = "";
            for (t += s; s < t; s++) {
                u += String.fromCharCode(r(s, 1))
            }
            return u
        }}
    }

    function f(s) {
        var u = {65505:{app:"EXIF", name:"APP1", signature:"Exif\0"}, 65506:{app:"ICC", name:"APP2", signature:"ICC_PROFILE\0"}, 65517:{app:"IPTC", name:"APP13", signature:"Photoshop 3.0\0"}}, t = [], r, n, p = e, q = 0, o;
        r = new b();
        r.init(s);
        if (r.SHORT(0) !== 65496) {
            return
        }
        n = 2;
        o = Math.min(1048576, s.length);
        while (n <= o) {
            p = r.SHORT(n);
            if (p >= 65488 && p <= 65495) {
                n += 2;
                continue
            }
            if (p === 65498 || p === 65497) {
                break
            }
            q = r.SHORT(n + 2) + 2;
            if (u[p] && r.STRING(n + 4, u[p].signature.length) === u[p].signature) {
                t.push({hex:p, app:u[p].app.toUpperCase(), name:u[p].name.toUpperCase(), start:n, length:q, segment:r.SEGMENT(n, q)})
            }
            n += q
        }
        r.init(null);
        return{headers:t, restore:function (y) {
            r.init(y);
            var w = new f(y);
            if (!w.headers) {
                return false
            }
            for (var x = w.headers.length; x > 0; x--) {
                var z = w.headers[x - 1];
                r.SEGMENT(z.start, z.length, "")
            }
            w.purge();
            n = r.SHORT(2) == 65504 ? 4 + r.SHORT(4) : 2;
            for (var x = 0, v = t.length; x < v; x++) {
                r.SEGMENT(n, 0, t[x].segment);
                n += t[x].length
            }
            return r.SEGMENT()
        }, get:function (x) {
            var y = [];
            for (var w = 0, v = t.length; w < v; w++) {
                if (t[w].app === x.toUpperCase()) {
                    y.push(t[w].segment)
                }
            }
            return y
        }, set:function (y, x) {
            var z = [];
            if (typeof(x) === "string") {
                z.push(x)
            } else {
                z = x
            }
            for (var w = ii = 0, v = t.length; w < v; w++) {
                if (t[w].app === y.toUpperCase()) {
                    t[w].segment = z[ii];
                    t[w].length = z[ii].length;
                    ii++
                }
                if (ii >= z.length) {
                    break
                }
            }
        }, purge:function () {
            t = [];
            r.init(null)
        }}
    }

    function a() {
        var q, n, o = {}, t;
        q = new b();
        n = {tiff:{274:"Orientation", 34665:"ExifIFDPointer", 34853:"GPSInfoIFDPointer"}, exif:{36864:"ExifVersion", 40961:"ColorSpace", 40962:"PixelXDimension", 40963:"PixelYDimension", 36867:"DateTimeOriginal", 33434:"ExposureTime", 33437:"FNumber", 34855:"ISOSpeedRatings", 37377:"ShutterSpeedValue", 37378:"ApertureValue", 37383:"MeteringMode", 37384:"LightSource", 37385:"Flash", 41986:"ExposureMode", 41987:"WhiteBalance", 41990:"SceneCaptureType", 41988:"DigitalZoomRatio", 41992:"Contrast", 41993:"Saturation", 41994:"Sharpness"}, gps:{0:"GPSVersionID", 1:"GPSLatitudeRef", 2:"GPSLatitude", 3:"GPSLongitudeRef", 4:"GPSLongitude"}};
        t = {ColorSpace:{1:"sRGB", 0:"Uncalibrated"}, MeteringMode:{0:"Unknown", 1:"Average", 2:"CenterWeightedAverage", 3:"Spot", 4:"MultiSpot", 5:"Pattern", 6:"Partial", 255:"Other"}, LightSource:{1:"Daylight", 2:"Fliorescent", 3:"Tungsten", 4:"Flash", 9:"Fine weather", 10:"Cloudy weather", 11:"Shade", 12:"Daylight fluorescent (D 5700 - 7100K)", 13:"Day white fluorescent (N 4600 -5400K)", 14:"Cool white fluorescent (W 3900 - 4500K)", 15:"White fluorescent (WW 3200 - 3700K)", 17:"Standard light A", 18:"Standard light B", 19:"Standard light C", 20:"D55", 21:"D65", 22:"D75", 23:"D50", 24:"ISO studio tungsten", 255:"Other"}, Flash:{0:"Flash did not fire.", 1:"Flash fired.", 5:"Strobe return light not detected.", 7:"Strobe return light detected.", 9:"Flash fired, compulsory flash mode", 13:"Flash fired, compulsory flash mode, return light not detected", 15:"Flash fired, compulsory flash mode, return light detected", 16:"Flash did not fire, compulsory flash mode", 24:"Flash did not fire, auto mode", 25:"Flash fired, auto mode", 29:"Flash fired, auto mode, return light not detected", 31:"Flash fired, auto mode, return light detected", 32:"No flash function", 65:"Flash fired, red-eye reduction mode", 69:"Flash fired, red-eye reduction mode, return light not detected", 71:"Flash fired, red-eye reduction mode, return light detected", 73:"Flash fired, compulsory flash mode, red-eye reduction mode", 77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", 79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", 89:"Flash fired, auto mode, red-eye reduction mode", 93:"Flash fired, auto mode, return light not detected, red-eye reduction mode", 95:"Flash fired, auto mode, return light detected, red-eye reduction mode"}, ExposureMode:{0:"Auto exposure", 1:"Manual exposure", 2:"Auto bracket"}, WhiteBalance:{0:"Auto white balance", 1:"Manual white balance"}, SceneCaptureType:{0:"Standard", 1:"Landscape", 2:"Portrait", 3:"Night scene"}, Contrast:{0:"Normal", 1:"Soft", 2:"Hard"}, Saturation:{0:"Normal", 1:"Low saturation", 2:"High saturation"}, Sharpness:{0:"Normal", 1:"Soft", 2:"Hard"}, GPSLatitudeRef:{N:"North latitude", S:"South latitude"}, GPSLongitudeRef:{E:"East longitude", W:"West longitude"}};
        function p(u, C) {
            var w = q.SHORT(u), z, F, G, B, A, v, x, D, E = [], y = {};
            for (z = 0; z < w; z++) {
                x = v = u + 12 * z + 2;
                G = C[q.SHORT(x)];
                if (G === e) {
                    continue
                }
                B = q.SHORT(x += 2);
                A = q.LONG(x += 2);
                x += 4;
                E = [];
                switch (B) {
                    case 1:
                    case 7:
                        if (A > 4) {
                            x = q.LONG(x) + o.tiffHeader
                        }
                        for (F = 0; F < A; F++) {
                            E[F] = q.BYTE(x + F)
                        }
                        break;
                    case 2:
                        if (A > 4) {
                            x = q.LONG(x) + o.tiffHeader
                        }
                        y[G] = q.STRING(x, A - 1);
                        continue;
                    case 3:
                        if (A > 2) {
                            x = q.LONG(x) + o.tiffHeader
                        }
                        for (F = 0; F < A; F++) {
                            E[F] = q.SHORT(x + F * 2)
                        }
                        break;
                    case 4:
                        if (A > 1) {
                            x = q.LONG(x) + o.tiffHeader
                        }
                        for (F = 0; F < A; F++) {
                            E[F] = q.LONG(x + F * 4)
                        }
                        break;
                    case 5:
                        x = q.LONG(x) + o.tiffHeader;
                        for (F = 0; F < A; F++) {
                            E[F] = q.LONG(x + F * 4) / q.LONG(x + F * 4 + 4)
                        }
                        break;
                    case 9:
                        x = q.LONG(x) + o.tiffHeader;
                        for (F = 0; F < A; F++) {
                            E[F] = q.SLONG(x + F * 4)
                        }
                        break;
                    case 10:
                        x = q.LONG(x) + o.tiffHeader;
                        for (F = 0; F < A; F++) {
                            E[F] = q.SLONG(x + F * 4) / q.SLONG(x + F * 4 + 4)
                        }
                        break;
                    default:
                        continue
                }
                D = (A == 1 ? E[0] : E);
                if (t.hasOwnProperty(G) && typeof D != "object") {
                    y[G] = t[G][D]
                } else {
                    y[G] = D
                }
            }
            return y
        }

        function s() {
            var v = e, u = o.tiffHeader;
            q.II(q.SHORT(u) == 18761);
            if (q.SHORT(u += 2) !== 42) {
                return false
            }
            o.IFD0 = o.tiffHeader + q.LONG(u += 2);
            v = p(o.IFD0, n.tiff);
            o.exifIFD = ("ExifIFDPointer" in v ? o.tiffHeader + v.ExifIFDPointer : e);
            o.gpsIFD = ("GPSInfoIFDPointer" in v ? o.tiffHeader + v.GPSInfoIFDPointer : e);
            return true
        }

        function r(w, u, z) {
            var B, y, x, A = 0;
            if (typeof(u) === "string") {
                var v = n[w.toLowerCase()];
                for (hex in v) {
                    if (v[hex] === u) {
                        u = hex;
                        break
                    }
                }
            }
            B = o[w.toLowerCase() + "IFD"];
            y = q.SHORT(B);
            for (i = 0; i < y; i++) {
                x = B + 12 * i + 2;
                if (q.SHORT(x) == u) {
                    A = x + 8;
                    break
                }
            }
            if (!A) {
                return false
            }
            q.LONG(A, z);
            return true
        }

        return{init:function (u) {
            o = {tiffHeader:10};
            if (u === e || !u.length) {
                return false
            }
            q.init(u);
            if (q.SHORT(0) === 65505 && q.STRING(4, 5).toUpperCase() === "EXIF\0") {
                return s()
            }
            return false
        }, EXIF:function () {
            var v;
            v = p(o.exifIFD, n.exif);
            if (v.ExifVersion && j.typeOf(v.ExifVersion) === "array") {
                for (var w = 0, u = ""; w < v.ExifVersion.length; w++) {
                    u += String.fromCharCode(v.ExifVersion[w])
                }
                v.ExifVersion = u
            }
            return v
        }, GPS:function () {
            var u;
            u = p(o.gpsIFD, n.gps);
            if (u.GPSVersionID) {
                u.GPSVersionID = u.GPSVersionID.join(".")
            }
            return u
        }, setExif:function (u, v) {
            if (u !== "PixelXDimension" && u !== "PixelYDimension") {
                return false
            }
            return r("exif", u, v)
        }, getBinary:function () {
            return q.SEGMENT()
        }}
    }
})(window, document, plupload);
(function (d, a, b, c) {
    function e(f) {
        return a.getElementById(f)
    }

    b.runtimes.Html4 = b.addRuntime("html4", {getFeatures:function () {
        return{multipart:true, triggerDialog:(b.ua.gecko && d.FormData || b.ua.webkit)}
    }, init:function (f, g) {
        f.bind("Init", function (p) {
            var j = a.body, n, h = "javascript", k, x, q, z = [], r = /MSIE/.test(navigator.userAgent), t = [], m = p.settings.filters, o, l, s, w;
            no_type_restriction:for (o = 0; o < m.length; o++) {
                l = m[o].extensions.split(/,/);
                for (w = 0; w < l.length; w++) {
                    if (l[w] === "*") {
                        t = [];
                        break no_type_restriction
                    }
                    s = b.mimeTypes[l[w]];
                    if (s && b.inArray(s, t) === -1) {
                        t.push(s)
                    }
                }
            }
            t = t.join(",");
            function v() {
                var C, A, y, B;
                q = b.guid();
                z.push(q);
                C = a.createElement("form");
                C.setAttribute("id", "form_" + q);
                C.setAttribute("method", "post");
                C.setAttribute("enctype", "multipart/form-data");
                C.setAttribute("encoding", "multipart/form-data");
                C.setAttribute("target", p.id + "_iframe");
                C.style.position = "absolute";
                A = a.createElement("input");
                A.setAttribute("id", "input_" + q);
                A.setAttribute("type", "file");
                A.setAttribute("accept", t);
                A.setAttribute("size", 1);
                B = e(p.settings.browse_button);
                if (p.features.triggerDialog && B) {
                    b.addEvent(e(p.settings.browse_button), "click", function (D) {
                        if (!A.disabled) {
                            A.click()
                        }
                        D.preventDefault()
                    }, p.id)
                }
                b.extend(A.style, {width:"100%", height:"100%", opacity:0, fontSize:"99px", cursor:"pointer"});
                b.extend(C.style, {overflow:"hidden"});
                y = p.settings.shim_bgcolor;
                if (y) {
                    C.style.background = y
                }
                if (r) {
                    b.extend(A.style, {filter:"alpha(opacity=0)"})
                }
                b.addEvent(A, "change", function (G) {
                    var E = G.target, D, F = [], H;
                    if (E.value) {
                        e("form_" + q).style.top = -1048575 + "px";
                        D = E.value.replace(/\\/g, "/");
                        D = D.substring(D.length, D.lastIndexOf("/") + 1);
                        F.push(new b.File(q, D));
                        if (!p.features.triggerDialog) {
                            b.removeAllEvents(C, p.id)
                        } else {
                            b.removeEvent(B, "click", p.id)
                        }
                        b.removeEvent(A, "change", p.id);
                        v();
                        if (F.length) {
                            f.trigger("FilesAdded", F)
                        }
                    }
                }, p.id);
                C.appendChild(A);
                j.appendChild(C);
                p.refresh()
            }

            function u() {
                var y = a.createElement("div");
                y.innerHTML = '<iframe id="' + p.id + '_iframe" name="' + p.id + '_iframe" src="' + h + ':&quot;&quot;" style="display:none"></iframe>';
                n = y.firstChild;
                j.appendChild(n);
                b.addEvent(n, "load", function (D) {
                    var E = D.target, C, A;
                    if (!k) {
                        return
                    }
                    try {
                        C = E.contentWindow.document || E.contentDocument || d.frames[E.id].document
                    } catch (B) {
                        p.trigger("Error", {code:b.SECURITY_ERROR, message:b.translate("Security error."), file:k});
                        return
                    }
                    A = C.body.innerHTML;
                    if (A) {
                        k.status = b.DONE;
                        k.loaded = 1025;
                        k.percent = 100;
                        p.trigger("UploadProgress", k);
                        p.trigger("FileUploaded", k, {response:A})
                    }
                }, p.id)
            }

            if (p.settings.container) {
                j = e(p.settings.container);
                if (b.getStyle(j, "position") === "static") {
                    j.style.position = "relative"
                }
            }
            p.bind("UploadFile", function (y, B) {
                var C, A;
                if (B.status == b.DONE || B.status == b.FAILED || y.state == b.STOPPED) {
                    return
                }
                C = e("form_" + B.id);
                A = e("input_" + B.id);
                A.setAttribute("name", y.settings.file_data_name);
                C.setAttribute("action", y.settings.url);
                b.each(b.extend({name:B.target_name || B.name}, y.settings.multipart_params), function (F, D) {
                    var E = a.createElement("input");
                    b.extend(E, {type:"hidden", name:D, value:F});
                    C.insertBefore(E, C.firstChild)
                });
                k = B;
                e("form_" + q).style.top = -1048575 + "px";
                C.submit()
            });
            p.bind("FileUploaded", function (y) {
                y.refresh()
            });
            p.bind("StateChanged", function (y) {
                if (y.state == b.STARTED) {
                    u()
                } else {
                    if (y.state == b.STOPPED) {
                        d.setTimeout(function () {
                            b.removeEvent(n, "load", y.id);
                            if (n.parentNode) {
                                n.parentNode.removeChild(n)
                            }
                        }, 0)
                    }
                }
                b.each(y.files, function (B, A) {
                    if (B.status === b.DONE || B.status === b.FAILED) {
                        var C = e("form_" + B.id);
                        if (C) {
                            C.parentNode.removeChild(C)
                        }
                    }
                })
            });
            p.bind("Refresh", function (A) {
                var G, B, C, D, y, H, I, F, E;
                G = e(A.settings.browse_button);
                if (G) {
                    y = b.getPos(G, e(A.settings.container));
                    H = b.getSize(G);
                    I = e("form_" + q);
                    F = e("input_" + q);
                    b.extend(I.style, {top:y.y + "px", left:y.x + "px", width:H.w + "px", height:H.h + "px"});
                    if (A.features.triggerDialog) {
                        if (b.getStyle(G, "position") === "static") {
                            b.extend(G.style, {position:"relative"})
                        }
                        E = parseInt(G.style.zIndex, 10);
                        if (isNaN(E)) {
                            E = 0
                        }
                        b.extend(G.style, {zIndex:E});
                        b.extend(I.style, {zIndex:E - 1})
                    }
                    C = A.settings.browse_button_hover;
                    D = A.settings.browse_button_active;
                    B = A.features.triggerDialog ? G : I;
                    if (C) {
                        b.addEvent(B, "mouseover", function () {
                            b.addClass(G, C)
                        }, A.id);
                        b.addEvent(B, "mouseout", function () {
                            b.removeClass(G, C)
                        }, A.id)
                    }
                    if (D) {
                        b.addEvent(B, "mousedown", function () {
                            b.addClass(G, D)
                        }, A.id);
                        b.addEvent(a.body, "mouseup", function () {
                            b.removeClass(G, D)
                        }, A.id)
                    }
                }
            });
            f.bind("FilesRemoved", function (y, B) {
                var A, C;
                for (A = 0; A < B.length; A++) {
                    C = e("form_" + B[A].id);
                    if (C) {
                        C.parentNode.removeChild(C)
                    }
                }
            });
            f.bind("DisableBrowse", function (y, B) {
                var A = a.getElementById("input_" + q);
                if (A) {
                    A.disabled = B
                }
            });
            f.bind("Destroy", function (y) {
                var A, B, C, D = {inputContainer:"form_" + q, inputFile:"input_" + q, browseButton:y.settings.browse_button};
                for (A in D) {
                    B = e(D[A]);
                    if (B) {
                        b.removeAllEvents(B, y.id)
                    }
                }
                b.removeAllEvents(a.body, y.id);
                b.each(z, function (F, E) {
                    C = e("form_" + F);
                    if (C) {
                        j.removeChild(C)
                    }
                })
            });
            v()
        });
        g({success:true})
    }})
})(window, document, plupload);