/**
 * 截屏插件，为UEditor提供插入支持
 * @file
 * @since 1.4.2
 */
UE.plugin.register("snapscreen", function() {
  var me = this;
  var snapplugin;

  function getLocation(url) {
    var search,
      a = document.createElement("a"),
      params = utils.serializeParam(me.queryCommandValue("serverparam")) || "";

    a.href = url;
    if (browser.ie) {
      a.href = a.href;
    }

    search = a.search;
    if (params) {
      search = search + (search.indexOf("?") == -1 ? "?" : "&") + params;
      search = search.replace(/[&]+/gi, "&");
    }
    return {
      port: a.port,
      hostname: a.hostname,
      path: a.pathname + search || +a.hash
    };
  }

  return {
    commands: {
      /**
             * 字体背景颜色
             * @command snapscreen
             * @method execCommand
             * @param { String } cmd 命令字符串
             * @example
             * ```javascript
             * editor.execCommand('snapscreen');
             * ```
             */
      snapscreen: {
        execCommand: function(cmd) {
          var url, local, res;
          var lang = me.getLang("snapScreen_plugin");

          if (!snapplugin) {
            var container = me.container;
            var doc = me.container.ownerDocument || me.container.document;
            snapplugin = doc.createElement("object");
            try {
              snapplugin.type = "application/x-pluginbaidusnap";
            } catch (e) {
              return;
            }
            snapplugin.style.cssText =
              "position:absolute;left:-9999px;width:0;height:0;";
            snapplugin.setAttribute("width", "0");
            snapplugin.setAttribute("height", "0");
            container.appendChild(snapplugin);
          }

          function onSuccess(rs) {
            try {
              rs = eval("(" + rs + ")");
              if (rs.state == "SUCCESS") {
                var opt = me.options;
                me.execCommand("insertimage", {
                  src: opt.snapscreenUrlPrefix + rs.url,
                  _src: opt.snapscreenUrlPrefix + rs.url,
                  alt: rs.title || "",
                  floatStyle: opt.snapscreenImgAlign
                });
              } else {
                alert(rs.state);
              }
            } catch (e) {
              alert(lang.callBackErrorMsg);
            }
          }
          url = me.getActionUrl(me.getOpt("snapscreenActionName"));
          local = getLocation(url);
          setTimeout(function() {
            try {
              res = snapplugin.saveSnapshot(
                local.hostname,
                local.path,
                local.port
              );
            } catch (e) {
              me.ui._dialogs["snapscreenDialog"].open();
              return;
            }

            onSuccess(res);
          }, 50);
        },
        queryCommandState: function() {
          return navigator.userAgent.indexOf("Windows", 0) != -1 ? 0 : -1;
        }
      }
    }
  };
});
