	
	// конфигурация меню
	root_node_id	= "mnu_0";
	node_bg			= "#AF003D";
	active_node_bg	= "#EEEEEE";
	menu_top		= 240;
	menu_left		= 5;

	item_height		= 30;
	// end of configuration

	//item_width		= 202;

	
	
	// system enviroment
	var arr_visible_items = new Array( );
	arr_visible_items[0] = 1;
	

	// делает заданный элемент меню видимым
	function show_menu_item(item_id)
	{
		document.getElementById(item_id).style.visibility='visible';
	}
	
	// делает заданный элемент меню невидимым
	function hide_menu_item(item_id)
	{
		if (item_id)
			document.getElementById(item_id).style.visibility='hidden';
	}
	
	// позиционирует заданный элемент меню
	function pos_menu_item(item_id, top, left)
	{
		document.getElementById(item_id).style.top=top;
		document.getElementById(item_id).style.left=left;
	}
	
	// добавляет в список отображаемых узлов
	function add_to_visible_list(node_id)
	{
		arr_visible_items[arr_visible_items.length] = node_id;
	}

	// определяет позицию узла в списке видимых узлов
	function get_visible_pos(node_id)
	{
		for (i = 0; i < arr_visible_items.length; i++)
		{
			if (arr_visible_items[i]==node_id)
			{
				return i;
			}
		}

		return false;
	}

	// удаляет узел из списка видивых узлов
	function remove_from_visible_list(node_id)
	{
		if (arr_visible_items[arr_visible_items.length-1] == node_id)
		{
			arr_visible_items = arr_visible_items.slice(0, arr_visible_items.length-1);

			hide_menu_item(node_id);
		}
	}
	
	// пряечет всех детей для узла из visible_list-а заданного по его индексу в листе
	function hide_childs(node_index)
	{
		i = arr_visible_items.length-1;

		while (i>node_index)
		{
			//alert("hide index"+i);
			hide_menu_item(arr_visible_items[i]);
			remove_from_visible_list(arr_visible_items[i]);
			i--;
		}
	}
	
	// временная функция
	function dump()
	{
		s = "";
		for (i = 0; i < arr_visible_items.length; i++) 
		{                        
			s = s+" "+arr_visible_items[i];                
		}

	}	
	
	// выводит заданного потомка
	function draw_child_menu(parent_id, child_id, parent_index)
	{
		hide_childs(get_visible_pos(parent_id));	
		
		add_to_visible_list(child_id);

		parent_top	= parseInt( document.getElementById(parent_id).style.top );
		parent_left = parseInt( document.getElementById(parent_id).style.left );

		parent_width = parseInt( document.getElementById(parent_id).style.width );

		child_width = parseInt( document.getElementById(child_id).style.width );
		
		// сделано для того чтобы если выводимый элемент выходит за границы окна по x то мы его будем отображать
		// слева от элемента предка
		if ( parent_left+parent_width+child_width>document.body.clientWidth )
		{
			x_pos = parent_left-child_width;
		}
		else 
		{
			x_pos = parent_left+parent_width;
		}
		
		// позиционируем ребенка
		pos_menu_item(child_id, parent_top+parent_index*item_height-parent_index, x_pos);
		// визуализируем ребенка
		show_menu_item(child_id);
	}
	
	// закрывает (прячет) всех детей для заданного узла меню	
	function close_menu_childs(parent_id)
	{
		hide_childs( get_visible_pos( parent_id ) );
	}
	
	// визуализирует базовый вариант меню  , БУДЕТ УБИТА!!!!!!!!
	function render_menu(root_node_id)
	{
		if (document.getElementById(root_node_id)==null)
		{
			return;
		}
		pos_menu_item(root_node_id, menu_top, menu_left); 
		show_menu_item(root_node_id);
	}

	function render_menu_ext(root_node_id, mnu_top, mnu_left)
	{
		if (document.getElementById(root_node_id)==null)
		{
			return;
		}
		pos_menu_item(root_node_id, mnu_top, mnu_left); 
		show_menu_item(root_node_id);
	}
	
	// срабатывает при клике по элементу меню и выполняет комманду cmd
	function click_menu_item(cmd)
	{
		if (cmd!="")
		{
			window.location.href = cmd;
		}
	}

	

	// не используются -----------------------------------------------------
	function hide_self(event, parent_id)
	{
		// если к нам пришел элемент самого первого уровня, то мы его прятать вообще не должны
		if (parent_id=="null")
		{
			return;
		}

		if (parent_id==root_node_id)
		{
			return ;
		}
/*		m_left = parseInt( document.getElementById(parent_id).style.left);
		m_top  = parseInt( document.getElementById(parent_id).style.top);
		m_width = parseInt( document.getElementById(parent_id).style.width);
		m_height = parseInt( document.getElementById(parent_id).style.height);

		if (event.x>=m_left&&event.x<=m_left+m_width&&event.y>=m_top&&event.y<=m_top+m_height)
		{
			return ;
		}*/
		m_left = parseInt( document.getElementById(parent_id).style.left);
		m_width = parseInt( document.getElementById(parent_id).style.width);
		m_top  = parseInt( document.getElementById(parent_id).style.top);
		if (event.x<m_left+m_width||event.y<m_top)
		{
			return ;
		}

		close_menu(parent_id);
	}
	
	// проверяет есть ли у заданного узла сейчас визуализированные дети
	function has_opened_childs(node_id)
	{
		visible_pos_index = get_visible_pos(node_id);
		if (visible_pos_index!=arr_visible_items.length-1)
		{
			return true;
		}

		return false;
	}

	function close_menu(node_id)
	{
		if (!has_opened_childs(node_id))
		{
			hide_menu_item(node_id);
		}	
	}
