var g_menu = new Menu();

window.onresize = function()
{
	document.location.reload(true);
}

/**************
 * Menu Class *
 **************/
function Menu()
{
	this.addButton = function(button)
	{
		this.button[this.button.length] = button;
	}

	this.initialize = function()
	{
		for (var i = 0; i < this.button.length; i++)
			this.button[i].initialize();
	}

	this.button = new Array();
}

/****************
 * Button Class *
 ****************/
function Button(buttonVarName, imgName, activeImgPath, inactiveImgPath, isActive, layerId, delay, positionImageName)
{
	this.onMouseOut = function()
	{
		this.timeoutId = setTimeout(this.buttonVarName + ".deactivate()", delay);
		this.timeoutIsActive = 1;
	}

	this.deactivate = function()
	{
		document.images[this.imgName].src = this.isActive ? this.activeImg.src : this.inactiveImg.src;
		(this.getElement(this.layerId)).visibility = 'hidden';
	}
	
	this.onMouseOver = function()
	{
		this.clearTimeout(this.timeoutId);
		document.images[this.imgName].src = this.activeImg.src;
		(this.getElement(this.layerId)).visibility = 'visible';
	}

	this.clearTimeout = function()
	{
		if (this.timeoutIsActive)
			clearTimeout(this.timeoutId);

		this.timeoutIsActive = 0;
	}

	this.initialize = function()
	{
		if (this.isActive)
			document.images[this.imgName].src = this.activeImg.src;

		this.writeIntoLayer();
		this.shiftLayer();
	}
	
	this.writeIntoLayer = function()
	{
		if (document.getElementById)
		{
			var element = document.getElementById(this.layerId);
			element.innerHTML = '';
			element.innerHTML = this.layerContent;
		}
		else if (document.all)
		{
			var element = document.all[this.layerId];
			element.innerHTML = this.layerContent;
		}
		else if (document.layers)
		{
			element = document.layers[this.layerId];
			var mouseOver = 'onmouseover="' + this.buttonVarName +  '.onMouseOver();"';
			var mouseOut = 'onmouseout="' + this.buttonVarName + '.onMouseOut();"';
			var layerOpen = '<layer ' + mouseOver + ' ' + mouseOut + '>';
			var layerClose = '</layer>';
			element.document.open();
			element.document.write(layerOpen + this.layerContent + layerClose);
			element.document.close();
		}
	}

	this.shiftLayer = function()
	{
		var img = false;
		
		if (document.images[this.positionImageName])
		{
			img = document.images[this.positionImageName];
		}
		else
		{
			return;
		}
		
		var xOffset = img.x ? img.x : this.getAbsPos(img, "Left");
		var yOffset = img.y ? img.y : this.getAbsPos(img, "Top");
		
		if (document.layers)
		{
			var left = this.getElement(this.layerId).left;
			var top = this.getElement(this.layerId).top;
			this.getElement(this.layerId).top = top + yOffset;
			this.getElement(this.layerId).left = left + xOffset;
		}
		else if (document.getElementById)
		{
			var element = document.getElementById(this.layerId);
			var left = element.currentStyle ? parseInt(element.currentStyle.left) : parseInt(element.style.left);
			left += xOffset;
			var top = element.currentStyle ? parseInt(element.currentStyle.top) : parseInt(element.style.top);
			top += yOffset;
			this.getElement(this.layerId).left = left + "px";
			this.getElement(this.layerId).top = top + "px";
		}
		else if (document.all)
		{
			var element = document.all[this.layerId];
			var left = element.currentStyle ? parseInt(element.currentStyle.left) : parseInt(element.style.left);
			left += xOffset;
			var top = element.currentStyle ? parseInt(element.currentStyle.top) : parseInt(element.style.top);
			top += yOffset;
			this.getElement(this.layerId).left = left + "px";
			this.getElement(this.layerId).top = top + "px";
		}
	}
	
	this.getElement =function(id)
	{
		if (document.getElementById)
			return document.getElementById(id).style;
		else if (document.all)
			return document.all[id].style;
		else if (document.layers)
			return document.layers[id];
		else 
			return false;
	}

	this.getAbsPos = function(element, whichOffset)
	{
		var pos = 0;
		while (element != null)
		{
			pos += element["offset" + whichOffset];
			element = element.offsetParent;
		}
		return pos;
	}
	
	this.buttonVarName = buttonVarName;
	this.imgName = imgName;
	this.layerId = layerId;
	this.activeImg = new Image();
	this.activeImg.src = activeImgPath;
	this.inactiveImg = new Image();
	this.inactiveImg.src = inactiveImgPath;
	this.isActive = isActive;
	this.timeoutIsActive = 0;
	this.timeoutId;
	this.positionImageName = positionImageName;
	this.layerContent = "";

	g_menu.addButton(this);
}
