/************************************************************
* ファイル名	:shopFunc.js
* ファイル概要	:ショッピング時に使用する関数を格納したファイル。
* 関数一覧:
* ・createXMLHttpReq
* ・displayFukidasi
* ・displayTagData
* ・hiddenFukidasi
* ・sendGetDataAsync
*
* 履歴:
* ・2008/07/25 新規作成
*
* Written by Y.Yamamoto
*************************************************************/
/*******************
* グローバル変数
*******************/
// 定数扱いの変数（スタイル関連）
var POSTAGE_PRICE			= 500;	// 送料
var POSTAGE_PRICE_SPECIAL	= 1000; // 特別地域の送料
var POSTAGE_PRICE_MAIL		= 100;	// メール便の送料

var POSTAGE_FREE			= 5000;	// 送料無料になる値段


/******************************************************************
* 関数名	:displayFukidasi
* 処理概要	: 
* 以下の処理に従ってIDから関連づく商品を吹き出しに表示する。
*  1.サーバへリクエストするURLを生成する。
*  2.データを非同期で取得し、反映する。
*
*
* 引数:			説明
* ------------	-----------------------------------
* itemid		関連取得対象となるid
* tagid			吹き出し表示位置のベースになるタグid
*
*
* 戻り値:
* true   : 正常終了
* false  : 異常終了
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function displayFukidasi(itemid, evt){
	var stat = true;
	var tag = "fukidasi";			// 処理を反映させる箇所のタグ
	var url = "getRelIdList.php";	// サーバへリクエストするPHPファイル
	var mX = 0;						// マウスのＸ座標
	var mY = 0;						// マウスのＹ座標
	var pX = 20; 					// マウス位置からのポップアップ表示距離
	var pY = -25; 					// マウス位置からのポップアップ表示距離

	// -----------------------------------------
	// 1.吹き出しの表示位置を設定する。       --
	// -----------------------------------------
	popup = document.getElementById(tag).style;

	if ( evt ) {
		mX = evt.clientX + document.documentElement.scrollLeft;
		mY = evt.clientY + document.documentElement.scrollTop;
	} else {
		mX = event.clientX + document.body.scrollLeft;
		mY = event.clientY + document.body.scrollTop;
	}

	popup.left = mX + pX + "px";
	popup.top  = mY + pY + "px";


	// -----------------------------------------
	// 1.サーバへリクエストするURLを生成する。--
	// -----------------------------------------
	url　+= "?id=" + itemid;

	// ----------------------------------------------
	// 2.データを非同期で取得し、タグに反映する。  --
	// ----------------------------------------------
	stat = sendGetDataAsync(tag, url);
	if(stat == false){
		// alert("sendGetDataAsyncに失敗しました。");
 		return false;
	}
	// 値を送信する。
	return true;
}



/******************************************************************
* 関数名	:hiddenFukidasi
* 処理概要	: 
* 以下の処理に従って吹き出しを非表示にする。
*  1.該当するタグの表示文字列を無くす。
*
*
* 引数:			説明
* ------------	-----------------------------------
* なし
*
*
* 戻り値:
* XmlHttpRequest	: 生成したXmlHttpRequestオブジェクト
* null				: 作成失敗
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function hiddenFukidasi(){
	var tag = "fukidasi"; // 表示を隠す箇所のタグ
	// ----------------------------------------
	// 1.1.該当するタグの表示文字列を無くす。--
	// ----------------------------------------
	document.getElementById(tag).innerHTML = "";
	return true;
}


/******************************************************************
* 関数名	:displayParentTotalListTable
* 処理概要	: 
* 以下の処理に従ってIDから関連づく商品を吹き出しに表示する。
*  1.サーバへリクエストするURLを生成する。
*  2.データを非同期で取得し、反映する。
*
*
* 引数:			説明
* ------------	-----------------------------------
* itemid		関連取得対象となるid
* tagid			吹き出し表示位置のベースになるタグid
*
*
* 戻り値:
* true   : 正常終了
* false  : 異常終了
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function displayParentTotalListTable(){
	var stat	= true;
	var tagId	= "cartTotalListSpan";				// 処理を反映させる箇所のタグ
	var url		= "../../top/php/getTotalList.php";	// サーバへリクエストするPHPファイル


	var tag = parent.document.getElementById(tagId);

	var adjust  = parent.document.getElementById("rightAdjust");
	adjust.style.display = 'block';

	// ----------------------------------------------
	// 2.データを非同期で取得し、タグに反映する。  --
	// ----------------------------------------------
	stat = sendGetDataAsync(tag, url);
	if(stat == false){
		// alert("sendGetDataAsyncに失敗しました。");
 		return false;
	}

	// 値を送信する。
	return true;
}

function hiddenParentAdjustDiv(){
	var stat	= true;
	var adjust  = parent.document.getElementById("rightAdjust");
	adjust.style.display = 'none';
	
	var tagId	= "cartTotalListSpan";				// 処理を反映させる箇所のタグ
	var url		= "../../top/php/getTotalList.php";	// サーバへリクエストするPHPファイル

	var tag = parent.document.getElementById(tagId);

	// ----------------------------------------------
	// 2.データを非同期で取得し、タグに反映する。  --
	// ----------------------------------------------
	stat = sendGetDataAsync(tag, url);
	if(stat == false){
		// alert("sendGetDataAsyncに失敗しました。");
 		return false;
	}

	// 値を送信する。
	return true;	
	
}



function deleteCartRow(rownum){
	var sFormId		= "cashForm";
	var sChkId		= "cart_chk" + rownum;
	var sTdId		= "cartItemNameTd" + rownum;
	var sItemName;
	
	sItemName	= document.getElementById(sTdId);


	if (typeof sItemName.textContent != "undefined") {
		sItemName = sItemName.textContent;
	}else {
		sItemName = sItemName.innerText;
	}


	if(window.confirm("「 " +  sItemName + '」をカートから削除してよろしいですか？')){
				location.href = "php/deleteCartRow.php?row=" + rownum;
	

	}else{
		document.getElementById(sChkId).checked = false;		
	

	}
	
	return true;

}

/******************************************************************
* 関数名	:updateKosuForShoping
* 処理概要	: 
* 以下の処理に従って買い物かごへの送信の妥当性を検証する。
*  1.商品の個数を取得する。
*  2.商品の個数が空の場合、データを送信しない。
*  3.商品の個数に数値以外の文字が含まれる場合、データを送信しない。
*  4.商品の個数が0個以下の場合、データを送信しない。
*  5.商品代、送料、消費税などの計算を行い、送信可能状態にする。
*
*
* 引数:			説明
* --------------------	---------------------------------
* id			フォームを識別するためのユニークid
* price			商品単体の値段
*
*
* 戻り値:
* true   : データを送信する
* false  : データを送信しない
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function updateKosuForShoping(id, price){
	var stat			= true;
	
	var sKosuTextId		= "kosu_txt"; 	// 個数のIDのプレフィックス
	var sTextStatus		= "txt_status"; // テキストの状態を表示するspanのIDのプレフィックス
	var sBtnSpan		= "go_regiBtn";
	var sSubTotalTd		= "cartsubTotalTd";
	var sItemTotalId	= "cartItemTotal";
	var sItemPostage	= "cartItemPostage";
	var sItemTaxId		= "cartItemTax";
	var sAllTotalId		= "cartAllTotal";
	var sPostageBiko	= "cartItemPostageBiko";
	var sAllTotalBiko	= "cartAllTotalBiko";
	var sParentTag		= "cartTotalListSpan";
	var sMailDeliId		= "maildeli";




	var url				= "php/updateCartKosu.php";	// サーバへリクエストするPHPファイル


	var iRow;
	var iTax			= 0;
	var iTotal			= 0;
	var iPostage		= 0;
	var iAllPrice		= 0;
	var i;
	var sKosuVal;			// 個数値
	var objSpanStat;		// spanオブジェクト
	var objSpanBtn;			// spanオブジェクト
	var objSpanItemTotal;	// spanオブジェクト
	var objSpanItemPostage; // spanオブジェクト
	var objSpanItemTax;		// spanオブジェクト
	var objSpanAllTotal;	// spanオブジェクト
	var objPostageBiko;		// spanオブジェクト
	var objAllTotalBiko;	// spanオブジェクト
	var objSpanParentTag;	// spanオブジェクト
	var objSubTotalTd;  	// tdオブジェクト
	var objspanStat2;		// spanオブジェクト
	var objMailDeliChkBox;	// checkboxオブジェクト
	var objReviewHidden;
	var objPostage;

	// --------------------------
	// 1.商品の個数を取得する。--
	// --------------------------
	// 個数のIDのプレフィックスに引数から取得した数字を追加する。
	sKosuTextId	+= id;
	
	// テキスト状態を表すのIDのプレフィックスに引数から取得した数字を追加する。
	sTextStatus	+= id;
	
	// 小計を表す表のセルのIdのプレフィックスに引数から取得した数字を追加する。
	sSubTotalTd	+= id;
	

	// 個数値を取得する。
	sKosuVal			= document.getElementById(sKosuTextId);
	objSpanStat			= document.getElementById(sTextStatus);
	objSpanBtn			= document.getElementById(sBtnSpan);
	objSubTotalTd 		= document.getElementById(sSubTotalTd);
	objSpanItemTotal	= document.getElementById(sItemTotalId);
	objSpanItemPostage	= document.getElementById(sItemPostage);
	objSpanItemTax		= document.getElementById(sItemTaxId);
	objSpanAllTotal		= document.getElementById(sAllTotalId);
	objPostageBiko		= document.getElementById(sPostageBiko);
	objAllTotalBiko		= document.getElementById(sAllTotalBiko);
	objSpanParentTag	= parent.document.getElementById(sParentTag);
	objspanStat2		= document.getElementById("txt_status");

	objspanStat2		= document.getElementById("txt_status");
	objReviewHidden		= document.getElementById("review_hidden");
	objPostage			= document.getElementById("postage");


	if( document.getElementById(sMailDeliId) ){
		objMailDeliChkBox	= document.getElementById(sMailDeliId);
	} else{
		objMailDeliChkBox	= null;
	}

	// ---------------------------------------------------
	// 2.商品の個数が空の場合、データを送信しない。     --
	// ---------------------------------------------------
	if(sKosuVal.value.length==0){
		objSpanStat.innerHTML = id + 1 + "行目の個数に値が入っていません<br />";
		objSpanBtn.style.display = "none";
		objSubTotalTd.innerHTML = "??";
		objSpanItemTotal.innerHTML = "??円";
		objSpanItemTax.innerHTML = "0円";
		objSpanItemPostage.innerHTML = "0円";
		objSpanAllTotal.innerHTML = "??円";
		objPostageBiko.innerHTML = "";
		objAllTotalBiko.innerHTML ="";
		objspanStat2.innerHTML = "";
 		return false;
	}

	
	// 全角数字を半角数字に変換する。
 	sKosuVal.value = toHankakuNum(sKosuVal.value);
	

	// -----------------------------------------------------------------------
	// 3.商品の個数に数値以外の文字が含まれる場合、データを送信しない。     --
	// -----------------------------------------------------------------------
	// 数値以外の文字が含まれているかチェックする。
	if(sKosuVal.value.match(/\D/gi)){
		objSpanStat.innerHTML = id + 1 + "行目の個数に数値以外の値が入っています<br />";
		objSpanBtn.style.display = "none";
		objSubTotalTd.innerHTML = "??";
		objSpanItemTotal.innerHTML = "??円";
		objSpanItemTax.innerHTML = "0円";
		objSpanItemPostage.innerHTML = "0円";
		objSpanAllTotal.innerHTML = "??円";
		objPostageBiko.innerHTML = "";
		objAllTotalBiko.innerHTML ="";
		objspanStat2.innerHTML = "";
		return false;
	}

	// ---------------------------------------------------
	// 4.商品の個数が0個以下の場合、データを送信しない。--
	// ---------------------------------------------------
	if(sKosuVal.value <= 0){
		objSpanStat.innerHTML = id + 1 + "行目の個数に1以上の数値を入れてください。<br />";
		objSpanBtn.style.display = "none";
		objSubTotalTd.innerHTML = "??";
		objSpanItemTotal.innerHTML = "??円";
		objSpanItemTax.innerHTML = "0円";
		objSpanItemPostage.innerHTML = "0円";
		objSpanAllTotal.innerHTML = "??円";
		objPostageBiko.innerHTML = "";
		objAllTotalBiko.innerHTML ="";
		objspanStat2.innerHTML = "";
		return false;
	}
	
	// 以下は数値チェック問題なし
	// ----------------------------------------------------------------
	// 5.商品代、送料、消費税などの計算を行い、送信可能の状態とする。--
	// ----------------------------------------------------------------
	objSpanStat.innerHTML ="";
	objSpanBtn.style.display = "inline";
	objSubTotalTd.innerHTML = price * sKosuVal.value;
	
	// チェックボッックスの数を用いて行数を取得する。
	iRow =document.getElementsByName("cart_chk[]").length;
	
	for(i=0; i<iRow; i++){
		if(!isNaN(parseInt(document.getElementById("cartsubTotalTd" + i).innerHTML))){
			iTotal += parseInt(document.getElementById("cartsubTotalTd" + i).innerHTML);
		} else {
			objSpanBtn.style.display = "none";
			objSpanItemTotal.innerHTML = "??円";
			objSpanItemTax.innerHTML = "0円";
			objSpanItemPostage.innerHTML = "0円";
			objSpanAllTotal.innerHTML = "??円";
			objPostageBiko.innerHTML = "";
			objAllTotalBiko.innerHTML ="";
			objspanStat2.innerHTML = "";
			return false;	
		}
	}
	objSpanItemTotal.innerHTML = iTotal +"円";

	// 商品代を親画面の吹き出し及び画像に非同期通信にて設定する。
	url += "?row=" +id + "&kosu_txt=" + sKosuVal.value + "&total=" + iTotal;
	stat = sendGetDataAsync(objSpanParentTag, url);
	if(stat == false){
		// alert("sendGetDataAsyncに失敗しました。");
 		return false;
	}

	// 消費税の計算
	iTax =  Math.round(iTotal * 0.05);
	objSpanItemTax.innerHTML = iTax +"円";
	
	
	// 送料が一定額を超えた場合、無料とする。
	if(iTotal + iTax >= POSTAGE_FREE){
		iPostage = 0;
		objSpanItemPostage.innerHTML = iPostage + "円";
		objPostageBiko.innerHTML = "※";
		objAllTotalBiko.innerHTML ="";
		objSpanStat.innerHTML = "";
		objspanStat2.innerHTML = "※" + POSTAGE_FREE +"円以上お買上のため送料無料とさせていただきます。";

	}else if(objReviewHidden.value == true){
		iPostage = 0;
		objSpanItemPostage.innerHTML = iPostage + "円";
		objPostageBiko.innerHTML = "※";
		objAllTotalBiko.innerHTML ="";
		objSpanStat.innerHTML = "";
		objspanStat2.innerHTML = "※特別条件により送料無料とさせていただきます。";
	
	}else{
		
		if(objMailDeliChkBox != null && objMailDeliChkBox.checked){
			
				iPostage = POSTAGE_PRICE_MAIL;
				objSpanItemPostage.innerHTML = iPostage + "円";
				objPostageBiko.innerHTML = "※";
				objAllTotalBiko.innerHTML ="";
				objSpanStat.innerHTML = "";
				objspanStat2.innerHTML = "※メール便の場合、代引きでの発送はできません。";
			
			
			
			
			
			
		}else{
			iPostage = POSTAGE_PRICE;
			iAllPrice = iTotal + iTax + POSTAGE_PRICE_SPECIAL;
			objSpanItemPostage.innerHTML = iPostage +"円";
			objPostageBiko.innerHTML  = "(北海道・沖縄は" + POSTAGE_PRICE_SPECIAL + "円)";
			objAllTotalBiko.innerHTML = "(北海道・沖縄は" + iAllPrice + "円)";
			objspanStat2.innerHTML = "";
		}
	}
	
	objPostage.value = iPostage;
	
	iAllPrice = iTotal + iTax + iPostage;
	
	// 合計の計算
	objSpanAllTotal.innerHTML = iAllPrice +"円";
	
	
	return true;
}

/******************************************************************
* 関数名	:checkOutForm
* 処理概要	: 
* 以下の処理に従ってIDから関連づく商品を吹き出しに表示する。
*  1.サーバへリクエストするURLを生成する。
*  2.データを非同期で取得し、反映する。
*
*
* 引数:			説明
* ------------	-----------------------------------
* なし
*
*
* 戻り値:
* true   : 正常終了
* false  : 異常終了
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function checkOutForm(){
	document.getElementById("cashForm").target = '_parent';
	document.getElementById("cashForm").submit();
}

/******************************************************************
* 関数名	:chkMailDeli
* 処理概要	: 
* チェックボックスの値をget送信する。
*
*
* 引数:			説明
* ------------	-----------------------------------
* なし
*
*
* 戻り値:
* true   : 正常終了
* false  : 異常終了
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function chkMailDeli(){
	var element = document.getElementById("maildeli");
	if(element.checked == true){
		location.href = "php/chkMailDeli.php?deli=1";
	}else if(element.checked == false){
		location.href = "php/chkMailDeli.php?deli=0";
	}
}
