var ExpandingMenu = {
	RootElement : Object,
	ActiveSectionId : String,
	Init : function(_rootElementId, _activeSectionId) 
	{
		this.RootElement = YAHOO.util.Dom.get(_rootElementId);
		// Hide the icons of the last child in the hierachy
		this.ClearIcons(this.RootElement);
		if(YAHOO.util.Dom.get(_activeSectionId) != undefined)
		{
			this.ActiveSectionId = YAHOO.util.Dom.get(_activeSectionId).value;
			this.Run();
		}
	},
	Run : function()
	{	
		if(this.ActiveSectionId != null)
		{
			var activeBranchFound = false;
			for(var i=0;i<this.RootElement.childNodes.length;i++)
			{
				var currentNode = this.RootElement.childNodes[i];
				if(currentNode.nodeName == "LI")
				{
					for(var j=0;j<currentNode.childNodes.length;j++)
					{
						if(currentNode.childNodes[j].nodeName == "A")
						{
							var linkElement = currentNode.childNodes[j];
							// check if active section id = a id
							if(linkElement.id == this.ActiveSectionId)
							{
								//alert('isActiveBranch');
								activeBranchFound= true;
								if(currentNode.childNodes[j+1].nodeName == "IMG")
									this.ShowCloseIcon(currentNode.childNodes[j+1]);
							}
						}
						else if(currentNode.childNodes[j].nodeName == "UL")
						{
							// else check if child is active
							var nestedListElement = currentNode.childNodes[j];
							// check if active section id = a id
							if(activeBranchFound)
							{
								nestedListElement.style.display = 'block';
								return;
							}
							else
							{
								var activeChildElement = this.GetActiveChild(nestedListElement);
								if(activeChildElement != null)
								{
									if(linkElement.nextSibling.nodeName == "IMG")
										this.ShowCloseIcon(linkElement.nextSibling);
										
									this.ShowParentList(activeChildElement);
									this.ShowChildList(activeChildElement);
									return;
								}
							}
						}
					}
				}
			}
		}
	},
	SiblingsHaveProduct : function(listItem)
	{
		var returnValue = false;
		for(var c=0;c<listItem.childNodes.length;c++)
		{
			if(listItem.childNodes[c].nodeName == "A")
			{
				if(listItem.lastChild.nodeName != "UL")
					returnValue = true;
			}
		}
		return returnValue;
	},
	GetActiveChild : function(listRoot)
	{
		var returnElement = null;
		for(var i=0;i<listRoot.childNodes.length;i++)
		{
			var currentNode = listRoot.childNodes[i];
			//find first li
			if(currentNode.nodeName == "LI")
			{
				// find first a
				for(var j=0;j<currentNode.childNodes.length;j++)
				{
					if(currentNode.childNodes[j].nodeName == "A")
					{
						var linkElement = currentNode.childNodes[j];
						// check if active section id = a id
						if(linkElement.id == this.ActiveSectionId)
						{
							returnElement = linkElement;
							
							if(linkElement.nextSibling.nodeName == "IMG")
								this.ShowCloseIcon(linkElement.nextSibling);
							
							return returnElement;
						}
					}
					else if(currentNode.childNodes[j].nodeName == "UL")
					{
						var nestedListElement = currentNode.childNodes[j];
						returnElement = this.GetActiveChild(currentNode.childNodes[j]);
						if(returnElement != null)
							return returnElement;
					}
				}
			}
		}
		return returnElement;
	},
	ShowParentList : function(linkElement)
	{
		if(linkElement)
		{
			if(linkElement.parentNode.nodeName == "LI")
			{
				var listItem = linkElement.parentNode;
				if(listItem.parentNode.nodeName == "UL")
				{
					var parentList = listItem.parentNode;
					parentList.style.display = 'block';
					if(parentList.parentNode)
					{
						if(parentList.parentNode.nodeName == "LI")
						{
							if(listItem.parentNode.previousSibling.previousSibling.previousSibling.nodeName == "IMG")
									this.ShowCloseIcon(listItem.parentNode.previousSibling.previousSibling.previousSibling);
							
							var parentUL = parentList.parentNode.parentNode
							for(var i=0;i<parentUL.childNodes.length;i++)
							{
								if(parentUL.childNodes[i].nodeName == "LI")
								{
									var parentLI = parentUL.childNodes[i];
									for(var j=0;j<parentLI.childNodes.length;j++)
									{
										if(parentLI.childNodes[j].nodeName == "A")
											this.ShowParentList(parentLI.childNodes[j]);
									}
								}
							}
						}
					}
				}
			}
		}
	},
	ShowChildList : function(linkElement)
	{
		var hasChildList = false;
		if(linkElement)
		{
			if(linkElement.parentNode.nodeName == "LI")
			{
				for(var j=0;j<linkElement.parentNode.childNodes.length;j++)
				{
					if(linkElement.parentNode.childNodes[j].nodeName == "UL")
					{
						var childList = linkElement.parentNode.childNodes[j];
						childList.style.display = 'block';
					}
				}			
			}
		}
	},
	OnMenuItemClick : function(btn, menuElement)
	{
		if(menuElement.parentNode.nodeName == "LI")
		{
			// Getting LI
			var listItem = menuElement.parentNode;
			for(var i=0;i<listItem.childNodes.length;i++)
			{
				if(listItem.childNodes[i].nodeName == "UL")
				{
					var listElement = listItem.childNodes[i];
					if(listElement != this.RootElement)
					{
						if(listElement.style.display == 'block')
						{
							this.ShowOpenIcon(btn);
							listElement.style.display = 'none';
						}
						else
						{
							this.ShowCloseIcon(btn);
							listElement.style.display = 'block';
						}
					}
				}
			}
		}
	},
	ShowOpenIcon : function(btn)
	{
		btn.src = 'icon-open.gif';
	},
	ShowCloseIcon : function(btn)
	{
		btn.src = 'icon-close.gif';
	},
	ClearIcons : function(parentList)
	{
		var hasActiveChild = false;
		for(var i=0;i<parentList.childNodes.length;i++)
		{
			var listItem = parentList.childNodes[i];
			hasActiveChild = this.GetActiveChild(listItem);
			for(var c=0;c<listItem.childNodes.length;c++)
			{
				if(listItem.childNodes[c].nodeName == "A")
				{
					if(listItem.lastChild.nodeName != "UL")
					{
						// This is the last child in the hierachy
						// Hide parent list item
						for(var j=0;j<listItem.childNodes.length;j++)
						{
							if(listItem.childNodes[j].nodeName == "A")
							{
								listItem.childNodes[j].nextSibling.style.visibility = 'hidden';
							}
						}
					}
					else if(listItem.lastChild.nodeName == "UL")
					{
						this.ClearIcons(listItem.lastChild);
					}
						
					if(hasActiveChild)
					{
						if(listItem.childNodes[c].nextSibling.nodeName == "IMG")
							this.ShowCloseIcon(listItem.childNodes[c].nextSibling);
					}
				}
				
			}
		}
	}
}

function InitMenu() {
	ExpandingMenu.Init('Menu_Root', 'SID', true);
}

// Initialize on load
YAHOO.util.Event.addListener(window, "load", InitMenu);