var loadJuchuuHenkoMenuAndPopup;
var modalJuchuuChangeMenuArea;
var modalBgJcMenu;
var modalMainJcMenu;
var idFix;

$(document).ready(function(){

    modalJuchuuChangeMenuArea = $('.js-modal-jc-change-menu__juchuuChangeMenuArea');
    modalBgJcMenu = $('.js-modal-jc-change-menu__bg');
    modalMainJcMenu = $('.js-modal-jc-change-menu__main');
    var modalBtnClose = $('.js-modal-jc-change-menu__btn--close');
    var modalBtnCloseFix = $('.js-modal-jc-change-menu__btn--close--fix');

    loadJuchuuHenkoMenuAndPopup = function(isBackCartShousai, juchuuId, isDispChangeTeikiBoxMenu) {

        if (isDispChangeTeikiBoxMenu) {
            var changeTeikiBoxMenuArea = document.getElementById("changeTeikiBoxMenuArea");
        
            if (changeTeikiBoxMenuArea) {
                changeTeikiBoxMenuArea.style.display="block";
            }
        }
    
        var data="JUCHUU_ID=" + juchuuId;
        if (isBackCartShousai) {
           data += "&IS_BACK_CART_SHOUSAI=true";
        }
        $.ajax({
            type:"POST",
            dataType:"html",
            url:"OrderChangeMenu.htm?t="+(new Date).getTime(),
            data:data,
            cache:false,
            async:true,
            timeout:60000
            ,beforeSend:function(xhr) {
                if(xhr.overrideMimeType) {
                    xhr.overrideMimeType("text/html;charset=Shift_JIS");
                }
            },
            success:dispPopJuchuHenkoMenu,
            error:function(xhr,status,e) {
                alertAtServerError(jQuery.trim(xhr.responseText));
            }
        });
    }

    modalBtnClose.on('click', function (e) {
        modalBgJcMenu.fadeOut();
        modalMainJcMenu.removeClass("_slideUp");
        modalMainJcMenu.addClass("_slideDown");
    });

    modalBtnCloseFix.on('click', function (e) {
        modalBgJcMenu.fadeOut();
        modalMainJcMenu.removeClass("_slideUp");
        modalMainJcMenu.addClass("_slideDown");
    });

    modalMainJcMenu.on('click', function (e) {
        e.stopPropagation();
    });

    modalBgJcMenu.on('click', function () {
        $(this).fadeOut();
        $(this).next(modalMainJcMenu).removeClass("_slideUp");
        $(this).next(modalMainJcMenu).addClass("_slideDown");
    });
    
    var changeTeikiBoxMenuArea = document.getElementById("changeTeikiBoxMenuArea");
    if (changeTeikiBoxMenuArea) {
        changeTeikiBoxMenuArea.style.display="none";
    }


/* 産直キャンセルモーダル */
    var modalSanchokuCancelBtn = $('.js-modal-sanchoku-cancel__btn');
    var modalSanchokuCancelBtnClose = $('.js-modal-sanchoku-cancel__btn--close');
    var modalSanchokuCancelBg = $('.js-modal-sanchoku-cancel__bg');
    var modalSanchokuCancelMain = $('.js-modal-sanchoku-cancel__main');

    modalSanchokuCancelBtn.on('click', function (e) {
        $(modalSanchokuCancelBg).fadeToggle();
    });

    modalSanchokuCancelBtnClose.on('click', function (e) {
        modalSanchokuCancelBg.fadeOut();
    });

    modalSanchokuCancelMain.on('click', function (e) {
        e.stopPropagation();
    });

    modalSanchokuCancelBg.on('click', function () {
        $(this).fadeOut();
    });


/* 受注IDがモーダル開いた分だけ実行されるのでここにキャンセル配置 */
    var canSanchokuCancelAjax = true;
    $('#js-modal-sanchoku-cancel__btn--execution').on('click', function () {
        $(this).prop("disabled", true);

        if( !canSanchokuCancelAjax ) return;
        canSanchokuCancelAjax = false;

        var linkPathname = location.pathname;
        var linkSearch = location.search

        $.ajax({
            type: 'post',
            url: 'DirectDeliveryCancel.htm?t='+(new Date).getTime(),
            data: { "juchuuId" : idFix },// idFix or 111 など適当な数値はエラーになる
            cache:false,
            async:true,
            timeout:60000,
            success: function(json) {
                if( json.success == true ){
                    if( linkPathname == '/TodokebiCalendar.htm' ){
                        window.location.href = 'DirectDeliveryCancelComplete.htm' + '?changeBreadList=TodokebiCalendar';
                    } else {
                        window.location.href = 'DirectDeliveryCancelComplete.htm' + '?changeBreadList=OrderHistory';
                    }
                } else {
                    if( json.errorCode == "NO-LOGIN" ){
                        if( linkPathname == '/OrderDetail.htm' || linkPathname == '/TodokebiCalendar.htm' ){
                            var linkUrl = linkPathname + linkSearch;
                            var linkUrlEncode = encodeURIComponent(linkUrl);
                            goLoginSanchokuCancel(linkUrlEncode);
                        } else {
                            goLoginSanchokuCancel(linkPathname);
                        }
                    } else if(json.errorCode == "ORDER-NOT-EXISTS"){
                        alert("ご注文はキャンセルできませんでした");
                    } else if(json.errorCode == "GIFTCARD-OR-EGIFT-BUYING"){
                        alert("ギフトカードまたはeGiftでの購入商品はキャンセルできません");
                    } else if(json.errorCode == "PASSED-DEADLINE"){
                        alert("出荷準備中のためキャンセルできませんでした");
                    } else if(json.errorCode == "UNEXPECTED-ERROR"){
                        alert("エラーが発生したためキャンセルできませんでした");
                    }
                }
            },
            error:function() {
                alertAtServerError();
            },
            complete: function() {
                canSanchokuCancelAjax = true;
                $(this).prop("disabled", false);
            }
        });
    });

/* アプリ別ブラウザで開く */
    if( $('#app-external-browser').length ){
        var pagePathname = location.pathname;
        var pageSearch = location.search;
        var pageURL = pagePathname + pageSearch  + '#appExternalBrowser';
        var pageURLlEncode = encodeURIComponent(pageURL);

        $('#app-external-browser').on('click',function(){
            goLoginSanchokuCancel(pageURLlEncode);
        });
    }

});

    
function dispPopJuchuHenkoMenu(html,status,xhr) {
    
    modalJuchuuChangeMenuArea.next(modalBgJcMenu).fadeIn();
    modalJuchuuChangeMenuArea.next(modalBgJcMenu).next(modalMainJcMenu).removeClass("_slideDown");
    modalJuchuuChangeMenuArea.next(modalBgJcMenu).next(modalMainJcMenu).addClass("_slideUp");

    var ajaxReterunJuchuuData=null;
    if(html) {
        html = jsonFormat(html);
        ajaxReterunJuchuuData=JSON.parse(html);

        if(ajaxReterunJuchuuData.errorMessage) {
            if(ajaxReterunJuchuuData.errorMessage=="NO-LOGIN"){
                goLogin();
            } else {
                createErrorPopup();
            }
            return;
        }

        initChageMenuForm(ajaxReterunJuchuuData);
    }
}

function initChageMenuForm(ajaxReturnData) {

    if (ajaxReturnData.isHaisouSequential || (!ajaxReturnData.isOisixHaisoucenterShukka && ajaxReturnData.isHaisouHassoubiSitei)) {
        $("#dispToutyakuyoteiTitle").text("発送予定日");
        if (ajaxReturnData.isHaisouSequential) {
            $("#dispToutyakuyoteiDate").text("準備ができ次第発送する商品となります");
        } else {
            $("#dispToutyakuyoteiDate").text(ajaxReturnData.hassouyoteiDate + "発送");
        }
    } else {
        $("#dispToutyakuyoteiTitle").text("お届け日時");
        $("#dispToutyakuyoteiDate").text(ajaxReturnData.toutyakuyoteiDate + ajaxReturnData.toutyakujikan);
    }
    $("#dispTodokesakiShimei").text(ajaxReturnData.todokesakiShimei + 'さま');
    $("#dispTodokesakiJusho").text(ajaxReturnData.todokesakiJusho);

    if (ajaxReturnData.isPlacement === 'true' && (ajaxReturnData.unsougaishaId === '1' || ajaxReturnData.unsougaishaId === '')) {
        if (ajaxReturnData.placementDiv === '1') {
            $("#dispPlacement").text('利用する');
        } else {
            $("#dispPlacement").text('利用しない');
        }
    } else {
        $("#placementArea").hide();
    }

    initChangeToutyakuyoteiForm(ajaxReturnData);
    initChangeTodokesakiForm(ajaxReturnData);
    initCancelJuchuuFrom(ajaxReturnData);
    initChangePlacementForm(ajaxReturnData);
}


function initChangeToutyakuyoteiForm(ajaxReturnData) {

    var btnChangeToutyakuyotei = $("#btnChangeToutyakuyotei");

    if (ajaxReturnData.isUpdateable) {
        btnChangeToutyakuyotei.show();
        if (ajaxReturnData.isSanchoku) {
            if (!ajaxReturnData.isHaisouSequential) {
                btnChangeToutyakuyotei.on('click', function (e) {
                    gotoChangeDatePageForSanchoku(ajaxReturnData.juchuuId);
                });
            } else {
                btnChangeToutyakuyotei.on('click', function (e) {
                    gotoChangeDatePageForSanchokuAndHaisouSequential(ajaxReturnData.juchuuId);
                });
            }
        } else if (ajaxReturnData.isOitoku) {
            if (!ajaxReturnData.isHaisouSequential) {
                btnChangeToutyakuyotei.on('click', function (e) {
                    gotoChangeDatePageForOitoku(
                        ajaxReturnData.juchuuId,
                        ajaxReturnData.autoshipInd,
                        ajaxReturnData.arrivalYear,
                        ajaxReturnData.arrivalMonth,
                        ajaxReturnData.arrivalDay,
                        ajaxReturnData.shouhinId,
                        ajaxReturnData.shouhinName);
                });
            } else {
                btnChangeToutyakuyotei.on('click', function (e) {
                    gotoChangeDatePageForSanchokuAndHaisouSequential(ajaxReturnData.juchuuId);
                });
            }
        } else {
            btnChangeToutyakuyotei.on('click', function (e) {
                gotoChangeDatePage(ajaxReturnData.juchuuId);
            });
        }
    } else {
        btnChangeToutyakuyotei.hide();
    }
}

function initChangeTodokesakiForm(ajaxReturnData) {
    var btnChangeTodokesaki = $("#btnChangeTodokesaki");

    if (ajaxReturnData.isUpdateable) {
        btnChangeTodokesaki.show();

        btnChangeTodokesaki.on('click', function (e) {
            gotoChangeAddressPage(ajaxReturnData.juchuuId);
        });
    } else {
        btnChangeTodokesaki.hide();
    }
}

function initChangePlacementForm(ajaxReturnData) {
    var btnChangePlacement = $("#btnChangePlacement");

    if (ajaxReturnData.isUpdateable) {
        btnChangePlacement.show();

        btnChangePlacement.on('click', function (e) {
            gotoJuchuuPlacementPage(ajaxReturnData.juchuuId);
        });
    } else {
        btnChangePlacement.hide();
    }
}

/**
 * キャンセル処理の初期化。モーダルが立ち上がるたびに実行される
 * @param {*} ajaxReturnData 
 */
function initCancelJuchuuFrom(ajaxReturnData) {
    var btnCancelJuchuu = $("#btnCancelJuchuu");

    if (ajaxReturnData.isDispCancelBtn && ajaxReturnData.isCancelable) {
        if (ajaxReturnData.isOitoku) {
            btnCancelJuchuu.attr("value", "おいトクキャンセルページへ");
        }
        if (ajaxReturnData.isSanchoku) {
            btnCancelJuchuu.attr("value", "注文をキャンセルする");
        }
        btnCancelJuchuu.show();

        if (ajaxReturnData.isOitoku) {
            btnCancelJuchuu.on('click', function (e) {
                gotoCancelPageForOitoku(ajaxReturnData.juchuuId, ajaxReturnData.autoshipInd, ajaxReturnData.shouhinName);
            });
        } else if (ajaxReturnData.isSanchoku) {
            //「注文をキャンセルする」ボタンを押したら
            btnCancelJuchuu.off().on('click', function (e) {
                $('.js-modal-sanchoku-cancel__bg').fadeIn();
                idFix = ajaxReturnData.juchuuId;
                //sanchokuCandelBtnExecution(idFix);
            });

        } else {
            
            //「今週の注文をキャンセル」ボタンを押したら
            btnCancelJuchuu.off().on('click', function (e) {

                //予約商品APIのイベントハンドラを定義
                ReservationCheck.eventDispatcher.one( ReservationCheck.RESERVATION_API_COMPLETE, { juchuuId: ajaxReturnData.juchuuId }, onReservationCheckComplete );
                ReservationCheck.eventDispatcher.one( ReservationCheck.RESERVATION_API_ERROR   , { juchuuId: ajaxReturnData.juchuuId }, onReservationCheckError );
                
                //予約商品有無APIをリクエスト
                ReservationCheck.getCartHasReservationItems();
            });
        }
    } else {
        btnCancelJuchuu.hide();
    }
}

/**
 * 予約商品チェックAPIリクエストが完了した
 */
function onReservationCheckComplete( ev, payload ) {
    if( !!payload.hasReservationItem ) {
        if( confirm( ReservationCheck.RESERVATION_CART_CANCEL_MESSAGE ) ) {
            this.gotoCancelPage(ev.data.juchuuId);
        }
    } else {
        this.gotoCancelPage(ev.data.juchuuId);
    }
}
/**
 * 予約商品チェックAPIリクエストでエラーが起きた
 */
function onReservationCheckError( ev ) {
    this.gotoCancelPage(ev.data.juchuuId);
}

function gotoChangeDatePageForSanchoku(juchuuId) {

    var hiddenParm = {JUCHUU_ID:juchuuId, NOT_CLEAR:'true'};
    submitAction("/SantyokuToutyakubiHenkou.htm", hiddenParm);
}

function gotoChangeDatePageForSanchokuAndHaisouSequential(juchuuId) {

    var hiddenParm = {JUCHUU_ID:juchuuId, NOT_CLEAR:'true'};
    submitAction("/SantyokuJunjiHassouHenkou.htm", hiddenParm);
}

function gotoChangeDatePageForOitoku(juchuuId, autoshipInd, arrivalYear, arrivalMonth, arrivalDay, shouhinId, shouhinName) {

    var hiddenParm = {
                         juchuu_id:juchuuId,
                         AUTUSHIP_IND:autoshipInd,
                         TOUTYAKUYOTEI_Y:arrivalYear,
                         TOUTYAKUYOTEI_M:arrivalMonth,
                         TOUTYAKUYOTEI_D:arrivalDay,
                         shouhin_id:shouhinId,
                         shouhinName:shouhinName
                     };
    submitAction("/OipuraTodokebiHenkou.htm", hiddenParm);
}

function gotoChangeDatePage(juchuuId) {
    var hiddenParm = {JUCHUU_ID:juchuuId};
    submitAction("/JuchuuTodokebiHenkouSelect.htm", hiddenParm);
}

function gotoChangeAddressPage(juchuuId) {
    var hiddenParm = {JUCHUU_ID:juchuuId, NOT_CLEAR:'true'};
    submitAction("/JuchuuTodokesakiHenkouJuchuu.htm", hiddenParm);
}

function gotoJuchuuPlacementPage(juchuuId) {
    var hiddenParm = {JUCHUU_ID:juchuuId, NOT_CLEAR:'true'};
    submitAction("/JuchuuPlacementChange.htm", hiddenParm);
}

function gotoCancelPageForOitoku(juchuuId, autoshipInd, shouhinName) {
    var hiddenParm = {juchuu_id:juchuuId, NOT_CLEAR:'true', autoship_ind:autoshipInd, shouhinName:shouhinName};
    submitAction("/Personal7.htm", hiddenParm);
}

function gotoCancelPage(juchuuId) {
    var hiddenParm = {jid:juchuuId};
    submitAction("/JuchuuCancelSelect.htm", hiddenParm);
}

function submitAction(actionUrl, hiddenParamsArray) {

    var form=$("<form>");
    form.attr("action", actionUrl);
    for (var prmKey in hiddenParamsArray) {
        form.append($("<input>").attr("type","hidden").attr("name", prmKey).val(hiddenParamsArray[prmKey]));
    }
    $("body").append(form);
    form.submit();
}

function goLogin() {
    var form=$("<form>");
    form.attr("data-ajax",false);
    form.attr("action","/Login1.htm");
    form.append($("<input>").attr("type","hidden").attr("name","FROMBEANNAME").attr("value","/"));
    $("body").append(form);
    form.submit();
}

function goLoginSanchokuCancel(link) {
    window.location.href = 'Login1.htm?LOGIN_SUCCESS_URL=' + link;
}


function createErrorPopup() {
    $("#js-popup-close").trigger("click");
    $("#popup").html("");
    html='<div class="change__popup__note--deliverydate-on-the-day">エラーが発生しました。初めからやり直してください。</div>';
    html+='<div class="change__popup__note--deliverydate-on-the-day">解消されない場合はカスタマーサポートまでご連絡ください。</div>';
    $("#popup").append(html);
    $("#popup").append('<div id="js-popup-close" class="change__popup__close--deliverydate-on-the-day">閉じる</div>');
    var elemModal=document.getElementById("js-modal");
    if(elemModal) {
        var elemPopup=document.getElementById("popup");
        document.getElementById("js-change-item-layer").style.position="absolute";
        document.getElementById("js-change-item-layer").style.width="100%";
        elemModal.style.display="block";
        elemPopup.style.top=document.documentElement.clientHeight/2-elemPopup.clientHeight/2+"px"
    }
}

function alertAtServerError() {
    alert("サーバエラーが発生しました。しばらくしてから再度お試しください。");
}


function dispPopSfsKitMenu(targetId, kokyakuId) {

    var $targetWapper = $('.js-modal-jc-change-menu__main');

    $('.sfs-experiment-slide').css('overflow-y', 'scroll');
    $targetWapper.find('[data-content-id^="sfs_kit_set"]').css('display', 'none');
    $targetWapper.find('[data-content-id="'+targetId+'"]').css('display', 'block');

    // TDに投げる
    if( typeof sendTdEvent === 'function' ) {
        sendTdEvent('click', targetId, kokyakuId);
    }

    modalJuchuuChangeMenuArea.next(modalBgJcMenu).fadeIn();
    modalJuchuuChangeMenuArea.next(modalBgJcMenu).next(modalMainJcMenu).removeClass("_slideDown");
    modalJuchuuChangeMenuArea.next(modalBgJcMenu).next(modalMainJcMenu).addClass("_slideUp");
}
