(function (f, b, d, e) {
  var a = {}, g = {};
  function c() {
    var h;
    try {
      h = navigator.plugins["Shockwave Flash"];
      h = h.description
    } catch (j) {
      try {
        h = new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")
      } catch (i) {
        h = "0.0"
      }
    }
    h = h.match(/\d+/g);
    return parseFloat(h[0] + "." + h[1])
  }
  d.flash = {trigger: function (j, h, i) {
      setTimeout(function () {
        var m = a[j], l, k;
        if (m) {
          m.trigger("Flash:" + h, i)
        }
      }, 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 (m, o) {
      var k, l, h = 0, i = b.body;
      if (c() < 10) {
        o({success: false});
        return
      }
      g[m.id] = false;
      a[m.id] = m;
      k = b.getElementById(m.settings.browse_button);
      l = b.createElement("div");
      l.id = m.id + "_flash_container";
      d.extend(l.style, {position: "absolute", top: "0px", background: m.settings.shim_bgcolor || "transparent", zIndex: 99999, width: "100%", height: "100%"});
      l.className = "plupload flash";
      if (m.settings.container) {
        i = b.getElementById(m.settings.container);
        if (d.getStyle(i, "position") === "static") {
          i.style.position = "relative"
        }
      }
      i.appendChild(l);
      (function () {
        var p, q;
        p = '<object id="' + m.id + '_flash" type="application/x-shockwave-flash" data="' + m.settings.flash_swf_url + '" ';
        if (d.ua.ie) {
          p += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '
        }
        p += 'width="100%" height="100%" style="outline:0"><param name="movie" value="' + m.settings.flash_swf_url + '" /><param name="flashvars" value="id=' + escape(m.id) + '" /><param name="wmode" value="transparent" /><param name="allowscriptaccess" value="always" /></object>';
        if (d.ua.ie) {
          q = b.createElement("div");
          l.appendChild(q);
          q.outerHTML = p;
          q = null
        } else {
          l.innerHTML = p
        }
      }());
      function n() {
        return b.getElementById(m.id + "_flash")
      }
      function j() {
        if (h++ > 5000) {
          o({success: false});
          return
        }
        if (g[m.id] === false) {
          setTimeout(j, 1)
        }
      }
      j();
      k = l = null;
      m.bind("Destroy", function (p) {
        var q;
        d.removeAllEvents(b.body, p.id);
        delete g[p.id];
        delete a[p.id];
        q = b.getElementById(p.id + "_flash_container");
        if (q) {
          i.removeChild(q)
        }
      });
      m.bind("Flash:Init", function () {
        var r = {}, q;
        try {
          n().setFileFilters(m.settings.filters, m.settings.multi_selection)
        } catch (p) {
          o({success: false});
          return
        }
        if (g[m.id]) {
          return
        }
        g[m.id] = true;
        m.bind("UploadFile", function (s, u) {
          var v = s.settings, t = m.settings.resize || {};
          n().uploadFile(r[u.id], v.url, {name: u.target_name || u.name, mime: d.mimeTypes[u.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream", chunk_size: v.chunk_size, width: t.width, height: t.height, quality: t.quality, multipart: v.multipart, multipart_params: v.multipart_params || {}, file_data_name: v.file_data_name, format: /\.(jpg|jpeg)$/i.test(u.name) ? "jpg" : "png", headers: v.headers, urlstream_upload: v.urlstream_upload})
        });
        m.bind("CancelUpload", function () {
          n().cancelUpload()
        });
        m.bind("Flash:UploadProcess", function (t, s) {
          var u = t.getFile(r[s.id]);
          if (u.status != d.FAILED) {
            u.loaded = s.loaded;
            u.size = s.size;
            t.trigger("UploadProgress", u)
          }
        });
        m.bind("Flash:UploadChunkComplete", function (s, u) {
          var v, t = s.getFile(r[u.id]);
          v = {chunk: u.chunk, chunks: u.chunks, response: u.text};
          s.trigger("ChunkUploaded", t, v);
          if (t.status !== d.FAILED && s.state !== d.STOPPED) {
            n().uploadNextChunk()
          }
          if (u.chunk == u.chunks - 1) {
            t.status = d.DONE;
            s.trigger("FileUploaded", t, {response: u.text})
          }
        });
        m.bind("Flash:SelectFiles", function (s, v) {
          var u, t, w = [], x;
          for (t = 0; t < v.length; t++) {
            u = v[t];
            x = d.guid();
            r[x] = u.id;
            r[u.id] = x;
            w.push(new d.File(x, u.name, u.size))
          }
          if (w.length) {
            m.trigger("FilesAdded", w)
          }
        });
        m.bind("Flash:SecurityError", function (s, t) {
          m.trigger("Error", {code: d.SECURITY_ERROR, message: d.translate("Security error."), details: t.message, file: m.getFile(r[t.id])})
        });
        m.bind("Flash:GenericError", function (s, t) {
          m.trigger("Error", {code: d.GENERIC_ERROR, message: d.translate("Generic error."), details: t.message, file: m.getFile(r[t.id])})
        });
        m.bind("Flash:IOError", function (s, t) {
          m.trigger("Error", {code: d.IO_ERROR, message: d.translate("IO error."), details: t.message, file: m.getFile(r[t.id])})
        });
        m.bind("Flash:ImageError", function (s, t) {
          m.trigger("Error", {code: parseInt(t.code, 10), message: d.translate("Image error."), file: m.getFile(r[t.id])})
        });
        m.bind("Flash:StageEvent:rollOver", function (s) {
          var t, u;
          t = b.getElementById(m.settings.browse_button);
          u = s.settings.browse_button_hover;
          if (t && u) {
            d.addClass(t, u)
          }
        });
        m.bind("Flash:StageEvent:rollOut", function (s) {
          var t, u;
          t = b.getElementById(m.settings.browse_button);
          u = s.settings.browse_button_hover;
          if (t && u) {
            d.removeClass(t, u)
          }
        });
        m.bind("Flash:StageEvent:mouseDown", function (s) {
          var t, u;
          t = b.getElementById(m.settings.browse_button);
          u = s.settings.browse_button_active;
          if (t && u) {
            d.addClass(t, u);
            d.addEvent(b.body, "mouseup", function () {
              d.removeClass(t, u)
            }, s.id)
          }
        });
        m.bind("Flash:StageEvent:mouseUp", function (s) {
          var t, u;
          t = b.getElementById(m.settings.browse_button);
          u = s.settings.browse_button_active;
          if (t && u) {
            d.removeClass(t, u)
          }
        });
        m.bind("Flash:ExifData", function (s, t) {
          m.trigger("ExifData", m.getFile(r[t.id]), t.data)
        });
        m.bind("Flash:GpsData", function (s, t) {
          m.trigger("GpsData", m.getFile(r[t.id]), t.data)
        });
        m.bind("QueueChanged", function (s) {
          m.refresh()
        });
        m.bind("FilesRemoved", function (s, u) {
          var t;
          for (t = 0; t < u.length; t++) {
            n().removeFile(r[u[t].id])
          }
        });
        m.bind("StateChanged", function (s) {
          m.refresh()
        });
        m.bind("Refresh", function (s) {
          var t, u, v;
          n().setFileFilters(m.settings.filters, m.settings.multi_selection);
          t = b.getElementById(s.settings.browse_button);
          if (t) {
            u = d.getPos(t, b.getElementById(s.settings.container));
            v = d.getSize(t);
            d.extend(b.getElementById(s.id + "_flash_container").style, {top: u.y + "px", left: u.x + "px", width: v.w + "px", height: v.h + "px"})
          }
        });
        m.bind("DisableBrowse", function (s, t) {
          n().disableBrowse(t)
        });
        o({success: true})
      })
    }})
})(window, document, plupload);