/**
 * Thienminh.com :: The Show network pro
 * Javascript Class
 * 
 * @package    Thienminh.com
 * @author     banhthidiem <banhthidiem@gmail.com>
 * @copyright  2007 Bach Khoa Computer Inc.
 * @version    $Id: Menu.js, v1.0 2007/04/05
 */


var myMenu = {
	
	idSpanDisTool	: "",
	menuTool		: [],
	numInOrRe		: 10,
	timeOutSecond	: 50,
	oTimeOutHide	: null,
	oTimeOutShow	: null,
	idObjMouseOver	: "",
	idTableList		: "tableList",
	idOldMenu		: "",
	stopNow			: true,
	
	Init : function Init(idSpanDisTool, menuTool)
	{
		DetectEnvironment.detect();
		this.idSpanDisTool = idSpanDisTool;
		this.menuTool = menuTool;		
		this.CreateStyleMenu();
		this.CreateMenu();
		addEvent(document, "mouseover", this.DocMouseOver);
		//addEvent(document, "mouseout", this.HideListMenu);
	},
	
	CreateStyleMenu : function CreateStyleMenu()
	{
		var cssStr = ".TextTool{color:#FFFFFF; text-align:center; font-weight:bold;	width:158px; cursor:pointer;}";
		cssStr += ".SubTextClick{color:#FF9900; cursor:pointer; border-color:#FFFFFF; border-style:solid; border-width:1px}";
		cssStr += ".SubTextOut{text-indent:15px; background-image:url(Images/Home/dot_2.gif); background-repeat:no-repeat; color:#99CC33; cursor:pointer; border-color:#FFFFFF; border-style:solid; border-width:1px}";
		cssStr += ".SubTextOver{text-indent:15px; background-image:url(Images/Home/dot_3.gif); background-repeat:no-repeat; color:#FF6633; cursor:pointer; border-color:#999900; border-style:solid; border-width:1px}";
		var eStyle = document.createElement("STYLE");
		eStyle.setAttribute("type", "text/css");
		if(eStyle.styleSheet)
		{
			// IE
			eStyle.styleSheet.cssText = cssStr;
		}
		else 
		{
			// w3c
			var cssText = document.createTextNode(cssStr);
			eStyle.appendChild(cssText);
		}
		document.getElementById(this.idSpanDisTool).appendChild(eStyle);
	},
	
	ListIsEmpty : function ListIsEmpty(o)
	{
		var i, v;
		if (typeof(o) === "object") 
		{
			for (i in o) 
			{
				v = o[i];
				if (v !== undefined && typeof(v) !== "function") 
				{
					return false;
				}
			}
		}
		return true;
	},
	
	GetLength : function GetLength(o)
	{
		var num = 0, i, v;
		for (i in o) 
		{
			v = o[i];
			if (v !== undefined && typeof(v) !== "function") 
			{
				num += 1;
			}
		}
		return num;
	},
	
	GetNumInStr : function GetNumInStr(s)
	{
		var so = "";
		for (var i = 0; i < s.length; i++) 
		{
			if (!isNaN(s.charAt(i)))	so += s.charAt(i);
		}
		return parseInt(so);
	},
	
	CreateMenu : function CreateMenu()
	{
		var eTR = document.createElement("TR");
		var menuLength = this.GetLength(this.menuTool);
		var i = 1;
		
		for (var key in this.menuTool)
		{
			var eTD = document.createElement("TD");
			eTD.id = key;
			eTD.identifyMenu = key;
			eTD.className = "TextTool";
			var linkPage = "";
			for (var subKey in this.menuTool[key])
			{
				linkPage = this.menuTool[key][subKey];
				eTD.innerHTML = subKey;
				break;
			}
			eTD.linkPage = linkPage;
			addEvent(eTD, "click", this.ClickItem);
			/*
			if (this.GetLength(this.menuTool[key]) == 1)
			{
				eTD.linkPage = linkPage;
				addEvent(eTD, "click", this.ClickItem);
				//addEvent(eTD, "mouseover", this.ShowListMenu);
				//addEvent(eTD, "mouseout", this.HideListMenu);
			}
			*/
			eTR.appendChild(eTD);
			if (i < menuLength)
			{
				eTD = document.createElement("TD");
				eTD.style.textAlign = "center";
				eTD.style.width = "2px";
				eTD.innerHTML = "<img src='Images/Home/sep_1.gif' width='2' height='21'>";
				eTR.appendChild(eTD);
			}
			i += 1;
		}
		var eTBody = document.createElement("TBODY");
		eTBody.appendChild(eTR);
		var eTable = document.createElement("TABLE");
		
		eTable.appendChild(eTBody);
		document.getElementById(this.idSpanDisTool).appendChild(eTable);
	},
	
	DocMouseOver : function DocMouseOver(evt)
	{
		if (!evt) evt = event;
		var element = getTargetElement(evt);//alert(element.id + myMenu.idTableList);
		if (!element.identifyMenu)
		{
			myMenu.HideListMenu();
		}
		else
		{
			if (myMenu.idTableList != element.identifyMenu)
			{
				if (myMenu.idOldMenu != element.id)
				{
					myMenu.ShowListMenu(element);
				}
				else
				{
					if (document.getElementById(myMenu.idTableList))
					{
						myMenu.IncreaseOpacity();
					}
					else
					{
						myMenu.ShowListMenu(element);
					}
				}
			}
		}
		//if (myMenu.ListIsEmpty(myMenu.menuTool[element.id])) return;
		//if (myMenu.ListIsEmpty(myMenu.menuTool[element.id])) return;
	},
	
	HideListMenu : function HideListMenu()
	{
		this.stopNow = false;
		this.ReduceOpacity();
	},
	
	ShowListMenu : function ShowListMenu(element)
	{
	try{
		this.stopNow = true;
		this.idOldMenu = element.id;
		this.RemoveListIfExist();
		var eTable = document.createElement("TABLE");
		eTable.cellSpacing = "1px";
		eTable.cellPadding = "3px";
		eTable.style.position = "absolute";
		this.SetOpacity(eTable, 0);
		
		var pos = Layout.element.getPos(element);
		eTable.style.top = (pos.Y + element.offsetHeight) + "px";
		eTable.style.left = pos.X + "px";
		eTable.style.backgroundColor = "#FFFFFF";
		
		eTable.id = this.idTableList;
		eTable.identifyMenu = this.idTableList;
		//addEvent(eTable, "mouseout", this.TableMouseOut);
		//addEvent(eTable, "mouseover", this.TableMouseOver);
		document.body.appendChild(eTable);
		var r, c, j = 0;
		
		for (var subKey in myMenu.menuTool[element.id])
		{
			j += 1;
			if (j == 1) continue;
			var r = eTable.insertRow(-1);
			r.style.backgroundColor = "#FFFFFF";
			r.identifyMenu = this.idTableList;
			var c = r.insertCell(-1);
			c.className = "SubTextOut";
			c.innerHTML = subKey;
			c.id = "td_" + j;
			if (element.offsetWidth > c.offsetWidth)
				c.style.width = (element.offsetWidth - 8) + "px";
			c.linkPage = this.menuTool[element.id][subKey];
			c.identifyMenu = this.idTableList;
			addEvent(c, "mouseover", this.MouseOverItem);
			addEvent(c, "mouseout", this.MouseOutItem);
			addEvent(c, "click", this.ClickItem);
		}
		
		this.IncreaseOpacity();
		}
		catch (er)
		{alert(er)}
	},
	
	RemoveListIfExist : function RemoveListIfExist()
	{
		if (document.getElementById(this.idTableList))
		{
			clearTimeout(this.oTimeOutHide);
			document.body.removeChild(document.getElementById(this.idTableList));
		}
	},
	
	ReduceOpacity : function ReduceOpacity()
	{
		clearTimeout(this.oTimeOutShow);
		var oTool = document.getElementById(this.idTableList);
		if (!oTool || this.stopNow)
		{
			clearTimeout(this.oTimeOutHide);
			if (this.stopNow)
				this.IncreaseOpacity();
			return;
		}
		var value = this.GetOpacity(oTool) - this.numInOrRe;
		if (value < 0)
		{
			this.RemoveListIfExist();
			return;
		}
		this.SetOpacity(oTool, value);
		this.oTimeOutHide = setTimeout("myMenu.ReduceOpacity()", this.timeOutSecond);
	},
	
	IncreaseOpacity : function IncreaseOpacity()
	{
		this.stopNow = true;
		clearTimeout(this.oTimeOutHide);
		var oTool = document.getElementById(this.idTableList);
		if (!oTool)
		{
			clearTimeout(this.oTimeOutShow);
			return;
		}
		var value = this.GetOpacity(oTool) + this.numInOrRe;
		if (value > 100)
		{
			clearTimeout(this.oTimeOutShow);
			return;
		}
		this.SetOpacity(oTool, value);
		this.oTimeOutShow = setTimeout("myMenu.IncreaseOpacity()", this.timeOutSecond);
	},
	
	SetOpacity : function SetOpacity(o, v)
	{
		if (DetectEnvironment.isIE())
		{
			o.style.filter = "alpha(opacity = " + v + ")";
		}
		else if (DetectEnvironment.isFirefox())
		{
			o.style.MozOpacity = v / 100;
		}
	},
	
	GetOpacity : function GetOpacity(o)
	{
		if (DetectEnvironment.isIE())
		{
			return this.GetNumInStr(o.style.filter);
		}
		else if (DetectEnvironment.isFirefox())
		{
			return o.style.MozOpacity * 100;
		}
	},
	
	ClickItem : function ClickItem(evt)
	{
		if (!evt) evt = event;
		var element = getTargetElement(evt);
		//element.className = "SubTextClick";
		document.location.replace(element.linkPage);
	},
	
	MouseOverItem : function MouseOverItem(evt)
	{
		if (!evt) evt = event;
		var element = getTargetElement(evt);
		element.className = "SubTextOver";
		myMenu.IncreaseOpacity();
	},
	
	MouseOutItem : function MouseOutItem(evt)
	{
		if (!evt) evt = event;
		var element = getTargetElement(evt);
		element.className = "SubTextOut";
		myMenu.ReduceOpacity();
	}
};