/*
 * ブラウザを判別します。
 */
var agIsMZ = navigator.userAgent.indexOf("Gecko") >= 0 ? 1 : 0;
var agIsKq = navigator.userAgent.indexOf("Konqueror") >= 0 ? 1 : 0;
var agIsOP = navigator.userAgent.indexOf("Opera") >= 0 ? 1 : 0;
var agIsIE = document.all ? 1 : 0;
if (agIsOP) {
	agIsMZ = agIsKq = agIsIE = 0;
} if (agIsKq) {
	agIsMZ = agIsOP = agIsIE = 0;
}

/**
 * マウスカーソルのホバーで画像が切り替わる IMG エレメント情報を管理するクラスです。
 * THoverItemList クラスのリストクラスとして機能します。
 * 通常は THoverItemList クラスで隠蔽されますので、意識的に利用することはありません。
 */
function THoverItem(id, normalImg, hoverImg)
{
	this.id = id;
	this.normalImg = new Image();
	this.hoverImg = new Image();
	this.normalImg.src = normalImg;
	this.hoverImg.src = hoverImg;
	return this;
}

/**
 * マウスカーソルのホバーで画像が切り替わる IMG エレメント情報のリストを管理するクラスです。
 * インスタンスはひとつだけ作成して、文書全体で使うようにします。
 * ホバー機能を持たせたい IMG エレメントの情報を add メソッドで追加登録し、enter メソッドと exit エレメントで切り替えます。
 */
function THoverItemList()
{
	/** THoverItem クラスのインスタンスを管理する配列です。 */
	this.items = new Array();

	/**
	 * IMG エレメント情報を追加します。
	 * @param id IMG エレメントの ID
	 * @param normalImg 状態での画像 URIs
	 * @param hoverImg 状態での画像 URIs
	 */
	function __add(id, normalImg, hoverImg)
	{
		var count = this.items.length;
		var item = new THoverItem(id, normalImg, hoverImg);
		this.items[count] = item;
	}
	THoverItemList.prototype.add = __add;

	/**
	 * IMG エレメント情報配列より指定の ID を持った要素を検索して返却します。
	 * 見つからなかった場合 null を返却します。
	 * @param id 検索したい ID
	 * @return 検索した IMG エレメント情報
	 */
	function __findById(id)
	{
		var count = this.items.length;
		for (var nx = 0; nx < count; nx++) {
			if (this.items[nx].id == id) {
				return this.items[nx];
			}
		}
		return null;
	}
	THoverItemList.prototype.findById = __findById;

	/**
	 * 指定された IMG オブジェクトの画像をホバー状態に更新します。
	 * 成功した場合には 0 を、失敗した場合には -1 を返却します。
	 * @param obj IMG オブジェクト
	 * @return 処理結果
	 */
	function __enter(obj)
	{
		var item = null;
		if (item = this.findById(obj.id)) {
			obj.src = item.hoverImg.src;
			return 0;
		}
		return -1;
	}
	THoverItemList.prototype.enter = __enter;

	/**
	 * 指定された IMG オブジェクトの画像を標準状態に更新します。
	 * 成功した場合には 0 を、失敗した場合には -1 を返却します。
	 * @param obj IMG オブジェクト
	 * @return 処理結果
	 */
	function __exit(obj)
	{
		var item = null;
		if (item = this.findById(obj.id)) {
			obj.src = item.normalImg.src;
			return 0;
		}
		return -1;
	}
	THoverItemList.prototype.exit = __exit;

	return this;
}

/** ホバー画像を管理する THoverItemList クラスの標準インスタンスです。 */
var HoverItemList = null;

/**
 * 標準の OnLoad 手続きの前後に引き続き呼び出される OnLoad 手続きを保持します。
 * 例)
 *   function OnBeforeOnLoad()
 *   {
 *       alert("テスト");
 *   }
 *   OnBeforeOnLoadProc = function() { OnBeforeOnLoad(); }
 */
var OnBeforeOnLoadProc = null;
var OnAfterOnLoadProc = null;

/**
 * 指定の ID を持っている IMG エレメントに、ホバー時の画像切り替え処理を追加します。
 * 設定が成功した場合には 0 を、失敗した場合には -1 を返します。
 * @param id IMG エレメントの ID
 * @param normalImg 状態での画像 URIs
 * @param hoverImg 状態での画像 URIs
 * @return 処理結果
 */
function setHoverImage(id, normalImg, hoverImg)
{
	var obj = document.getElementById(id);
	if (obj) {
		HoverItemList.add(id, normalImg, hoverImg);
		obj.onmouseover = function() { HoverItemList.enter(this); }
		obj.onmouseout = function() { HoverItemList.exit(this); }
		return 0;
	}
	return -1;
}

/** モーダルウインドウをエミュレーションするためのワーク変数です。 */
var modalWO = null;

/**
 * 子ウインドウを開きます。
 * ブラウザが IE の場合、JScript 専用のメソッドを利用します。
 * IE 以外の場合、モーダルウインドウは基本的に利用できません。
 * 現行の Mozilla ではモーダルウインドウをエミュレートします。
 * @param sURIs 開く URIs
 * @param bModal モーダルウインドウとするか否かを真偽値で指定
 * @param bCenter 親ウインドウの中央を算出して表示するか否かを真偽値で指定
 * @param sName ウインドウ名
 * @param iWidth ウインドウの幅
 * @param iHeight ウインドウの高さ
 */
function openChild(sURIs, bModal, bCenter, sName, iWidth, iHeight)
{
	bModal = bModal ? 1 : 0;
	sName = sName||"_blank";
	iWidth = iWidth||640;
	iHeight = iHeight||480;
	bCenter = bCenter ? 1 : 0;
	if (agIsIE) {
		/* IE の場合の特殊処理 */
		var sFeatures = "";
		sFeatures += "resizable:yes;scroll:yes;status:yes";
		sFeatures += ";dialogWidth:" + iWidth + "px";
		sFeatures += ";dialogHeight:" + iHeight + "px";
		sFeatures += ";center:" + (bCenter ? "yes" : "no");
		if (bModal) {
			// Security hole !!
			window.showModalDialog(sURIs, "", sFeatures);
		} else {
			window.showModelessDialog(sURIs, "", sFeatures);
		}
	} else {
		/* その他の場合の汎用処理 */
		var sOptions = "";
		sOptions += "toolbar=0,location=0,directories=0,status=1,menubar=0,resizeable=1,scrollbars=1";
		sOptions += ",width=" + iWidth;
		sOptions += ",height=" + iHeight;
		if (bCenter) {
			sOptions += ",top=" + (top.screenY + (top.outerHeight - iHeight) / 2);
			sOptions += ",left=" + (top.screenX + (top.outerWidth - iWidth) / 2);
		}
		sOptions += ",dependent=1";
		sOptions += ",dialog=1";
		// Need Signed Script !!
		// if (bModal) { sOptions += ",modal=1"; }
		var WO = window.open(sURIs, sName, sOptions);
		WO.focus();
		if (agIsMZ && bModal) {
			/* Mozilla でモーダルウインドウを実行する場合のエミュレーション処理 */
			modalWO = WO;
			window.onfocus = new Function("if (modalWO) { if (! modalWO.closed) { modalWO.focus(); return; } } top.onfocus = \"\";");
		}
	}
}

/**
 * BODY エレメントの OnLoad イベントで標準的に呼び出されるイベントハンドラです。
 */
function bodyOnLoad()
{
	// OnLoad 前イベント
	if (OnBeforeOnLoadProc) { OnBeforeOnLoadProc(); }

	// 標準の画像設定
	HoverItemList = new THoverItemList();
	setHoverImage("idSiteNaviWwwImg", "/common/img/sitesel/www.gif", "/common/img/sitesel/www_hover.gif");
	setHoverImage("idSiteNaviIamImg", "/common/img/sitesel/iam.gif", "/common/img/sitesel/iam_hover.gif");
	setHoverImage("idSiteNaviTechsolImg", "/common/img/sitesel/techsol.gif", "/common/img/sitesel/techsol_hover.gif");
	setHoverImage("idSiteNaviDelphiImg", "/common/img/sitesel/delphi.gif", "/common/img/sitesel/delphi_hover.gif");
	setHoverImage("idSiteNaviDollfieImg", "/common/img/sitesel/dollfiedream.gif", "/common/img/sitesel/dollfiedream_hover.gif");

	setHoverImage("idNaviUpImg", "/common/img/navi/up.gif", "/common/img/navi/up_hover.gif");
	setHoverImage("idNaviFirstImg", "/common/img/navi/first.gif", "/common/img/navi/first_hover.gif");
	setHoverImage("idNaviPrevImg", "/common/img/navi/prev.gif", "/common/img/navi/prev_hover.gif");
	setHoverImage("idNaviNextImg", "/common/img/navi/next.gif", "/common/img/navi/next_hover.gif");
	setHoverImage("idNaviLastImg", "/common/img/navi/last.gif", "/common/img/navi/last_hover.gif");

	// rel 属性に "external" が設定されている A エレメントの target 属性に "_blank" を設定する
	// HTML4.01 STRICT にはフレーム関連の属性が定義されていないので、緊急回避策
	if (document.getElementsByTagName) {
		var anchors = document.getElementsByTagName("a");
		for (var nx = 0; nx < anchors.length; nx++) {
			var anchor = anchors[nx];
			if (anchor.getAttribute("href")) {
				if (anchor.getAttribute("rel") == "external") {
					anchor.target = "_blank";
				} else
				if (anchor.getAttribute("rel") == "body") {
					anchor.target = "_top";
				}
			}
		}
	}

	// OnLoad 後イベント
	if (OnAfterOnLoadProc) { OnAfterOnLoadProc(); }
}
