
function Menu()
{

	this.menus = new Array();

	this.menuTimer = null;
	
}

Menu.prototype.CreateMenu = function( MenuConfig )
{
	this.menus.push ( MenuConfig )

	MenuConfig.menu.className = MenuConfig.classname;
	MenuConfig.menu.style.position = 'absolute'
	
	MenuConfig.menu.style.visibility = 'hidden';
	MenuConfig.menu.style.display = 'block';
	this.MoveMenu( MenuConfig )
	MenuConfig.menu.style.display = 'none'

	this.HideMenus();
	
	oThis = this;
	
	MenuConfig.clicker.onclick = function (e)
	{
	
		if (MenuConfig.menu.style.display == 'none')
		{
			oThis.HideMenus();
			
			oThis.ShowMenu( MenuConfig )
		}
		else
		{
			oThis.HideMenu( MenuConfig );
		}
					
			
	}	
	
	MenuConfig.menu.onmouseover = function ()
	{
		clearTimeout(oThis.menuTimer);
	}
		
	MenuConfig.menu.onmouseout = function ()
	{
		oThis.menuTimer = setTimeout(function() { oThis.HideMenus(); }, 1000);
	}
		
	MenuConfig.clicker.onmouseover = function ()
	{
		clearTimeout(oThis.menuTimer);
	}
		
	MenuConfig.clicker.onmouseout = function ()
	{
		oThis.menuTimer = setTimeout(function() { oThis.HideMenus(); }, 1000);
	}
	

}

Menu.prototype.ShowMenu = function (MenuConfig)
{
	MenuConfig.menu.style.visibility = 'hidden';
	MenuConfig.menu.style.display = 'block';
	oThis.MoveMenu( MenuConfig )			
	MenuConfig.menu.style.visibility = 'visible';
}
	
Menu.prototype.HideMenu = function (MenuConfig)
{
	MenuConfig.menu.style.display = 'none';
}

Menu.prototype.HideMenus = function ()
{
	for ( x = 0; x < this.menus.length; x++)
	{
		this.menus[x].menu.style.display = 'none';
	}
}

Menu.prototype.ListMenus = function ()
{

	for ( x = 0; x < this.menus.length; x++)
	{
		//alert(this.menus[x].clicker.id + ' - ' + this.menus[x].menu.id);
	}

}


Menu.prototype.MoveMenu = function ( MenuConfig )
{
	var anch = MenuConfig.anchor || MenuConfig.clicker
	var pos = findPosX(anch) + MenuConfig.menu.offsetWidth
	
	if (MenuConfig.parent && MenuConfig.parent != null)
	{
		if (pos > MenuConfig.parent.offsetWidth ) 
		{
			menuLeft = findPosX(anch) - MenuConfig.menu.offsetWidth ;
			MenuConfig.menu.style.left = menuLeft + 'px'
		}			
	}
	
	if (MenuConfig.position == false)
		return;
		
	var win = getWindow();
	
	if (pos > win.Width ) 
	{
		menuLeft = findPosX(anch) - MenuConfig.menu.offsetWidth + anch.offsetWidth ;
	}
	else
	{
		menuLeft = findPosX(anch);
	}

	MenuConfig.menu.style.left = menuLeft + 'px'
	MenuConfig.menu.style.top = findPosY(anch) + anch.offsetHeight + 'px'
	
}



function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function getWindow()
{
	if(window.innerHeight) 
	{
		//Non-IE
		myHeight = window.innerHeight;
		myWidth =  window.innerWidth;
		myScrollHeight = document.body.scrollHeight;
	}
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) 
	{
		//IE 6+ in 'standards compliant mode'
		myHeight = document.documentElement.clientHeight;
		myWidth = document.documentElement.clientWidth;
		myScrollHeight = document.body.scrollHeight;
  	} 
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) 
	{
		//IE 4 compatible
		myHeight = document.body.clientHeight;
		myWidth = document.body.clientWidth;
		myScrollHeight = document.body.scrollHeight;
	}
		
	var yScrolltop;
	if (self.pageYOffset) {
		yScrolltop = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScrolltop = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScrolltop = document.body.scrollTop;
	}
		
	return { "Height":myHeight, "Width":myWidth, "ScrollHeight":myScrollHeight, "Scrolled":yScrolltop };
}
