﻿var EventTrans = 0;
var MaxHop = 5;
var MenuElement;
var MenuChildren;
var ItemCount;
var TotalWidth;
var ItemWidth;
var DivElement;
var ImageElement;

function SetupInitialMenu()
{
	MenuElement = document.getElementById('MenuDiv');
	MenuChildren = GetChildren(MenuElement);
	ItemCount = MenuChildren.length;
	TotalWidth = MenuElement.clientWidth;

	// Remove the amount for the margin (plus a little extra)
	TotalWidth -= 2 * ItemCount;
	TotalWidth -= 5;

	// The '| 0' converts it to an integer
	ItemWidth = (TotalWidth / ItemCount) | 0;

	for(var idx = 0; idx < ItemCount; idx++)
	{
		MenuChildren[idx].style.width = ItemWidth;
	}
	MenuElement.style.visibility = "visible";
}

function ExpandElement(dName, iName, eventTransInstance)
{
	var localEventTrans = eventTransInstance;
	var longest;
	var hop;

	if(localEventTrans == 0)
	{
		localEventTrans = ++EventTrans;
		DivElement = document.getElementById(dName);
		ImageElement = document.getElementById(iName);
		setTimeout("ExpandElement('',''," + localEventTrans + ")", 125);
		return;
	}

	if(localEventTrans != EventTrans)
	{
		return;
	}

	if(DivElement.clientWidth < ImageElement.width)
	{
		hop = ImageElement.width - DivElement.clientWidth;
		if(hop > MaxHop)
		{
			hop = MaxHop;
		}
		DivElement.style.width = (DivElement.clientWidth + hop);
		for(var idx = 0; idx < hop; idx++)
		{
			longest = GetLongest(DivElement);
			longest.style.width = (longest.clientWidth - 1);
		}
		setTimeout("ExpandElement('',''," + localEventTrans + ")", 0);
	}
}

function MakeEven(eventTransInstance)
{
	var localEventTrans = eventTransInstance;
	var longest;
	var shortest;
	var doAgain;

	if(localEventTrans == 0)
	{
		localEventTrans = ++EventTrans;
		setTimeout('MakeEven(' + localEventTrans + ')', 125);
		return;
	}

	if(localEventTrans != EventTrans)
	{
		return;
	}

	doAgain = false;

	for(var idx = 0; idx < MaxHop; idx++)
	{
		longest = GetLongest(null);
		shortest = GetShortest(null);
		if(longest.clientWidth > ItemWidth)
		{
			longest.style.width = (longest.clientWidth - 1);
			doAgain = true;
		}
		if(shortest.clientWidth < ItemWidth)
		{
			shortest.style.width = (shortest.clientWidth + 1);
			doAgain = true;
		}
	}
	if(doAgain)
	{
		setTimeout('MakeEven(' + localEventTrans + ')', 0);
	}
}

function GetLongest(thisElement)
{
	var childElement;
	var childWidth = 0;

	for(var idx = 0; idx < ItemCount; idx++)
	{
		if(MenuChildren[idx] != thisElement)
		{
			if(MenuChildren[idx].clientWidth > childWidth)
			{
				childElement = MenuChildren[idx];
				childWidth = childElement.clientWidth;
			}
		}
	}
	return(childElement);
}

function GetShortest(thisElement)
{
	var childElement;
	var childWidth = 999999;

	for(var idx = 0; idx < ItemCount; idx++)
	{
		if(MenuChildren[idx] != thisElement)
		{
			if(MenuChildren[idx].clientWidth < childWidth)
			{
				childElement = MenuChildren[idx];
				childWidth = childElement.clientWidth;
			}
		}
	}
	return(childElement);
}

function GetChildren(thisElement)
{
	if (thisElement.children)
	{
		return(thisElement.children);
	}
	else
	{
		var children = [];
		var allChildren = thisElement.getElementsByTagName('*');

		for(var idx = 0; idx < allChildren.length; idx++)
		{
			if(allChildren.item(idx).parentNode == thisElement)
			{
				children.push(allChildren.item(idx));
			}
		}
		return(children);
	}
}