text: /**
   * Created with JetBrains PhpStorm.
   * User: xuheng
   * Date: 12-12-19
   * Time: 下午4:55
   * To change this template use File | Settings | File Templates.
   */
  (function () {
      var title = $G("J_title"),
          titleCol = $G("J_titleCol"),
          caption = $G("J_caption"),
          sorttable = $G("J_sorttable"),
          autoSizeContent = $G("J_autoSizeContent"),
          autoSizePage = $G("J_autoSizePage"),
          autoSizeWidth = $G("J_autoSizeWidth"),
          autoSizeInputWidth = $G("J_autoSizeInputWidth"),
          tone = $G("J_tone"),
          me,
          preview = $G("J_preview");
  
      var editTable = function () {
          me = this;
          me.init();
      };
      editTable.prototype = {
          init:function () {
              var colorPiker = new UE.ui.ColorPicker({
                      editor:editor
                  }),
                  colorPop = new UE.ui.Popup({
                      editor:editor,
                      content:colorPiker
                  });
              title.checked = editor.queryCommandState("inserttitle") == -1;
              titleCol.checked = editor.queryCommandState("inserttitlecol") == -1;
              caption.checked = editor.queryCommandState("insertcaption") == -1;
              sorttable.checked = editor.queryCommandState("enablesort") == 1;
  
              var enablesortState = editor.queryCommandState("enablesort"),
                  disablesortState = editor.queryCommandState("disablesort");
  
              sorttable.checked = !!(enablesortState < 0 && disablesortState >=0);
              sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);
              sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:'';
  
              me.createTable(title.checked, titleCol.checked, caption.checked);
              me.setAutoSize();
              me.setColor(me.getColor());
  
              domUtils.on(title, "click", me.titleHanler);
              domUtils.on(titleCol, "click", me.titleColHanler);
              domUtils.on(caption, "click", me.captionHanler);
              domUtils.on(sorttable, "click", me.sorttableHanler);
              domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler);
              domUtils.on(autoSizePage, "click", me.autoSizePageHanler);
              domUtils.on(autoSizeWidth, "click", me.autoSizeWidthHanler);
  
              domUtils.on(tone, "click", function () {
                  colorPop.showAnchor(tone);
              });
              domUtils.on(document, 'mousedown', function () {
                  colorPop.hide();
              });
              colorPiker.addListener("pickcolor", function () {
                  me.setColor(arguments[1]);
                  colorPop.hide();
              });
              colorPiker.addListener("picknocolor", function () {
                  me.setColor("");
                  colorPop.hide();
              });
          },
  
          createTable:function (hasTitle, hasTitleCol, hasCaption) {
              var arr = [],
                  sortSpan = '<span>^</span>';
              arr.push("<table id='J_example'>");
              if (hasCaption) {
                  arr.push("<caption>" + lang.captionName + "</caption>")
              }
              if (hasTitle) {
                  arr.push("<tr>");
                  if(hasTitleCol) { arr.push("<th>" + lang.titleName + "</th>"); }
                  for (var j = 0; j < 5; j++) {
                      arr.push("<th>" + lang.titleName + "</th>");
                  }
                  arr.push("</tr>");
              }
              for (var i = 0; i < 6; i++) {
                  arr.push("<tr>");
                  if(hasTitleCol) { arr.push("<th>" + lang.titleName + "</th>") }
                  for (var k = 0; k < 5; k++) {
                      arr.push("<td>" + lang.cellsName + "</td>")
                  }
                  arr.push("</tr>");
              }
              arr.push("</table>");
              preview.innerHTML = arr.join("");
              this.updateSortSpan();
          },
          titleHanler:function () {
              var example = $G("J_example"),
                  frg=document.createDocumentFragment(),
                  color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
                  colCount = example.rows[0].children.length;
  
              if (title.checked) {
                  example.insertRow(0);
                  for (var i = 0, node; i < colCount; i++) {
                      node = document.createElement("th");
                      node.innerHTML = lang.titleName;
                      frg.appendChild(node);
                  }
                  example.rows[0].appendChild(frg);
  
              } else {
                  domUtils.remove(example.rows[0]);
              }
              me.setColor(color);
              me.updateSortSpan();
          },
          titleColHanler:function () {
              var example = $G("J_example"),
                  color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
                  colArr = example.rows,
                  colCount = colArr.length;
  
              if (titleCol.checked) {
                  for (var i = 0, node; i < colCount; i++) {
                      node = document.createElement("th");
                      node.innerHTML = lang.titleName;
                      colArr[i].insertBefore(node, colArr[i].children[0]);
                  }
              } else {
                  for (var i = 0; i < colCount; i++) {
                      domUtils.remove(colArr[i].children[0]);
                  }
              }
              me.setColor(color);
              me.updateSortSpan();
          },
          captionHanler:function () {
              var example = $G("J_example");
              if (caption.checked) {
                  var row = document.createElement('caption');
                  row.innerHTML = lang.captionName;
                  example.insertBefore(row, example.firstChild);
              } else {
                  domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);
              }
          },
          sorttableHanler:function(){
              me.updateSortSpan();
          },
          autoSizeContentHanler:function () {
              var example = $G("J_example");
              example.removeAttribute("width");
          },
          autoSizePageHanler:function () {
              var example = $G("J_example");
              var tds = example.getElementsByTagName(example, "td");
              utils.each(tds, function (td) {
                  td.removeAttribute("width");
              });
              example.setAttribute('width', '100%');
          },
        autoSizeWidthHanler:function () {
          var example = $G("J_example");
          var tds = example.getElementsByTagName(example, "td");
          utils.each(tds, function (td) {
            td.removeAttribute("width");
          });
          if (autoSizeWidth.checked&&autoSizeInputWidth.value) {
            example.setAttribute('width', autoSizeInputWidth.value);
          } else {
            example.setAttribute('width', '800');
          }
        },
          updateSortSpan: function(){
              var example = $G("J_example"),
                  row = example.rows[0];
  
              var spans = domUtils.getElementsByTagName(example,"span");
              utils.each(spans,function(span){
                  span.parentNode.removeChild(span);
              });
              if (sorttable.checked) {
                  utils.each(row.cells, function(cell, i){
                      var span = document.createElement("span");
                      span.innerHTML = "^";
                      cell.appendChild(span);
                  });
              }
          },
          getColor:function () {
              var start = editor.selection.getStart(), color,
                  cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
              color = cell && domUtils.getComputedStyle(cell, "border-color");
              if (!color)  color = "#DDDDDD";
              return color;
          },
          setColor:function (color) {
              var example = $G("J_example"),
                  arr = domUtils.getElementsByTagName(example, "td").concat(
                      domUtils.getElementsByTagName(example, "th"),
                      domUtils.getElementsByTagName(example, "caption")
                  );
  
              tone.value = color;
              utils.each(arr, function (node) {
                  node.style.borderColor = color;
              });
  
          },
          setAutoSize:function () {
              var me = this;
              autoSizePage.checked = true;
              me.autoSizePageHanler();
          }
      };
  
      new editTable;
  
      dialog.onok = function () {
          editor.__hasEnterExecCommand = true;
  
          var checks = {
              title:"inserttitle deletetitle",
              titleCol:"inserttitlecol deletetitlecol",
              caption:"insertcaption deletecaption",
              sorttable:"enablesort disablesort"
          };
          editor.fireEvent('saveScene');
          for(var i in checks){
              var cmds = checks[i].split(" "),
                  input = $G("J_" + i);
              if(input["checked"]){
                  editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]);
              }else{
                  editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]);
              }
          }
          editor.execCommand("edittable", {borderColor: tone.value, autoSizeWidth:autoSizeWidth.checked, width:autoSizeInputWidth.value});
          autoSizeContent.checked ?editor.execCommand('adaptbytext') : "";
          autoSizePage.checked ? editor.execCommand("adaptbywindow") : "";
          editor.fireEvent('saveScene');
  
          editor.__hasEnterExecCommand = false;
      };
  })();
  