<script>

{*-- ここからjsでのデータ表示用 ---------------------------------------------------*}
let detail_data=[];
let new_data={};

function chkPageError() { {*表示中のページをチェック!*}
  var frm = $("#headerTop");
  var detail = $("#detail .detail");
  var errflg = false;

  common.clearFormError(detail);

  for(i = 0 ; i < detail.length ; i++) {
    var $me = $(detail[i]);
    if(!stringUtil.isEmpty($me.find(".cugdcd").val()) {*入力があるものだけチェックする*}
    || !stringUtil.isEmpty($me.find(".jan").val())
    ) {
      {*必須チェック*}
      if(stringUtil.isEmpty($me.find(".jan").val())) {
        common.addError($me.find(".jan"), "入力して下さい。", null, true);
        errflg = true;
      }
      if(stringUtil.isEmpty($me.find(".cugdcd").val())) {
        common.addError($me.find(".cugdcd"), "入力して下さい。", null, true);
        errflg = true;
      }
    }
  }
  return errflg;
}

function setArrayData(pgno) {
  var detail = $("#detail .detail");

  if(chkPageError()) { {*配列に格納する前に、妥当性チェック*}
    return false;
  } else {
    if(pgno == $("#lastpage").val()) { {*新規*}
      new_data = [];
      for(i = 0 ; i < detail.length ; i++) {
        let $me = $(detail[i]);
        var new_elem = {};
        var putflg = false;
        if(!stringUtil.isEmpty($me.find(".cugdcd").val()) {*入力があるものだけ配列に入れる*}
        || !stringUtil.isEmpty($me.find(".medcd").val())
        || !stringUtil.isEmpty($me.find(".cugdde").val())
        || !stringUtil.isEmpty($me.find(".cvsno").val())
        || !stringUtil.isEmpty($me.find(".jan").val())
        ) {
          putflg = true;
          $me.find("input, select").each(function (index) {
            var inputnm = $(this).attr("name");
            new_elem[inputnm] = common.getValue($(this));
          });
          new_elem["pgno"] = $("#lastpage").val();
          if(putflg) {
            new_data.push(new_elem);
          }
        }
      }
    } else { {*既存更新*}
      for(i = 0 ; i < detail.length ; i++) {
        let $me = $(detail[i]);
        var rnum = Number($me.find(".rnum").val())-1;
        $me.find("input, select").each(function (index) {
          var inputnm = $(this).attr("name");
          if(i == 0) {
            //console.log("["+rnum+"]"+inputnm+":"+common.getValue($(this)));
          }
          detail_data[rnum][inputnm] = common.getValue($(this));
        });
      }
    }

    //console.log(detail_data);
    //console.log(new_data);
    return true;
  }
}
function dsp_detail(p_pgno) {
  $("#detail .detail").remove();

  var frm = $("#headerTop");
  var el = "";

  //console.log(p_pgno+"/"+$("#lastpage").val());

  if(p_pgno == $("#lastpage").val()) { {*最終ページは新規用ページ*}
    common.setValue(frm.find(".modelbl"), "新規");
    var ret_len = new_data.length;
    for (var i = 0; i < ret_len; i++) {
      el += af9031x_detail.appendRow(new_data[i]);
    }
  } else {
    common.setValue(frm.find(".modelbl"), "修正");
    var ret_len = detail_data.length;
    for (var i = 0; i < ret_len; i++) { {*既存データページを表示*}
      if (Number(detail_data[i].pgno) == Number(p_pgno)) {
        el += af9031x_detail.appendRow(detail_data[i]);
      }
    }
  }

  $("#detail").append(el);

  if(p_pgno == $("#lastpage").val()) { {*最終ページは新規用ページ*}
    if($("#detail .detail").length == '0'){
      setOneRow(); {*最初の１行を表示*}
      doHeaderEnable('D');

      var frm = $("#headerTop");
      var detail = $("#detail .detail");
      if(!stringUtil.isEmpty(common.getValue(frm.find(".cucd")))) {
        common.setValue(detail.find(".cvsno"),1);
      }

    } else {
      $("#lastDetail").focus(); {*１行追加*}
    }
  } else {
    doHeaderEnable('D');
  }

  var detail = $("#detail .detail");
  
  for(i = 0 ; i < detail.length ; i++) {
    var $me = $(detail[i]);

    $me.find("select").each(function(index) {
      var $selectVal = $(this);
      common.setValue($selectVal,common.getValue($me.find(".memo"+$selectVal.attr("name"))));
    });

  }


  $("#detail .detail").first().find(".keycd").focus();
}


function doHeaderEnable(pmode) { {*pmode:H Header有効・D 明細有効*}
  let h = $("#headerTop");
  let h1 = h.find(".header1");
  let h2 = h.find(".header2");
  let d = $("#detailTop");
  let m = $("#funcMenu");
  let mode = h.find(".mode").val();
  if (pmode == "H") { {*Header有効*}
    h.removeClass("noevent");
    d.addClass("noevent");
    $(".Func2").removeClass("noevent");
    $(".Func3").addClass("noevent");
    $(".Func4").addClass("noevent");
    $(".Func5").addClass("noevent");
    $(".Func9").addClass("noevent");
    $(".Func12").removeClass("noevent");

    {*ヘッダー項目クリア*}
    h.find(".modelbl").removeClass("newLabel");
    {*ヘッダーフォーカス*}
    h.find(".keycd")[0].focus();
  } else {
    h.addClass("noevent");

    d.removeClass("noevent");
    $(".Func2").addClass("noevent");
    $(".Func3").removeClass("noevent");
    $(".Func4").removeClass("noevent");
    $(".Func5").removeClass("noevent");
    $(".Func9").removeClass("noevent");
    $(".Func12").removeClass("noevent");

    {*ヘッダー項目*}
    h.find(".modelbl").addClass("newLabel");
    {*データ部フォーカス*}
    d.find(".cugdcd")[0].focus();
  }
}

function clearHeader() {  {*headerクリア*}
  let frm = $("#headerTop");
  let container = frm.closest(".container");
  doHeaderEnable("H");
  common.clearInputData(container);
  $('[name=mode]').prop("selectedIndex", 0);
  $('[name=mode]').trigger("change");
}

var init_data={
  vlin:'1',
};

function clearDetail() {
  common.clearAllError();
  $("#detail .detail").remove(); {*明細クリア*}
  $("#lastDetail").show();

  {*明細ヘッダー*}
  let frm = $("#headerTop");
  let mode = common.getValue(frm.find(".mode"));
  var detailHeader = $("#detailHeader");
  if(mode == '1') {
    detailHeader.find(".detailHeader1").show();
    detailHeader.find(".detailHeader2").hide();
  } else if(mode == '2') {
    detailHeader.find(".detailHeader1").hide();
    detailHeader.find(".detailHeader2").show();
  }
}

function setOneRow() {
  clearDetail();  {*一旦クリア*}
  {*明細に最初の一行追加*}
  var el = af9031x_detail.appendRow(init_data);
  $("#detail").append(el);
  var detail = $("#detail").find(".detail");
  detail.find(".datepicker").each(function (index) {
    common.setDatepickerInfo($(this));
  });

  detail.find(".popbtn").each(function (index) {
    common.setValue($(this),"?");
  });

  //detail.find(".cugdcd").prop("readonly",false);
  //detail.find(".cugdde").prop("readonly",false);
}

function chgDetail(pgno) {  {*明細表表示・非表示*}
  let wpgno = "pgno" + pgno;

  dsp_detail(pgno);

  if (common.getValue($("#pagecnt")) == common.getValue($("#lastpage"))) { {*次頁なし*}
    $("#funcMenu").find(".Func7").addClass("noevent");
  } else {
    $("#funcMenu").find(".Func7").removeClass("noevent");
  }
  if (common.getValue($("#pagecnt")) == "1") { {*前頁なし*}
    $("#funcMenu").find(".Func8").addClass("noevent");
  } else {
    $("#funcMenu").find(".Func8").removeClass("noevent");
  }

}

function dspDetail() { {*データ表示*}
  let frm = $("#headerTop");
  let detail = $("#detail").find(".detail");

  clearDetail();  {*一旦クリア*}

  {*明細行配列クリア*}
  detail_data.splice(0);

  {if $header.ret == "0"}
    {*配列作成*}
    detail_data = {$dataList};

    {*行作成*}
    dsp_detail(1);

    doHeaderEnable("D")
    {*頁情報*}
    chgDetail("1");

  {else if $header.ret == "new"}
    setOneRow();
    doHeaderEnable("H")
  {else if $header.ret == "1"}
    dsp_detail("1");
    doHeaderEnable("D")
    {*頁情報*}
    chgDetail("1");
    common.setValue($("#pagecnt"), "1");
    common.setValue($("#lastpage"), "1");
    //setOneRow();
    //doHeaderEnable("D")
    common.setValue(frm.find(".modelbl"), "新規");
    {*頁情報*}
  {else}
    setOneRow();
    doHeaderEnable("H")
    {if $hasError eq true}
      alert("{$errorMsg}")
    {/if}
  {/if}

}

{*明細行用関数*}
var af9031x_detail = {
  appendRow: function (d) {
    let frm = $("#headerTop");
    let mode = common.getValue(frm.find(".mode"));
    var n = stringUtil.nvl;
    var row =
    ' <div class="col wp-100 detail"> ' +
    '<div class="col wp-100 rowinfo detailMain cucdGrp janGrp">' +
    '  <div class="col wp-100"> ' +
    '    <input name="cugdcd" type="text" class="form-control input-sm item wd-160 cugdcd "  maxlength="20" value="' + n(d.cugdcd) + '"> '+
    '    <input name="medcd" type="text" class="form-control input-sm item wd-320 medcd "  maxlength="40" value="' + n(d.medcd) + '"> '+
    '    <input name="cugdde" type="text" class="form-control input-sm item wd-080 cugdde "  maxlength="6" value="' + n(d.cugdde) + '"> '+
    '    <input name="cvsno" type="text" class="form-control input-sm item wd-080 cvsno number"  maxlength="6" value="' + n(d.cvsno) + '"> '+
    '    <div class="col wd-020 center">→</div> ' +
    '    <input name="jan" type="text" class="form-control input-sm item wd-jan jan eventjan popJan" maxlength="13" value="' + n(d.jan) + '"> '+
    '    <input type="button" class="col popbtn cmdJan " tabindex="-1" value="?"/> '+
    '    <input name="gdcls9nm" type="text" class="form-control input-sm item wd-kbn gdcls9nm center" readonly value="' + n(d.scls5) + '"> '+
    '    <input name="gdjnm" type="text" class="form-control input-sm item wd-320 gdjnm longnm"  readonly value="' + n(d.gdnm) + '"> '+
    '    <input name="chkLineDel"  type="checkbox" class="form-control item input-sm wd-kbn chkLineDel" value="0" tabindex="-1"/>' +
    '  </div>' +
    {*非表示項目*}
    '  <input name="rnum" type="hidden" class="rnum" value="' + n(d.rnum) + '"/>' +
    '  <input name="ijan" type="hidden" class="ijan" value="' + n(d.ijan) + '"/>' +
    '  <input name="orgCucd" type="hidden" class="orgCucd keyItem forDeleteData" value="' + n(d.cucd) + '"/>' +
    '  <input name="orgJan" type="hidden" class="orgJan keyItem forDeleteData" value="' + n(d.jan) + '"/>' +
    '  <input name="orgIjan" type="hidden" class="orgIjan keyItem forDeleteData" value="' + n(d.ijan) + '"/>' +
    '  <input name="orgCugdcd" type="hidden" class="orgCugdcd keyItem forDeleteData" value="' + n(d.cugdcd) + '"/>' +
    '  <input name="orgMedcd" type="hidden" class="orgMedcd keyItem forDeleteData" value="' + n(d.medcd) + '"/>' +
    '  <input name="orgCugdde" type="hidden" class="orgCugdde keyItem forDeleteData" value="' + n(d.cugdde) + '"/>' +
    '  <input name="orgCvsno" type="hidden" class="orgCvsno keyItem forDeleteData" value="' + n(d.cvsno) + '"/>' +
    '  <input name="chkLineDelval" type="hidden" class="chkLineDelval" value=""/>' +
    '<hr>' +
    '</div>' +
    ' </div> ';


    return row;
  },
}


{*-- ここまでjsでのデータ表示用 ---------------------------------------------------*}


  function setNewLineData($me) {
    let frm = $("#headerTop");
    let mode = common.getValue(frm.find(".mode"));
    let detail = $me.closest(".contents").find(".detail.selectRow");

    detail.find(".popbtn").each(function (index) {
      common.setValue($(this),"?");
    });
    detail.find(".chkLineDel").prop('disabled', false);
    //detail.find(".cugdcd").prop("readonly",false);
    //detail.find(".cugdde").prop("readonly",false);
    detail.find(".cugdcd").focus();
  }


  $(document).ready(function(){
    /* 明細 高さ 自動設定
    //===================================================================*/
    common.setDetailHeight( $("#detail") );

    common.removeLoading();
    dspDetail();  {*明細表示*}

    /* イベント
    //===================================================================*/
    //　F1
    $(document).on("click", ".Func1:not('.noevent')", function(e) {
    });
    //　F2
    $(document).on("click", ".Func2:not('.noevent')", function(e) {
      //setTimeout(function(){
        $(".btn-search-before").trigger("click");
      //},100);
    });
    //　F3 行挿入
    $(document).on("click", ".Func3:not('.noevent')", function(e) {
      if($("#pagecnt").val() == $("#lastpage").val()) { {*最終ページ(新規用ページ)なら、行インサート*}
        $(".btnLineIns").trigger("click");
      } else { {*最終ページ(新規用ページ)でないなら、最終ページ(新規用ページ)にとぶ*}
        if(setArrayData($("#pagecnt").val())) { {*現在ページの変更を配列に記憶*}
          common.setValue($("#pagecnt"),$("#lastpage").val()); 
          chgDetail($("#lastpage").val());
        } else {
          alert("エラーがあります");
        }
      }
    });
    //　F4 行削除
    $(document).on("click", ".Func4:not('.noevent')", function(e) {
      $(".btn-del").trigger("click");
    });
    //　F5 クリア
    $(document).on("click", ".Func5:not('.noevent')", function(e) {
        clearHeader();
        setOneRow();
    });
    //　F6
    $(document).on("click", ".Func6:not('.noevent')", function(e) {
    });
    //　F7 次頁
    $(document).on("click", ".Func7:not('.noevent')", function(e) {
      if(setArrayData($("#pagecnt").val())) { {*現在ページの変更を配列に記憶*}
        let pgcnt = 0;
        if (stringUtil.isEmpty(common.getValue($("#pagecnt")))) {
          pgcnt = 1;
        } else {
          pgcnt = Number(common.getValue($("#pagecnt"))) + 1;
        }
        common.setValue($("#pagecnt"),pgcnt); //最初は1ページ
        chgDetail(String(pgcnt));
      } else {
        alert("エラーがあります");
      }      
    });
    //　F8 前頁
    $(document).on("click", ".Func8:not('.noevent')", function(e) {
      if(setArrayData($("#pagecnt").val())) { {*現在ページの変更を配列に記憶*}
        let pgcnt = 0;
        if (stringUtil.isEmpty(common.getValue($("#pagecnt")))) {
          pgcnt = 1;
        } else {
          pgcnt = Number(common.getValue($("#pagecnt"))) - 1;
        }
        common.setValue($("#pagecnt"),pgcnt); {*最初は1ページ*}
        chgDetail(String(pgcnt));
      } else {
        alert("エラーがあります");
      }
    });
    //　F9 登録/実行
    $(document).on("click", ".Func9:not('.noevent')", function(e) {
      $(".btn-reg-before").trigger("click");
    });
    //　F10 Excel
    $(document).on("click", ".Func10:not('.noevent')", function(e) {
      $(".popup-af031m").trigger("click");
    });
    //　F11 表示
    $(document).on("click", ".Func11:not('.noevent')", function(e) {
    });
    //　F12 メニュー/戻る
    $(document).on("click", ".Func12:not('.noevent')", function(e) {
      $('.btn-close').trigger('click');
    });

    //画面初期表示時動作

    //MENUボタン===============================
    $(document).on("regSuccess", ".btn-reg", function(e,options){
      setOneRow();
      clearHeader();
      alert("登録しました");
    });

    $(document).on("click", ".btn-search-before", function(e) {
      $(".Func2").addClass("noevent");

      var errflg = false;
      var frmh = $(this).closest(".contents").find(".header");
      var mode = common.getValue(frmh.find(".mode"));
      common.clearFormError(frmh);

      if(stringUtil.isEmpty(frmh.find(".cucd").val())) {
        errflg = true;
        common.addError(frmh.find(".cucd"), "入力して下さい", null, true);
      }
      
      if(!stringUtil.isEmpty(frmh.find(".cugdcdst").val()) && !stringUtil.isEmpty(frmh.find(".cugdcden").val())) {
        if(frmh.find(".cugdcdst").val() > frmh.find(".cugdcden").val()) {
          errflg = true;
          common.addError(frmh.find(".cugdcdst"), "正しい範囲を入力してください。", null, true);
          common.addError(frmh.find(".cugdcden"), "正しい範囲を入力してください。", null, true);
        }
      }

      if (errflg) {
        alert('エラーがあります');
        $(".Func2").removeClass("noevent");
      } else {
        common.dispLoading();
        $("#pagecnt").val("1");
        $(".btn-search").trigger("click");
      }
    });

    $(document).on("click", ".btn-reg-before", function(e) {
      var detail = $("#detail .detail");
      var frmh = $(this).closest(".contents").find(".header");
      var mode = common.getValue(frmh.find(".mode"));
      var errflg = false;
      var wret;

      if(setArrayData($("#pagecnt").val())) { {*現在ページの変更を配列に記憶 ついでに必須チェックも行っている。*}

        //必須チェック
        var detail = $("#detail .detail");
        var errflg = false;

        if(stringUtil.isEmpty(frmh.find(".cucd").val())) {
          errflg = true;
          common.addError(frmh.find(".cucd"), "入力して下さい", null, true, false);
        }

        let cnt = 0;
        for (var i = 0; i < detail.length; i++) {
          $me = $(detail[i]);
          if((!(stringUtil.isEmpty($me.find(".cugdcd").val())) || !(stringUtil.isEmpty($me.find(".jan").val())))
          && !$me.find(".chkLineDel").prop("checked")){ //キー項目入力あり & 削除以外

            {*必須チェック*}
            if(stringUtil.isEmpty($me.find(".jan").val())) {
              common.addError($me.find(".jan"), "入力して下さい。", null, true);
              errflg = true;
            }
            if(stringUtil.isEmpty($me.find(".cugdcd").val())) {
              common.addError($me.find(".cugdcd"), "入力して下さい。", null, true);
              errflg = true;
            }
          }
        }

        if(errflg) {
          alert("エラーがあります");
          return false;
        }

        //重複チェック
        detail.each(function(e){
          if(errflg) {
            return false;
          }
          var div = $(this);
          //空欄行はチェック対象外
          {*cucd, cugdcd, gdflg(1固定), cugddeでユニーク*}
          if(!(stringUtil.isEmpty(div.find(".cugdcd").val()))){
            var joken1 = div.find(".cugdcd");
            var joken2 = div.find(".medcd");
            var joken3 = div.find(".cugdde");
            detail.each(function(e){
              var div2 = $(this);
              var joken1_2 = div2.find(".cugdcd");
              var joken2_2 = div2.find(".medcd");
              var joken2_3 = div2.find(".cugdde");

              //空欄行はチェック対象外
              if(!(stringUtil.isEmpty(div2.find(".cugdcd").val()))){
                if(div.attr("id") != div2.attr("id")){
                  if(joken1.val() == joken1_2.val() && joken2.val() == joken2_2.val() && joken3.val() == joken2_3.val()) {
                    errflg = true;
                    joken1_3.focus();
                    return false;
                  }
                }
              }
            });
          }
        });

        if(errflg) {
          alert("重複しています")
        } else {

          let frm = $("#headerTop");
          let detail = $("#detail .detail");
          let datacnt = detail.length;

          var headerData = [];
          var f = common.getInputData(frm);
          headerData.push(encodeJson(f));

          var detailData = [];
          let cnt = 0;
          for (var i = 0; i < datacnt; i++) {
            $me = $(detail[i]);
            if(!(stringUtil.isEmpty($me.find(".jan").val()))){ {*空白は対象外*}
              if($me.find(".cugdcd").val() != $me.find(".orgCugdcd").val() {*変更有*}
                || $me.find(".medcd").val() != $me.find(".orgMedcd").val()
                || $me.find(".cugdde").val() != $me.find(".orgCugdde").val()) {
                var detailList = common.getInputData($me);
                detailData.push(encodeJson(detailList));
                cnt = cnt + 1;
              }
            }
          }

          if(cnt != 0) {
            var sendData = {};
            sendData["header"] = headerData;
            sendData["data"] = detailData;

            common.postData(
                "./chkRegBefore.php"
              , sendData
              , function (data) {
                // 特殊処理があれば
                var obj = JSON.parse(data);
                var ret = obj.ret;
                if(ret != '0') {
                  alert("同一得意先コード、同一分類コードの登録はできません。");
                  let header = $("form.header");
                  var form = header.closest(".container").find("form.body");
                  var forms = form.find(".detail");
                  var formData = [];
                  //エラー部分にフォーカス
                  for (var i = 0; i < forms.length; i++) {
                    if ($(forms[i]).find(".cugdcd").val() == obj.dupliCugdcd
                      && $(forms[i]).find(".medcd").val() == obj.dupliMedcd
                      && $(forms[i]).find(".cugdde").val() == obj.dupliCugdde
                      && $(forms[i]).find(".orgCugdcd").val() == obj.orgCugdcd
                      && $(forms[i]).find(".orgMedcd").val() == obj.orgMedcd
                      && $(forms[i]).find(".orgCugdde").val() == obj.orgCugdde) {
                      $(forms[i]).find(".jan").focus();
                      return false;
                    }
                  }
                } else {
                  $(".headermenu").find(".btn-reg").trigger("click");
                }
              }
              , function (error) {
                alert(error.msg);
              }
            );
          } else {
            $(".headermenu").find(".btn-reg").trigger("click");
          }
        }
      }
    });

    $(document).on("focus", ".header .dummy", function(e) {
      $("#topmenu").find(".Func2").focus();
    });
    $(document).on("focus", ".dummy2", function(e) {
      $("#topmenu").find(".Func9").focus();
    });

    //=== header ===

    //=== body ===
    $(document).on("afterChangeDatePicker","#detailTop .tdat", function(e) {
      $("#headerTop .tdat").val($(this).val());
    });

    //====明細行動作======
    //明細行クリック時,登録更新廃止の表示
    $("#detail").on("selectedDetail", function(e) {
      var me = $("#detail .selectRow");
      common.setValue($("#footerArea").find(".cuchgnm"),common.getValue(me.find(".cuchgnm")));
      common.setValue($("#footerArea").find(".cugdreg"),common.getValue(me.find(".cugdreg")));
      common.setValue($("#footerArea").find(".cugdupd"),common.getValue(me.find(".cugdupd")));
      common.setValue($("#footerArea").find(".cugdstp"),common.getValue(me.find(".cugdstp")));
    });
    //削除チェック
    $(document).on("change", ".chkLineDel", function(e) {
      var me = $(this);
      var detail = me.closest(".detail");
      var chkLineDel;

      if(me.prop("checked")) {
        chkLineDel = '-1'
      } else {
        chkLineDel = '0'
      }
      common.setValue(detail.find(".chkLineDelval"),chkLineDel);
    });

    $(document).on("insertLine", ".selectRow", function(e) {
      setNewLineData($(this));
    });

    $("#lastDetail").focus(function(){
    });


    //=== footer ===


  });

</script>
