// specifications for menu contentsvar menus = new Array();menus[0] = {mBarImgId:"menuItem_1",			text:"Главная",			href:"http://www.vitai.ru/default.htm",            menuItems:[],            elemId:""           };menus[1] = {mBarImgId:"menuItem_2",			text:"О Компании",			href:"http://www.vitai.ru/company/about.htm",            menuItems:[ {text:"Основные сведения", href:"http://www.vitai.ru/company/about.htm"},                        {text:"Компетенция и деятельность", href:"http://www.vitai.ru/company/activities.htm"},                        {text:"Продукция и услуги", href:"http://www.vitai.ru/company/products.htm"},                        {text:"Лицензии и сертификаты", href:"http://www.vitai.ru/company/licences.htm"},                        {text:"Структура и персонал", href:"http://www.vitai.ru/company/personnel.htm"},                        {text:"Работа в компании", href:"http://www.vitai.ru/company/vacancies.htm"}                      ],            elemId:""           };menus[2] = {mBarImgId:"menuItem_3",			text:"Система 'Беркут'",			href:"http://www.vitai.ru/berkut/berkut.htm",             menuItems:[ {text:"Что такое ИСБ 'Беркут'?", href:"http://www.vitai.ru/berkut/berkut.htm"},                        {text:"Технические сведения", href:"http://www.vitai.ru/berkut/aboutsystem.htm"},                        {text:"Принципы построения", href:"http://www.vitai.ru/berkut/principles.htm"},                        {text:"История создания", href:"http://www.vitai.ru/berkut/history.htm"},                        {text:"Технические средства", href:"http://www.vitai.ru/berkut/systemhard.htm"},                        {text:"Программные средства", href:"http://www.vitai.ru/berkut/systemsoft.htm"},                        {text:"Профильные подсистемы", href:"http://www.vitai.ru/berkut/subsystems.htm"},                        {text:"Установка системы", href:"http://www.vitai.ru/berkut/installation.htm"}              ],            elemId:""           };menus[3] = {mBarImgId:"menuItem_4",			text:"Спецификации",			href:"http://www.vitai.ru/specifications/specs.htm",            menuItems:[{text:"Линейные контроллеры", href:"http://www.vitai.ru/berkut/specifications/lnrctrs/lnrctrs.htm"},					   {text:"Системные контроллеры", href:"http://www.vitai.ru/berkut/specifications/sysctrs/sysctrs.htm"},					   {text:"Пульты и компьютеры", href:"http://www.vitai.ru/berkut/specifications/PultComps/PultComps.htm"},					   {text:"Интерфейсные модули/блоки", href:"http://www.vitai.ru/berkut/specifications/ifacemdls/ifacemdls.htm"},					   {text:"Оборудование и устройства", href:"http://www.vitai.ru/berkut/specifications/devices/devices.htm"}			],            elemId:""           };menus[4] = {mBarImgId:"menuItem_5",			text:"Контакты",			href:"http://www.vitai.ru/company/contacts.htm",            menuItems:[],            elemId:""           };/* --------------------------------------------------------------- */// global menu statevar menuReady = false;function getElementStyle(elem, IEStyleProp, CSSStyleProp) {    if (elem.currentStyle) {        return elem.currentStyle[IEStyleProp];    } else if (window.getComputedStyle) {        var compStyle = window.getComputedStyle(elem, "");        return compStyle.getPropertyValue(CSSStyleProp);    }    return "";}// carry over some critical menu style sheet attribute valuesvar CSSRuleValues = {menuItemHeight:"18px",                     menuItemWidth:"198px",                     menuItemLineHeight:"1.8em",                     menuWrapperBorderWidth:"1px",                     menuWrapperPadding:"1px",                     defaultBodyFontSize:"11px"                    };// create hash table-like lookup for menu objects with id string indexesfunction makeHashes() {    for (var i = 0; i < menus.length; i++) {        menus[menus[i].elemId] = menus[i];        menus[menus[i].mBarImgId] = menus[i];    }}// assign menu label image event handlersfunction assignLabelEvents() {    var elem;    for (var i = 0; i < menus.length; i++) {        elem = document.getElementById(menus[i].mBarImgId);        elem.onmouseover = swap;        elem.onmouseout = swap;    }}// invoked from init(), generates the menu div elements and their contents.// all this action is invisible to user during constructionfunction makeMenus() {    var menuDiv, menuItem, itemLink, mbarImg, textNode, offsetLeft, offsetTop;        // determine key adjustment factors for the total height of menu divs        var menuItemH = 0;    var bodyFontSize = parseInt(getElementStyle(document.body, "fontSize", "font-size"));    // test to see if browser's font size has been adjusted by the user    // and that the new size registers as an applied style property    if (bodyFontSize == parseInt(CSSRuleValues.defaultBodyFontSize)) {        menuItemH = (parseFloat(CSSRuleValues.menuItemHeight));    } else {        // works nicely in Netscape 7        menuItemH = parseInt(parseFloat(CSSRuleValues.menuItemLineHeight) * bodyFontSize);    }    var heightAdjust = parseInt(CSSRuleValues.menuWrapperPadding) +         parseInt(CSSRuleValues.menuWrapperBorderWidth);    if (navigator.appName == "Microsoft Internet Explorer" &&         navigator.userAgent.indexOf("Win") != -1 &&         (typeof document.compatMode == "undefined" ||         document.compatMode == "BackCompat")) {        heightAdjust = -heightAdjust;    }        // use menus array to drive div creation loop    for (var i = 0; i < menus.length; i++) {        menuDiv = document.createElement("div");        menuDiv.id = "popupmenu" + i;        // preserve menu's ID as property of the menus array item        menus[i].elemId = "popupmenu" + i;        menuDiv.className = "menuWrapper";        if (menus[i].menuItems.length > 0) {           menuDiv.style.height = (menuItemH * menus[i].menuItems.length) - heightAdjust + "px";        } else {            // don't display any menu div lacking menu items            menuDiv.style.display = "none";        }        // define event handlers        menuDiv.onmouseover = keepMenu;        menuDiv.onmouseout = requestHide;        // set stacking order in case other layers are around the page        menuDiv.style.zIndex = 1000;                // assemble menu item elements for inside menu div        for (var j = 0; j < menus[i].menuItems.length; j++) {            menuItem = document.createElement("div");            menuItem.id = "popupmenuItem_" + i + "_" + j;            menuItem.className = "menuItem";            menuItem.onmouseover = toggleHighlight;            menuItem.onmouseout = toggleHighlight;            menuItem.onclick = hideMenus;            menuItem.style.top = menuItemH * j + "px";            itemLink = document.createElement("a");            itemLink.href = menus[i].menuItems[j].href;            itemLink.className = "menuItem";            itemLink.onmouseover = toggleHighlight;            itemLink.onmouseout = toggleHighlight;            textNode = document.createTextNode(menus[i].menuItems[j].text);            itemLink.appendChild(textNode);            menuItem.appendChild(itemLink);            menuDiv.appendChild(menuItem);        }        // append each menu div to the body        document.body.appendChild(menuDiv);    }    makeHashes();    assignLabelEvents();    // pre-position menu    for (i = 0; i < menus.length; i++) {        positionMenu(menus[i].elemId);    }    menuReady = true;}// initialize global that helps manage menu hidingvar timer;// invoked from mouseovers inside menus to cancel hide// request from mouseout of menu bar image et al.function keepMenu() {    clearTimeout(timer);}function cancelAll() {    keepMenu();    menuReady = false;}// invoked from mouseouts to request hiding all menus// in 1/4 second, unless cancelledfunction requestHide() {    timer = setTimeout("hideMenus()", 250);}// "brute force" hiding of all menus and restoration// of normal menu bar imagesfunction hideMenus() {    for (var i = 0; i < menus.length; i++) {       document.getElementById(menus[i].mBarImgId).className = "menuImg";       var menu = document.getElementById(menus[i].elemId)       menu.style.visibility = "hidden";    }}// set menu position just before displaying itfunction positionMenu(menuId){    // use the menu bar image for position reference of related div    var mBarImg = document.getElementById(menus[menuId].mBarImgId);    var offsetTrail = mBarImg;    var offsetLeft = 0;    var offsetTop = 0;    while (offsetTrail) {        offsetLeft += offsetTrail.offsetLeft;        offsetTop += offsetTrail.offsetTop;        offsetTrail = offsetTrail.offsetParent;    }    if (navigator.userAgent.indexOf("Mac") != -1 &&         typeof document.body.leftMargin != "undefined") {        offsetLeft += document.body.leftMargin;        offsetTop += document.body.topMargin;    }    var menuDiv = document.getElementById(menuId);    menuDiv.style.left = offsetLeft + "px";    menuDiv.style.top = offsetTop + parseInt(CSSRuleValues.menuItemHeight) + "px";}// display a particular menu divfunction showMenu(menuId) {    if (menuReady) {        keepMenu();        hideMenus();        positionMenu(menuId);        var menu = document.getElementById(menuId);        menu.style.visibility = "visible";    }}// menu bar image swapping, invoked from mouse events in menu bar// swap style sheets for menu items during rolloversfunction toggleHighlight(evt) {    evt = (evt) ? evt : ((event) ? event : null);    if (typeof menuReady != "undefined") {        if (menuReady && evt) {            var elem = (evt.target) ? evt.target : evt.srcElement;            if (elem.nodeType == 3) {                elem = elem.parentNode;            }            if (evt.type == "mouseover") {                keepMenu();                elem.className ="menuItemOn";            } else {                elem.className ="menuItem";                requestHide();            }            evt.cancelBubble = true;        }    }}function swap(evt) {    evt = (evt) ? evt : ((event) ? event : null);    if (typeof menuReady != "undefined") {        if (evt && (document.getElementById && document.styleSheets) && menuReady) {            var elem = (evt.target) ? evt.target : evt.srcElement;			if (elem.className == "menuImg" || elem.className == "menuImgHilite") {				if (elem.nodeName == "A") {					elem = elem.parentNode;				}				if (evt.type == "mouseover") {                    showMenu(menus[elem.id].elemId);                    elem.className = "menuImgHilite";                } else if (evt.type == "mouseout") {                    requestHide();                }                evt.cancelBubble = true;            }        }    }}// create menus only if key items are supportedfunction initMenus() {    if (document.getElementById && document.styleSheets) {        setTimeout("makeMenus()", 5);        window.onunload=cancelAll;    }}
