
function MenuControl ()
	{
	window.windowControl.addEventListener (this) ;
	this.activeMenu = null ;
	this.menuTimeout = null ;

	if (document.addEventListener)
		document.addEventListener ('mousedown', MenuControl_onMouseDown, false) ;
	else if (document.attachEvent)
		document.attachEvent ('onmousedown', MenuControl_onMouseDown) ;
	else
		document.onmousedown = MenuControl_onMouseDown ;
	}

MenuControl.prototype.isInMenu = function (node)
	{
	node = node.parentNode ;
	while (node)
		{
		if (node.tagName && (node.tagName == 'DIV') && node.className && (node.className == 'usermenu'))
			return true ;
		node = node.parentNode ;
		}
	return false ;
	}

function MenuControl_onMouseDown (event)
	{
	var	el ;

	if (event.srcElement)
		el = event.srcElement ;
	else if (event)
		el = event.target ;
	while (el.nodeType != 1)
		el = el.parentNode ;

	if (!xb.Defined (el.menuControl))
		window.menuControl.hideActiveMenu () ;
	else if ((el.className == 'usermenu') || (el.className == 'cmsmenuseparator'))
		window.menuControl.hideActiveMenu () ;
	}

function MenuControl_submenuitemOnMouseOver ()
	{
	if (!xb.Defined (this.cell.className))
		this.cell.className = 'hover' ;
	else if (!this.cell.className.match (/hover$/))
		this.cell.className += 'hover' ;
	}

function MenuControl_submenuitemOnMouseOut ()
	{
	this.cell.className = this.cell.className.replace (/hover$/, '') ;
	}

function MenuControl_submenuOnClick ()
	{
	this.menuControl.showMenu (this) ;
	}

function MenuControl_submenuOnMouseOver ()
	{
	this.menuControl.showMenu (this) ;
	}

function MenuControl_submenuOnMouseOut ()
	{
	this.menuControl.delayedHideActiveMenu () ;
	}

function MenuControl_submenuitemsOnMouseOver ()
	{
	this.menuControl.clearTimeout () ;
	}

function MenuControl_submenuitemsOnMouseOut ()
	{
	this.menuControl.delayedHideActiveMenu () ;
	}

function MenuControl_menuitemOnMouseOver ()
	{
	this.menuControl.hideActiveMenu () ;
	}

MenuControl.prototype.showMenu = function (menu)
	{
	this.clearTimeout () ;
	if (this.activeMenu !== menu)
		{
		this.hideActiveMenu () ;

		if ((typeof menu.className) == 'undefined') {
			menu.className = 'hover' ;
		} else {
			menu.className += 'hover' ;
		}

		this.activeMenu = menu ;
		}
	}

MenuControl.prototype.hideActiveMenu = function ()
	{
	this.clearTimeout () ;
	if (this.activeMenu)
		{
		this.activeMenu.className = this.activeMenu.className.replace (/hover$/, '') ;
		this.activeMenu = null ;
		}
	}

//function MenuControl_Timeout (menuControl)
//	{
//	menuControl.clearTimeout () ;
//	menuControl.hideActiveMenu () ;
//	}

MenuControl.prototype.delayedHideActiveMenu = function ()
	{
	this.clearTimeout () ;
	this.menuTimeout = window.setTimeout ("window.menuControl.hideActiveMenu();", 10) ;
	}

MenuControl.prototype.clearTimeout = function ()
	{
	if (this.menuTimeout)
		{
		window.clearInterval (this.menuTimeout) ;
		this.menuTimeout = null ;
		}
	}

MenuControl.prototype.onWindowLoad = function (windowControl)
	{
	}

MenuControl.prototype.loadMenu = function ()
	{
	var	menus ;
	var	i ;
	var	menustack ;
	var	cellstack ;
	var	menuControl ;

	menuControl = this ;
	menustack = new Array () ;
	cellstack = new Array () ;
	menus = xb.ElementsByClassName ('menu', 'div') ;
	for (i = 0 ; i != menus.length ; i++)
		if (!xb.Defined (menus[i].menuControl))
			xb.WalkTree (menus[i], visitNode, leaveNode) ;

	function visitNode (node)
		{
		var	menu ;
		var	cell ;

		//if ((node.tagName == 'DIV') && node.className && (node.className == 'usermenu'))
		//else if (!((node.tagName == 'DIV') && node.className && (node.className == 'cmsmenuseparator')))
		if (node.nodeType == 1)
			node.menuControl = menuControl ;

		if (menustack.length > 0)
			menu = menustack[menustack.length - 1] ;
		if (cellstack.length > 0)
			cell = cellstack[cellstack.length - 1] ;
		if ((node.tagName == 'DIV') && node.className)
			{
			if (node.className == 'submenu')
				{
				menustack.push (node) ;
				node.onmouseover = MenuControl_submenuOnMouseOver ;
				node.onmouseout = MenuControl_submenuOnMouseOut ;
				}
			else if ((node.className == 'submenuitems') && menu)
				{
				node.menu = menu ;
				menu.menuitems = node ;
				node.onmouseover = MenuControl_submenuitemsOnMouseOver ;
				node.onmouseout = MenuControl_submenuitemsOnMouseOut ;
				}
			}

		if ((node.tagName == 'TABLE') && menu)
			{
			if (xb.Defined (menu.menuitems))
				xb.Width (menu.menuitems, xb.Width (node)) ;
			}

		if ((node.tagName == 'TD') && menu)
			{
			if (xb.Defined (menu.menuitems))
				cellstack.push (node) ;
			}

		if (node.tagName == 'A')
			{
			if (!menu)
				node.onmouseover = MenuControl_menuitemOnMouseOver ;
			else
				{
				node.menu = menu ;
				if (cell)
					{
					node.cell = cell ;
					node.onmouseover = MenuControl_submenuitemOnMouseOver ;
					node.onmouseout = MenuControl_submenuitemOnMouseOut ;
					}
				}
			}
		}

	function leaveNode (node)
		{
		if ((node.tagName == 'DIV') && node.className)
			if (node.className == 'submenu')
				menustack.pop () ;
		if ((node.tagName == 'TD') && (menustack.length > 0))
			cellstack.pop () ;
		}
	}

if (!window.menuControl)
	window.menuControl = new MenuControl () ;
