(function($) {
	$.fn.extend({
    addCartErrorModal: function(errorHtml){
      $('.addCart_error').fadeIn(200);
      $('.addCart_error_message').html(errorHtml);

      // モーダルを消す
      $('.addCart_error').on('click', function(){
        $(this).fadeOut();
      });
      $('.addCart_error_message').on('click', function(event){
        // モーダル内クリックは親へ伝播させない
        event.stopPropagation();
      });
    },
    updateHeaderInfo : function(){
      var hostUrl = 'https://' +  location.host + '/api/header/info';
      $.ajax({
        type: 'GET',
        url: hostUrl,
      }).done(function(data){
        var cartCountElm = $('#user_cart .js-cartCount');
        // 要素内のinnerの有無を判別（ゼロの時はない）して挿入
        if (!$('#user_cart .js-cartCount .inner').length){
          $(cartCountElm).append('<span class="inner">' + data.cartCount + '</span>');
        } else {
          $(cartCountElm).children('.inner').text(data.cartCount);
        }
        $(cartCountElm).addClass('-transform');
        setTimeout(function(){
          $(cartCountElm).removeClass('-transform');
        },300);

        // カート追加時モーダルにも合計点数を追加
        $('#modal_cartInBtn .modal_cartInBtn__sum span').html(data.cartCount);

        // 言語が英語 かつ 点数1点の場合は、単数形itemに変更
        if($('#siteLanguage').val() == 'en' && data.cartCount == 1) {
          var onlyitemtext = $('#modal_cartInBtn .modal_cartInBtn__sum').html().slice(0, -1);
          $('#modal_cartInBtn .modal_cartInBtn__sum').html(onlyitemtext);
        }
        
      }).fail(function() {
        // エラーの時
        var errorHtml = i18next.t('commodity:text.カート商品数の更新に失敗しました。<br>ブラウザをリロードしてください。');
        // 出力する
        $().addCartErrorModal(errorHtml);
      })
    },
    addCartFeedback : function(itemHtml){
      // ボタンを削除してカートへ進むボタンと文言を表示
      var replaceElm 
      = '<div class="addCart_feedback">'
      +   '<span class="buttonToCart"><a href="/cart">'+ i18next.t('commodity:text.カートへ進む') +'</a></span>'
      +   '<span class="feedbackText icon-A24-check">'+ i18next.t('commodity:text.追加しました') +'</span>'
      + '</div>';
      // ボタン表示の制御
      $(itemHtml).hide().html(replaceElm);
      $(itemHtml).fadeIn(500);

      if($('#schema').val() !== 'fashionwalker') {
        var modalElm 
        = '<div id="modal_cartInBtn" uk-modal="stack: true">'
        +   '<div class="uk-modal-dialog uk-modal-body">'
        +     '<div class="modal_cartInBtn__close uk-modal-close">✕</div>'
        +     '<p class="modal_cartInBtn__title">' + i18next.t('commodity:text.カートに追加しました') + '</p>'
        +     '<p class="modal_cartInBtn__sum">' + i18next.t('commodity:html.合計点数<span>-</span>点') + '</p>'
        +     '<p class="modal_cartInBtn__btn"><a href="/cart/">' + i18next.t('commodity:text.カートへ進む') + '</a></p>'
        +     '<p class="modal_cartInBtn__text uk-modal-close">' + i18next.t('commodity:text.お買い物を続ける') + '</p>'
        +   '</div>'
        + '</div>';

        if($('#modal_cartInBtn').length){
          $('#modal_cartInBtn').remove();// 既にモーダルが存在している場合は前回分を削除
        };
        $('body').append(modalElm);
        UIkit.modal('#modal_cartInBtn').show();
      }
    },
    addMultipleCartJson : function(obj, skuCode, supplierBarCode) {
      // -sendingクラスが付与されているアイテムがあれば処理をスキップ（排他制御）
      if($('.shopping_cantrol .order').hasClass('-sending')){
        return ;
      }
      // 数量を要素から取得（現在は不使用） var amount = $('#commodityAmount_' + skuCode).val();
      var amount = 1;

      // GET先URL
      var url = window.location.origin + '/commodity/add-multiple-cart-json';
      // 押されたボタンの親要素を取得してクラス追加
      var itemHtml = $(obj).parents('.order');
      $(itemHtml).addClass('-sending');
      // buyeeConnectかどうか
      var isBuyeeConnect = false;
      if (sessionStorage.getItem('bc_is_allowed_country') !== null) {
        isBuyeeConnect = sessionStorage.getItem('bc_is_allowed_country');
      }
      var target = $(obj);
      $.ajax({
        type: 'GET',
        url: url,
        dataType: 'json',
        cache: false,
        data : {
          'skuCode' : skuCode,
          'amount' : amount,
          'isBuyeeConnect' : isBuyeeConnect,
        },
      }).done(function (data) {

        if (data.addCartResult === "notlogin") {
          // 未ログイン時はログイン画面に遷移
          $(".cartkeepModal_notlogin").find("a").attr("href",
              window.location.origin + "/commodity/add-multiple-cart/" + skuCode + "/" + amount);
          $(".cartkeepModal_notlogin").fadeIn("fast");

        } else if (data.addCartResult === 'cartKeep' || data.addCartResult === "done") {
          // カート追加完了。
        // エラーがなければ追加完了フィードバックを表示
        if(!data.errors) {

            // スタッフスタート導入サイトは計測タグを発火
            var merchantId = $('#merchantId').val();
            if(merchantId && supplierBarCode){
              staffStart.cart.sendTrackingRequest(merchantId,{ product_code: supplierBarCode, count: amount});
            }

            if (data.addCartResult === 'cartKeep') {
              $().addCartKeepModal(); 
            }
          $().addCartFeedback(itemHtml);
          $().updateHeaderInfo();

          //ga add_to_cart
          const skuCode = (typeof target[0].dataset.skuCode !== 'undefined') ? target[0].dataset.skuCode : null;
          const sizeLabel = (typeof target[0].dataset.sizeLabel !== 'undefined') ? target[0].dataset.sizeLabel : null;
          const commodityCode = (skuCode !== null) ? skuCode.slice(0, -3) : null;
          const supplierCode = (typeof target[0].dataset.supplierCode !== 'undefined') ? target[0].dataset.supplierCode : null;
          const janCode = (typeof target[0].dataset.janCode !== 'undefined') ? target[0].dataset.janCode : null;
          const colorName = (typeof target[0].dataset.colorName !== 'undefined') ? target[0].dataset.colorName : null;
          if(typeof clickEvent !== 'undefined') clickEvent.addToCart(commodityCode, 'view_item', skuCode, sizeLabel, colorName, supplierCode, janCode );
        } else {
          // エラーなら設定されているメッセージを1行分ずつタグ設定する
          var errorHtml = '';
          for (i = 0; i < data.errors.length; i++) {
            errorHtml += '<span class="errors">'+data.errors[i]+'</span>';
          }
            errorHtml = errorHtml + '<div class="btnToCart"><a href="/cart">'+ i18next.t('commodity:text.カートへ進む') +'</a></div>';
          // 出力する
          $().addCartErrorModal(errorHtml);
        }
        } else {
            // 更新してください
            $(".fav_result_reload").fadeIn("fast");
        }
      }).fail(function (data) {
          // ajax読み込みのエラー
          var errorHtml = '<span class="errors">'+ i18next.t('commodity:text.サーバーに接続できませんでした。<br>ブラウザをリロードしてください。') +'</span>';
          // 出力する
          $().addCartErrorModal(errorHtml);
      }).always(function (data) {
          // 成功失敗に関係なく付与してあるsendingクラスを削除
          $('.order').removeClass('-sending')
      });
    },
    addCartKeepModal: function(){
      $('.cartkeepModal_login').fadeIn(200);
    }
  });
})(jQuery);

$(function() {
  var executeFlag = false;
  // テンプレートの読み込み
  createDetailList = function (data) {
    if (data.relatedCommodityStocks.length == 1) {
      return;
    }
    // 表示用に在庫数の判定結果をdataに埋め込む
    data.relatedCommodityStocks.forEach(function (stocksValue){
      stocksValue.detailList.forEach(function (detailValue){
        if(detailValue.availableStockQuantity > stocksValue.stockSufficientThreshold){
          // 「○」の表示フラグをセット
          detailValue.stock__normal = true;
        }else if(detailValue.availableStockQuantity > 0){
          // 「△」の表示フラグをセット
          detailValue.stock__little = true;
        }else{
          // 「×」の表示フラグをセット
          detailValue.stock__oos = true;
        }
      });
      // 色違い商品のロコンドカラー「他」は表示せずサプライヤーカラーのみ表示する
      Handlebars.registerHelper('colorNameString', function(txt) {
        if(txt.indexOf('他') === 0){
          return new Handlebars.SafeString(txt.slice(2).slice(0, -1));
        }else{
          return txt;
        }
      });

      var templateId = '#different_color_list_stockStatus_template';
      var source = $(templateId).html();
      var template = Handlebars.compile(source);
      var html = template(stocksValue);
      var target = '#popup_' + stocksValue.commodityCode;
      $(target).html(html);
    });
  },
  // APIをコールし、色違い商品と在庫情報を取得する
  fetchDetailList = function (shopCode, commodityCode) {
    var url = window.location.href.replace(/\/commodity.*/, '') + '/commodity/' + commodityCode + '/colors';
    $.ajax({
      type: 'GET',
      url: url,
      dataType: 'json',
      cache: false,
    }).done(function (data) {
      createDetailList(data);
    }).fail(function (data) {
      executeFlag = false;
    });
  },
  // 色違い商品のアイコンにカーソルをホバーしている場合に実行
  $(document).on({
	  'mouseenter' : function() {
        if(!$('.stockStatus').length && !executeFlag){
          executeFlag = true;
          fetchDetailList($('#shopCode').val(),$('#commodityCode').val());
        }
      }
    },'.product_thumb_item, #color-selector>li');

    // マイサイズ
  var mysize = getSelectedCondition();
  if (mysize) {
    var isOrderedMysizeOn = document.referrer.substring(document.referrer.indexOf('?')).substring(1).split('&').filter(function(e) {
      return e.startsWith("selectedSkuCode");
    }).length;
    if (isMysizeOn()) {
      $('.targetJustMysize').each(function(i, e){
        if (mysize.shoesSize === $(e).attr('data-shoes-size') && (!!mysize.shoeWidth && mysize.shoeWidth === $(e).attr('data-shoe-width'))) {
          $(e).addClass('justMySize');
        }
      });
    } else if (isOrderedMysizeOn) {
      $('.targetJustMysize').each(function(i, e){
        if (mysize.shoesSize === $(e).attr('data-shoes-size') && (!!mysize.shoeWidth && mysize.shoeWidth === $(e).attr('data-shoe-width'))) {
          $(e).addClass('justSpecifiedSize');
        }
      });
    }
  }
  // /マイサイズ

  // 店舗在庫 Modal 表示
  $('body').on('click','.trgShowStorestock',function(e){
    $('.shopStockList').empty();
    $('.item-shopStock-modal').css('visibility','hidden');

    // e.preventDefault();
    var commodityCode = $(this).attr('data-commoditycode');
    var shopCode = $(this).attr('data-shopcode');
    var commoditySize =$(this).attr('data-commoditySize');
    $('[data-remodal-id=item-shopStock-modal]').attr('data-shopstock-commoditycode', commodityCode).remodal().open();
    $(".shopStockProduct .shopStockProduct_Size").text(commoditySize);

    shopStockList(shopCode,commodityCode);
  });
  
  shopStockList = function (shopCode,commodityCode) {
    console.log(shopCode);
    var url = '/commodity/json/'+ shopCode + '/' + commodityCode + '/placestock';
    // var url = 'https://qacontents.locondo.jp/mediaqa/fitfitstatic/common/js/placestock_sample.jsonp';
    $.ajax({
      type: 'GET',
      url: url,
      dataType: 'json',
      cache: false,
      //jsonpCallback: 'stockcallback',
    }).done(function (data) {
      console.log(data.stockList);
      //都道府県を抽出した配列を作成
      var prefectureArray = []
      $.each(data.stockList,function(i,shoplist){
        prefectureArray.push(shoplist.prefectureName);
      });
      //都道府県の重複なしの配列
      var uniquePrefectureArray = Array.from(new Set(prefectureArray));
      console.log(uniquePrefectureArray);
      //都道府県 多言語対応
      if ($('#siteLanguage').val() === 'en') {
        var prefectureMap = {
          '北海道': 'Hokkaido',
          '青森県': 'Aomori',
          '岩手県': 'Iwate',
          '宮城県': 'Miyagi',
          '秋田県': 'Akita',
          '山形県': 'Yamagata',
          '福島県': 'Fukushima',
          '茨城県': 'Ibaraki',
          '栃木県': 'Tochigi',
          '群馬県': 'Gunma',
          '埼玉県': 'Saitama',
          '千葉県': 'Chiba',
          '東京都': 'Tokyo',
          '神奈川県': 'Kanagawa',
          '新潟県': 'Niigata',
          '富山県': 'Toyama',
          '石川県': 'Ishikawa',
          '福井県': 'Fukui',
          '山梨県': 'Yamanashi',
          '長野県': 'Nagano',
          '岐阜県': 'Gifu',
          '静岡県': 'Shizuoka',
          '愛知県': 'Aichi',
          '三重県': 'Mie',
          '滋賀県': 'Shiga',
          '京都府': 'Kyoto',
          '大阪府': 'Osaka',
          '兵庫県': 'Hyogo',
          '奈良県': 'Nara',
          '和歌山県': 'Wakayama',
          '鳥取県': 'Tottori',
          '島根県': 'Shimane',
          '岡山県': 'Okayama',
          '広島県': 'Hiroshima',
          '山口県': 'Yamaguchi',
          '徳島県': 'Tokushima',
          '香川県': 'Kagawa',
          '愛媛県': 'Ehime',
          '高知県': 'Kochi',
          '福岡県': 'Fukuoka',
          '佐賀県': 'Saga',
          '長崎県': 'Nagasaki',
          '熊本県': 'Kumamoto',
          '大分県': 'Oita',
          '宮崎県': 'Miyazaki',
          '鹿児島県': 'Kagoshima',
          '沖縄県': 'Okinawa'
        };
      }

      //都道府県の見出しを作成
      $.each(uniquePrefectureArray,function(i,prefectureName){
        if ($('#siteLanguage').val() === 'en') {
          var translatedPrefectureArray = prefectureMap[uniquePrefectureArray[i]];
          console.log(translatedPrefectureArray);
        } else {
          var translatedPrefectureArray = uniquePrefectureArray[i];
        }
        $(".shopStockList").append(
          '<div class="PrefectureWrap accordion">'
          +'<h3 class="PrefectureName trg">'+translatedPrefectureArray+'</h3>'
          +'<ul class="acco-inner shopListWrap" data-Prefecture="'+uniquePrefectureArray[i] +'">'
          +'<div class="shopListInner_head"><p class="shopListInner_head_shopName">' + i18next.t('commodity:text.店舗名') +'</p><p class="shopListInner_head_symbol">' + i18next.t('commodity:text.在庫状況') +'</p></div>'
          +'</ul>'
          +'</div>'
        );
      });
      
      //都道府県に各リストを挿入
      $.each(data.stockList,function(i,shoplist){
        var schema = $('#schema').val();
        if(shoplist.stockQuantity <= 0 && schema != 'charles'){
          console.log(shoplist.placeName+'は在庫が'+shoplist.stockQuantity+'のため非表示');
          return;
        }else{
          if(shoplist.stockQuantity <= 0){
            var stockSymbol = '×';
          }else if(shoplist.stockQuantity <= 2){
            var stockSymbol = '△';
          }else if(shoplist.stockQuantity > 2){
            var stockSymbol = '○';
          }
          var mapShopName ='';
          if(schema == 'charles'){
            var mapShopName = 'CHARLES+%26+KEITH+'
          }
          //TODO 住所動的に
          var shopAddress ='';
          var shopTel ='';
          if(schema == 'descente'){
            shopAddress = shoplist.address;
            shopTel = '<br><a href="tel:'+ shoplist.phoneNumber +'">'+ shoplist.phoneNumber +'</a>';
          }
        $('ul[data-Prefecture="'+shoplist.prefectureName+'"]').append(
          '<li class="stockShop_List">'
          +'<p class="stockShop_PlaceName">'+shoplist.placeName
          +'<a href="https://www.google.com/maps/search/?api=1&query='+mapShopName+shoplist.placeName+'"class="stockShop_MapLink" target="_blank">'+i18next.t('commodity:text.地図')+'</a></p>'
          +'<span class="stockShop_Address">'+ shopAddress + shopTel + '</span>'
          +'<span class="stockShop_stockSymbol">'+stockSymbol+'</span>'
          +'</li>'
          );
        }
      });

      //子要素がない都道府県を非表示
      $.each($('.PrefectureWrap'),function(i){
        if ($(this).find("ul > li").length == 0 ) {
          $(this).hide();
        }
      });
      
      //店舗在庫Modal アコーディオン
      $(".accordion .trg").click(function(){
        $(this).next("ul").slideToggle("fast");
        $(this).toggleClass("open");
      });

      $('.item-shopStock-modal').css('visibility','inherit');
      
    }).fail(function (data) {
      executeFlag = false;
    });
  }
  // カート追加ログイン画面からの戻り処理
  if ($('#addCartResult').val() === 'cartKeep' || $('#addCartResult').val() === 'done') {
    var selectSkuCode = $('#selectSkuCode').val();
    var itemHtml = $('tr.sku_' + selectSkuCode).find('.order');

    $().addCartFeedback(itemHtml);
    $().updateHeaderInfo();
    // カートキープ時は在庫確保モーダルを表示
    if ($('#addCartResult').val() === 'cartKeep') {
      $().addCartKeepModal();
    }
  }

  // モーダルの挙動
  $('body').on('click','.fav_resultModal,.cartkeepModal', function(){
    $(this).fadeOut();
  });
  $('body').on('click', '.fav_resultModal_inner,.cartkeepModal_inner',function(event){
    event.stopPropagation();
  });

  //会員価格
  $('body').on('click','.btn_memberPriceCart',function(){
    var memberPriceCart = UIkit.modal('#memberPriceCart', {
      stack: true
    });
    memberPriceCart.show();
  });

});

// lightbox モーダル閉じるボタンの位置を調整
$(function () {
  $('#lightbox .lb-dataContainer').prependTo('#lightbox')
});