function menuOpenId(id)
{
//Раскрытие\скрытие объекта меню на странице
    var id, str, mstr, mp, temp;

    eval('mp=' + TypeObject + id + EndObject);
    temp = mp.innerHTML;

    if(id.length-id.indexOf("_cont")!=5)
    { id = id + "_cont"; }

//alert(id+"\n"+id.indexOf("_cont")+"\n"+id);

    str=TypeObject + id + StyleObject + '.display';
    if (eval(str) == "none")
    {
        eval(str+'=""');
        temp = temp.replace("rMenu_level_hide", "rMenu_level_open");
    }
    else
    {
        eval(str+'="none"');
        temp = temp.replace("rMenu_level_open", "rMenu_level_hide");
    }

    //меняем + на - или наоборот
    mp.innerHTML = temp;

}


function menuSelect(id, m_name)
{
//Публичная функция управления меню
    var id, m_name, str;

    //Если выбранный пункт не совпадает с сохранённым и не пустой
    //устанавливаем для ранее выбранного пункта меню стиль по умолчанию для данного меню
    if(m_selected[m_name][0] != id && m_selected[m_name][0] != "")
    {
        eval(TypeObject + m_selected[m_name][0] + EndObject + ".className = '"+m_selected[m_name][2]+"'");
    }


    //Выполняем открытие нижестоящего уровня иерархии, если данный пункт является узлом
    //Проверяем - есть ли подчиненный объект - контейнер
    eval('obj=' + TypeObject + id + "_cont" + EndObject);
    //Проверяем - есть ли родительский объект

    if (obj)
    { menuOpenId(id); }
    //Для нового пункта меню устанавливаем выделенный стиль для данного меню
    str=TypeObject + id + EndObject + '.className';
    eval("m_selected[m_name][2] = " + str);
	//alert(m_selected[m_name][2]);
    var reg=/^ierarhia\_([^\_]+)$/;
    var arr=reg.exec(m_selected[m_name][2]);
    if(arr)
    { eval(str+"='"+m_selected[m_name][1]+"_"+arr[1]+"'"); }
    else
    { eval(str+"='"+m_selected[m_name][1]+"'"); }
    m_selected[m_name][0] = id;


    //Выполняем раскрытие предстоящей данному пункту иерархии меню, если данный пункт является частью иерархического меню
    menu_open_level(m_name, id);
}



function menu_open_level(m_name, id)
{
//Функция открывает все вышележащие уровни иерархического меню, относительно выбранного пункта
    var id, m_name, obj, id_temp;

    //Создаём объект меню по указанному id
    eval('obj=' + TypeObject + id + EndObject);

    //Проверяем - есть ли родительский объект
    if (obj.parentNode)
    {
        //Проверяем, что объект вообще имеет id и мы можем с ним работать
        if(obj.parentNode.id != "")
        {
            //Проверяем, что родительский объект - действиетельно является объектом меню
            id_temp = obj.parentNode.id;
            if ( id_temp.indexOf(m_name) == 0 )
            {
//alert(id+" "+m_name+" "+id_temp);
                //Если это голова меню - выходим
                if( id_temp == m_name+"_parent" )
                { return false; }
                else
                {
                    //Если это один из уровней - открываем его и повторяем итерацию                    
                    menuOpenId(id_temp.substr(0,id_temp.length-5));                    
                    menu_open_level(m_name, id_temp);
                    return true;
                }
            }
        }
    }
    return false;
}





function menu_where_is_node(id, id_cont, m_name)
{
//Функция определяет - находится ли данный id внутри данного меню? Если да - возвращает true, иначе - false
    var id, id_cont, m_name, obj;

    eval('obj=' + TypeObject + id + EndObject);

    //Проверяем - есть ли родительский объект
    if (obj.parentNode)
    {
        //Проверяем, что объект вообще имеет id и мы можем с ним работать
        if(obj.parentNode.id != "")
        {
            //Проверяем, что родительский объект - действиетельно является объектом меню
            id_temp = obj.parentNode.id;
            if ( id_temp.indexOf(m_name) == 0 )
            {
                //Если это голова меню - выходим
                if( id_temp == m_name+"_parent" )
                { return false; }
                else
                {
                    //Проверяем - совпадает ли id родительского объекта с id_cont
                    if ( id_temp == id_cont )
                    { return true; }
                    else
                    {
                        //Идём выше
                        menu_where_is_node(id_temp, id_cont, m_name);
                    }
                }
            }
        }
    }
    return false;
}
