
/********************************************************************************
	グローバル変数
********************************************************************************/
var giDefaultZIndex = 100;
// ヘルプ画像の保存ディレクトリを記述してください（最後にスラッシュ必要）
var gsImageDir = "../_img/";

// バルーンオブジェクトリスト
var aHelpObjects = new Array();

/********************************************************************************
	関数名		ShowTalk
	機能		バルーンヘルプを表示します。
				ヘルプの内容は、ID指定されたDIVタグの内容になります。
				表示位置は、ID指定されたタグの上になります。
				
	
	使い方		<div id="バルーンID" style="display:none; width:XXpx;">
				バルーン内に表示したいHTML（テーブルレイアウト可）
				</div>
				
				上記のHTMLをドキュメント内に記述し、
				<a onMouseOver="ShowTalk(this, 'バルーンID', 1);"></a>
				で表示を実行します。
	
	入力		oPosition	表示したい位置のセレクタオブジェクト
				sId			表示内容
				bMode		表示モード（1:表示	0:非表示）
	出力		画面表示
	
	処理概要	
				1. バルーンオブジェクトを未作成の場合
				 1.1. バルーンヘルプオブジェクトの内容を作成する
				 1.2. バルーンオブジェクトを対象のオブジェクトに流し込む
				 1.3. バルーンオブジェクト作成済みフラグをオンにする
				2. バルーンヘルプオブジェクトの位置を設定する
				3. 表示モードの場合
				 3.1. バルーンヘルプを表示する
				4. 非表示モードの場合
				 4.1. バルーンヘルプを非表示する
********************************************************************************/
function ShowTalk(oPosition, sId, bMode){
	var oEditObj = document.getElementById(sId);
	var bBrowserMode;
	var sHtmlHead, sHtmlFoot;
	bBrowserMode = CheckBrowser();
	
	// バルーンヘルプオブジェクトが存在しない場合
	if(CheckHelpObject(sId) == false){
		// バルーンオブジェクトの内容を作成する
		sHtmlHead = MakeHelpHtml('head', bBrowserMode);
		sHtmlFoot = MakeHelpHtml('foot', bBrowserMode);
		sHtml = sHtmlHead + oEditObj.innerHTML + sHtmlFoot;
		
		// 対象オブジェクトにバルーンの内容を流し込む
		oEditObj.innerHTML = sHtml;
		oEditObj.style.position = "absolute";
		oEditObj.style.zIndex = 100;
		
		
		aHelpObjects[aHelpObjects.length] = sId;
		
	}
	
	
	// オブジェクトの位置を作成する
	oEditObj.style.left = GetObjectPosition(oPosition, "left");
	oEditObj.style.top = GetObjectPosition(oPosition, "top") - oEditObj.offsetHeight - 35;
	
	// 表示モードの場合
	if(bMode == 1){
		// 対象のDIVレイヤーを表示する
		oEditObj.style.display = "block";
		
		// バルーンヘルプの位置を設定する
		oEditObj.style.top = GetHelpPosition(oPosition, oEditObj,  "top");
		oEditObj.style.left = GetHelpPosition(oPosition, oEditObj, "left");
		
	// 非表示モードの場合
	} else {
		oEditObj.style.display = "none";
	}
}

/********************************************************************************
	関数名		CheckHelpObject
	機能		対象のオブジェクトがすでにヘルプバルーン化されているか
				チェックする
	
	入力		sId
	G入力		aHelpObjects
	出力		bFlg		true: ヘルプ処理済み    false: ヘルプ未処理
********************************************************************************/
function CheckHelpObject(sId) {
	var iCnt;
	
	// ヘルプ処理済みヘルプオブジェクト名リストに対して繰り返す
	for(iCnt = 0; iCnt < aHelpObjects.length; iCnt++){
		// >対象のIDがすでに処理済みの場合
		if(sId == aHelpObjects[iCnt]){
			// 処理済みフラグを返して終了する
			return true;
		}
	}
	
	return false;
	
}

/********************************************************************************
	関数名		GetHelpPosition
	機能		バルーンヘルプの位置を取得する
	
	入力		oPosition		表示したいセレクタオブジェクト
				oHelpDiv		バルーンヘルプオブジェクト
				sMode			位置モード（top/left)
	出力		iPosition		座標
	
	処理概要	1. ブラウザをチェックする
				2. ブラウザごとの調整値を設定する
				3. 位置モードがtopの場合
				 3.1. バルーンヘルプの高さを取得する
				 3.2. 表示したいセレクタオブジェクトの位置を取得する
				4. 位置モードがleftの場合
				 4.1. 表示したいセレクタオブジェクトの位置を取得する
				5. 位置を返して終了する
				 
	注意事項	この関数はヘルプオブジェクトがdisplay:blockのときにしか実行できない
********************************************************************************/
function GetHelpPosition(oPosition, oHelpDiv, sMode){
	var iHelpHeight;
	var iShowPosition;
	
	// ブラウザをチェックする
	// ブラウザごとの調整値を設定する
	
	// 位置モードがtopの場合
	if(sMode == "top"){
		// バルーンヘルプの高さを取得する
		iHelpHeight = oHelpDiv.offsetHeight;
		
		// 表示したいセレクタの位置を取得する
		iShowPosition = GetObjectPosition(oPosition, "top") - iHelpHeight;
		
	} else {
		// 表示したいセレクタの位置を取得する
		iShowPosition = GetObjectPosition(oPosition, "left");
	}
	
	return iShowPosition;

}

/********************************************************************************
	関数名		MakeHelpHtml
	機能		バルーンヘルプのHTMLを作成する
	
	入力		sMode			"head","foot"
				bBrowserMode	1: WinIE		0:PNG対応ブラウザ
	出力		sHtml	HTML
	
	処理概要	1. IEの場合
				 1.1. IE用のヘッダーを格納する
				 1.2. IE用のフッターを格納する
				 1.3. HTMLを作成する
				2. IE以外のブラウザの場合
				 2.1. 一般用のヘッダーを格納する
				 2.2. 一般用のフッターを格納する
				 2.3. HTMLを作成する
				3. HTMLを返して終了する
********************************************************************************/
function MakeHelpHtml(sMode, bBrowserMode){
	var sHelpHeader, sHelpFooter;
	var sHtml;
	var oHtml;
	
	// Win IE用の場合
	if(bBrowserMode == 1){
		sHelpHeader = "<table cellspacing=0 cellpadding=0 border=0><tr><td style=\"font-size:5px;height:10px;width:10px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "tl.png');\">&nbsp;</td><td style=\"font-size:5px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "tc.png',sizingMethod='scale');\"></td><td style=\"font-size:5px;height:10px;width:10px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "tr.png');\">&nbsp;</td></tr><tr><td style=\"font-size:5px;width:10px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "ml.png',sizingMethod='scale');\"></td><td style='background-color:white'>";
		sHelpFooter = "</td><td style=\"font-size:5px;width:10px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "mr.png',sizingMethod='scale');\"></td></tr><tr><td style=\"font-size:5px;height:15px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "bl.png');\">&nbsp;</td><td><table cellspacing=0 cellpadding=0 border=0 width=100%><tr><td style=\"font-size:5px;height:15px;width:22px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "bcp.png');\">&nbsp</td><td style=\"font-size:5px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "bc.png',sizingMethod='scale');\">&nbsp;</td></tr></table></td><td style=\"font-size:5px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + gsImageDir + "br.png');\">&nbsp;</td></tr></table>";
	} else {
		sHelpHeader = "<table cellspacing=0 cellpadding=0 border=0><tr><td width=10 height=10><img width=10 height=10 src='" + gsImageDir + "tl.png'></td><td ><img src='" + gsImageDir + "tc.png' style='width:100%;height:10px'></td><td width=10><img width=10 height=10 src='" + gsImageDir + "tr.png'></td></tr><tr><td><img style='height:100%; width:10px' src='" + gsImageDir + "ml.png'></td><td style='background-color:white'>";
		sHelpFooter = "</td><td><img style='width:10px;height:100%' src='" + gsImageDir + "mr.png'></td></tr><tr><td height=15><div><img width=10 height=15 src='" + gsImageDir + "bl.png'></div></td><td><table cellspacing=0 cellpadding=0 border=0 width=100%><tr><td width=22><img width=22 height=15 src='" + gsImageDir + "bcp.png'></td><td style='width:100%'><img style='width:100%;height:15px' src='" + gsImageDir + "bc.png'></td></tr></table></td><td><img width=10 height=15 src='" + gsImageDir + "br.png'></td></tr></table>";
	}
	
	// ヘッダーを返すモードの場合
	if(sMode == "head"){
		sHtml = sHelpHeader;
	// フッターを返すモードの場合
	} else {
		sHtml = sHelpFooter;
	}
	return sHtml;
}

/********************************************************************************
	関数名		CheckBrowser
	機能		AlphaImageLoader対応ブラウザかチェックする
	
	入力		なし
	出力		bMode		1:AlphaImageLoder対応ブラウザ  -1:MacIE
							0:PNG対応ブラウザ
	
	Thanks for etsuko&gyazbee
********************************************************************************/
function CheckBrowser(){
	var sOs = GetOsName();
	var sBrowser = GetNavigatorName();
	
	// Win IE
	if(sOs == "Windows" && sBrowser == "Explorer"){
		return 1;
	// Mac IE
	} else if ( sBrowser == "Explorer" ){
		return -1;
	}
	return 0;
}
function GetOsName(){
	var uAgent  = navigator.userAgent.toUpperCase();
	if (uAgent.indexOf("MAC OS X") >= 0) return "MacOSX";
	if (uAgent.indexOf("MAC") >= 0) return "MacOS";
	if (uAgent.indexOf("WIN") >= 0) return "Windows";
	if (uAgent.indexOf("X11") >= 0) return "UNIX";
	return "";
}
function GetNavigatorName(){
	if(navigator.IBM_HPR) return "HomepageReader";
	
	aName  = navigator.userAgent.toUpperCase();
	if (aName.indexOf("SAFARI") >= 0) return "Safari";
	if (aName.indexOf("CHIMERA") >= 0) return "Camino";
	if (aName.indexOf("OPERA") >= 0) return "Opera";
	
	aName = navigator.appName.toUpperCase();
	if (aName.indexOf("NETSCAPE") >= 0)  return "Netscape";
	if (aName.indexOf("MICROSOFT") >= 0) return "Explorer";
	return "";
}

/********************************************************************************
	関数名		GetObjectPosition
	機能		対象オブジェクトの位置を取得する
	
	入力		oObject	対象オブジェクト
				sMode	取得座標 (top|left)
********************************************************************************/
function GetObjectPosition( oObject, sMode ) {
	var iLeft = 0;
	var iTop = 0;
	var sPosition = "";
	
	while( oObject.offsetParent != null ) {
		iLeft += oObject.offsetLeft;
		iTop += oObject.offsetTop;
		oObject = oObject.offsetParent;
	}
	iLeft += oObject.offsetLeft;
	iTop += oObject.offsetTop;
	
	// Left座標を取得する場合
	if(sMode == "left" || sMode == "LEFT"){
		return iLeft;
	} else {
		return iTop;
	}
}

/********************************************************************************
	関数名		PreloadHelpImage
	機能		バルーンヘルプ用画像ファイルを先に読み込む
	
	G入力		gs
********************************************************************************/
function PreloadHelpImage(){
	// バルーンヘルプ画像リスト
	aImages = new Array("tl.png","tc.png","tr.png",
						"ml.png","mr.png",
						"bl.png","bc.png","br.png","bcp.png");
	var iCnt;
	aImageObj = new Array();
	
	// 画像オブジェクトが使える環境の場合
	if(document.images){
		// 画像リストに対して繰り返す
		for(iCnt = 0; iCnt < aImages.length; iCnt++){
			// 対象の画像オブジェクトを作成する
			aImageObj[iCnt] = new Image();
			aImageObj[iCnt].src = gsImageDir + aImages[iCnt];
		}
	}
	
}
PreloadHelpImage();
