<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(".cucd").val()) {*入力があるものだけチェックする*}
    || !stringUtil.isEmpty($me.find(".cshcd").val())
    || !stringUtil.isEmpty($me.find(".cshnm").val())
    || !stringUtil.isEmpty($me.find(".cshpcd").val())
    || !stringUtil.isEmpty($me.find(".cszip").val())
    || !stringUtil.isEmpty($me.find(".csad1").val())
    || !stringUtil.isEmpty($me.find(".csad2").val())
    || !stringUtil.isEmpty($me.find(".cstel").val())
    || !stringUtil.isEmpty($me.find(".csfax").val())
    ) {
      {*必須チェック*}
      if(stringUtil.isEmpty($me.find(".cucd").val())) {
        common.addError($me.find(".cucd"), "入力して下さい。", null, true);
        errflg = true;
      }
      if(stringUtil.isEmpty($me.find(".cshcd").val())) {
        common.addError($me.find(".cshcd"), "入力して下さい。", null, true);
        errflg = true;
      }
      if(stringUtil.isEmpty($me.find(".cshpcd").val())) {
        common.addError($me.find(".cshpcd"), "入力して下さい。", null, true);
        errflg = true;
      }

    }
  }

  if(errflg) {
    alert("エラーがあります");
  }
  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(".cucd").val()) {*入力があるものだけ配列に入れる*}
        || !stringUtil.isEmpty($me.find(".cshcd").val())
        || !stringUtil.isEmpty($me.find(".cshpcd").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");
          detail_data[rnum][inputnm] = common.getValue($(this));
        });
      }
    }

    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 += af90311x_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 += af90311x_detail.appendRow(detail_data[i]);
      }
    }
  }

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

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

  var detail = $("#detail .detail");

  $("#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");
    $(".Func7").addClass("noevent");
    $(".Func8").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");
    $(".Func7").removeClass("noevent");
    $(".Func8").removeClass("noevent");
    $(".Func9").removeClass("noevent");
    $(".Func12").removeClass("noevent");

    {*ヘッダー項目*}
    h.find(".modelbl").addClass("newLabel");
    {*データ部フォーカス*}
    d.find(".cucd")[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 = af90311x_detail.appendRow(init_data);
  $("#detail").append(el);
  var detail = $("#detail").find(".detail");
  detail.find(".datepicker").each(function (index) {
    common.setDatepickerInfo($(this));
  });
}

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"}
    doHeaderEnable("H")
    setOneRow();
    common.setValue($("#pagecnt"), "");
    common.setValue($("#lastpage"), "");
  {else if $header.ret == "1"}
    dsp_detail("1");
    doHeaderEnable("D")
    {*頁情報*}
    chgDetail("1");
    common.setValue($("#pagecnt"), "1");
    common.setValue($("#lastpage"), "1");
  {else}
    setOneRow();
    doHeaderEnable("H")
    {if $hasError eq true}
      alert("{$errorMsg}")
    {/if}
  {/if}
}

{*明細行用関数*}
var af90311x_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 ktktcdGrp scls90Grp">' +
    '    <div class="col wp-100"> ' +
    {*得意先*}
    '      <div class="col wd-330"> ' +
    '        <div class="col wp-100"> ' +
    '          <input name="cucd" type="text" class="form-control input-sm item wd-100 cucd popCucd eventcucd"  maxlength="12" value="' + n(d.cucd) + '"> '+
    '          <input type="button" class="col popbtn cmdCucd" tabindex="-1" value="?"/> '+
    '          <input name="cunm" type="text" class="form-control input-sm item wd-200 cunm "  readonly value="' + n(d.cunm) + '"> '+
    '        </div>' +
    '      </div>' +
    {*コード名称*}
    '      <div class="col wd-380"> ' +
    '        <div class="col wp-100"> ' +
    '          <input name="cshcd" type="text" class="form-control input-sm item wd-070 cshcd "  maxlength="7" value="' + n(d.cshcd) + '"> '+
    '          <input name="cshnm" type="text" class="form-control input-sm item wd-300 cshnm "  maxlength="40" value="' + n(d.cshnm) + '"> '+
    '        </div>' +
    '        <div class="col wp-100"> ' +   
    '          <input name="cshpcd" type="text" class="form-control input-sm item wd-120 cshpcd "  maxlength="7" value="' + n(d.cshpcd) + '"> '+
    '        </div>' +
    '      </div>' +
    {*郵便番号*}
    '      <div class="col wd-090"> ' +
    '        <div class="col wp-100"> ' +
    '          <input name="cszip" type="text" class="form-control input-sm item wd-090 cszip "  maxlength="8" value="' + n(d.cszip) + '"> '+
    '        </div>' +
    '        <div class="col wp-100"> ' +
    '          <label class="control-label wd-080">&nbsp;</label> '+
    '        </div>' +
    '      </div>' +
    {*住所等*}
    '      <div class="col wd-410"> ' +
    '        <div class="col wp-100"> ' +
    '          <input name="csad1" type="text" class="form-control input-sm item wd-240 csad1 "  maxlength="30" value="' + n(d.csad1) + '"> '+
    '          <input name="cstel" type="text" class="form-control input-sm item wd-120 cstel "  maxlength="14" value="' + n(d.cstel) + '"> '+
    '          <input name="chkLineDel"  type="checkbox" class="form-control item input-sm wd-kbn chkLineDel" value="0" tabindex="-1"/>' +
    '        </div>' +
    '        <div class="col wp-100"> ' +
    '          <input name="csad2" type="text" class="form-control input-sm item wd-240 csad2 "  maxlength="30" value="' + n(d.csad2) + '"> '+
    '          <input name="csfax" type="text" class="form-control input-sm item wd-120 csfax "  maxlength="14" value="' + n(d.csfax) + '"> '+
    '        </div>' +
    '      </div>' +
    '    </div>' +
    {*非表示項目*}
    '    <input name="rnum" type="hidden" class="rnum" value="' + n(d.rnum) + '"/>' +
    '    <input name="csreg" type="hidden" class="csreg" value="' + n(d.csreg) + '"/>' +
    '    <input name="csupd" type="hidden" class="csupd" value="' + n(d.csupd) + '"/>' +
    '    <input name="orgcucd" type="hidden" class="orgcucd keyItem forDeleteData" value="' + n(d.orgcucd) + '"/>' +
    '    <input name="orgcshcd" type="hidden" class="orgcshcd keyItem forDeleteData" value="' + n(d.orgcshcd) + '"/>' +
    '    <input name="orgcshnm" type="hidden" class="orgcshnm keyItem forDeleteData" value="' + n(d.orgcshnm) + '"/>' +
    '    <input name="orgcshpcd" type="hidden" class="orgcshpcd keyItem forDeleteData" value="' + n(d.orgcshpcd) + '"/>' +
    '    <input name="orgcszip" type="hidden" class="orgcszip keyItem forDeleteData" value="' + n(d.orgcszip) + '"/>' +
    '    <input name="orgcsad1" type="hidden" class="orgcsad1 keyItem forDeleteData" value="' + n(d.orgcsad1) + '"/>' +
    '    <input name="orgcsad2" type="hidden" class="orgcsad2 keyItem forDeleteData" value="' + n(d.orgcsad2) + '"/>' +
    '    <input name="orgcstel" type="hidden" class="orgcstel keyItem forDeleteData" value="' + n(d.orgcstel) + '"/>' +
    '    <input name="orgcsfax" type="hidden" class="orgcsfax keyItem forDeleteData" value="' + n(d.orgcsfax) + '"/>' +
    '    <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(".cucd").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) {
      $(".btn-search-before").trigger("click");
    });
    //　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-af036m").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-before", 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(".cuedi").val())) {
      //  errflg = true;
      //  common.addError(frmh.find(".cuedi"), "を入力して下さい", null, true);
      //}

      if (errflg) {
        $(".Func2").removeClass("noevent");
        alert('エラーがあります');
      } 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 chk_array = detail_data.concat(new_data); {*チェック用配列として、元データ配列と新規データ配列を結合*}
        for(i = 0 ; i < chk_array.length ; i++) {

          var joken1 = chk_array[i]["cucd"];
          var joken2 = chk_array[i]["cshcd"];

          for(j = i+1 ; j < chk_array.length ; j++) {
            var joken1_2 = chk_array[j]["cucd"];
            var joken2_2 = chk_array[j]["cshcd"];

            if(i != j && joken1==joken1_2 && joken2==joken2_2) {
              errflg = true;
              
              common.setValue($("#pagecnt"),chk_array[j]["pgno"]); 
              chgDetail(chk_array[j]["pgno"]);

              var detail = $("#detail .detail");

              {*重複部分にフォーカス*}
              detail.each(function(e) {
                var $me = $(this);
                if($me.find(".cshcd").val() == chk_array[j]["cshcd"]) {
                  $me.find(".cshcd").focus();
                }
              });
            }
          }
        }



        if(!errflg) {

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

          var sendData = {};
          sendData["header"] = headerData;
          sendData["data"] = chk_array;

          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 = [];

                common.setValue($("#pagecnt"),obj.pgno);
                chgDetail(obj.pgno);

                var detail = $("#detail .detail");
                {*重複部分にフォーカス*}
                detail.each(function(e) {
                  var $me = $(this);
                  if($me.find(".cshcd").val() == obj.duplicshcd) {
                    $me.find(".cshcd").focus();
                  }
                });

              } else {
                if(window.confirm("登録します。よろしいですか？")) {
                  var headerData = [];
                  var f = common.getInputData(frmh);
                  headerData.push(encodeJson(f));

                  var sendData = {};
                  sendData["header"] = headerData;
                  sendData["data"] = chk_array;

                  var me = $(this);
                  var errorFunc = $(this).attr("errorFunc");

                  setComplianceData("reg", sendData);

                  common.dispLoading();

                  common.postData(
                    "./update.php"
                    , sendData
                    , function (data, options) {
                      common.removeLoading();
                      $(".btn-reg-before").trigger("regSuccess", [data, options]);
                    }
                    , function (error, options) {
                      common.removeLoading();
                      alert("登録に失敗しました[" + error.msg + "]");
                      $(".btn-reg-before").trigger("regError", [error, options]);
                    }
                  );
                }
              }
            }
            , function (error) {
              alert(error.msg);
            }
          );

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


    $(document).on("focus", ".header .dummy", function(e) {
      $("#topmenu").find(".Func2").focus();
    });
    
    //=== header ===
    $(document).on("afterSelectAfm03x", "#headerTop .cucd", function(e) {
      $(".btn-search-before").trigger("click");
    });

    //=== body ===

    //====明細行動作======
    //廃止動作
    $(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(){
      var details = $("#detailTop .detail:last")[0];
      if(!!!details){
        return true;
      }

      if($("#pagecnt").val() != $("#lastpage").val()) {
        $("#topmenu").find(".Func7").focus();
        return false;
      }

      var newRow = commonLine.insertDetail(details);
      common.setDetailHeight();
      $(newRow).find(":enabled")[0].focus();
      $(window).scrollTop($(newRow).parent().offset().top);
      setNewLineData($(newRow));
    });


    //=== footer ===


  });

</script>
