// menu.js var menu = new _menu(); function _menu() { var menu = new Object(); var currentMenu = ""; this.initialise = initialise; this.expand = expand; this.collapse = collapse; this._collapse = _collapse; this.display = display; this.mouseover = mouseover; this.mouseout = mouseout; function initialise() { var menuDiv = document.getElementById("menu"); menuDiv = menuDiv.firstChild; while (menuDiv) { if (menuDiv.id && menuDiv.id.charAt(0) == "_") { menu[menuDiv.id.substring(1)] = new __menu(); menu[menuDiv.id.substring(1)].initialise(menuDiv.id.substring(1)); var menuTitle = document.getElementById(menuDiv.id.substring(1)); menuDiv.style.left = findPosX(menuTitle) + "px"; if (menuDiv.getAttribute("direction") == "down") { menuDiv.style.top = findPosY(menuTitle) + 22 + "px"; } else { menuDiv.style.top = findPosY(menuTitle) - menuDiv.offsetHeight + "px"; } } menuDiv = menuDiv.nextSibling; } } function expand(id) { if (currentMenu && currentMenu != id) { _collapse(currentMenu); } currentMenu = id; menu[id].expand(); } function collapse(id) { menu[id].mouseout(); } function _collapse(id) { if (currentMenu == id) { currentMenu = ""; } menu[id].collapse(); } function display(id) { menu[id].display(); } function mouseover(id) { menu[id].mouseover(); } function mouseout(id) { menu[id].mouseout(); } function __menu() { var _displayTimer, _collapseTimer, _id, _menu, _menuArray, _index, _state, _direction; this.initialise = initialise; this.expand = expand; this.collapse = collapse; this.display = display; this.mouseover = mouseover; this.mouseout = mouseout; function initialise(id) { _id = id; _menu = document.getElementById("_" + id); _menuArray = _menu.getElementsByTagName("A"); _direction = _menu.getAttribute("direction"); // up or down _index = _direction == "down" ? 0 : (_menuArray.length - 1); _state = "collapsed"; // collapsed, expanding, expanded, collapsing _displayTimer = null; _collapseTimer = null; } function expand() { clearTimeout(_collapseTimer); if (_state == "collapsed" || _state == "collapsing") { _menu.style.zIndex = 10; if (_state == "collapsed") { _displayTimer = setTimeout("menu.display('" + _id + "');", 50); } _state = "expanding"; } // else ignore } function collapse() { if (_state == "expanded" || _state == "expanding") { _menu.style.zIndex = 5; if (_state == "expanded") { _displayTimer = setTimeout("menu.display('" + _id + "');", 50); } _state = "collapsing"; } // else ignore } function mouseover() { clearTimeout(_collapseTimer); } function mouseout() { _collapseTimer = setTimeout("menu._collapse('" + _id + "');", 200); } function display() { var visibility = _state == "expanding" ? "visible" : "hidden"; var down = (_direction == "down" && _state == "expanding") || (_direction != "down" && _state != "expanding"); _menuArray[_index].style.visibility = visibility; _index = _index + (down ? 1 : -1); if (_index < 0 || _index == _menuArray.length) { _state = _state == "expanding" ? "expanded" : "collapsed"; if (_index < 0) { _index = 0; } else { _index = _menuArray.length - 1; } } else { _displayTimer = setTimeout("menu.display('" + _id + "');", 50); } } return this; } return this; }