/************************************************************************/
/* Yuna Accessory Version 1.21											*/
/*																		*/
/* January 9, 1999														*/
/* Copyright (C) Mizuki Takanashi										*/
/* yu_chan@da.airnet.ne.jp												*/
/* もうすぐうりゅそふとに著作権を剥奪される予定(笑)						*/
/************************************************************************/
/* 使い方：「設定」「HTML出力」「メニューのイベント」の部分を必要に		*/
/*         応じて書き換えたら、HTMLファイルのなるべく先頭(BODY要素の	*/
/*         直後が望ましい)で呼び出します。								*/
/* 例：<script src="YunaAccessory.js" type="text/javascript"></script>	*/
/************************************************************************/

////////////////////////////////////////////////////////////////////
// 設定
// 画像ファイルはBaseDirに置いて下さい。

BaseDir			= '/furtia/';	// スクリプトの基準となるディレクトリの絶対パス
ImageName		= 'image/kb.gif';		// アクセサリの画像ファイル
ImageActiveName	= 'image/kb-on.gif';	// アクセサリのアクティブ画像ファイル(マウスポイント時)
ImageWidth		= 85;					// 画像の幅(pixel)
ImageHeight		= 163;					// 画像の高さ(pixel)
DefPos			= 'RT';					// 初期位置(RT=右上、RB=右下、LT=左上、LB=左下)
DefX			= 10;					// 左(または右)からのアクセサリの距離(pixel)
DefY			= 10;					// 上(または下)からのアクセサリの距離(pixel)
MenuWidth		= 220;					// メニューの幅(pixel)
MenuHeight		= 200;					// メニューの高さ(pixel)
MenuColor		= '#ffc080';			// メニューの背景色
MenuBorderColor	= '#ff8000';			// メニュー枠の色
MenuOpacity		= 80;					// メニューの不透明度(0-100)
ItemColor		= '#ff4080';			// メニュー項目の色
ItemActiveColor	= '#4080ff';			// メニュー項目の色(マウスポイント時)
TextColor		= 'white';				// メニュー項目の文字色
TextActiveColor	= 'white';				// メニュー項目の文字色(マウスポイント時)


////////////////////////////////////////////////////////////////////
// メイン

if ( location.protocol != 'http:' ) {
	BaseDir = './';
}

ImageSource				= new Image(ImageWidth,ImageHeight);
ImageSource.src			= BaseDir + ImageName;
ImageActiveSource		= new Image(ImageWidth,ImageHeight);
ImageActiveSource.src	= BaseDir + ImageActiveName;

if ( navigator.appName.indexOf("Microsoft",0) != -1 && parseInt(navigator.appVersion) >= 4 ) {
	Browser = true;
} else {
	Browser = false;
}


//////////////////////////////////
// HTML出力

if ( Browser ) {
	with(document) {
		writeln('<div id="SysIcon" style="z-index:1002; position:absolute; display:none">');
		writeln('<img id="SysIconImage" src="', ImageSource.src, '" border="0" width="', ImageWidth, '" height="', ImageHeight, '" alt="" style="position:relative">');
		writeln('<\/div>');

		writeln('<div id="FloatingMenu" style="z-index:1001; position:absolute; display:none; padding:10px; width:', MenuWidth, 'px; height:', MenuHeight, 'px; line-height:1.5em; font:bold small; background-color:', MenuColor, '; border:', MenuBorderColor, ' double medium; filter:Alpha(opacity=', MenuOpacity, ')">');
		writeln('<div id="Menu1" style="margin:5px; background-color:', ItemColor, '; color:', TextColor, '; cursor:default" onmouseover="chgStyle(true);" onmouseout="chgStyle(false);" onclick="ItemSelected();">フェイズアウト（前）<\/div>');
		writeln('<div id="Menu2" style="margin:5px; background-color:', ItemColor, '; color:', TextColor, '; cursor:default" onmouseover="chgStyle(true);" onmouseout="chgStyle(false);" onclick="ItemSelected();">フェイズドライブ（次）<\/div>');
		writeln('<div id="Menu3" style="margin:5px; background-color:', ItemColor, '; color:', TextColor, '; cursor:default" onmouseover="chgStyle(true);" onmouseout="chgStyle(false);" onclick="ItemSelected();">メインメニューへ<\/div>');
		writeln('<div id="Menu4" style="margin:5px; background-color:', ItemColor, '; color:', TextColor, '; cursor:default" onmouseover="chgStyle(true);" onmouseout="chgStyle(false);" onclick="ItemSelected();">BBSへ飛ぶ<\/div>');
		writeln('<div id="Menu5" style="margin:5px; background-color:', ItemColor, '; color:', TextColor, '; cursor:default" onmouseover="chgStyle(true);" onmouseout="chgStyle(false);" onclick="ItemSelected();">星間通信<\/div>');
		writeln('<div id="Menu99" style="margin:5px; color:black; font:normal smaller; cursor:default">※このケインくんはドラッグすることが出来ます。<\/div>');
		writeln('<\/div>');
	}
}


//////////////////////////////////
// メニュー項目のスタイル変更
// メニュー項目のonmouseover,onmouseoutで呼ばれる

function chgStyle( active ) {
	if ( active ) {
		event.srcElement.style.backgroundColor = ItemActiveColor;
		event.srcElement.style.color = TextActiveColor;
	} else {
		event.srcElement.style.backgroundColor = ItemColor;
		event.srcElement.style.color = TextColor;
	}
}


//////////////////////////////////
// メニューのイベント
// if文の中に実行させたい命令を書いてください。

function ItemSelected() {
	if ( event.srcElement.id == 'Menu1' ) {	// メニュー１
		history.back();
	}

	if ( event.srcElement.id == 'Menu2' ) {	// メニュー２
		history.forward();
	}

	if ( event.srcElement.id == 'Menu3' ) {	// メニュー３
		location.href = "http://arthford-ff11.cocolog-nifty.com/";
	}

	if ( event.srcElement.id == 'Menu4' ) {	// メニュー４
		location.href = "http://www.tcup2.com/210/arch.html";
	}

	if ( event.srcElement.id == 'Menu5' ) {	// メニュー5
		location.href = "mailto:hiroshi@akutsu.co.jp";
	}
}


//////////////////////////////////
// アクセサリの表示、移動、イベントハンドラ処理
// 別名アクセサリプロシージャ(笑)

chkMove			= false;	// ドラッグ判定(ドラッグはクリック判定も出るので……)
AccElm			= null;		// アクセサリのHTML要素(どのDIV要素であるか)
CW				= 0;		// クライアント領域の幅(pixel)
CH				= 0;		// クライアント領域の高さ(pixel)
PX				= 0;		// クライアント領域のページ上のX座標(pixel)
PY				= 0;		// クライアント領域のページ上のY座標(pixel)

function AccessoryProc() {

	// クライアント領域のサイズ変更やページのスクロールが検出されたら……
	if ( (document.body.clientWidth != CW) || (document.body.clientHeight != CH)
		|| (document.body.scrollLeft != PX) || (document.body.scrollTop != PY) ) {

		// ページ中の全てのDIV要素の取得
		alldivs = document.all.tags('div');

		// アクセサリのDIV要素の選定
		if ( AccElm == null ) {
			for ( i=0; i<alldivs.length; i++ ) {
				AccElm = alldivs[i];
				if ( AccElm.id == 'SysIcon' )
					break;
			}
		}

		// フレーム隠し対策……ではなくて、アクセサリ表示権争奪戦(^^;
		// フレーム内のページであればクライアント領域の占有率の一番高いページのみアクセサリを表示する
		// ※グローバル変数である必要があり、ここで初期化する必要もある
		if ( window != window.top ) {
			var ourDoc			= null;
			var ourDocWidth		= 0;
			var ourDocHeight	= 0;
			var ourDocTest		= 0;
			var ourDocTemp		= 0;
			for ( i=0; i<window.top.frames.length; i++ ) {
				ourDocTemp = window.top.frames[i].document.body.clientWidth * window.top.frames[i].document.body.clientHeight;
				if( ourDocTemp > ourDocTest ) {
					ourDoc = window.top.frames[i];
					ourDocTest = ourDocTemp;
				}
			}
		}

		// フレーム内のページでありながら、アクセサリ表示権がなければ非表示にする
		if ( ourDoc && (ourDoc != self) ) {
			AccElm.style.display = 'none';
		}

		// フレームでないか、アクセサリ表示権を持っていれば位置の更新やイベント処理
		if ( ( !ourDoc || (ourDoc && (ourDoc == self)) ) && AccElm != null ) {

			// 表示が乱れないように一旦消去
			AccElm.style.display = 'none';

			// クライアント領域の情報を現在のものに更新
			CH = document.body.clientHeight;
			CW = document.body.clientWidth;
			PX = document.body.scrollLeft;
			PY = document.body.scrollTop;

			// 初期位置
			if ( DefPos == 'RT' ) {		// Right Top
				AccElm.style.top = ( PY + DefY );
				AccElm.style.left = ( CW + PX - (ImageWidth + DefX) );
			}
			if ( DefPos == 'RB' ) {		// Right Bottom
				AccElm.style.top = ( CH + PY - (ImageHeight + DefY) );
				AccElm.style.left = ( CW + PX - (ImageWidth + DefX) );
			}
			if ( DefPos == 'LT' ) {		// Left Top
				AccElm.style.top = ( PY + DefY );
				AccElm.style.left = ( PX + DefX );
			}
			if ( DefPos == 'LB' ) {		// Left Bottom
				AccElm.style.top = ( CH + PY - (ImageHeight + DefY) );
				AccElm.style.left = ( PX + DefX );
			}

			// 表示
			AccElm.style.display = 'block';

			// メッセージ処理
			AccElm.onmouseover = Acc_MouseOver;
			AccElm.onmouseout = Acc_MouseOut;
			AccElm.onclick = Acc_Click;
		}

	}	// End of 更新チェックif文
}


//////////////////////////////////
// アクセサリのonmouseover処理

function Acc_MouseOver() {
	SysIconImage.src = ImageActiveSource.src;
	return true;
}


//////////////////////////////////
// アクセサリのonmouseout処理

function Acc_MouseOut() {
	SysIconImage.src = ImageSource.src;
	return true;
}


//////////////////////////////////
// アクセサリのonclick処理

function Acc_Click() {
	if ( !chkMove ) {

		// メニューの位置設定(回り込み処理含む)
		if ( event.clientX < document.body.clientWidth - MenuWidth ) {
			document.all.FloatingMenu.style.left = document.body.scrollLeft + event.clientX;
			document.all.FloatingMenu.style.paddingRight = '10px';
			document.all.FloatingMenu.style.paddingLeft = '20px';
		} else {
			document.all.FloatingMenu.style.left = document.body.scrollLeft + event.clientX - MenuWidth;
			document.all.FloatingMenu.style.paddingRight = '20px';
			document.all.FloatingMenu.style.paddingLeft = '10px';
		}
		if ( event.clientY < document.body.clientHeight - MenuHeight ) {
			document.all.FloatingMenu.style.top = document.body.scrollTop + event.clientY - (ImageHeight / 4);
		} else {
			document.all.FloatingMenu.style.top = document.body.scrollTop + event.clientY - MenuHeight + (ImageHeight / 4);
		}

		// メニュー表示
		document.all.FloatingMenu.style.display = 'block';
	}
}


//////////////////////////////////
// アクセサリのドラッグ処理セット

curObj = null;

function doMouseDown() {

	// ドラッグ判定を消す
	// onmouseup時だと、その直後にclick判定食らうからね(^^;
	chkMove = false;

	// イベントを起こしたオブジェクトを取得
	// アクセサリでなければNULLに戻す
	curObj = event.srcElement;
	if ( curObj.id.indexOf('SysIconImage',0) == -1 ) {
		curObj = null;
	}

}

function doMouseMove() {

	// アクセサリ上でボタンが押された状態なら……
	if ( event.button && curObj != null ) {
		chkMove = true;
		curObj.style.left = event.clientX - document.body.clientWidth + (ImageWidth / 2);
		curObj.style.top = event.clientY - ImageHeight / 2;

		event.returnValue = false;
	}
}

function doMouseUp() {

	// これはドラッグ処理ではなくて、メニュー表示中にクリックされたらメニューを閉じる処理
	document.all.FloatingMenu.style.display = 'none';

}


//////////////////////////////////
// 起動と監視

if ( Browser ) {
	setInterval('AccessoryProc()',100);
	document.onmousedown	= doMouseDown;
	document.onmouseup		= doMouseUp;
	document.onmousemove	= doMouseMove;
}
