/**
 * Menu Class
 *
 * @version $Id: Menu.js,v 1.1 2003/10/15 08:24:22 ogata Exp $
 */

function Menu()
{
	/**
	 * chapter list
	 */
	var aChapter = new Array();
	
	/**
	 * text node of current target
	 */
	var currentTarget;
	
	/**
	 * open flag
	 */
	var flag = false;
	
	/**
	 * current brand
	 */
	var current;
	
	/**
	 * get chapter
	 */
	function _getChapter()
	{
		var ulNode = document.getElementById('menu');
		var liNodes = ulNode.childNodes;
		
		for (var i = 0; i < liNodes.length; i++) {
			aChapter[i] = liNodes.item(i);
		}
	}
	
	/**
	 * display section
	 */
	function _display(e)
	{
		if (window.event) {
			e = event;
			var target = e.srcElement;
		} else {
			var target = e.currentTarget;
		}
		
		while (1) {
			if (target.nodeName == 'LI') {
				break;
			}
			target = target.parentNode;
		}
		
		if (e.type == "click") {
			_hidden();
			
			current = target;
			
			var textNode = target.firstChild.firstChild.nodeValue;
			if ((textNode != currentTarget) || !flag) {
				for (var i = 0; i < target.childNodes.length; i++) {
					if (target.childNodes.item(i).nodeName == 'UL') {
						section = target.childNodes.item(i);
					}
				}

				section.style.display = "block";
				
				currentTarget = textNode;
				flag = true;
			} else {
				flag = false;
			}
		}
		
		e.cancelBubble = true;
	}
	
	/**
	 * hidden section
	 */
	function _hidden()
	{
		var menu = document.getElementById('menu');
		var liNodeList = menu.childNodes;
		
		for (var i = 0; i < liNodeList.length; i++) {
			var child = liNodeList.item(i).childNodes;
			for (var j = 0; j < child.length; j++) {
				if (child.item(j).nodeName == 'UL') {
					child.item(j).style.display = "none";
				}
			}
		}
		
		if (current) {
			current.style.color = "#333";
		}
	}
	
	/**
	 * change color
	 */
	function _changeColor(e)
	{
		if (window.event) {
			e = event;
			var target = e.srcElement;
		} else {
			var target = e.currentTarget;
		}
		
		if (target.nodeName != 'LI') {
			target = target.parentNode;
		}
		
		if (e.type == "mouseover") {
			target.style.color = "#c33";
		} else if (e.type == "mouseout") {
			target.style.color = "#333";
		}
		
		if (current) {
			current.style.color = "#c33";
		}
	}
	
	/**
	 * initialization
	 */
	function _init()
	{
		if (document.getElementById) {
			_getChapter();
			
			for (var i = 0; i < aChapter.length; i++) {
				if (window.addEventListener) {
					aChapter[i].addEventListener("click", _display, false);
					aChapter[i].addEventListener("mouseover", _changeColor, false);
					aChapter[i].addEventListener("mouseout", _changeColor, false);
				} else {
					aChapter[i].onclick = _display;
					aChapter[i].onmouseover = _changeColor;
					aChapter[i].onmouseout  = _changeColor;
				}
			}
		}
	}
	
	Menu.prototype.init = _init;
	
	return this;
}
