/**
 * Javascript
 * 
 * @author     banhthidiem <banhthidiem@gmail.com>
 * @copyright  2007 Bach Khoa Computer Inc.
 * @version    $Id: MenuShow.js, v1.0 2007/11/1
 */
 
function CreateMenu$BTD(util, pathImgSpacer, myName, listItems, style, menuPos)
{
	this.util = util;
	this.myName = myName;
	this.style = style;
	this.listItems = listItems;
	this.menuPos = menuPos;
	
	this.timerHideList = 2000;
	this.itemChoose = null;
	this.pathImgSpacer = pathImgSpacer;
};

CreateMenu$BTD.prototype = 
{
	createRoot : function(e)
	{
		var p = this.util.getPositionMenuByMouse(e, this.menuPos);
		this.oOut = this.createContainerList(this.myName, this.listItems);
		if (p != this.menuPos)
		{
			var s;
			if (p == "left") s = "_2";
			else s = "_1";
			if (s != this.style)
			{
				this.oOut.className = "menu" + s;
				this.util.changeStyleAll(this.oOut, this.style, s, "menu");
				this.style = s;
			}
			this.menuPos = p;
		}
		var elPos = this.util.mouseCoordsAndPosEl(e, this.oOut);
		this.oOut.style.top = elPos.Y + "px";
		this.oOut.style.left = elPos.X + "px";
	},
	
	createContainerList : function(id, listItems)
	{
		var o = this.util.getElById("ContainerList" + id);
		if (o == null)
		{
			o = this.util.createEl("DIV");
			o.id = "ContainerList" + id;
			o.className = "menu" + this.style;
			this.createItemsList(o, listItems);
			this.util.d.body.appendChild(o);
		}
		o.style.visibility = "visible";
		return o;
	},

	changeStyleNow : function(style)
	{
		if (this.style == style) return;
		this.util.changeStyleAll(this.oOut, this.style, style, "menu");
		this.style = style;
	},
	
	createItemsList : function(o, list)
	{
		for (var i = 0; i < list.length; i++)
		{
			var item = list[i];
			if (!item.isChild)
			{
				o.appendChild(this.createItemParent(item));
			}
			else
			{
				o.appendChild(this.createItemChild(item));
			}
		}
	},
	
	clearTimer : function(oTimer)
	{
		if(oTimer)
		{
			clearTimeout(oTimer);
			oTimer = null;
		}
	},
	
	createItemParent : function(item)
	{
		var o = this.util.createEl("DIV");
		o.id = this.myName + "ItemParent_" + item.id;
		o.className = "menuItemParent" + this.style;
		this.util.createAttribute(o, "menuLevel", item.level);
		o.appendChild(this.createImgSpacer(10, 1, ""));
		if (item.urlIcon != "") o.appendChild(this.createImgIcon(item.id, item.urlIcon));
		else o.appendChild(this.createImgSpacer(10, 1, ""));
		o.appendChild(this.createText(item.content));
		var self = this;
		this.util.addEvent(o, "mouseover", function() { self.itemMenuOver(o, item); });
		this.util.addEvent(o, "mouseout", function() { self.itemMenuOut(o, item); });
		return o;
	},
	
	createItemChild : function(item)
	{
		var o = this.util.createEl("DIV");
		o.id = this.myName + "ItemChild_" + item.id;
		o.className = "menuItemChild" + this.style;
		this.util.createAttribute(o, "menuLevel", item.level);		
		o.appendChild(this.createImgSpacer(10, 10, (item.checked ? "checkIcon" : ""), this.myName + "CheckIcon_" + item.id));
		if (item.urlIcon != "") o.appendChild(this.createImgIcon(item.id, item.urlIcon));
		else o.appendChild(this.createImgSpacer(10, 1, ""));
		o.appendChild(this.createText(item.content));
		var self = this;
		this.util.addEvent(o, "mouseover", function() { self.itemChildMenuOver(o, item); });
		this.util.addEvent(o, "mouseout", function() { self.itemChildMenuOut(o, item); });
		this.util.addEvent(o, "click", function() { self.itemChildMenuClick(item); });
		return o;
	},
	
	createImgSpacer : function(w, h, className, id)
	{
		var o = this.util.createEl("IMG");
		o.id = id;
		o.src = this.pathImgSpacer;
		o.width = w;
		o.height = h;
		o.className = className;
		return o;
	},
	
	createImgIcon : function(id, src)
	{
		var o = this.util.createEl("IMG");
		o.id = this.myName + "ImgIcon_" + id;
		o.src = src;
		return o;
	},
	
	createText : function(text)
	{;
		var o = this.util.createEl("SPAN");
		o.innerHTML = text;
		return o;
	},
	
	setClassOut : function(obj)
	{
		var listChilds = obj.childNodes;
		for (var i = 0; i < listChilds.length; i++)
		{
			if (listChilds[i].className == "menuItemParent_over" + this.style)
				listChilds[i].className = "menuItemParent" + this.style;
		}
	},
	
	hideAll : function(e)
	{
		var targetObj = this.util.getTargetElement();
		if (targetObj && targetObj.menuLevel != null) return;
		if (targetObj && targetObj.parentNode != null && targetObj.parentNode.menuLevel != null) return;
		this.hideRoot();
	},
	
	hideRoot : function()
	{
		this.hideParent(this.itemChoose, -1);
		if (this.oOut) this.hideChild(this.oOut);
	},
	
	hideParent : function(item, level)
	{
		while (item && item.level != level)
		{
			if (item.elChild)
			{
				this.hideChild(item.elChild);
			}
			if (item.elNow)
			{
				this.setClassOut(item.elNow.parentNode);
				this.hideChild(item.elNow.parentNode);
			}
			item = item.parent;
		}
	},
	
	showChild : function(elParent, item)
	{
		var elChild = this.createContainerList(item.id, item.listChild);
		if (this.itemChoose && 
			this.itemChoose.elChild && 
			this.itemChoose.elChild != elChild && 
			this.itemChoose.elChild != elParent.parentNode)
		{
			this.hideChild(this.itemChoose.elChild);
		}
		var pos = this.util.coordsElChildByParent(elChild, elParent, this.menuPos);
		elChild.style.top = pos.Y + "px";
		elChild.style.left = pos.X + "px";
		item.elNow = elParent;
		item.elChild = elChild;
		this.itemChoose = item;
	},
	
	hideChild : function(el)
	{
		el.style.visibility = "hidden";
		el.style.top = "-1000px";
		el.style.left = "-1000px";
	},
	
	itemMenuOver : function(obj, item)
	{
		this.setClassOut(obj.parentNode);
		obj.className = "menuItemParent_over" + this.style;
		if (this.itemChoose && item.level < this.itemChoose.level)
			this.hideParent(this.itemChoose, item.level);
		this.showChild(obj, item);
	},

	itemMenuOut : function(obj)
	{
		//if (obj.className == "menuItemParent_over" + this.style) return;
		//obj.className = "menuItemParent" + this.style;
	},
	
	itemChildMenuOver : function(obj, item)
	{
		this.clearTimer(this.oTime);
		this.setClassOut(obj.parentNode);
		obj.className = "menuItemChild_over" + this.style;
		if (this.itemChoose && item.level < this.itemChoose.level)
			this.hideParent(this.itemChoose, item.level);
		if (this.itemChoose && 
			this.itemChoose.elChild && 
			this.itemChoose.elChild != obj.parentNode)
		{
			this.hideChild(this.itemChoose.elChild);
		}
		eval(item.url);
	},

	itemChildMenuOut : function(obj, item)
	{
		obj.className = "menuItemChild" + this.style;
		var itemIsChecked = item.getItemIsChecked();
		this.oTime = setTimeout("eval(" + itemIsChecked.url + ");", 1000);
	},
	
	itemChildMenuClick : function(item)
	{
		var itemIsChecked = item.getItemIsChecked();
		if (itemIsChecked != item)
		{
			itemIsChecked.checked = false;
			this.util.getElById(this.myName + "CheckIcon_" + itemIsChecked.id).className = "";
			item.checked = true;
			this.util.getElById(this.myName + "CheckIcon_" + item.id).className = "checkIcon";
			eval(item.url);
		}
		this.hideRoot();
	}
};
