// 2009.9.11 Yoichi Kaneko
// Atletaの商品詳細ページのイベント処理を扱うjsファイル。
// ・右ボックスの選択変更時に左ボックスの表示を切り替える
// ・入力した身体サイズに応じた規格を取得する
$(function() {

	// 送信ボタンを押したとき、身体データ計算ずみであるかチェックする。
	$("#btn_cart > img").click(function() {

		if($("#sizeCalculated").attr("value") == '0'){
			alert('仕立てサイズの算出を行ってからカートに入れてください');
			return false;
		}
		else if($("#sizeCalculated").attr("value") == '2'){
			alert('店舗に直接お問い合わせをお願いします');
			return false;
		}

	});

	// 商品のサブ画像をクリックしたとき、それを拡大表示する
	$(".image_list img").click(function() {

		// 通し番号を取得
		iteration = $(this).attr("id").substr(9);

		$(".big_image img").attr("src", $("#subimagepath_" + iteration).val());

		return;
	});

	// 右ブロックの規格のラジオボックスを変更した時、左ブロックも変更する。
	$(".selector input").change(function() {
		// 規格idを取得（class_を消す）
		class_Id = $(this).attr("name").substr(6);
		class_catId = $(this).val();

		$("#selectClass_View_" + class_Id).val($("#classcatText_" + class_catId).text());

		return;
	});

	// 右ブロックの規格のラジオボックスを変更した時、左ブロックも変更する。
	$(".selector input").focus(function() {
		// 規格idを取得（class_を消す）
		class_Id = $(this).attr("name").substr(6);
		class_catId = $(this).val();

		$("#selectClass_View_" + class_Id).val($("#classcatText_" + class_catId).text());

		return;
	});

	// 出力した身体データを変更した場合、左の項目も出力内容を変更する。
	$(".suit_size select").change(function() {
		iteration = 1;
		$(".suit_size select option:selected").each(function() {
			$("#sizeSelect_Output_View_" + iteration + "").val($(this).text());
			iteration++;
		});
		return;
	});

	// サイズ計算後、サイズを変更した場合はそれに合わせて値を入力する
	$("#select_size select").change(function() {
		if($("#sizeCalculated").val() != "0"){
			calcurateSuitSize();
		}
		return;
	});

	// サイズ計算ボタンをクリックした時の処理
	$("#calcurateSize").click(function() {
		calcurateSuitSize();
		return;
	});

	// スーツサイズの計算を行う
	function calcurateSuitSize(){

		// 入力したサイズデータを取得
		// 一つ目のselect要素（身長）
		inputSize_1 = $("#sizeSelect_Input_1 > select:first > option:selected").text();
		// 一つ目のselect要素（胸囲）
		inputSize_2 = $("#sizeSelect_Input_2 > select:first > option:selected").text();

		/*
		 * 体型の条件が一致するデータを取得する。
		 * 身長は5cm刻みで完全に一致、
		 * 胸囲は基本値より-1cm、+2cmであれば適合と判断
		 */
		sizeNumber = getSizeNumberFromHeight(inputSize_1);

		// 適合しない場合はエラーメッセージを表示する
		if (!sizeNumber){
			setSizeErrorMessage();
			return;
		}

		// 規格のサイズデータを取得
		sizeData_Y = getSuitSizeData_Y(sizeNumber, parseInt(inputSize_2));
		sizeData_A = getSuitSizeData_A(sizeNumber, parseInt(inputSize_2));
		sizeData_AB = getSuitSizeData_AB(sizeNumber, parseInt(inputSize_2));
		sizeData_BE = getSuitSizeData_BE(sizeNumber, parseInt(inputSize_2));

		// 適合する規格があった場合はそのデータを画面に渡す
		if(sizeData_Y.length > 0){
			setSizeDataToHTML(sizeData_Y, 'y');
		}
		else if(sizeData_A.length > 0){
			setSizeDataToHTML(sizeData_A, 'a');
		}
		else if(sizeData_AB.length > 0){
			setSizeDataToHTML(sizeData_AB, 'ab');
		}
		else if(sizeData_BE.length > 0){
			setSizeDataToHTML(sizeData_BE, 'be');
		}
		// 適合規格がない場合はエラーメッセージ
		else{
			setSizeErrorMessage();
		}

		return;

	}

	/**
	 * サイズデータに合わせて画面を整形する。
	 */
	function setSizeDataToHTML(sizeData, sizeType){

		// 表示ブロックを切り換える。
		$("#sizeCalculated").attr("value", "1");
		$("#size_result").css("display", "block");
		$("#size_result_error").css("display", "none");

		// セレクトボックスの中身を変更する
		// display:none; を設定
		$("#sizeSelect_Output_1 > select:first").text("");
		$("#sizeSelect_Output_2 > select:first").text("");
		$("#sizeSelect_Output_3 > select:first").text("");

		// 標準点からプラスマイナス2センチまでを表示する

		for(j = 1; j <= 3; j++){

			i = 1;
			count = 0;
			lastVal = $("#sizeSelect_Output_" + j + " > select:first > option:last").val();

			standardVal = parseFloat(sizeData[j+1]);

			$("input.sizeOutputData_" + j).each(function(){

				optionVal = parseFloat($(this).val());

				if(optionVal == standardVal - 2
						|| optionVal == standardVal - 1
						|| optionVal == standardVal
						|| optionVal == standardVal + 1
						|| optionVal == standardVal + 2
				){

					// オプション生成
					var elm = document.createElement("option");
					elm.appendChild(document.createTextNode($(this).val()));
					elm.value = $(this).attr("name").substr(12);

					if(optionVal == standardVal){
						//$("#sizeSelect_Output_" + j + " > select").val($(this).attr("name").substr(12));
						elm.setAttribute("selected", "selected");
						$("#sizeSelect_Output_View_" + j + "").val($(this).val());
					}


					$("#sizeSelect_Output_" + j + " > select:first").append(elm);
					i++;


				}


			});

		}


		// 適合種別を示すimgファイルを変更する
		img_src = $("#img_bodytype").attr("src");
		new_img_src = img_src.replace(/[^\/]*$/, "bodytype_" + sizeType + ".gif");
		$("#img_bodytype").attr("src", new_img_src);

		// ウエストのデータを移行する。
		// 2009.9.17 Yoichi Kaneko
		// IE6だと値を変更しないとselectと扱われないため、値が取得できなければ1つ目のオプションを選ぶ。
		$("#output_west_1").val($("#sizeSelect_Input_3 > select:first > option:selected").text());
		$("#output_west_2").val($("#sizeSelect_Input_3 > select:first > option:selected").text());

		return;
	}

	/**
	 * エラーメッセージを表示する。
	 * この時点で購入処理は不可能とする。
	 */
	function setSizeErrorMessage(){

		$("#sizeCalculated").attr("value", "2");
		$("#size_result").css("display", "none");
		$("#size_result_error").css("display", "block");

		return;
	}

	/**
	 * 身長からサイズの号数を特定する
	 */
	function getSizeNumberFromHeight(height_input){

		heightArray = new Array();

		heightArray[3] = '160';
		heightArray[4] = '165';
		heightArray[5] = '170';
		heightArray[6] = '175';
		heightArray[7] = '180';
		heightArray[8] = '185';
		heightArray[9] = '190';

		for(var i = 3; i < 10; i++){

			if(height_input == heightArray[i]){
				return i;
			}

		}
		// 適合するサイズがなければfalse
		// ※規格入力がしっかりしていればここでfalseは返らないはず・・・
		return false;

	}

	/*
	 * 体系ごとのサイズのマトリックス配列情報
	 * それぞれ次の情報を保持する。
	 * key: サイズの番号。3から9まである
	 *
	 * 0: 身長
	 * 1: 胸囲
	 * 2: 着丈
	 * 3: 袖丈
	 * 4: 股下
	 *
	 * 0と1の値を元にして最適な規格を算出する
	 *
	 */

	/**
	 * Y体のスーツデータを取得する。
	 *
	 */
	function getSuitSizeData_Y(sizeNumber, Input_Bust){

		data = new Array();

		data[3] = new Array('160', '83', '70.0', '56.5', '72.0');
		data[4] = new Array('165', '86', '72.0', '58.0', '74.0');
		data[5] = new Array('170', '89', '74.0', '59.5', '76.0');
		data[6] = new Array('175', '92', '76.0', '61.0', '78.0');
		data[7] = new Array('180', '95', '78.0', '62.5', '80.0');
		data[8] = new Array('185', '98', '79.0', '63.5', '81.0');
		data[9] = new Array('190', '101', '80.0', '64.5', '82.0');


		if(Input_Bust <= parseInt(data[sizeNumber][1]) + 2 && Input_Bust >= parseInt(data[sizeNumber][1]) - 1 ){
			return data[sizeNumber];
		}
		else{
			return false;
		}

	}

	/**
	 * A体のスーツデータを取得する。
	 *
	 */
	function getSuitSizeData_A(sizeNumber, Input_Bust){

		data = new Array();

		data[3] = new Array('160', '87', '70.0', '56.5', '72.0');
		data[4] = new Array('165', '90', '72.0', '58.0', '74.0');
		data[5] = new Array('170', '93', '74.0', '59.5', '76.0');
		data[6] = new Array('175', '96', '76.0', '61.0', '78.0');
		data[7] = new Array('180', '99', '78.0', '62.5', '80.0');
		data[8] = new Array('185', '102', '79.0', '63.5', '81.0');
		data[9] = new Array('190', '105', '80.0', '64.5', '82.0');

		if(Input_Bust <= parseInt(data[sizeNumber][1]) + 1 && Input_Bust >= parseInt(data[sizeNumber][1]) - 1 ){
			return data[sizeNumber];
		}
		else{
			return false;
		}

	}

	/**
	 * AB体のスーツデータを取得する。
	 *
	 */
	function getSuitSizeData_AB(sizeNumber, Input_Bust){

		data = new Array();

		data[3] = new Array('160', '90', '70.0', '56.5', '72.0');
		data[4] = new Array('165', '93', '72.0', '58.0', '74.0');
		data[5] = new Array('170', '96', '74.0', '59.5', '76.0');
		data[6] = new Array('175', '99', '76.0', '61.0', '78.0');
		data[7] = new Array('180', '102', '78.0', '62.5', '80.0');
		data[8] = new Array('185', '105', '79.0', '63.5', '81.0');
		data[9] = new Array('190', '108', '80.0', '64.5', '82.0');

		if(Input_Bust <= parseInt(data[sizeNumber][1]) + 1 && Input_Bust >= parseInt(data[sizeNumber][1]) - 1 ){
			return data[sizeNumber];
		}
		else{
			return false;
		}

	}

	/**
	 * AB体のスーツデータを取得する。
	 *
	 */
	function getSuitSizeData_BE(sizeNumber, Input_Bust){

		data = new Array();

		data[3] = new Array('160', '92', '70.0', '56.5', '72.0');
		data[4] = new Array('165', '95', '72.0', '58.0', '74.0');
		data[5] = new Array('170', '98', '74.0', '59.5', '76.0');
		data[6] = new Array('175', '101', '76.0', '61.0', '78.0');
		data[7] = new Array('180', '104', '78.0', '62.5', '80.0');
		data[8] = new Array('185', '107', '79.0', '63.5', '81.0');
		data[9] = new Array('190', '110', '80.0', '64.5', '82.0');

		if(Input_Bust <= parseInt(data[sizeNumber][1]) + 2 && Input_Bust >= parseInt(data[sizeNumber][1]) ){
			return data[sizeNumber];
		}
		else{
			return false;
		}

	}

	/*
	 * マトリックス情報ここまで
	 */

});