(function () {
  const TOOLS = window.TOOLS || {};
TOOLS.noopener = (function () {
  Array.prototype.forEach.call(document.querySelectorAll('a[target="_blank"]'), function(elem) {
    elem.setAttribute('rel','noopener');
  });
})();

TOOLS.links = (function () {
  Array.prototype.forEach.call(document.querySelectorAll('.js-link'), function(elem) {
    elem.addEventListener('click', function() {
      if (this.getAttribute('data-href')) location.href = this.getAttribute('data-href');
    });
  });
})();

TOOLS.lazy = (function () {
  tools_observer = lozad('.lazy');
  tools_observer.observe();
})();

TOOLS.smoothScroll = (function () {
  const anchorButtons = document.querySelectorAll('[data-anchor-to]');

  if (anchorButtons) {
    Array.prototype.forEach.call(anchorButtons, function(button) {
      const anchorTo = button.getAttribute('data-anchor-to');
      const anchor = document.querySelector('[data-anchor="' + anchorTo + '"');

      button.addEventListener('click', function (event) {
        event.preventDefault();
        anchor.scrollIntoView({
          behavior: 'smooth',
        });
      });
    });
  }
})();

TOOLS.loading = {
  show: function(){
    $('body').append('<div class="m-loader-wrap js-loader"><div class="m-loader"><div></div><div></div><div></div></div></div>');
  },
  hide: function(){
    $target = $('.js-loader');
    if($target.length > 0){
      $target.remove();
    }
  }
}

// レコメンド取得
TOOLS.getRecommend = function (params) {
  return new Promise(function (resolve, reject) {
    axios.get(TOOLS.recUrl, {
      adapter: axiosJsonpAdapter,
      params: params
    }).then(function(res) {
      console.log(res);
      if (res.status === 200) {
        resolve(res.data);
      } else {
        reject(res);
      }
    });
  });
};

// レコメンドクリック通知
TOOLS.notifyRecommend = (function () {
  $(document).on('click', '.js-notify', function () {
    var href = $(this).attr('href');
    axios.get(TOOLS.recNotifyUrl, {
      adapter: axiosJsonpAdapter,
      params: {
        prod: $(this).data('prod'),
        merch: 'tbsnews',
        spec: $(this).data('spec'),
        cookie: ISMLIB.ismuc,
        cref: $(this).data('cref')
      }
    }).then(function() {
      location.href = href;
    }).catch(function(res) {
      console.log(res);
    });

    return false;
  });
})();

// ストレージのversion
TOOLS.getVersion = function (name) {
  return name + TOOLS.versions[name];
};

// サイネージ
TOOLS.signage = function() {
  var $signage = $('.js-signage');
  var $webTicker = $('.js-webticker');
  $signage.show();

  if ($webTicker.length > 0) {
    /* サイネージの文字スライド */
    $webTicker.webTicker({
      hoverpause: false,
      startEmpty: false, 
      duplicate: true
    });
  }
}();

// 広告表示
TOOLS.toggleAd = function() {
  const closeBtnEl = document.querySelector(".js-ad-close");
  if (closeBtnEl) {
    closeBtnEl.addEventListener('click', function(e) {
      e.stopPropagation();
      if (closeBtnEl.parentElement) {
        closeBtnEl.parentElement.style.display = 'none';
      }
    }, true);
  }
}();

// ページトップに戻るボタン
TOOLS.backtotop = function() {
  $('.js-backto-top').click(function () {
    $('body, html').animate({ scrollTop: 0 }, 500);
  });
}();
  const MODULE = window.MODULE || {};
/* ヘッダー */
MODULE.header = (function() {
  var body = $('body');
  var $header = $('.js-header');
  var $toolsMain = $('.js-main');
  var $search = $('.js-header-search');
  var $menu = $('.js-header-menu');
  var $overlay =  $('.js-overlay');
  var $burgerBorder = $('.js-border');
  let isAdGate = false;

  /* 上スクロールしたらヘッダーが表示される */
  var scroll = 0;
  $(window).on('scroll', function() {

    let headerHeight = $header.outerHeight();

    // ゲート広告が有効な場合はスクロールに追随しない
    if ($header.hasClass("js-ad-gate-header")) {
      isAdGate = true;
      headerHeight += 250;
    }

    if($(this).scrollTop() > headerHeight) {
       body.addClass('is-fixed-header');
    } else {
      body.removeClass('is-fixed-header');
      $header.removeClass('--is-transition');
    }
  
    if($(this).scrollTop() < headerHeight + 200) {
      $header.removeClass('--is-active');
    } else if($(this).scrollTop() < scroll){
      $header.addClass('--is-active');
      $header.addClass('--is-transition');
    } else {
      $header.removeClass('--is-active');
    }

    scroll = $(this).scrollTop();
  });

  /* 検索フォームを表示ボタン */
  $('.js-search').click(function () {
    $toolsMain.addClass('--is-out');
    $search.addClass('--is-in');
  });

  /* 検索フォームを閉じるボタン */
  $('.js-closed').click(function () {
    $toolsMain.removeClass('--is-out');
    $search.removeClass('--is-in');
  });

  /* バーガーメニューのアイコンを変形&バーガーメニューを展開 */
  $('.js-burger').click(function () {
    $menu.toggleClass('--is-show');
    $overlay.toggleClass('--is-show');

    if ($menu.hasClass('--is-show')) {
      body.css('overflow', 'hidden');
    } else {
      body.css('overflow', 'visible');
    }

    $burgerBorder.toggleClass('--is-active');
  });

  /* バーガーメニュー展開中に周りの暗い部分をクリックしたらバーガーメニューを閉じる */
  $overlay.click(function(){
    $(this).removeClass('--is-show');
    $menu.removeClass('--is-show');
    body.css('overflow', 'visible');
    $burgerBorder.removeClass('--is-active');
  });
})();/* タブ */
MODULE.tab = (function() {
  $('.js-tab').on('click', function(){
    // タブのactive判定
    var tabWrap = $(this).parents('.js-tab-wrap');
    var tabs = tabWrap.find('.js-tab');
    for (i=0; i<tabs.length; i++) {
      if ($(tabs[i]).hasClass('--is-active')) {
        $(tabs[i]).removeClass('--is-active');
      }
    }
    $(this).addClass('--is-active');
    var contents = $(tabWrap).find('.js-tab-content');
    var tabNum = tabs.index(this);
    for (i=0; i<contents.length; i++) {
      tabNum == i ? $(contents[i]).addClass('--is-active') : $(contents[i]).removeClass('--is-active');
    }
  });
  
})();/* ヘッダー */
MODULE.adGate = (function() {

  function _fixgate(){
    const $adGateSub = $(".js-ad-gate-sub");
    const $adGateSubFrameImg = $('.js-ad-gate-sub iframe').contents().find('.img_ad');
    const $adGateSubFrame = $('.js-ad-gate-sub iframe');
    if($adGateSubFrameImg.length){
      // ウィンドウサイズ-1300pxの半分か、170pxの小さい方に設定
      $adGateSub.css({'width':Math.min((document.body.offsetWidth - 1300)/2,170)+'px'});
      // 左右のleft、rightの位置を合わせる
      const adGateSubPos = document.body.offsetWidth/2 - (650 + $adGateSub.width());
      $(".ad-gate-left").css({'left': adGateSubPos})
      $(".ad-gate-right").css({'right': adGateSubPos})
      // iframeとimg両方のwidthを '100%' にし、.ad-gate-subの大きさに合わせる 
      $adGateSubFrameImg.css({'height':'100%'})
      $adGateSubFrame.css({'width':'100%'})
      $adGateSubFrame.contents().find('.img_ad').css({'width':'100%'}).css({'object-fit':'contain'})
      window.is_init_resizeAdGate = true
    }
    // 初期読み込み時のsetIntervalループ解除用
    if(window.is_init_resizeAdGate && !window.is_complete_init_resizefixgateAd){
      clearInterval(window.interval_resizeAdGate)
      window.is_complete_init_resizefixgateAd = true
    }
  }

  // ウィンドウがリサイズされるたびに実行する
  $(window).resize(_fixgate)
  // 初期読み込み時用にループさせる
  window.interval_resizeAdGate = setInterval(_fixgate,100)

})();$(function(){
  var selectMonth = $('#select-month'); // 年月のプルダウン

  // プルダウンのselectedの前後の値を取得し「前月・次月」のdata属性を設定
  setPrevNextBtn(selectMonth);

  //「前月・次月」がクリックされた時
  $(document).on('click', '.js-schedule-prev, .js-schedule-next', function(){
    var dt = getDate($(this).attr('data-date'));
    $('.js-month-label').text($(this).attr('data-date'));

    // レース情報を挿入する
    changeRace(dt[0], dt[1]);
  });

  // 年月のプルダウンが選択された時
  $(selectMonth).change(function(){
    var dt = getDate($(this).val());

    // レース情報を挿入する
    changeRace(dt[0], dt[1]);
  });

  // エリアを選択した場合、対象のエリアのテーブルまで画面遷移する
  $('#select-area').change(function() {
    var area = $(this).val();
    getArea(area);
  });
});

/**
 * data-date属性から年月を取得する関数
 */
function getDate(dt) {
  var dt_text = dt.split('年');
  var year = dt_text[0];
  var month = dt_text[1].split('月')[0];

  return [year, month];
}

/**
 * プルダウンのselectedの前後の値を取得し「前月・次月」のdata属性を書き換える関数
 */
function setPrevNextBtn(selectMonth) {
  var $prevBtn = $('.js-schedule-prev'); // 前月のボタン
  var $nextBtn = $('.js-schedule-next'); // 次月のボタン
  var currentMonth = selectMonth.children(':selected');
  var prevMonth = currentMonth.prev().val();
  var nextMonth = currentMonth.next().val();
  // 前後の値があれば「前月・次月」にdata属性を設定し、なければ非表示にする
  prevMonth ? $prevBtn.attr('data-date', prevMonth) : $prevBtn.hide()
  nextMonth ? $nextBtn.attr('data-date', nextMonth) : $nextBtn.hide()
}

/**
 * レース情報を書き換える関数
 */
function changeRace(year, month) {
  $.ajax({
    type: 'GET',
    url: '/list/ajax/schedule',
    dataType: 'html',
    data: {
      year: year,
      month: month
    }
  }).done(function(data) {
    var $scheduleTbWrap = $('.js-schedule-wrap');
    var selectMonth = $('#select-month'); // 年月のプルダウン
    $scheduleTbWrap.empty();
    $scheduleTbWrap.append(data);
    // プルダウンを選択し直す
    var dt = year + '年' + month + '月';
    $(selectMonth).val(dt);
    // プルダウンのselectedの前後の値を取得し「前月・次月」のdata属性を書き換える
    setPrevNextBtn(selectMonth);
  }).fail(function(items) {
    console.log('error');
  });
}

// エリアを選択した場合、対象のエリアのテーブルまで画面遷移させる関数
function getArea(area) {
  var $scheduleTb = $('.js-schedule'); // エリアごとのテーブル

  for (i=0; i<$scheduleTb.length; i++) {
    var tb = $scheduleTb[i];
    if ($(tb).data('area') == area) {
      var ostTop = $(tb).parents('.schedule__item').offset().top;
      $('html,body').animate({scrollTop: ostTop}, 500);
    }
  }
}/* レース詳細 セレクトボックス */

MODULE.select = (function() {
  var $date = $('#select-date');
  var $zenkome = $('.js-select-zenkome');

  $(document).on('change', function(e) {
    // 日付プルダウンchangeした際の処理
    if (e.target.id == 'select-date') {
      var date = e.target.value;
      var selectTxt = $(e.target).find('option:selected').text();
      $('.js-date-label').text(selectTxt);
      // 会場名のプルダウン呼び出し
      selectPlace(date);

      // 選択した日付に紐づく全コメレースの会場名を表示
      $.ajax({
        type: 'GET',
        url: '/list/ajax/select-box-race-zenkome',
        data: {
          date: date
        }
      }).done(function(data) {
        if (data == false){
          $zenkome.empty();
          $zenkome.removeClass('--is-active');
        } else {
          $zenkome.empty();
          $zenkome.append(data);
          $zenkome.addClass('--is-active');
        }
      }).fail(function(data) {
        console.log('HTML作成に失敗');
      });
    }

    // 会場プルダウンをchangeした場合の処理
    if (e.target.id == 'select-place') {
      var place = e.target.value;
      var dt = $date.val();

      $.ajax({
        type: 'GET',
        url: '/list/ajax/select-box-race',
        data: {
          date: dt,
          place: place
        }
      }).done(function(url_path) {
        // プルダウンの情報を保持してページ遷移させる
        new_url = '/list/race/' + url_path + '?date=' + dt + '&place=' + place;
        window.location.href = new_url;
      }).fail(function(data) {
        console.log('url作成に失敗');
      });
    }

    // エリアプルダウンをchangeした場合の処理
    if (e.target.id == 'select-area') {
      var selectTxt = $(e.target).find('option:selected').text();
      $('.js-area-label').text(selectTxt);
    }

    // エリアプルダウンをchangeした場合の処理
    if (e.target.id == 'select-month') {
      var selectTxt = $(e.target).find('option:selected').text();
      $('.js-month-label').text(selectTxt);
    }
  })

  // 選択した日付に紐づく１Rの会場名をプルダウンにセット
  var selectPlace = function(date) {
    var $placeWrap = $('.js-select-place');
    
    $.ajax({
      type: 'GET',
      url: '/list/ajax/select-box-race-place',
      data: {
        date: date
      }
    }).done(function(data) {
      console.log(data);
      if (data == false) {
        $placeWrap.text('開催なし');
        $placeWrap.addClass('--none-race');
      } else {
        $placeWrap.remove();
        $('.js-select-date').after(data);
      }
    }).fail(function(data) {
      console.log('HTML作成に失敗');
    });
  }
})();/* video */
MODULE.video = (function() {
  var videoThumbs = document.querySelectorAll('.js-thumb');

  if (videoThumbs.length > 0) {
    var onPlayerReady = function onPlayerReady(event) {
      // Mobile判定
      var mobile = false;
      var ua = navigator.userAgent;
      if (ua.indexOf("iPhone") > 0 || ua.indexOf("iPod") > 0 || ua.indexOf("iPad") > 0 || ua.indexOf("Android") > 0 && ua.indexOf("Mobile") > 0) {
        mobile = true;
      }
      event.target.playVideo();
    };

    videoThumbs.forEach(function (videoThumb) {
      videoThumb.addEventListener('click', function (e) {
        // Youtubeアイコン
        var youtube = e.target.previousElementSibling;
        // Youtubeの動画IDを取得
        var videoId = e.target.getAttribute('video-id');
        // Youtubeの幅を取得
        var videoWidth = e.target.getAttribute('width');
        var videoHeight = e.target.getAttribute('height');
        // 埋め込む場所
        var videoPlayer = e.target.nextElementSibling;
        // Youtube埋め込み
        new YT.Player(videoPlayer, {
          width: videoWidth,
          height: videoHeight,
          videoId: videoId,
          events: {
            onReady: onPlayerReady
          }
        });
        //サムネイル非表示
        e.target.remove();
        youtube.classList.add('--hide');
      });
    });
  }
})();MODULE.raceList = (function() {
  var $raceList = $('.js-race-list');
  var raceListW = $raceList.width();
  var $raceListWrap = $('.js-race-list-wrap');
  var raceListItems = $raceListWrap.children();
  var listWidth = 0;

  if ($raceList.length) {
    var scrollWidth = $raceListWrap.get(0).scrollWidth; // スクロール範囲

    // レースリストの子要素から横幅を取得して、合計が画面幅よりも大きい場合は半透過のクラス名をレースリストの要素につける
    for (i=0; i<raceListItems.length; i++) {
      listWidth += $(raceListItems[i]).outerWidth(true);
    }

    if (listWidth > raceListW) {
      $raceList.addClass('--transparent');
    }
  }

  // レースリストの最後までスクロールした場合は半透過のクラスを削除
  $raceListWrap.on('scroll', function() {
    var scrollPosition = $(this).scrollLeft();
    var scrollEndPosition = Math.ceil(raceListW + scrollPosition);
    if (scrollEndPosition >= scrollWidth) {
      $raceList.removeClass('--transparent');
    } else {
      $raceList.addClass('--transparent');
    }
  })
})();})();