// добавление обработчика стиля в IE ++++++++++++++++++++++++++++++
 jsHover = function()
  {
    for (var j=1; j<=2; j++){
        var strin='menu_ul_bottom';
        strin += j;
        var hEls = document.getElementById(strin).getElementsByTagName('LI');
        for (var i=0, len=hEls.length; i<len; i++) {
          hEls[i].onmouseover=function() { this.className+=' jshover'; }
          hEls[i].onmouseout=function() { this.className=this.className.replace(' jshover', ''); }
        }
    }
  }

  function setNotLink(el)
  {
        var temp = document.getElementById('my_menu');
        temp.style.color = '#ffffff';

  }
// ------------------------------добавление обработчика стиля в IE

// получение текста из узла node +++++++++++++++++++++++++++++
  function getElemText(node){
    return node.text || node.textContent || (function(node){
        var _result = "";
        if (node == null) {
            return _result;
        }
        var childrens = node.childNodes;
        var i = 0;
        while (i < childrens.length) {
            var child = childrens.item(i);
            switch (child.nodeType) {
                case 1: // ELEMENT_NODE
                case 5: // ENTITY_REFERENCE_NODE
                    _result += arguments.callee(child);
                    break;
                case 3: // TEXT_NODE
                case 2: // ATTRIBUTE_NODE
                case 4: // CDATA_SECTION_NODE
                    _result += child.nodeValue;
                    break;
                case 6: // ENTITY_NODE
                case 7: // PROCESSING_INSTRUCTION_NODE
                case 8: // COMMENT_NODE
                case 9: // DOCUMENT_NODE
                case 10: // DOCUMENT_TYPE_NODE
                case 11: // DOCUMENT_FRAGMENT_NODE
                case 12: // NOTATION_NODE
                // skip
                break;
            }
            i++;
        }
        return _result;
    }(node));
 }
//  ------------------------------- получение текста из узла node

 // удаление пробелов +++++++++++++++++++++++
 function trim(s)
{
 return rtrim(ltrim(s));
}

function ltrim(s)
{
 return s.replace(/^\s+/, '');
}

function rtrim(s)
{
 return s.replace(/\s+$/, '');
}
// -------------------------------- удаление пробелов

// обработка меню  ++++++++++++++++++++++++++++++
// lg - подсветка всего списка
// el - текущий элемент списка
// num - номер элемента списка для подсветки, если указан, то меню серверное, если пустое, меню - клиентское
//       от 1 до 99 - верхний уровень меню
//       от 101 - подуровень, где первые две цифры - уровень, последняя цифра - подуровень
function temp(el,num,subnum,lg)
{
//    alert(getElemText(el.parentNode.parentNode.childNodes[2]));

    if (num != null)
    {
        subMenuId = "menu" + num;
        el = document.getElementById(subMenuId);
        temp(el);
        if (subnum != null)
        {
            subMenuId = "menu" + subnum;
            el = document.getElementById(subMenuId);
            temp(el);
        }
        return 0;

    }
//    alert(el);
    if (el == 0 && !num) lg = 1;//el = document.getElementById("my_menu").getElementsByTagName("DIV")[0];

    var li = '';
    var elText = '';
    var link = '';
    var i = 0;
    var j = 0;
    var subMenuPreName = 'submenu'; // первая часть имени элемента списка
    var SubMenuMember = 1; // порядковый номер элемента (LI) в списке (вторая часть имени)
    var currentNode = el;
   // прогоняем цикл по каждому узлу внутри списка UL
    while(li = el.parentNode.parentNode.childNodes[i])
    {
      //alert(li);
      var tm = trim(getElemText(li));  // получаем очищенныей от пробелов текст внутри текущего узла LI
      // если текст внутри узла не пустой (для Netscape)
      if (tm != '')
      {
        // если у узла имеется больше одного потомка (т.е. имеется второй потомок)
        if (li.childNodes[1] != null)
        {
            subMenuId = subMenuPreName + SubMenuMember; // получаем ID текущего элемента списка
            // если узел нажатого элемента равен просматриваемому (текущему) узлу,
            //   то запускаем функцию для подсписка этого узла (рекурсия) с подсветкой первого элемента подсписка
            //   иначе запускаю функцию для подсписка с подсветкой всех элементов
            if (currentNode == li.childNodes[0])
            {
                //temp(document.getElementById(subMenuId).getElementsByTagName('DIV')[0],null, null, 0);
                document.getElementById(subMenuId).style.display = "block";
            }
                else
                {
                    //temp(document.getElementById(subMenuId).getElementsByTagName('DIV')[0],null, null, 1);
                    document.getElementById(subMenuId).style.display = "none";
                }
            li.childNodes[0].parentNode.style.background = "url(images/back_li_open.gif) no-repeat top left";
            SubMenuMember++;
        }
        if ((currentNode != li.childNodes[0]) || (lg == 1))
        {
//            elText = getElemText(li.childNodes[0]);
            li.childNodes[0].parentNode.style.background = "url(images/back_li.gif) no-repeat top left";
        }else{
                 li.childNodes[0].parentNode.style.background = "url(images/back_li_sub.gif) no-repeat top left";
        }
      }
        i++;
    }

}
// ---------------------------- обработка меню
      if (window.attachEvent && navigator.userAgent.indexOf("Opera")==-1)
      {
        window.attachEvent("onload", jsHover);
      }
