
/**
 * Needs functions .js
 */

function ShowDebug( msg )
{
	alert( msg );
}

function DropDownMenu()
{
	this.InitMenus		= InitMenus;
	this.InitMenusRecursive = InitMenusRecursive;
	this.ActivateMenu	= ActivateMenu;
	this.CloseAllMenus	= CloseAllMenus;
	this.CloseMenuRecursive = CloseMenuRecursive;
	this.CloseAllMenusButParentsRecursive = CloseAllMenusButParentsRecursive;
	this.CloseAllMenusButParents = CloseAllMenusButParents;
	this.DeactivateMenu_MouseOut = DeactivateMenu_MouseOut;
	this.DeactivateMenu_MouseIn	 = DeactivateMenu_MouseIn;

	this.activeMenu = null;

	return this;
}

function PrintIndent( indent )
{
	var ind = '';
	for( var i = 0; i <= indent; i ++ ){
		ind += '	';
	}
	return ind;
}
function PrintMenuRecursive( menu, indent )
{
	var local = '';

	for( var i in menu ){
		local += PrintIndent( indent ) + i + ":\n";
		local += PrintIndent( indent ) + "{\n";
		if( menu[i] && menu[i].child ){
			local += PrintMenuRecursive( menu[i].child, indent + 1 );
		}
		local += PrintIndent( indent ) + "}\n"
	}
	return local;
}


function GetMenuItemRecursive( menu, item )
{

}
function GetMenuItem( menus, menuName )
{
	for( var n in menus ){
		if( n == menuName )
			return menus[n];
		if( menus[n].child ){
			var item = GetMenuItem( menus[n].child, menuName );
			if( item != null )
				return item;
		}
	}
	return null;
}

function InitMenusRecursive( parent, item )
{
	var menu = new Array();
	for( var name in item ){
		menu[name] = new Array();
		menu[name].name		= name;
		menu[name].child	= null;
		if( item[name].child ){
			menu[name].parent = parent;
			menu[name].child = InitMenusRecursive( menu[name], item[name].child );
		}

		if( item[name].x != null )
			menu[name].x = item[name].x;
		else
			ShowDebug( "Invalid X: " + name );

		if( item[name].y != null )
			menu[name].y = item[name].y;
		else
			ShowDebug( "Invalid Y" + name );

	}
	return menu;
}
function InitMenus( menus )
{
	this.menus = new Array();
	this.menus = InitMenusRecursive( null, menus );
	// alert( PrintMenuRecursive( this.menus, 0 ) );
}

function CloseMenuRecursive( item )
{
	for( var name in item ){
		CloseDiv( name );
		if( item[name].child ){
			CloseMenuRecursive( item[name].child );
		}
	}
}
function CloseAllMenus()
{
	CloseMenuRecursive( this.menu.menus );
}

function CloseAllMenusButParentsRecursive( menu, menuName )
{
	var IsParent = false;
	for( var name in menu ){
		if( name == menuName ){
			CloseDiv( menuName );
			IsParent = true;
			if( menu[name].child ){
				CloseAllMenusButParentsRecursive( menu[name].child, menuName )
			}
		}
		else{
			var currentIsParent = false;
			if( menu[name].child ){
				var currentIsParent = CloseAllMenusButParentsRecursive( menu[name].child, menuName );
			}
			if( currentIsParent ){
				IsParent = true;
			}
			if( ! currentIsParent ){
				// alert( "closing: " + name );
				CloseDiv( name );
			}
		}
	}
	return IsParent;
}
function CloseAllMenusButParents( menuName )
{
	// alert( PrintMenu( this.menus ) );
	this.CloseAllMenusButParentsRecursive( this.menus, menuName );
}

function ActivateMenu( menuName, parentMenu )
{
	var el = GetElement( menuName );
	if( ! el ){
		if( parentMenu ){
			this.CloseAllMenusButParents( parentMenu );
			this.ActivateMenu( parentMenu );
		}
		// ShowDebug( "Can't get element " + menuName );
		return;
	}

	this.CloseAllMenusButParents( menuName );
	this.doExit = false;

	this.activeMenu = menuName;
	el.menu = this;

	el.onmouseout = this.DeactivateMenu_MouseOut;
	el.onmouseover = this.DeactivateMenu_MouseIn;
	OpenDiv( menuName );

	men = GetMenuItem( this.menus, menuName );
	if( men )
	{
		el.style.left	= men.x + "px";
		el.style.top	= men.y + "px";
		//alert( el.style.left );
	}
}

function DeactivateMenu()
{
	if( this.menu.doExit )
		CloseAllMenus();
}
function DeactivateMenu_MouseOut()
{
	this.menu.doExit = true;
	setTimeout( "DeactivateMenu()", 1000 );
}
function DeactivateMenu_MouseIn()
{
	this.menu.doExit = false;
}




