var IsLoaded = false;
var ActiveMenuItem;
var Relations = new Array();
var HighlightedPath = new Array();
var ItemsToHide = new Array();
var BaseLevelColors = ['#333699', '#4367c5'];
var OtherLevelColors = ['#EF6B00', '#EE944C'];
var BaseId='';
var TimeOutCode;

function Relation(Child, Parent)
{
	this.Child=Child;
	this.Parent=Parent;
}

function GetLevel(TheItem, TheLevel)
{
     if(TheItem != null)
     {
		if(TheItem.offsetParent != null) 
		{
			if(TheItem.offsetParent.offsetParent != null)
			{
				var Parent = GetParent(TheItem.offsetParent.offsetParent);
			}
			else
			{
				var Parent = GetParent(TheItem.offsetParent);
			}
		}
		else
		{
			var Parent = GetParent(TheItem);
		}
     }
	if(Parent != null)
	{
		TheLevel = GetLevel(Parent, TheLevel + 1);
	}
	return TheLevel;
}

function SetParent(Child, Parent)
{
	Relations[ Relations.length ]= new Relation(Child, Parent);
	var TheLevel = GetLevel(Parent, 0);
	if(TheLevel > 0)
	{
		Child.style.top=Parent.offsetTop + Parent.offsetParent.offsetParent.offsetTop;
	}
	else
	{
		Child.style.top=Parent.offsetTop;
		Parent.style.backgroundColor=BaseLevelColors[0];
	}
}

function GetChild(TheItem)
{
	for(var n in Relations)
	{
		if(Relations[n].Parent.id == TheItem.id)
		{
			return Relations[n].Child;
		}
	}
}

function GetParent(TheItem)
{
	for(var n in Relations)
	{
		if(Relations[n].Child.id == TheItem.id)
		{
			return Relations[n].Parent;
		}
	}
}

function HighlightPath(TheItem)
{
    if(TheItem != null)
   {
	if(GetLevel(TheItem,0) > 0)
	{
		TheItem.style.backgroundColor=OtherLevelColors[1];
	}
	else
	{
		TheItem.style.backgroundColor=BaseLevelColors[1];
	}
	HighlightedPath[ HighlightedPath.length ] = TheItem;
	var Parent = GetParent(TheItem.offsetParent.offsetParent);
	while(Parent != null)
	{
		if(GetLevel(Parent,0) > 0)
		{
			Parent.style.backgroundColor=OtherLevelColors[1];
		}
		else
		{
			Parent.style.backgroundColor=BaseLevelColors[1];
		}
		HighlightedPath[ HighlightedPath.length ] = Parent;
		Parent = GetParent(Parent.offsetParent.offsetParent);
	}
    }
}

function IsHighlighted(TheItem)
{
  for(var n in HighlightedPath)
  {
  	if(TheItem.id == HighlightedPath[ n ].id)
	{
		return true;
	}
  }
}

function TagForHide(TheItem)
{
	ItemsToHide.push(TheItem);
}

function UntagForHide(TheItem)
{
	var TheIndex;
	
	for (var n = 0; n < ItemsToHide.length; n++)
	{
		if (ItemsToHide[ n ] == TheItem)
		{
			TheIndex = n;
		}
	}
	
	if (TheIndex >= 0)
	{
		ItemsToHide.splice(TheIndex, 1);
	}
}

function HighlightItem(TheItem)
{
	if (GetLevel(TheItem, 0) > 0)
	{
		TheItem.style.backgroundColor = OtherLevelColors[1];
	}
	else
	{
		TheItem.style.backgroundColor = BaseLevelColors[1];
	}
}

function UnhighlightItem(TheItem)
{
	if (GetLevel(TheItem, 0) > 0)
	{
		TheItem.style.backgroundColor = OtherLevelColors[0];
	}
	else
	{
		TheItem.style.backgroundColor = BaseLevelColors[0];
	}
}

function HideTagged()
{
	for (var TheItem in ItemsToHide)
	{
		ItemsToHide[TheItem].style.visibility = 'hidden';
	}
	ItemsToHide.splice(0);
}

function ClearLevel(Level)
{
	var TheItem;
	var TheChild;
	
	for (var theIndex in ItemsToHide)
	{
		TheItem = ItemsToHide[theIndex];
		if (GetLevel(TheItem, 0) >= Level)
		{
			TheItem.style.visibility = 'hidden';
			ItemsToHide.splice(theIndex, 1);
		}
	}
}

function DoMouseOver(TheItem)
{
	// Make shure the entire document is loaded before taking any actions
	if(!IsLoaded){return;}
		
	// Highlight the item when its a TR
	if (TheItem.tagName == "TR")
	{
		HighlightItem(TheItem);
	}
	
	// Show the child if there is one
	var TheChild = GetChild(TheItem);
	if (TheChild != null)
	{
		UntagForHide(TheChild);
		ClearLevel(GetLevel(TheChild, 0));
		TheChild.style.visibility = 'visible';
	}

	// Show the parent if there is one
	if (TheItem.tagName == "TR")
	{
		var TheParent = GetParent(TheItem.offsetParent.offsetParent);
	}
	else
	{
		var TheParent = GetParent(TheItem.offsetParent);
	}
	if (TheParent != null)
	{
		UntagForHide(TheParent.offsetParent.offsetParent);
		TheParent.offsetParent.offsetParent.style.visibility = 'visible';
	}
		
	
	// Show the item
	if (TheItem.tagName == "TABLE")
	{
		TheItem.offsetParent.style.visibility = 'visible';
		UntagForHide(TheItem.offsetParent);
	}
	else
	{
		TheItem.offsetParent.offsetParent.style.visibility = 'visible';
		UntagForHide(TheItem.offsetParent.offsetParent);
	}
}

function DoMouseOut(TheItem)
{
	// Make shure the entire document is loaded before taking any actions
	if(!IsLoaded){return;}

	// Unhighlight the item when its a TR
	if (TheItem.tagName == "TR")
	{
		UnhighlightItem(TheItem);
	}

	// Get the child
	var TheChild = GetChild(TheItem);

	if (TheItem.tagName == "TR")
	{	
		// If needed hide the item
		if (GetLevel(TheItem, 0) > 0)
		{
			TagForHide(TheItem.offsetParent.offsetParent);
		}
		
		// If needed hide the parent
		var TheParent = GetParent(TheItem.offsetParent.offsetParent)
		if (TheParent != null)
		{
			DoMouseOut(TheParent);
			if (GetLevel(TheParent, 0) > 0)
			{
				if (TheChild != null)
				{
					TheParent.offsetParent.offsetParent.style.visibility = TheChild.offsetParent.offsetParent.style.visibility;
				}
				else
				{
					TheParent.offsetParent.offsetParent.style.visibility = TheItem.offsetParent.offsetParent.style.visibility;
				}
			}
		}
	}
	
	// Hide the child if there is one
	if (TheChild != null)
	{
		//TheChild.style.visibility = 'hidden';
		TagForHide(TheChild);
	}

	clearTimeout(TimeOutCode);	
	TimeOutCode = setTimeout("HideTagged()", 500);
}
