
function menuC(){
}
menuC.debug = false;
menuC.HIDE_TIMEOUT = 100;
menuC.SLIDE_INTERVAL = 10;
menuC.SLIDE_TIME = 200;
menuC.ELEMENT_NODE = 1;
menuC._i_nodeIdIndex = 0;
menuC.log = function(s_msg){
	if( menuC.debug ){
		o_logTag = document.getElementById("menuC_log");
		if( o_logTag==null ){
			o_logTag = document.createElement("div");
			o_logTag.id = "menuC_log";
			document.body.appendChild(o_logTag);
		}
		o_logTag.innerHTML += s_msg;
	}
}
menuC.getNodeId = function(o_node){
	if( o_node.id=="" ){
		o_node.id = "menuC_nodeid_"+ (++menuC._i_nodeIdIndex);
	}
	return o_node.id;
}
menuC.buildMenu = function(s_layerId){
	var o_layer = document.getElementById(s_layerId);
	var o_subLayer = null;
	for(var k=0;k<o_layer.childNodes.length;k++){
		o_subLayer = o_layer.childNodes.item(k);
		if( o_subLayer.nodeType!=menuC.ELEMENT_NODE ){
			continue;
		}
		if( o_subLayer.tagName=="DIV" ){
			menuC.buildSingleMenu( menuC.getNodeId(o_subLayer) );
 		}else if( o_subLayer.tagName=="UL" || o_subLayer.tagName=="OL" ){
			var nl_rootMenus = o_subLayer.childNodes;
			for(var i=0;i<nl_rootMenus.length;i++){
				if( nl_rootMenus.item(i).nodeType!=menuC.ELEMENT_NODE ){
					continue;
				}
				var o_menuItem = nl_rootMenus.item(i);
				menuC.buildSingleMenu( menuC.getNodeId(o_menuItem) );
			}
		}
	}
}
menuC.buildSingleMenu = function(s_menuItemId){
	var o_menuItem = document.getElementById(s_menuItemId);
	o_menuItem.style.position = "relative";
	var o_rootMenu = null;
	var o_subMenu = null;
	for(var j=0;j<o_menuItem.childNodes.length;j++){
		if( o_menuItem.childNodes.item(j).nodeType==menuC.ELEMENT_NODE ){
			if( o_rootMenu==null ){
				o_rootMenu = o_menuItem.childNodes.item(j);
			}else{
				o_subMenu = o_menuItem.childNodes.item(j);
				break;
			}
		}
	}
	if( o_subMenu==null ){
		return;
	}
	//if( o_subMenu.tagName!="DIV" ){
		var o_buf = o_subMenu;
		o_subMenu = document.createElement("DIV");
		o_subMenu.style.overflow = "hidden";
		o_menuItem.appendChild(o_subMenu);
		o_subMenu.appendChild(o_buf);
		o_buf.style.display = "block";
		o_buf.style.position = "relative";
		o_subMenu.content = o_buf;
		o_subMenu.content.style.top = "-30px";
	//}
	
	o_subMenu.style.position = "absolute";
	o_subMenu.style.top = o_rootMenu.offsetHeight+"px";
	o_subMenu.style.left = 0-o_menuItem.clientLeft+"px";
	o_subMenu.style.display = "none";
	o_subMenu.style.clear = "both";
	o_subMenu.style.zIndex = 100;
	o_subMenu.isOpening = false;
	o_subMenu.isClosing = false;
	o_subMenu.sliding = null;
	o_subMenu.intervalIdOfShow = null;
	o_subMenu.intervalIdOfHide = null;
	o_rootMenu.subMenu = o_subMenu;
	o_subMenu.parentMenu = o_rootMenu;
	o_rootMenu.timeoutId = null;
	menuC.getNodeId( o_rootMenu );
	o_rootMenu.onmouseover = function(){
		this.parentNode.style.zIndex = 1001;
		this.subMenu.style.zIndex = 1001;
		menuC.showSubMenu(this.id);
	}
	o_rootMenu.onmouseout = function(){
		this.parentNode.style.zIndex = 1000;
		this.timeoutIdOfHide = setTimeout("menuC.hideSubMenu('"+this.id+"')",menuC.HIDE_TIMEOUT);
	}
	o_subMenu.onmouseover = function(){
		this.parentNode.style.zIndex = 1001;
		menuC.showSubMenu(this.parentMenu.id);
	}
	o_subMenu.onmouseout = function(){
		this.parentNode.style.zIndex = 1000;
		this.parentMenu.timeoutIdOfHide = setTimeout("menuC.hideSubMenu('"+this.parentMenu.id+"')",menuC.HIDE_TIMEOUT);
	}
}
menuC.showSubMenu = function(s_rootMenuId){
	var o_rootMenu = document.getElementById(s_rootMenuId);
	o_rootMenu.subMenu.sliding = "opening";
	if( o_rootMenu.timeoutIdOfHide!=null ){
		clearTimeout(o_rootMenu.timeoutIdOfHide);
		o_rootMenu.timeoutIdOfHide = null;
	}
	if( o_rootMenu.subMenu.intervalIdOfShow==null ){
		o_rootMenu.subMenu.intervalIdOfShow = setInterval("menuC.sliding('"+s_rootMenuId+"',true)",menuC.SLIDE_INTERVAL);
	}
}
menuC.hideSubMenu = function(s_rootMenuId){
	var o_rootMenu = document.getElementById(s_rootMenuId);
	o_rootMenu.subMenu.sliding = "closing";
	if( o_rootMenu.subMenu.intervalIdOfHide==null ){
		o_rootMenu.subMenu.intervalIdOfHide = setInterval("menuC.sliding('"+s_rootMenuId+"',false)",menuC.SLIDE_INTERVAL);
	}
	o_rootMenu.timeoutIdOfHide = null;
}
menuC.sliding = function(s_rootMenuId, b_open){
	var o_rootMenu = document.getElementById(s_rootMenuId);
	if( b_open && o_rootMenu.subMenu.sliding=="closing" ){
		clearInterval(o_rootMenu.subMenu.intervalIdOfShow);
		o_rootMenu.subMenu.intervalIdOfShow = null;
		return;
	}
	if( !b_open && o_rootMenu.subMenu.sliding=="opening" ){
		clearInterval(o_rootMenu.subMenu.intervalIdOfHide);
		o_rootMenu.subMenu.intervalIdOfHide = null;
		return;
	}
	if( o_rootMenu.subMenu.style.display=="none" ){
		o_rootMenu.subMenu.content.style.top = "-20000px";
		o_rootMenu.subMenu.style.display = "block";
		menuC.log( "o_rootMenu.subMenu.content.offsetWidth= "+o_rootMenu.subMenu.content.offsetWidth+"<BR>" );
		o_rootMenu.subMenu.style.width = o_rootMenu.subMenu.content.offsetWidth+"px";
		o_rootMenu.subMenu.content.style.top = "-"+o_rootMenu.subMenu.content.offsetHeight+"px";
	}
	var i_contentHeight = o_rootMenu.subMenu.content.offsetHeight;
	if( typeof(o_rootMenu.subMenu.content.myOffsetTop)=="undefined" ){
		o_rootMenu.subMenu.content.myOffsetTop = -1*i_contentHeight;
	}
	//var i_contentTop = o_rootMenu.subMenu.content.offsetTop;
	var i_contentTop = o_rootMenu.subMenu.content.myOffsetTop - 0;
	var i_delta = i_contentHeight*menuC.SLIDE_INTERVAL/menuC.SLIDE_TIME;
	menuC.log( i_contentTop+" "+i_delta+"<BR>" );
	if( b_open ){
		if( o_rootMenu.subMenu.intervalIdOfHide!=null ){
			clearInterval(o_rootMenu.subMenu.intervalIdOfHide);
			o_rootMenu.subMenu.intervalIdOfHide = null;
		}
		i_contentTop += i_delta;
		if( i_contentTop > 0 ){
			i_contentTop = 0;
			clearInterval(o_rootMenu.subMenu.intervalIdOfShow);
			o_rootMenu.subMenu.intervalIdOfShow = null;
		}
	}else{
		if( o_rootMenu.subMenu.intervalIdOfShow!=null ){
			clearInterval(o_rootMenu.subMenu.intervalIdOfShow);
			o_rootMenu.subMenu.intervalIdOfShow = null;
		}
		i_contentTop -= i_delta;
		menuC.log( i_contentTop+"px"+"<BR>" );
		if( i_contentTop < -1*i_contentHeight || i_contentTop > 100){
			clearInterval(o_rootMenu.subMenu.intervalIdOfHide);
			o_rootMenu.subMenu.intervalIdOfHide = null;
			o_rootMenu.subMenu.style.display = "none";
		}
	}
	o_rootMenu.subMenu.content.style.top = i_contentTop+"px";
	o_rootMenu.subMenu.content.myOffsetTop = i_contentTop;
}