var menus = new Array()
var hlightObj = new Array()
var hlightNum = 0

function MenuRegister(item) {
  menus[menus.length] = item
  return (menus.length - 1)
}

function MenuItem(caption, command) {
  this.caption = caption;
  this.command = command;
  this.id = MenuRegister(this);
}

function MenuItemOnClick(obj) {
  var item = menus[obj.menuid]
  var menub1 = document.all['MENU' + item.parent + 'B1']

  window.event.cancelBubble = true
  if(item == null) return
  if((typeof item.command) == 'function') item.command()
  if((typeof item.command) == 'string') window.location = item.command
}

function MenuItemOnMouseOver(obj) {
  var item = menus[obj.menuid]
  var parent = menus[item.parent]
  var menub1 = document.all['MENU' + item.parent + 'B1']
  var fromElement = window.event.fromElement
  var toElement = window.event.toElement

  window.event.cancelBubble = true
  if((fromElement != null) && (toElement != null)) {
    if(fromElement.menuid == toElement.menuid) return;
  }
  obj.style.backgroundColor = 'green'
  obj.style.color = 'white'
  hlightObj[hlightNum++] = obj;
}

function MenuItemOnMouseOut(obj) {
  var item = menus[obj.menuid]
  var parent = menus[item.parent]
  var toElement = window.event.toElement

  window.event.cancelBubble = true
  while(hlightNum > 0) {
    hlightObj[--hlightNum].style.backgroundColor = "transparent"
    hlightObj[hlightNum].style.color = 'green'
  }
}

function MenuItemToString() {
  return "  <tr class=menuRow \n" +
  "      onMouseOver='MenuItemOnMouseOver(this)'\n" +
  "      onMouseOut='MenuItemOnMouseOut(this)'\n" +
  "      onClick='MenuItemOnClick(this)'\n" +
  "      menuid=" + this.id +
  "      >\n" +
  "    <td class=menuCaptionCell nowrap menuid=" + this.id + ">&nbsp;" + this.caption + "&nbsp;</td>\n" +
  "  </tr>\n";
}
MenuItem.prototype.toString = MenuItemToString;

function Menu(top, left) {
  this.items = new Array()
  this.top = top
  this.left = left
  this.id = MenuRegister(this)
  this.update = true;
  MENUINSERT.insertAdjacentHTML('BeforeEnd', this.borders())
}

function MenuAddItem(item) {
  this.items[this.items.length] = item
  item.parent = this.id
}

function MenuShow(noDisplay) {
  var menub1 = document.all['MENU' + this.id + 'B1']
  var menub2 = document.all['MENU' + this.id + 'B2']

  if(this.update) {
    menub2.innerHTML = this.getTable()
    this.update = false
  }
  var menu   = document.all['MENU' + this.id]
  menub1.style.top = this.top
  menub1.style.left = this.left
  menub2.style.width = menu.offsetWidth + 2
  menub2.style.height = menu.offsetHeight + 1
  menub1.style.width = menu.offsetWidth + 4
  menub1.style.height = menu.offsetHeight + 2
  if((menub1.offsetTop + menub1.offsetHeight) > (MenuBodyRef.offsetHeight - 4))
    menub1.style.top = MenuBodyRef.offsetHeight - menub1.offsetHeight - 4
  if((menub1.offsetLeft + menub1.offsetWidth) > (MenuBodyRef.offsetWidth - 24))
    menub1.style.left = MenuBodyRef.offsetWidth - menub1.offsetWidth - 24
  if(menub1.offsetTop < 0)
    menub1.style.top = 0
  if(menub1.offsetLeft < 0)
    menub1.style.left = 0
  MENUINSERT.insertAdjacentHTML('BeforeEnd', "")
  if(noDisplay) {
    menub1.style.top = -1000
    menub1.style.left = -1000
  } else {
    menub1.style.visibility = 'visible'
  }
}

function MenuHide() {
  var menub1 = document.all['MENU' + this.id + 'B1']

  menub1.style.visibility = 'hidden'
  menub1.style.top = -1000
  menub1.style.left = -1000
}

function MenuBorders() {
  return "<div id=MENU" + this.id +"B1 style='position: absolute' class=menuBorder1 menuid=" + this.id +
  " onmouseover='window.event.cancelBubble = true'>\n" +
  "  <div id=MENU" + this.id +"B2 class=menuBorder2 menuid=" + this.id + ">\n" +
  "  </div>\n" +
  "</div>\n";
}

function MenuTable() {
  var str

  str = "<table border='0' cellspacing='0' cellpadding='0' id=MENU" + this.id + "\n" +
        "       cellpadding=0 cellspacing=0 border=0 class=menuTable>\n"

  for(var i=0;i < this.items.length;i++) str += this.items[i];
  str += "</table>\n"
  return str
}
Menu.prototype.addItem = MenuAddItem;
Menu.prototype.borders = MenuBorders;
Menu.prototype.getTable = MenuTable;
Menu.prototype.show = MenuShow;
Menu.prototype.hide = MenuHide;

var MenuBodyRef;

function MenuInit() {
  for(var i in document.all) {
    if(document.all[i].tagName == 'BODY') {
      MenuBodyRef = document.all[i]
      MenuBodyRef.insertAdjacentHTML('BeforeEnd', '<div id=MENUINSERT></div>')
      break
    }
  }
}

var barMenu = new Array()
var current = null
var hlast = -1;
var vlast = -1;
var initOK = false;

function pageMenuInit() {
  if(!document.all) return;
  MenuInit();

  var menuMin = new Menu(0,0)
  var menuBase = new Menu(0,0)
  var menuEcon = new Menu(0,0)

  menuMin.addItem(new MenuItem('Freelander 2', '/models/freel2'))
  menuMin.addItem(new MenuItem('Defender', '/models/defender'))
  menuMin.addItem(new MenuItem('Range Rover Classic', '/models/rrc'))
  menuMin.addItem(new MenuItem('Discovery I', '/models/disco'))
  menuMin.addItem(new MenuItem('New Range Rover', '/models/newrr'))
  menuMin.addItem(new MenuItem('Freelander', '/models/freel'))
  menuMin.addItem(new MenuItem('Discovery II', '/models/disco2'))
  menuMin.addItem(new MenuItem('Range Rover Mk III', '/models/rr3'))
  menuMin.addItem(new MenuItem('Discovery 3', '/models/d3'))
  menuMin.addItem(new MenuItem('Range Rover Sport', '/models/rrsport'))


  menuBase.addItem(new MenuItem('Горячая десятка', '/common'))
  menuBase.addItem(new MenuItem('Сервисы, запчасти', '/misc/lr.asp'))
  menuBase.addItem(new MenuItem('Двигатели', '/common/engines'))
  menuBase.addItem(new MenuItem('Трансмиссия', '/common/transmission'))
  menuBase.addItem(new MenuItem('Подвеска', '/common/chassis'))
  menuBase.addItem(new MenuItem('Кузов', '/common/body'))
  menuBase.addItem(new MenuItem('Внедорожное оборудование', '/common/offroad'))

  menuEcon.addItem(new MenuItem('Конференция Land Rover на сервере AUTO.RU', 'http://wwwboards.auto.ru/land-rover'))
  menuEcon.addItem(new MenuItem('Сервисы, запчасти', '/misc/lr.asp'))
  menuEcon.addItem(new MenuItem('Галерея', '/gallery'))
  menuEcon.addItem(new MenuItem('Сайт клуба семейного отдыха владельцев Land-Rover', 'http://www.lr-weekend.ru'))
  menuEcon.addItem(new MenuItem('Англоязычный каталог ссылок', 'http://g.webring.com/hub?ring=roverring'))
  menuEcon.addItem(new MenuItem('Руководства по LR на Carsoft', 'http://www.carsoft.ru/avtorepair/landrover.html'))
  menuEcon.addItem(new MenuItem('Архив документации на www.landrover.ee', 'http://www.landrover.ee/est/varia/downloads/downloads.htm'))
  menuEcon.addItem(new MenuItem('Разное', '/misc'))
  menuEcon.addItem(new MenuItem('Карта сайта', '/links/map.asp'))

 

  menuMin.show(true)
  menuBase.show(true)
  menuEcon.show(true)

  barMenu[0] = menuMin;
  barMenu[1] = menuBase;
  barMenu[2] = menuEcon;

  hlast = 4;
  initOK = true;
}

function barMenuClose() {
  if(current != null) {
    current.style.backgroundColor = 'transparent'
    current.style.color = 'white'
    if(document.all) {
      var menu = barMenu[current.menu]
      menu.hide()
      menu = null
    }
  }
}

function doOnClick(ref) {
  barMenuClose()
  if(ref != null) window.location = ref
}

function barMenuOpen() {
  var obj = window.event.srcElement
  var menu;

  if(initOK && obj.className == 'menuBarItem') {
    window.event.cancelBubble = true;
    if(current != null) barMenuClose()
    if(obj.menu != hlast && obj.menu != vlast) {
      obj.style.color = 'white'
      obj.style.backgroundColor = 'black'
      if(document.all) {
        menu = barMenu[obj.menu]
        menu.left = obj.offsetLeft
        menu.top = obj.offsetTop + obj.offsetHeight
        menu.show()
      }
      current = obj;
    } else current = null;
  }
}
