var editormd;
var template_list;
var json_table_data = '|' + lang["params"] + '|' + lang["type"] + '|' + lang["description"] + '|\n' +
  '|:-------|:-------|:-------|\n';

$(function() {

  //给按钮文字加上颜色,点击后则去掉颜色
  if (is_showdoc_online()) {
    set_text_color("runapi", "red");
  };

  /*加载目录*/
  secondCatList();

  function secondCatList() {
    var default_second_cat_id = $("#default_second_cat_id").val();
    var item_id = $("#item_id").val();
    $.post(
      DocConfig.server+"/api/catalog/secondCatList", {
        "item_id": item_id,
      },
      function(data) {
        $("#cat_id").html('<OPTION value="0">' + lang["none"] + '</OPTION>');
        if (data.error_code == 0) {
          json = data.data;
          console.log(json);
          for (var i = 0; i < json.length; i++) {
            cat_html = '<OPTION value="' + json[i].cat_id + '" ';
            if (default_second_cat_id == json[i].cat_id) {
              cat_html += ' selected ';
            }

            cat_html += ' ">' + json[i].cat_name + '</OPTION>';
            $("#cat_id").append(cat_html);
          };
          getChildCatList();
        };

      },
      "json"

    );
  }

  function getChildCatList() {
    var cat_id = $("#cat_id").val();
    var default_child_cat_id = $("#default_child_cat_id").val();
    $.post(
      DocConfig.server+"/api/catalog/childCatList", {
        "cat_id": cat_id
      },
      function(data) {
        $("#parent_cat_id").html('<OPTION value="0">' + lang["none"] + '</OPTION>');
        if (data.error_code == 0) {
          json = data.data;
          console.log(json);
          for (var i = 0; i < json.length; i++) {
            cat_html = '<OPTION value="' + json[i].cat_id + '" ';
            if (default_child_cat_id == json[i].cat_id) {
              cat_html += ' selected ';
            }

            cat_html += ' ">' + json[i].cat_name + '</OPTION>';
            $("#parent_cat_id").append(cat_html);
          };
        } else {}

      },
      "json"

    );
  }
  //监听是否选择了目录。如果选择了,则跟后台判断是否还子目录
  $("#cat_id").change(function() {
    getChildCatList();
  });

  var keyMap = {
    // 保存
    "Ctrl-S": function() {
      $("#save").click();
    }
  };
  initEditorOutsideKeys();

  function initEditorOutsideKeys() {
    if (!editormd) return;
    var $doc = $(document);
    $.each(keyMap, function(key, fn) {
      $doc.on('keydown', null, key.replace('-', '+'), function(e) {
        e.preventDefault();
        fn();
      });
    });
  }
  // 如果是新增页面,则光标为标题文本框
  if (location.href.indexOf('type=new') !== -1) {
    setTimeout(function() {
      $('#page_title').focus();
    }, 1000);
  }

  /*初始化编辑器*/
  editormd = editormd("editormd", {
    width: "90%",
    height: 1000,
    syncScrolling: "single",
    path: DocConfig.pubile + "/editor.md/lib/",
    placeholder: lang["editormd_placeholder"],
    taskList: true,
    tex: true, // 默认不解析
    flowChart: true, // 默认不解析
    sequenceDiagram: true, // 默认不解析
    htmlDecode : "style,script,iframe|filterXSS",//解析html
    imageUpload: true,
    imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"],
    imageUploadURL: "?s=home/page/uploadImg",
    onload: function() {
      this.addKeyMap(keyMap);
    }
  });

  /*插入API接口模板*/
  $("#api-doc").click(function() {
    var tmpl = $("#api-doc-templ").html();
    editormd.insertValue(tmpl);
  });
  /*插入数据字典模板*/
  $("#database-doc").click(function() {
    var tmpl = $("#database-doc-templ").html();
    editormd.insertValue(tmpl);
  });

  /*JSON转参数表格*/
  $("#jsons").click(function() {

    $("#json-templ").show();

  });

  /*JSON格式美化*/
  $("#beautify-json").click(function() {

    $("#beautify-json-dialog").show();

  });



  $("#json-templ .editormd-enter-btn").click(function() {


    var datas = $("#json-templ .jsons").val();

    try {
      Change($.parseJSON(datas));
    } catch (e) {
      alert(lang["json_fail"] + e);
    }

    //datas=processJSONImport(datas);
    //alert(datas);
    /*var datas='|键|值|类型|空|注释|\n'+
    '|:-------|:-------|:-------|:-------|:-------|\n'+
    '|uid|int(10)|否|||\n'+
    '|username|varchar(20)|否||用户名|';*/

    //alert(json_table_data);return;



    editormd.insertValue(json_table_data);

    json_table_data = '|' + lang["filed"] + '|' + lang["type"] + '|' + lang["description"] + '|\n' +
      '|:-------|:-------|:-------|\n';


    $("#json-templ .jsons").val("");
    $("#json-templ").hide();

  });


  $("#beautify-json-dialog .editormd-enter-btn").click(function() {
    var data = $("#beautify-json-dialog .jsons").val();
    try {
      data = data.replace(/(^\s*)|(\s*$)/g, "");
      op1 = data.substr(0, 1) == "[" ? "[" : "{";
      op2 = (op1 == "[") ? "]" : "}";
      var text = "\n ``` \n " + op1 + " \n" + dump(JSON.parse(data)) + " " + op2 + " \n\n ```\n\n"; //整体加个大括号
      //$("#beautify-json-dialog .jsons").val(text);
      $("#beautify-json-dialog .jsons").val("");
      editormd.insertValue(text);
    } catch (e) {
      //非json数据直接显示
      //$("#beautify-json-dialog .jsons").val(data);
      $("#beautify-json-dialog .jsons").val("");
      editormd.insertValue(data);
    }
    $("#beautify-json-dialog").hide();

  });
  //{"dgfgdfg":"gdfgdfg"}

  //格式化json数据
  function dump(arr, level) {
    var dumped_text = "";
    if (!level) level = 0;

    //The padding given at the beginning of the line. 
    var level_padding = "";
    for (var j = 0; j < level + 1; j++) level_padding += "     ";
    if (typeof(arr) == 'object') { //Array/Hashes/Objects 
      var i = 0;
      for (var item in arr) {
        var value = arr[item];
        if (typeof(value) == 'object') { //If it is an array, 
          dumped_text += level_padding + "\"" + item + "\" : \{ \n";
          dumped_text += dump(value, level + 1);
          dumped_text += level_padding + "\}";
        } else {
          if (typeof(value) == "number") {
            dumped_text += level_padding + "\"" + item + "\" : " + value ;
          }else{
            dumped_text += level_padding + "\"" + item + "\" : \"" + value + "\"";
          }
        }
        if (i < Object.getOwnPropertyNames(arr).length - 1) {
          dumped_text += ", \n";
        } else {
          dumped_text += " \n";
        }
        i++;
      }
    } else { //Stings/Chars/Numbers etc. 
      dumped_text = "===>" + arr + "<===(" + typeof(arr) + ")";
    }
    return dumped_text;
  }

  /*保存*/
  $("#save").click(function() {
    var page_id = $("#page_id").val();
    var item_id = $("#item_id").val();
    var page_title = $("#page_title").val();
    var page_comments = $("#page_comments").val();
    var page_content = $("#page_content").val();
    var item_id = $("#item_id").val();
    var s_number = $("#s_number").val();
    var cat_id = $("#cat_id").val();
    var parent_cat_id = $("#parent_cat_id").val();
    if (parent_cat_id > 0) {
      cat_id = parent_cat_id;
    };
    $("#save").html('保存中...').attr('disabled','disabled');
    $.post(
      DocConfig.server+"/api/page/save", {
        "page_id": page_id,
        "cat_id": cat_id,
        "s_number": s_number,
        "page_content": page_content,
        "page_title": page_title,
        "page_comments": page_comments,
        "item_id": item_id
      },
      function(data) {
        if (data.error_code == 0) {
          localStorage.removeItem("page_content");
          window.location.href = "?s=home/item/show&page_id=" + data.data.page_id + "&item_id=" + item_id;
        } else {
          $.alert(lang["save_fail"]);
          $("#save").html('保存').removeAttr('disabled');

        }
      },
      'json'
    )
  });



  $(".editormd-preview-container").bind('DOMNodeInserted', function(e) {

    $(".editormd-preview-container table thead tr").css({
      "background-color": "#08c",
      "color": "#fff"
    });
    $(".editormd-preview-container table tr").eq(0).css({
      "background-color": "#08c",
      "color": "#fff"
    });
    $(".editormd-preview-container table tr").each(function() {
      if ($(this).find("td").eq(1).html() == "object" || $(this).find("td").eq(1).html() == "array[object]") {
        $(this).css({
          "background-color": "#99CC99",
          "color": "#000"
        });
      }

    });
  });

  function closeDiv(target) {
    $(target).hide();
  }

  function Change(data) {
    var level_str = "- ";
    if (arguments.length > 1) {
      var level;
      arguments[1] > 0 ? level = arguments[1] : level = 1;
      for (var i = 0; i < level; i++) {
        level_str += "- ";
      }
    }

    for (var key in data) {
      var value = data[key];
      var type = typeof(value);
      if (type == "object") {
        json_table_data += '| ' + level_str + key + ' |' + type + '  | ' + lang["none"] + ' |\n';
        if (value instanceof Array) {
          var j = level + 1;
          Change(value[0], j);
          continue;
        }
        //else
        //{
        Change(value, level);
        //}

      } else {
        json_table_data += '| ' + key + ' | ' + type + '| ' + lang["none"] + ' |\n';
      }
    }
  }

  //{"Result":[{"name":"test1","list":{"pros":"prosfsf","ppps":{"images":[{"22":"22"}]}}}]}

  $("#save-to-templ").click(function() {
    $.prompt({
      title: lang["save_templ_title"]
    }, function(template_title, index) {
      if (template_title != null && template_title != "") {
        var template_content = $("#page_content").val();
        $.post(
          "?s=home/template/save", {
            "template_title": template_title,
            "template_content": template_content
          },
          function(data) {
            if (data.error_code == 0) {
              $.closeDialog(index);
              $.alert(lang["saved_templ_msg1"] + template_title + lang["saved_templ_msg2"]);
            } else {
              $.alert(lang["save_fail"]);

            }
          },
          "json"
        );
      }
      $("#save-btn-group").removeClass("open");
      return false;
    });
  });

  $("#more-templ").click(function() {
    $.post(
      "?s=home/template/getList", {},
      function(data) {
        if (data.error_code == 0) {
          var html = '<TR><td>' + lang["save_time"] + '</td><td>' + lang["templ_title"] + '</td><td>' + lang["operation"] + '</td></TR>';
          template_list = data.data;
          json = data.data;
          for (var i = 0; i < json.length; i++) {
            html += '<TR><td>' + json[i]['addtime'] + '</td>';
            html += '<td>' + json[i]['template_title'] + '</td>';
            html += '<td><a href="javascript:use_template(' + json[i]['id'] + ')">' + lang["use_this_template"] + '</a> | <a href="javascript:delete_template(' + json[i]['id'] + ')">' + lang["delete_this_template"] + '</a></td>';
            html += '</TR>';
          };
          $("#templ-table").html(html);
          $("#more-templ-modal").modal();
        } else {
          //$.alert("获取模板列表失败");
          $("#more-templ-modal").modal("hide");
          $.alert(lang["no_templ_msg"]);

        }
      },
      "json"
    );

  });

  $("#add-page-comments").click(function() {
    var page_comments = prompt(lang["add_page_comments_msg"], "");
    if (page_comments != null && page_comments != "") {
      $("#page_comments").val(page_comments);
      $("#save").click();
    }
    $("#save-btn-group").removeClass("open");
    return false;
  });

  /** 粘贴上传图片 **/
  document.getElementById("editormd").addEventListener('paste', function(e) {
    var clipboard = e.clipboardData;
    for (var i = 0, len = clipboard.items.length; i < len; i++) {
      if (clipboard.items[i].kind == 'file' || clipboard.items[i].type.indexOf('image') > -1) {
        var imageFile = clipboard.items[i].getAsFile();
        var form = new FormData;
        form.append('t', 'ajax-uploadpic');
        form.append('editormd-image-file', imageFile);
        var layer_index = {};
        var callback = function(type, data) {
          type = type || 'before';
          var $the = $('#content');
          switch (type) {
            // 开始上传
            case 'before':
              layer_index = layer.load(1, {
                shade: [0.1, '#fff'] //0.1透明度的白色背景
              });
              break;
              // 服务器返回错误
            case 'error':
              $the.attr('disabled', false);
              $.closeDialog(layer_index);
              $.alert('图片上传失败');
              break;
              // 上传成功
            case 'success':
              $the.attr('disabled', false);
              $.closeDialog(layer_index);
              if (data.success == 1) {
                var value = '![](' + data.url + ')';
                editormd.insertValue(value);
              } else {
                $.alert(data.message);
              }

              break;
          }
        };
        $.ajax({
          url: "?s=home/page/uploadImg",
          type: "POST",
          dataType: "json",
          data: form,
          processData: false,
          contentType: false,
          beforeSend: function() {
            callback('before');
          },
          error: function() {
            callback('error');
          },
          success: function(data) {
            callback('success', data);
          }
        })
        e.preventDefault();
      }
    }
  });

  //更改选择文件框的文件类型让它更快地弹出
  $("#editormd").on("mouseover", '[name=editormd-image-file]', function(){
    $(this).attr("accept","image/png,image/jpg,image/jpeg,imge/bmp,image/gif")
  });

  //定时保存文本内容到localStorage
  setInterval(function(){
      localStorage.page_content= $("#page_content").val() ;
  }, 60000);

  //检测是否有定时保存的内容
  if (localStorage.page_content && localStorage.page_content.length > 0) {
    $.confirm("检测到有上次编辑时自动保存的草稿。是否自动填充上次的草稿内容?",
      {},
      function(){
        editormd.clear();
        editormd.insertValue(localStorage.page_content);
        $.closeAll();
        localStorage.removeItem("page_content");
      },
      function(){
        localStorage.removeItem("page_content");
      }

    )
  };

  
});

  //使用模板
  function use_template(id) {
    for (var i = 0; i < template_list.length; i++) {
      if (id > 0 && id == template_list[i]['id']) {
        editormd.insertValue(template_list[i]['template_content']);
        $("#more-templ-modal").modal("hide");
      };

    };
  }

  //删除模板
  function delete_template(id) {
    $.post(
      "?s=home/template/delete", {
        "id": id
      },
      function(data) {
        if (data.error_code == 0) {
          $("#more-templ").click();
        } else {
          $.alert(lang["save_fail"]);
        }
      },
      "json"
    );
  }