/*----- require common.js, thickbox.js -----*/
var htmlHanbaiTeishiClass = 'hanbai_teishi_message';
var htmlHanbaiTeishi = '<font class="' + htmlHanbaiTeishiClass + '" color="red">※販売停止</font>';

var sizeOrg  = null;
var crustOrg = null;
var add1     = null;
var add2     = null;
var del1     = null;
var del2     = null;

$(document).ready(function() {
  initialize();
  buttonClickedEventListener();
  changedEventListener();
  // 販売停止情報反映
  setHanbaiTeishi($('.select_size').find('input:checked').val(), true);
});


// 初期化
function initialize()
{
  initAllergen();
  // トッピング開閉ボタンの初期化
  $('#closeTopping').hide();
  $('#openTopping').show();
  $('#forceOpen').hide();
  initTopping();
}
// 登録済みアレルゲン強調(IEの同時指定CSSバグ対応)
function initAllergen()
{
  $('div.calorie_allergen dd.allergen li').each(function() {
    $(this).css('background-image', $(this).css('background-image').replace('_red', ''));
  });
  $('div.calorie_allergen dd.allergen li.apply').each(function() {
    $(this).css('background-image', $(this).css('background-image').replace('.gif', '_red.gif'));
  });
}

// トッピングの初期化
function initTopping()
{
  add1 = getToppingData('.add1_topping_hidden');
  add2 = getToppingData('.add2_topping_hidden');
  del1 = getToppingData('.del1_topping_hidden');
  del2 = getToppingData('.del2_topping_hidden');
  if( add1.length > 0 || add2.length > 0 || del1.length > 0 || del2.length > 0 ){
  	alert("デフォルトトッピング情報あり。");
    getTopping();
    $('.detail_order_topping').show('blind');
    $('#openTopping').hide();
    $('#forceOpen').show();
  }
}

// ボタンクリック
var buttonClickedEventListener = function() {
  // トッピング表示切替
  $('#openTopping').click(function() {
    getTopping();
    $('.detail_order_topping').show('blind');
    $('#openTopping').hide();
    $('#closeTopping').show();
  });
  $('#closeTopping').click(function() {
    $('.detail_order_topping').hide('blind');
    $('#closeTopping').hide();
    $('#openTopping').show();
    add1 = add2 = del1 = del2 = null;
  });
  // アレルゲン表示切替
  $('.show_allergen').toggle(
    function() {
      getAllergenCalories();
      $('.calorie_allergen').show('blind');
      $('.show_allergen').text('カロリー･アレルゲンを隠す');
    },
    function() {
      $('.calorie_allergen').hide('blind');
      $('.show_allergen').text('カロリー･アレルゲンを表示する');
    }
  );
  // カロリー再計算
  $('a.btnUpdateCalories').click(getAllergenCalories);
}

// 選択変更
var changedEventListener = function() {
  // セット選択時の数量を限定
  if ($('#setAfter'))
  {
    $('input[name=setRecommendYosoData]').click(changeFigure);
    $('input[name=setRecommendYosoData]').blur(changeFigure);
    $('input[name=setRecommendYosoData]').change(changeFigure);
  }
  // サイズ切替
  $(':radio[name=sizeC]').change(function() {
    setHanbaiTeishi($(':radio[name=sizeC]:checked').val(), false);
    if ($(':radio[name=sizeC]:checked').val() != sizeOrg) changeSizeCrust();
  });
  // クラスト切替
  $(':radio[name=crustC]').change(function() {
    if ($(':radio[name=crustC]:checked').val() != crustOrg) changeSizeCrust();
  });
}

// サイズ切替(イメージ押下)
var clickFormLabelSize = function(label) {
  var e = null;
  try {
    e = document.getElementById(label.htmlFor);
  } catch (exception) {}
  if (e != null) {
    if (e.tagName == "INPUT") {
      switch (e.type) {
      case "checkbox":
        e.checked = !e.checked;
        break;
      case "radio":
        e.checked = true;
        if( e.value != sizeOrg ){
          changeSizeCrust();
        }
        setHanbaiTeishi(e.value, false);
        break;
      default:
        e.focus();
        break;
      }
    } else {
      e.focus();
    }
  }
  return false;
};

//クラスト切替(イメージ押下)
var clickFormLabelCrust = function(label) {
  var e = null;
  try {
    e = document.getElementById(label.htmlFor);
  } catch (exception) {}
  if (e != null) {
    if (e.tagName == "INPUT") {
      switch (e.type) {
      case "checkbox":
        e.checked = !e.checked;
        break;
      case "radio":
        e.checked = true;
        if( e.value != crustOrg ){
          changeSizeCrust();
        }
        break;
      default:
        e.focus();
        break;
      }
    } else {
      e.focus();
    }
  }
  return false;
};

//サイズ・クラスト切替
function changeSizeCrust()
{
  if ($('.detail_order_topping').is(':hidden')) return false;
  if (!confirm('トッピング内容が変更される可能性がありますがよろしいでしょうか。'))
  {
    $(':radio[name=sizeC][value='+sizeOrg+']').attr({ checked: "checked" });
    $(':radio[name=crustC][value='+crustOrg+']').attr({ checked: "checked" });
    return false;
  }
  add1=[]; add2=[]; del1=[]; del2=[];
  $.each($('ul.add1 :checked'), function() { add1.push(this.value); });
  $.each($('ul.add2 :checked'), function() { add2.push(this.value); });
  $.each($('ul.del1 :checked'), function() { del1.push(this.value); });
  $.each($('ul.del2 :checked'), function() { del2.push(this.value); });
  getTopping();
}

// トッピング情報取得
function getTopping()
{
  var shohin_c1 = $('#shohin1').val();
  var shohin_c2 = ($('#shohin2')) ? $('#shohin2').val() : null;
  var size_c    = sizeOrg  = $(':radio[name=sizeC]:checked').val();
  var crust_c   = crustOrg = $(':radio[name=crustC]:checked').val();
  $.getJSON(urlJsonTopping, { shohin_c1:shohin_c1, shohin_c2:shohin_c2, size_c:size_c, crust_c:crust_c }, renderTopping);
}

// 販売停止制御実施判定
function checkExecHanbaiTeishi()
{
  // 全商品販売停止の場合は遷移不可の為、表示制御は実施しない
  if ($('.go_cart').length > 0) return true;
  return false;
}
// 販売停止情報反映
function setHanbaiTeishi(change_val, init)
{
  var change_name = "sizeC";    // 日本語サイトはサイズ変更時にクラストを非表示にする
  var disable_name = "crustC";  // 日本語サイトはサイズ変更時にクラストを非表示にする
  var disable_header = "disable_";   // 判定用クラスヘッダー
  var json = "";
  var checked = false;

  // 初期化
  changeDisabledSizeCrust($('input:radio[name='+disable_name+']:disabled'), false);
  $('.go_cart').show();
  $('.go_cart_non').hide();

  // 販売停止制御実施チェック
  if (!checkExecHanbaiTeishi()) return false;

  // 販売停止情報取得(初回のみ)
  if (init) {
    try {
      json = $.parseJSON($('#hanbai_teishi_json').val());
    } catch(e) {}
    $.each(json, function() {
      // 非活性対象にクラスを設定
      $('input:radio[name='+disable_name+'][value='+this[disable_name]+']')
      .addClass(disable_header+this[change_name]);
    });
  }

  // 選択された要素で販売停止のものがある場合は非活性にする
  $target = $('input.'+disable_header+change_val+':radio[name='+disable_name+']');
  $.each($target, function() {
    changeDisabledSizeCrust($(this), true);
    if ($(this).attr('checked')) checked = true;
  });
  // 非活性要素が選択されている場合は、選択可能な一番上の要素へ変更
  if (checked) {
    if ($('input:radio[name='+disable_name+']:enabled').length > 0) {
      $('input:radio[name='+disable_name+']:enabled:first').attr('checked', true);
    } else {
      // 全要素非活性の場合は、カートに追加できないようにする
      $('.go_cart').hide();
      $('.go_cart_non').show();
    }
  }
}
// 選択ボックスの活性/非活性を切り替え
function changeDisabledSizeCrust(obj, disable_flg)
{
  var disable_class = 'disabled';  // 背景色設定クラス
  var option = 'disabled';         // 非活性にした要素を選択されないようにID名にオプションを追加
  var disable_obj = obj.parent();  // 背景色を設定するオブジェクト
  var message_obj = obj.parent().find('label');  // メッセージ要素を追加するオブジェクト
  var message = htmlHanbaiTeishi;  // メッセージ
  var message_class = htmlHanbaiTeishiClass; // メッセージクラス(削除時指定用)

  // 活性→非活性
  if (disable_flg) {
    obj.attr({disabled : 'disabled', id : obj.attr('id') + option});
    disable_obj.addClass(disable_class);
    message_obj.append(message);

  // 非活性→活性
  } else {
    obj.removeAttr('disabled');
    disable_obj.removeClass(disable_class);
    message_obj.find('.'+message_class).remove();
    $.each(obj, function() {
      if ($(this).attr('id').indexOf(option) >= 0) {
        $(this).attr('id', $(this).attr('id').replace(option, ''));
      }
    });
  }
}

// 数量選択ボックス表示切り替え
function changeFigure()
{
  if ($('#setAfter').attr('checked')) {
    $('#figure').removeAttr('disabled');
    $('#setFigure').attr('disabled', 'disabled');
  } else {
    $('#figure').val('1');
    $('#figure').attr('disabled', 'disabled');
    $('#setFigure').removeAttr('disabled');
  }
}

//アレルゲン・カロリー取得
function getAllergenCalories()
{
  var mode      = $('#mode').val();
  var shohin_c1 = $('#shohin1').val();
  var shohin_c2 = ($('#shohin2')) ? $('#shohin2').val() : null;
  var size_c    = $(':radio[name=sizeC]:checked').val();
  var crust_c   = $(':radio[name=crustC]:checked').val();
  var figure    = $('#figure').val();
  var add_topping1  = getToppingData('.add1_topping_hidden');
  var del_topping1  = getToppingData('.del1_topping_hidden');
  var add_topping2  = getToppingData('.add2_topping_hidden');
  var del_topping2  = getToppingData('.del2_topping_hidden');
  var sideMenuYosoData = new Array();
  $('.sideMenuYosoData:checked').each(function() {
    sideMenuYosoData.push($(this).val());
  });
  var setRecommendYosoData = $('.setRecommendYosoData:checked').val();
  var webSetC = '';
  if (setRecommendYosoData && setRecommendYosoData.length != 0) {
    webSetC = setRecommendYosoData.split(':')[3];
  }
//  var webSetC = $('#webSetC').val();
  $.getJSON(
    urlJsonAllergen,
    {
      mode:mode,
      shohin_c1:shohin_c1,
      add_topping1:add_topping1,
      del_topping1:del_topping1,
      shohin_c2:shohin_c2,
      add_topping2:add_topping2,
      del_topping2:del_topping2,
      size_c:size_c,
      crust_c:crust_c,
      figure:figure,
      sideMenuYosoData:sideMenuYosoData,
      webSetC: webSetC,
      recommendShohinC: setRecommendYosoData
      },
    renderAllergen
  );
}

// トッピングデータ収集
function getToppingData(className)
{
  var ary = new Array();
  $(className).each(function() {
    ary.push($(this).val());
  });
  return ary;
}

// アレルゲン・カロリー描画
function renderAllergen(data)
{
  if (data.error)
  {
    if (data.error.message){
    	alert(data.error.message);
    } else
    if (data.error.url){
    	location.href = data.error.url;
    }
    return false;
  }
  // アレルゲン（ホールまたはハーフ＆ハーフ左）
  $('dd.allergen ul.half1 li').hide();
  for (var index in data.allergy_list1)
  {
    var allergy_kg = data.allergy_list1[index].allergy_kg;
    $('dd.allergen ul.half1 li.' + allergy_kg).show();
  }
  // アレルゲン（ハーフ＆ハーフ右）
  $('dd.allergen ul.half2 li').hide();
  for (var index in data.allergy_list2)
  {
    var allergy_kg = data.allergy_list2[index].allergy_kg;
    $('dd.allergen ul.half2 li.' + allergy_kg).show();
  }
  // アレルゲンアイコン初期化
  initAllergen();

  // カロリー
  $('dd.calorie span.half1').text(data.calorie1);                            // ホールまたはハーフ＆ハーフ左
  $('dd.calorie span.half2').text(data.calorie2);                            // ハーフ＆ハーフ右
  $('dd.calorie span.size').text($('#size option:selected').text());         // サイズ
  $('dd.calorie span.crust').text($('#crust option:selected').text());       // クラスト
  // ご注文金額
  $('p.btn_price span.price').text(data.kingaku);
  $('p.btn_price span.price_flush').show('highlight', {color:"#d00"}, "slow");
}

// トッピング描画
function renderTopping(data)
{
  if (data.error)
  {
    if (data.error.url) location.href = data.error.url;
    return false;
  }

  var counter = 1;
  // ホールまたはハーフ＆ハーフ左 追加トッピング
  $('ul.add1').empty();
  for (var index in data.add1)
  {
    var code = data.add1[index].shohin_c;
    var name = data.add1[index].shohin_nm;
    var buf  = $('<li><input type="checkbox" value="' + code + '" class="add1_topping" id="topping' + counter + '" /><label for="topping' + counter + '">' + name + '</label></li>');
    $('ul.add1').append(buf);
    counter++;
  }
  $('input.add1_topping').each(function() {
    $(this).click(prepareTopping);
  });
  if ($('ul.add1 li').length == 0) $('ul.add1').append('<li>追加できるトッピングがありません。</li>');
  // ホールまたはハーフ＆ハーフ左 削除トッピング
  $('ul.del1').empty();
  for (var index in data.del1)
  {
    var code = data.del1[index].kosei_c;
    var name = data.del1[index].kosei_nm;
    var buf  = $('<li><input type="checkbox" value="' + code + '" class="del1_topping" id="topping' + counter + '" /><label for="topping' + counter + '">' + name + '</label></li>');
    $('ul.del1').append(buf);
    counter++;
  }
  $('input.del1_topping').each(function() {
    $(this).click(prepareTopping);
  });
  if ($('ul.del1 li').length == 0) $('ul.del1').append('<li>削除できるトッピングがありません。</li>');
  // ハーフ＆ハーフ右 追加トッピング
  $('ul.add2').empty();
  for (var index in data.add2)
  {
    var code = data.add2[index].shohin_c;
    var name = data.add2[index].shohin_nm;
    var buf  = $('<li><input type="checkbox" value="' + code + '" class="add2_topping" id="topping' + counter + '" /><label for="topping' + counter + '">' + name + '</label></li>');
    $('ul.add2').append(buf);
    counter++;
  }
  $('input.add2_topping').each(function() {
    $(this).click(prepareTopping);
  });
  if ($('ul.add2 li').length == 0) $('ul.add2').append('<li>追加できるトッピングがありません。</li>');
  // ハーフ＆ハーフ右 削除トッピング
  $('ul.del2').empty();
  for (var index in data.del2)
  {
    var code = data.del2[index].kosei_c;
    var name = data.del2[index].kosei_nm;
    var buf  = $('<li><input type="checkbox" value="' + code + '" class="del2_topping" id="topping' + counter + '" /><label for="topping' + counter + '">' + name + '</label></li>');
    $('ul.del2').append(buf);
    counter++;
  }
  $('input.del2_topping').each(function() {
    $(this).click(prepareTopping);
  });
  if ($('ul.del2 li').length == 0) $('ul.del2').append('<li>削除できるトッピングがありません。</li>');
  // チェック済みトッピングがあればリストを閉じない
  $('div.detail_order_topping :checkbox').each(function() {
    $(this).click(function() {
      if ($('div.detail_order_topping :checked').length > 0)
      {
        $('#openTopping').hide();
        $('#closeTopping').hide();
        $('#forceOpen').show();
      }
      else
      {
        $('#closeTopping').show();
        $('#forceOpen').hide();
      }
    });
    $(this).change(function() {
      if ($('div.detail_order_topping :checked').length > 0)
      {
        $('#openTopping').hide();
        $('#closeTopping').hide();
        $('#forceOpen').show();
      }
      else
      {
        $('#closeTopping').show();
        $('#forceOpen').hide();
      }
    });
  });
  // トッピング更新時に選択済みをリストア
  if ($('ul.add1 :checkbox') && add1) $.each(add1, function() { $('ul.add1 :checkbox[value=' + this + ']').attr('checked', true); });
  if ($('ul.add2 :checkbox') && add2) $.each(add2, function() { $('ul.add2 :checkbox[value=' + this + ']').attr('checked', true); });
  if ($('ul.del1 :checkbox') && del1) $.each(del1, function() { $('ul.del1 :checkbox[value=' + this + ']').attr('checked', true); });
  if ($('ul.del2 :checkbox') && del2) $.each(del2, function() { $('ul.del2 :checkbox[value=' + this + ']').attr('checked', true); });
}

