function ge(id) {
  if (document.getElementById)
    return document.getElementById(id);
  else
    return document.all[id];
}

var m_timeout_close = 200;
var m_timeout_switch = 50;
var m_timer_close_id = null;
var m_timer_switch_id =null;
var m_items = {};
var m_menus = [];

function m_over(menu_id, item_id) {
  m_clear_timer_out();

  // если этот пункт меню уже выбран, то ничего не делать
  if (typeof(m_items[menu_id]) != 'undefined' && m_items[menu_id] == item_id)
    return;

  m_clear_timer_switch();

  // переключить пункт меню
  m_deselect(menu_id);
  var menuitem = ge(item_id);
  if (menuitem.getAttribute('classover') != null)
    menuitem.className = menuitem.getAttribute('classover');
  m_items[menu_id] = item_id;

  // убираем/отображаем субменю
  var submenu_id = menuitem.getAttribute('dropdown');
  if (submenu_id == null)
    submenu_id = '';
  if (menu_id == 'menu' || m_timeout_switch == 0)
    m_switch(menu_id, submenu_id);
  else
    m_timer_switch_id = setTimeout("m_timer_switch_id=null;m_switch('"+menu_id+"','"+submenu_id+"')", m_timeout_switch + 50);
}

function m_switch(parent_menu_id, menu_id) {
  for (var i = 0; i < m_menus.length; i++) {
    if (m_menus[i] == menu_id)
      return;
  }
  m_hide(parent_menu_id);
  // если выбраный пункт содержит подменю (и такое меню объявлено)
  if (menu_id && ge(menu_id)) {
    ge(menu_id).style.visibility = 'visible';
    m_menus[m_menus.length] = menu_id;
  }
}

function m_out(menu_id) {
  if (m_timeout_close && m_timer_close_id == null) {
    m_timer_close_id = setTimeout("m_timer_close_id=null;m_close()", m_timeout_close);
  }
}

function m_deselect(menu_id) {
  if (typeof(m_items[menu_id]) != 'undefined' && m_items[menu_id] != '') {
    var menuitem = ge(m_items[menu_id]);
    if (menuitem.getAttribute('classout') != null)
      menuitem.className = menuitem.getAttribute('classout');
    else if (menuitem.getAttribute('classover') != null)
      menuitem.className = '';
    m_items[menu_id] = '';
  }
}

function m_hide(menu_id) {
  for (var i = m_menus.length - 1; i >= 0; i--) {
    if (m_menus[i] == menu_id)
      break;
    m_deselect(m_menus[i]);
    ge(m_menus[i]).style.visibility = '';
    m_menus.length -= 1;
  }
}

function m_clear_timer_switch() {
  if (m_timer_switch_id) {
    clearTimeout(m_timer_switch_id);
    m_timer_switch_id = null;
  }
}

function m_clear_timer_out() {
  if (m_timer_close_id) {
    clearTimeout(m_timer_close_id);
    m_timer_close_id = null;
  }
}

function m_close() {
  m_clear_timer_out();
  m_clear_timer_switch();
  m_hide('');
  for (var key in m_items) {
    m_deselect(key);
  }
}

document.onclick = m_close;

