// 検索フォーム

// 戻るボタンの関数
// 機能概要：メニュー画面に遷移する
function backToMenu(){
    location.href = "/menu/";
}

// クリアボタンの関数
// 利用条件１：form名がsearch
// 利用条件2：form入力値名がctrl_で始まる
function clr() {
    const formElement = document.search
    const formInputElements = Array.from(formElement.elements)
    for (const formInput of formInputElements) {
        if (formInput.name.startsWith('ctrl_')) {
            formInput.value = "";
        }
    }

    // 検索ボタンを再度非活性にする
    formBtDisabled();
}

/**
 * ボタンの活性非活性関数
 * @param {*} buttonId ボタンのID デフォルトは`search_bt`
 * @param {*} formId フォームのname デフォルトは`search`
 * @param {*} all 全インプットが入力されている場合に活性化するかどうか
 */
function formBtDisabled(buttonId='search_bt', formId='search', all=false) {
    const formElement = document[formId]
    const formInputElements = Array.from(formElement.elements)
    // 検査対象を
    const checkTargetValueLength = formInputElements
        .filter((elem) => elem.name.startsWith('ctrl_'))
        .map((elem) => elem.value.length)

    // 活性、非活性の判断
    let validFlg = false;
    if (all) {
        validFlg = checkTargetValueLength.every((num) => num !== 0)
    } else {
        validFlg = checkTargetValueLength.some((num) => num !== 0)
    }

    if (validFlg == true) {
        $(`#${buttonId}`).removeAttr('disabled');
        // クリアボタンはあれば活性化する
        if ($('#clear')) {
            $('#clear').removeAttr('disabled');
        }
    }
    else {
        $(`#${buttonId}`).attr('disabled', 'disabled');
        // クリアボタンはあれば非活性化する
        if ($('#clear')) {
            $('#clear').attr('disabled', 'disabled');
        }
    }
}

// ドロップダウンリスト再選択の関数
// 引数:ﾄﾞﾛｯﾌﾟﾀﾞｳﾝﾘｽﾄのID
// 引数:選択したいリスト選択表示文字列
function selectDropDowList(id, selectedName){
    // 以前の検索条件再読み込み
    var select = document.getElementById(id);
    select = select.children[0];
    var options = select.options;
    if (options != null)
    {
        for(var i = 0; i < options.length; i++){
            if(options[i].text === selectedName){
                options[i].selected = true;
            }
        };
    }
}

/**
 * DatePickerを設定
 */
function enableDatePicker() {
    // カレンダーの表示を日曜日始まりに変更
    flatpickr.l10ns.ja.firstDayOfWeek = 0;
    $('.date_picker').flatpickr(
        {
            locale: 'ja', // 日本語カレンダー
            allowInput: true, // 入力可能にする
            dateFormat: 'Y/m/d' // 日付のフォーマットを修正
        }
    )
}

// 日付入力チェック
// 引数:チェックするﾃｷｽﾄﾎﾞｯｸｽNo
function autoModifyDate($this){
    // 日付フォーマットチェック

    if($this.value === "" ||
        (!$this.value.match(/^\d{4}\/\d{2}\/\d{2}$/) && !$this.value.match(/^\d{4}\d{2}\d{2}$/)))
    {
        $this.value = "";
        return;
    }

    /** @type { string }*/
    let strFormat = $this.value;;
    // yyyyMMddの場合→yyyy/MM/dd
    const datePatternMatches = strFormat.match(/^(\d{4})(\d{2})(\d{2})$/);
    if (datePatternMatches){
        strFormat = `${datePatternMatches[1]}/${datePatternMatches[2]}/${datePatternMatches[3]}`;
    }
    // yyyy/00/00～yyyy/00/00の場合→yyyy/01/01～yyyy/12/31
    // yyyy/MM/00～yyyy/MM/01の場合→yyyy/MM/01～yyyy/MM/末日
    // 開始日の場合
    if ($this.name.includes('from')){
        strFormat = strFormat.replace("00/00", "01/01");
        strFormat = strFormat.replace("00", "01");
    }
    // 終了日の場合
    else if ($this.name.includes('to')){
        strFormat = strFormat.replace("00/00", "12/31");
        const date = new Date(strFormat.slice(0, 4), strFormat.slice(5, 7), 0).getDate();
        strFormat = strFormat.replace("00", date.toString());
    }
       $this.value = strFormat;
}


// 前のスペースを許さない入力チェック
function checkSpaceForm($this)
{
    var str=$this.value;

    while(str.match(/(^\s+)/g))
    {
        str=str.replace(/(^\s+)/g, "");
    }

    $this.value=str;
}

// あいまい検索用に半角の英数字と%以外を許さない入力チェック
function checkAimaiSearhForm($this)
{
    var str=$this.value;
    while(str.match(/[^A-Z^a-z^0-9\%]/))
    {
        str=str.replace(/[^A-Z^a-z^0-9\%]/,"");
    }
    $this.value=str;
}

// 大文字小文字-以外を許さない入力チェック
function checkPassForm($this)
{
    var str=$this.value;
    while(str.match(/[^ -\~]/))
    {
        str=str.replace(/[^ -\~]/,"");
    }
    $this.value=str;
}

// チェックボックス全選択関数
// 条件：チェックボックスのクラス名に"selected"というのがついていること
// 条件：ボタンにクラス名 send がついていること
function allOn(){
    $(".selected").prop("checked", true);
    $(".send").prop('disabled',false);
}

// チェックボックス全解除関数
// 条件：チェックボックスのクラス名に"selectedページ数"というのがついていること
// 条件：ボタンにクラス名 send がついていること
function allOff(){
    $(".selected").prop("checked", false);
    $(".send").prop('disabled',true);
}
