// グローバル変数初期設定
ie = (document.all)?true:false; //IE判別用
timer = null; //メニュー消去用タイマー
eObj = null; //イベント発生オブジェクト格納用

// 関数init(): プルダウンメニュー初期設定
function init() {
	// ドキュメント内のul要素を探す
	ul = document.getElementsByTagName("ul");
	for (i=0; i<ul.length; i++) {
		// class名が「pulldownMenu」であるul要素を探す
		if (ul[i].className == "pulldownMenu"){
			// li要素を探す
			li = ul[i].getElementsByTagName("li");
			for (j=0; j<li.length; j++) {
				// li要素のmouseover時に関数mOverを割り当てる
				li[j].onmouseover = mOver;
				// li要素内にネストされているul要素を探す
				nested = li[j].getElementsByTagName("ul");
				// ul要素がネストされていたら親のli要素に右向き矢印を付ける
				if (nested.length>0) {
					li[j].className = "arrow mouseout";
					// ネストされたul要素を非表示にする
					for (k=0; k<nested.length; k++) {
						nested[k].className = "none";
					}
				}
				else {
					li[j].className = "mouseout";
				}
			}
		}
	}
	// プルダウンメニュー以外のエリアでのmouseover時に関数dOverを割り当てる
	document.onmouseover = dOver;
	// 別ページへの移動時に関数allClearを割り当てる
	document.body.onunload = allClear;
}

// 関数mOver(): li要素のmouseover時処理
function mOver(e) {
	// 稼働中のタイマーがあればクリア
	clearTimeout(timer);
	// イベントが発生したli要素を特定する
	eObj = (ie)?event.srcElement:e.target;
	while (eObj.tagName != "LI") {
		eObj = eObj.parentNode;
	}
	// li要素のスタイルをmouseover時用classに切り替える
	eObj.className = eObj.className.replace(/mouseout/,"mouseover");
	// mouseoverしていない他のli要素の表示を初期化する
	mOut = eObj.parentNode.childNodes;
	for (i=0; i<mOut.length; i++) {
		if (mOut[i].tagName =="LI" && mOut[i] != eObj) {
			mOut[i].className = mOut[i].className.replace(/mouseover/,"mouseout");
			nested = mOut[i].getElementsByTagName("ul");
			for (j=0; j<nested.length; j++) {
				li = nested[j].getElementsByTagName("li");
				for (k=0; k<li.length; k++) {
					li[k].className = li[k].className.replace(/mouseover/,"mouseout");
				}
				nested[j].className = "none";
			}
		}
	}
	// mouseoverしたli要素内にネストされているul要素を表示する
	for (i=0; i<eObj.childNodes.length; i++) {
		if (eObj.childNodes[i].tagName == "UL") {
			li = eObj.childNodes[i].getElementsByTagName("li");
			for (j=0; j<li.length; j++) {
				li[j].className = li[j].className.replace(/mouseover/,"mouseout");
			}
			nested = eObj.childNodes[i].getElementsByTagName("ul");
			for (j=0; j<nested.length; j++) {
				nested[j].className = "none";
			}
			eObj.childNodes[i].className = "block";
		}
	}
	// これ以降のmouseoverイベントの伝播を停止する
	if (ie) event.cancelBubble = true;
	else e.stopPropagation();
}

// 関数dOver(): プルダウンメニュー以外のエリアでのmouseover時処理
function dOver() {
	// 稼働中のタイマーがあればクリア
	clearTimeout(timer);
	// mouseoverしていたli要素のスタイルをmouseout時用classに切り替える
	if (eObj && !eObj.getElementsByTagName("ul").length) {
		eObj.className = eObj.className.replace(/mouseover/,"mouseout");
	}
	// タイマーで1秒後にプルダウンメニューを初期化する
	timer = setTimeout("allClear()",1000);
}

// 関数allClear(): プルダウンメニュー初期化
function allClear() {
	ul = document.getElementsByTagName("ul");
	for (i=0; i<ul.length; i++) {
		if(ul[i].className == "pulldownMenu"){
			li = ul[i].getElementsByTagName("li");
			for (j=0; j<li.length; j++) {
				li[j].className = li[j].className.replace(/mouseover/,"mouseout");
				nested = li[j].getElementsByTagName("ul");
				for (k=0; k<nested.length; k++) {
					nested[k].className = "none";
				}
			}
		}
	}
}

//window読み込み完了時に関数init()を実行
if (document.getElementById) window.onload = init;
