/************************************************************
* ファイル名	:comFunc.js
* ファイル概要	:汎用的な関数を格納したファイル。
* 関数一覧:
* ・setDivAreaSizePx
* ・valKosuForShoping
*
* 履歴:
* ・2008/07/06 新規作成
*
* Written by Y.Yamamoto
*************************************************************/


/*******************
* グローバル変数
*******************/
// 定数扱いの変数（スタイル関連）
var HEADER_HEIGHT	= 22;	// ヘッダ領域の高さを定義する。
var LEFT_WIDTH	 	= 150;	// 左領域の幅を定義する。
var FOOTER_HEIGHT	= 20;	// フッタ領域の高さを定義する。

/************************************************************
* 関数名	:setDivAreaSizePx
* 処理概要	: 
* 以下の処理に従ってdivタグのエリアサイズをpxで設定する。
*  1.各ブラウザに応じた形式で内寸のpx値を取得する。
*  2.取得した内寸に応じて、各領域のエリアサイズに値を設定する。
*
*
* 引数:					説明
* --------------------	---------------------------------
* なし
*
*
* 戻り値:
* true   : 正常終了
* false  : 異常終了
*
* 履歴
* ・2008/07/06 新規作成
*
*************************************************************/
function setDivAreaSizePx() {
	// --------------------------------------------------
	// 1.各ブラウザに応じた形式で内寸のpx値を取得する。--
	// --------------------------------------------------
	var obj = window;
	//opera6-7の場合
	if( window.opera ) {
		var w = obj.innerWidth;
		var h = obj.innerHeight;
	//IE4以降の場合
	} else if( document.all ){
		var w = obj.document.body.clientWidth;
		var h = obj.document.body.clientHeight;
		
		
		
	//netscape6-7, mozilla系,Sleipnirの場合
	} else if( document.getElementById ){
		var w = obj.innerWidth;
		var h = obj.innerHeight;
		
		
		
		
	//上記のどれにも該当しない。
	} else {
		return;
	}

	// 内寸が左領域やヘッダフッタの幅、高さを下回った場合のエラー回避
	if (w < LEFT_WIDTH) {
		w =  LEFT_WIDTH;
	}

	if (h < HEADER_HEIGHT + FOOTER_HEIGHT) {
		h =  HEADER_HEIGHT + FOOTER_HEIGHT;
	}

	// --------------------------------------------------------------
	// 2.取得した内寸に応じて、各領域のエリアサイズに値を設定する。--
	// --------------------------------------------------------------
	var header_style = document.getElementById("header").style;
	// header_style.marginLeft = (w/2) - 400 + "px";
	header_style.left = 0 + "px";
	header_style.top = 0 + "px";
	header_style.height = HEADER_HEIGHT + "px";

	var left_style = document.getElementById("leftArea").style;
	// left_style.marginLeft = (w/2) - 400 + "px";
	left_style.left = 0 + "px";
	left_style.top = HEADER_HEIGHT + "px";
	left_style.bottom = FOOTER_HEIGHT + "px";
	left_style.width = LEFT_WIDTH + "px";
	left_style.height = ( h - HEADER_HEIGHT - FOOTER_HEIGHT) + "px";

	var right_style = document.getElementById("rightArea").style;
	// right_style.marginLeft = (w/2) - 400  +"px";
	right_style.left = LEFT_WIDTH + 1 + "px";
	right_style.top = HEADER_HEIGHT + "px";
	right_style.bottom = FOOTER_HEIGHT + "px";
	// right_style.width = ( w - LEFT_WIDTH) + "px";
	right_style.width = ( w - LEFT_WIDTH) - ((w/2) - 400) + "px";
	right_style.height = ( h  - HEADER_HEIGHT - FOOTER_HEIGHT) + "px";

	var footer_style = document.getElementById("footer").style;
	// footer_style.marginLeft = (w/2) - 400 + "px";
	footer_style.left = 0 + "px";
	footer_style.top = HEADER_HEIGHT + (h - HEADER_HEIGHT - FOOTER_HEIGHT) + "px";
	footer_style.bottom = 0 + "px";
	footer_style.height = FOOTER_HEIGHT + "px";

	if(document.getElementById("headerDiv")){
		var search_header_style = document.getElementById("headerDiv").style;
		// search_header_style.marginLeft =  (w/2) - 400 + "px";
	
	}

	if(document.getElementById("cartDiv")){
		var cart_style = document.getElementById("cartDiv").style;
		// cart_style.marginLeft =  (w/2) - 400 + "px";
	
	}

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


/******************************************************************
* 関数名	:createXMLHttpReq
* 処理概要	: 
* 以下の処理に従って非同期で行った処理の結果を反映する。
*  1.各ブラウザの方法に従ってXmlHttpRequestを作成する。
*
*
* 引数:			説明
* ------------	-----------------------------------
* なし
*
*
* 戻り値:
* XmlHttpRequest	: 生成したXmlHttpRequestオブジェクト
* null				: 作成失敗
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function createXMLHttpReq(func){
	var XMLhttpObject = null;
	// ------------------------------------------------------
	// 1.各ブラウザの方法に従ってXmlHttpRequestを作成する。--
	// ------------------------------------------------------
	// Mozilla, Opera, Safari, IE7
	try{
		XMLhttpObject = new XMLHttpRequest();
	}catch(e){
		// IE6
		try{
			XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			// IE5, IE5.5
			try{
				XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				return null;
			}
		}
	}
	return XMLhttpObject;
}

/******************************************************************
* 関数名	:displayTagData
* 処理概要	: 
* 以下の処理に従ってタグに値を表示する。
*  1.XMLHttpRequestの状態を判定する。
*  2.レスポンス結果をタグ値に表示する。
*
*
* 引数:			説明
* ------------	-----------------------------------
* tag			処理結果の反映先タグ
*
*
* 戻り値:
* なし
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function displayTagData(tag){
	// ------------------------------------
	// 1.XMLHttpRequestの状態を判定する。--
	// ------------------------------------
	// オブジェクトの準備完了状態の場合
	if(httpObj.readyState == 4){
		// 処理が正常終了した場合
		if (httpObj.status == 200) {
			// --------------------------------------
			// 2.レスポンス結果をタグ値に設定する。--
			// --------------------------------------
			tag.innerHTML = httpObj.responseText;
		// ファイルへのアクセス権が無い(403)場合
		}else if(httpObj.status == 403) {
			tag.innerHTML = "アクセス権がありません。";
		// ファイルが存在しない(404)場合
		}else if(httpObj.status == 404) {
			tag.innerHTML = "ページが存在しません。";
		// サーバーエラー(500)の場合
		}else if(httpObj.status == 500) {
			tag.innerHTML = "サーバエラーが発生しました。";
		// 一時的なサーバーエラー(503)の場合
		}else if(httpObj.status == 503) {
			tag.innerHTML = "一時的なサーバエラーが発生しました。";
		}
	// オブジェクトの状態が準備完了以外(例：読み込み中)の場合
	}else{
		tag.innerHTML = "";
	}
}

/******************************************************************
* 関数名	:exeTreeOpenOrHidden
* 処理概要	: 
* 以下の処理に従ってツリー構造のテキストの展開及び格納を行う。
*  1.対象ツリーのスタイルオブジェクトを取得する。
*  2.対象ツリーが展開されていない場合、ツリーを展開し、展開時の画像にかえる。
*  3.対象ツリーが展開されている場合、ツリーを格納し、格納時の画像にかえる。
*
*
* 引数:			説明
* --------------------	---------------------------------
* tId			対象ツリーを識別するためのユニークid
* gId			対象ツリーの画像を識別するためのユニークid
*
* 戻り値:
* true   : 正常終了
* false  : 異常終了
*
* 履歴
* ・2008/09/23 新規作成
*
*******************************************************************/
function exeTreeOpenOrHidden(tId, gId){
	var  objStyleTree;
	
	// getElementByIdが使えないブラウザの場合、何もしないで終了する。
	if (!document.getElementById) {
		return true;
	}

	// ------------------------------------------------
	// 1.対象ツリーのスタイルオブジェクトを取得する。--
	// ------------------------------------------------
	objStyleTree = document.getElementById(tId).style;
	
	// -----------------------------------------------------------------------------
	// 2.対象ツリーが展開されていない場合、ツリーを展開し、展開時の画像にかえる。 --
	// -----------------------------------------------------------------------------
	if (objStyleTree.display == 'none') {
        objStyleTree.display = "block";	
        document.getElementById(gId).src ="../../../../../com/img/openTree.gif";
		
	// -----------------------------------------------------------------------------
	// 3.対象ツリーが展開されている場合、ツリーを格納し、格納時の画像にかえる。 --
	// -----------------------------------------------------------------------------
    }else if (objStyleTree.display == 'block'){
        objStyleTree.display = "none";
        document.getElementById(gId).src ="../../../../../com/img/closeTree.gif";
		
	// 上記のどれにも該当しない場合、異常終了とする。
    }else {
		return false;	
	}
	return true;
}



/******************************************************************
* 関数名	:sendGetDataAsync
* 処理概要	: 
* 以下の処理に従って非同期で行った処理の結果を反映する。
*  1.XmlHttpRequestオブジェクトを作成する。
*  2.リクエストが返ってきたときに実行される関数を定義する。
*  3.サーバへリクエストする処理を設定し、反映する。
*
*
* 引数:			説明
* ------------	-----------------------------------
* tag			処理結果の反映先タグ
* url			サーバへリクエストする処理の記述先URL
*
*
* 戻り値:
* true   : 正常終了
* false  : 異常終了
*
* 履歴
* ・2008/07/18 新規作成
*
*******************************************************************/
function sendGetDataAsync(tag, url){
	// ------------------------------------------
	// 1.XmlHttpRequestオブジェクトを作成する。--
	// ------------------------------------------
	httpObj = createXMLHttpReq();
	if(httpObj == null){
		// alert("createXMLHttpReqに失敗しました。");
		return false;
	}
	// -----------------------------------------------------------
	// 2.リクエストが返ってきたときに実行される関数を定義する。 --
	// -----------------------------------------------------------
	httpObj.onreadystatechange = function onreadystatechange(event) {
		displayTagData(tag);
	}
	// ---------------------------------------------------
	// 3.サーバへリクエストする処理を設定し、反映する。 --
	// ---------------------------------------------------
	httpObj.open("get", url, true);
	httpObj.send(null);
	return true;
}


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

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

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

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


function hiddenAdjustDiv(){
	var adjust  = document.getElementById("rightAdjust");
	adjust.style.display = 'none';
}



function chgHankaku(id) {
	var obj = document.getElementById(id);
	var objVal = document.getElementById(id).value;
	obj.value = toHankakuNum(objVal);
	
	return true;

}


function toHankakuNum(motoText) {
	han = "0123456789.,-+";
	zen = "０１２３４５６７８９．，－＋";
	str = "";
	for (i=0; i<motoText.length; i++) {
		c = motoText.charAt(i);
		n = zen.indexOf(c,0);
		if (n >= 0) c = han.charAt(n);
		str += c;
	}
	return str;
} 

/******************************************************************
* 関数名	:openOrHiddenTag
* 処理概要	: 
* 以下の処理に従ってタグの展開及び格納を行う。
*  1.対象タグのスタイルオブジェクトを取得する。
*  2.対象タグが展開されていない場合、タグを表示する。
*  3.対象タグが展開されている場合、タグを格納する。
*
*
* 引数:			説明
* --------------------	---------------------------------
* tId			対象タグを識別するためのユニークid
*
* 戻り値:
* true   : 正常終了
* false  : 異常終了
*
* 履歴
* ・2008/09/23 新規作成
*
*******************************************************************/
function openOrHiddenTag(tId){
	var  objStyleTree;
	// getElementByIdが使えないブラウザの場合、何もしないで終了する。
	if (!document.getElementById) {
		return true;
	}

	// ------------------------------------------------
	// 1.対象タグのスタイルオブジェクトを取得する。--
	// ------------------------------------------------
	objStyleTree = document.getElementById(tId).style;	

	// -----------------------------------------------------------------------------
	// 2.対象タグが展開されていない場合、タグを表示する。 --
	// -----------------------------------------------------------------------------
	if (objStyleTree.display == 'none') {

        objStyleTree.display = "block";	
	
	// -----------------------------------------------------------------------------
	// 3.対象タグが展開されている場合、タグを格納する。 --
	// -----------------------------------------------------------------------------
    }else if (objStyleTree.display == 'block'){
        objStyleTree.display = "none";
	
	// 上記のどれにも該当しない場合、異常終了とする。
    }else {
		objStyleTree.display = "block";	

	}
	return true;
}