var cl_menuitem = "";
var cl_menuitem_norm = "";
var cl_menuitem_hilite = "";

var cursor_x = 0;
var cursor_y = 0;
var BrowserIE = false;
var g_ActiveMenuItem;
var g_ActiveSubMenu;
var g_ActiveSubMenuItem;

var FADE_TIMEOUT = 100;
var FADE_TICK = 10;

function Test_Funcs(element_id)
{
	var output = "GetElementWidth  = " + GetElementWidth(element_id) + 
		 "\r\nGetElementHeight = " + GetElementHeight(element_id) +
		 "\r\nGetElementXAbs   = " + GetElementXAbs(element_id) +
		 "\r\nGetElementYAbs   = " + GetElementYAbs(element_id) + 
		 "\r\n Mouse X = " + cursor_x + " Mouse Y = " + cursor_y;

 
	alert(output);

	
}


function InsideElement(elem_id, x_test, y_test)
{
	var elem = document.getElementById(elem_id);
	if(!elem) return false;

	var elem_left = GetElementXAbs(elem_id);
	var elem_top = 	GetElementYAbs(elem_id);
	var elem_width = GetElementWidth(elem_id);
	var elem_height = GetElementHeight(elem_id);

	if( (x_test >= elem_left && x_test <= elem_left + elem_width) &&
	    (y_test >= elem_top && y_test <= elem_top + elem_height) )
	{
		return true;
	}
	else
	{
		return false;
	}
}

//this function sets the names of the css classes to use when changing menu item states
function InitMenus( menuitem_class, menuitem_norm_class, menuitem_hilite_class )
{
	cl_menuitem = menuitem_class;
	cl_menuitem_norm = menuitem_norm_class;
	cl_menuitem_hilite = menuitem_hilite_class;

	BrowserIE = document.all ? true : false;

	if(!BrowserIE)
		document.captureEvents(Event.MOUSEMOVE);

	document.onmousemove = StoreCursorPos;
}

function StoreCursorPos(ev) 
{
	if(BrowserIE)
	{
		cursor_x = event.clientX + document.body.scrollLeft;
		cursor_y = event.clientY + document.body.scrollTop;
	}
	else
	{
		cursor_x = ev.pageX;
		cursor_y = ev.pageY;
	}

	if(cursor_x < 0)
		cursor_x = 0;
	if(cursor_y < 0)
		cursor_y = 0;


	if(g_ActiveSubMenu)
	{
		var bInsideSubMenu = InsideElement(g_ActiveSubMenu.id, cursor_x, cursor_y);
		var bInsideMenu = InsideElement(g_ActiveMenuItem.id, cursor_x, cursor_y);
				
		if( !bInsideSubMenu && !bInsideMenu )
		{	
			HideSubmenu(g_ActiveSubMenu.id);
			g_ActiveMenuItem = 0;
		}

	}

	return true;
}


function GetElementWidth(element_id)
{
	var elem = document.getElementById(element_id)
	if(!elem) return 0;
	return elem.offsetWidth;
}

function GetElementHeight(element_id)
{
	var elem = document.getElementById(element_id)
	if(!elem) return 0;
	
	return elem.offsetHeight;
}

//this function gets the *absolute* X position of an element
function GetElementXAbs(element_id)
{
	var elem = document.getElementById(element_id)
	if(!elem) return 0;
	if(elem.x) return elem.x;
	
	var pos = 0;
	while( elem )
	{
		pos += elem.offsetLeft;
		elem = elem.offsetParent;
	}
	
	return pos;
}

//this function gets the *absolute* Y position of an element
function GetElementYAbs(element_id)
{
	var elem = document.getElementById(element_id)
	if(!elem) return 0;
	if(elem.y) return elem.y;
	var pos = 0;
	while( elem )
	{
		pos += elem.offsetTop;
		elem = elem.offsetParent;
	}

	return pos;
}

function HiliteMenuItem(menuitem_id)
{
	var elem = document.getElementById(menuitem_id);
	if(!elem) return;

	var cl = cl_menuitem + " " + cl_menuitem_hilite;
	elem.className = cl;
}

function UnhiliteMenuItem(menuitem_id)
{
	var elem = document.getElementById(menuitem_id);
	if(!elem) return;

	var cl = cl_menuitem + " " + cl_menuitem_norm;
	elem.className = cl;
}

function HideSubmenu()
{
	if(!g_ActiveSubMenu) return;
	//UnhiliteMenuItem(g_ActiveMenuItem.id);

	g_ActiveSubMenu.style.display="none";

	g_ActiveSubMenu = 0;
	g_ActiveMenuItem = 0;
	
	
	var shim_elem = document.getElementById("shim");
	if(shim_elem)
	{
		shim_elem.style.display = "none";
	}
}

function _SetAlpha(elem, alpha)
{
	var filter = "alpha(opacity=" + alpha + ")";
	var opacity = alpha/100;

	elem.style["filter"] = filter
	elem.style["-moz-opacity"] = opacity
	elem.style["opacity"] = opacity;
}

function SetAlpha(elem_id, alpha)
{
	var elem = document.getElementById(elem_id);
	if(!elem) return;

	_SetAlpha(elem, alpha);
}

//this function will show a submenu identified by "submenu_id" under a parent item identified by "parentitem_id"
function ShowSubmenu(parentitem_id, submenu_id)
{
	if(g_ActiveSubMenu)
		HideSubmenu();		

	var shim_elem = document.getElementById("shim");
	var submenu_elem = document.getElementById(submenu_id);
	var parent_elem = document.getElementById(parentitem_id);
	if(!submenu_elem || !parent_elem) 
		return;
	
	var x_pos = GetElementXAbs(parentitem_id);
	var y_pos = GetElementYAbs(parentitem_id) + GetElementHeight(parentitem_id);

	

	submenu_elem.style.position = "absolute";
	submenu_elem.style.left = x_pos + "px";
	submenu_elem.style.top = y_pos + "px";
	submenu_elem.style.display = "inline";
	submenu_elem.style.zIndex = "999";
	
	var x_size = GetElementWidth(submenu_id);
	var y_size = GetElementHeight(submenu_id);

	if(shim_elem)
	{
	
		//alert("xpos: " + x_pos + " ypos: " + y_pos + " xsize: " + x_size + " ysize: " + y_size);
		shim_elem.style.postion = "absolute";
		shim_elem.style.left = x_pos + "px";
		shim_elem.style.top = y_pos + "px";
		shim_elem.style.width = x_size + "px";
		shim_elem.style.height = y_size + "px";
		shim_elem.style.display = "inline";
	}

	SetAlpha(submenu_id, 90);

	g_ActiveSubMenu = submenu_elem;
	g_ActiveMenuItem = parent_elem;
	//HiliteMenuItem(parentitem_id);
}