/** * Fusion 8 DHTML Menus */ /***************************************** Global Parameters *****************************************/ var GLOBAL_LoadedImages = new Array(); var GLOBAL_CurrentItem = ""; var GLOBAL_Close = null; var GLOBAL_Hide = null; var GLOBAL_items = new NOF_OpenedItems(); var GLOBAL_slideItem = null; var GLOBAL_slideSpeed = 10; //Defines how fast the slide submenus will unfold var GLOBAL_slidePixel = 0; var GLOBAL_slideMinOffset = -800; var GLOBAL_slideMaxOffset = 800; var useDebuger = false; /* * DOM compliant browsers */ function NOF_DOMBrowser() { this.getMenuItemLayerStartString = function getMenuItemLayerStartString(menuItemId, parentId) { parentId = ( (parentId != null) && (parentId != "undefined") && (typeof(parentId) != "undefined")) ? new String(parentId + CONSTANTS.MENU_LAYER_SUFIX) : null; menuItemId += CONSTANTS.MENU_LAYER_SUFIX; var isAutoClose = typeof(C_MENU_AUTO_CLOSE) == "undefined" || C_MENU_AUTO_CLOSE == true ? "true" : "false"; return ''; } /** method showMenuItem *@parameter image Image object - item parent *@parameter item String or Object coresponding to a layer *@parameter offsetX: horizontal offset distance from parent *@parameter offsetY: vertical offset distance from parent *@parameter direction Horizontal = false, Vertical = true */ this.showMenuItem = function showMenuItem(image, item, offsetX, offsetY, openEffect) { if (typeof(item) == "string") item = this.getItem(item) image = typeof(image) == "string" ? this.getItem(image) : image; var top = this.findItemTopOffset(image); var left = this.findItemLeftOffset(image); var slideDirection = ""; if (openEffect.indexOf("left") > -1 || openEffect.indexOf("Left") > -1 ) { top += offsetY; left -= offsetX; slideDirection = "left"; } else if (openEffect.indexOf("top") > -1 || openEffect.indexOf("Top") > -1 ) { top -= offsetY; left += offsetX; slideDirection = "top"; } else if (openEffect.indexOf("right") > -1 || openEffect.indexOf("Right") > -1 ) { top += offsetY; left += offsetX; slideDirection = "right"; } else { // Bottom top += offsetY; left += offsetX; slideDirection = "bottom"; } if (item == null || typeof(item.style) == "undefined" || item.style == null ) return; item.style.top = top; item.style.left = left; item.style.visibility = "visible"; if (openEffect.indexOf("slide") > -1) this.slideEffect(item, slideDirection); else if (openEffect.indexOf("fade") > -1) this.fadeEffect(item); } this.hideMenuItem = function hideMenuItem(item) { if (typeof(item) == "string") item = this.getItem(item) if ( item == null || typeof(item) == "undefined" || item == "") return; item.style.visibility = "hidden"; } this.findItemLeftOffset = function findItemLeftOffset(item) { var offset = item.offsetLeft; if (item.offsetParent) offset += this.findItemLeftOffset(item.offsetParent); return offset; } this.findItemTopOffset = function findItemTopOffset(item) { var offset = item.offsetTop; if (item.offsetParent) offset += this.findItemTopOffset(item.offsetParent); return offset; } this.getItem = function getItem(itemId) { return document.getElementById(itemId); } this.getItemAttribute = function getItemAttribute(itemId, attrId) { if (this.getItem(itemId)) { var attr = this.getItem(itemId).attributes; return eval("attr." + attrId.toLowerCase() + ".value"); } } this.debug = function debug(txt) { var container = this.getItem("debug"); if ( useDebuger ) container.value += txt + "\n"; } this.fadeEffect = function fadeEffect(item) { item.style.visibility = "hidden"; item.filters.blendTrans.Apply(); item.filters.blendTrans.Play(); item.style.visibility = "visible"; } this.slideEffect = function slideEffect(item, margin) { GLOBAL_slideItem = item; this.setItemClip('rect(auto, auto, auto, auto)'); GLOBAL_slidePixel = (margin == "top" || margin == "left") ? 100 : 0; this.playEffect(margin); } this.playEffect = function playEffect(margin) { var clip = GLOBAL_slideItem.style.clip; if (clip.indexOf("-") > 0) // NS7.x fix return; if (GLOBAL_slidePixel < GLOBAL_slideMinOffset || GLOBAL_slidePixel > GLOBAL_slideMaxOffset) return; var rect = 'rect('; if (margin == "top") { GLOBAL_slidePixel -= 3; rect += GLOBAL_slidePixel +'px auto auto auto)'; } else if (margin == "right") { GLOBAL_slidePixel += 3; rect += 'auto ' + GLOBAL_slidePixel +'px auto auto)'; } else if (margin == "bottom") { GLOBAL_slidePixel += 3; rect += 'auto auto ' + GLOBAL_slidePixel + 'px auto)'; } else {//left GLOBAL_slidePixel -= 3; rect += 'auto auto auto ' + GLOBAL_slidePixel + 'px)'; } this.setItemClip(rect); setTimeout('browser.playEffect("' + margin + '")', GLOBAL_slideSpeed); } this.setItemClip = function setItemClip(rect) { GLOBAL_slideItem.style.clip = rect; } this.getLayerTag = function getLayerTag() { return "div" }; } /* * Netscape 6+ and Mozilla */ function NOF_BrowserNetscapeNavigator() { //Event capture window.onclick= HideMenu; this.fadeEffect = function fadeEffect() { return; }; return this; } NOF_BrowserNetscapeNavigator.prototype = new NOF_DOMBrowser; /* * Internet Explorer 5+ */ function NOF_BrowserInternetExplorer() { //Event capture document.onmouseup = HideMenu; } NOF_BrowserInternetExplorer.prototype = new NOF_DOMBrowser; /* * Nestcape Navigator version 4.x */ function NOF_BrowserNetscape4x() { this.getMenuItemLayerStartString = function getMenuItemLayerStartString(menuItemId, parentId) { parentId = ( (parentId != null) && (parentId != "undefined") && (typeof(parentId) != "undefined")) ? new String(parentId + CONSTANTS.MENU_LAYER_SUFIX) : null; menuItemId += CONSTANTS.MENU_LAYER_SUFIX; var isAutoClose = typeof(C_MENU_AUTO_CLOSE) == "undefined" || C_MENU_AUTO_CLOSE == true ? "true" : "false"; return ''; } this.getMenuItemLayerEndString = function getMenuItemLayerEndString() { return ''; } this.getImageParent = function getImageParent(imageObject){ for (var position = 0; position < document.layers.length; position++) { var layer = document.layers[position]; for (var imagePosition = 0; imagePosition < layer.document.images.length; imagePosition++) { if (layer.document.images[imagePosition].name == imageObject.name) { return layer; } } } return null; } /** method showMenuItem *@parameter image Image object - item parent *@parameter item String or Object coresponding to a layer *@parameter offsetX: horizontal offset distance from parent *@parameter offsetY: vertical offset distance from parent *@parameter direction Horizontal = false, Vertical = true */ this.showMenuItem = function showMenuItem(image, item, offsetX, offsetY, openEffect) { var parent = this.getImageParent(image); var itemId = image; if (typeof(item) == "string") item = this.getItem(item) image = typeof(image) == "string" ? this.getItem(image) : image; var top = this.findItemTopOffset(image); var left = this.findItemLeftOffset(image); if (parent != null) { left += parent.pageX; top += parent.pageY; } var slideDirection = ""; if (openEffect.indexOf("left") > -1 || openEffect.indexOf("Left") > -1 ) { top += offsetY; left -= offsetX; slideDirection = "left"; } else if (openEffect.indexOf("top") > -1 || openEffect.indexOf("Top") > -1 ) { top -= offsetY; left += offsetX; slideDirection = "top"; } else if (openEffect.indexOf("right") > -1 || openEffect.indexOf("Right") > -1 ) { top += offsetY; left += offsetX; slideDirection = "right"; } else { // Bottom top += offsetY; left += offsetX; slideDirection = "bottom"; } if (typeof(item) == "undefined") return; item.y = parseInt(top); item.x = parseInt(left); item.visibility = "visible"; if (openEffect.indexOf("slide") > -1) this.slideEffect(item, slideDirection); else if (openEffect.indexOf("fade") > -1) { this.fadeEffect(item); } } this.hideMenuItem = function hideMenuItem(item) { if (typeof(item) == "string") item = this.getItem(item) if ( item == null || typeof(item) == "undefined" || item == "") return; item.visibility = "hide"; } this.findItemLeftOffset = function findItemLeftOffset(item) { return item.x; } this.findItemTopOffset = function findItemTopOffset(item) { return item.y; } this.getItem = function getItem(itemId) { if (itemId == "") return; var item = eval("document.layers['" + itemId + "']"); return item; } this.getItemAttribute = function getItemAttribute(itemId, attrId) { return eval("document.layers['" + itemId.toLowerCase() + "']." + attrId); } this.getLayerTag = function getLayerTag() { return "layer" }; this.slideEffect = function slideEffect(item, margin) { GLOBAL_slideItem = item; GLOBAL_slidePixel = (margin == "bottom" || margin == "left") ? 200 : 0; this.playEffect(margin); } this.playEffect = function playEffect(margin) { if (GLOBAL_slidePixel < GLOBAL_slideMinOffset || GLOBAL_slidePixel > GLOBAL_slideMaxOffset) return; if (margin == "top") { GLOBAL_slideItem.clip.bottom = GLOBAL_slidePixel += 1; } else if (margin == "right") { GLOBAL_slideItem.clip.right = GLOBAL_slidePixel += 1; } else if (margin == "bottom") { GLOBAL_slideItem.clip.top = GLOBAL_slidePixel -= 1; } else {//left GLOBAL_slideItem.clip.left = GLOBAL_slidePixel -= 1; } setTimeout('browser.playEffect("' + margin + '")', GLOBAL_slideSpeed); } } NOF_BrowserNetscape4x.prototype = new NOF_DOMBrowser; /** NOF.BrowserFactory *@return The associate class for the browser */ function NOF_BrowserFactory() { var agt = navigator.userAgent.toLowerCase(); var is_major = parseInt(navigator.appVersion); var is_minor = parseFloat(navigator.appVersion); var is_nav = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)); var is_nav2 = (is_nav && (is_major == 2)); var is_nav3 = (is_nav && (is_major == 3)); var is_nav4 = (is_nav && (is_major == 4)); var is_nav4up = (is_nav && (is_major >= 4)); var is_navonly = (is_nav && ((agt.indexOf(";nav") != -1) || (agt.indexOf("; nav") != -1)) ); var is_nav6 = (is_nav && (is_major == 5)); var is_nav6up = (is_nav && (is_major >= 5)); var is_gecko = (agt.indexOf('gecko') != -1); var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1)); var is_ie3 = (is_ie && (is_major < 4)); var is_ie4 = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) ); var is_ie4up = (is_ie && (is_major >= 4)); var is_ie5 = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) ); var is_ie5_5 = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1)); var is_ie5up = (is_ie && !is_ie3 && !is_ie4); var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5); var is_ie6 = (is_ie && (is_major == 4) && (agt.indexOf("msie 6.")!=-1) ); var is_ie6up = (is_ie && !is_ie3 && !is_ie4 && !is_ie5 && !is_ie5_5); var is_opera = (agt.indexOf("opera") != -1); var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1); var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1); var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1); var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1); var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4); this.getBrowser = function getBrowser() { if (is_ie5up) { return new NOF_BrowserInternetExplorer(); } if (is_nav6up) { return new NOF_BrowserNetscapeNavigator(); } if (is_opera5up) { return new NOF_BrowserInternetExplorer(); } if (is_nav4) { return new NOF_BrowserNetscape4x(); } } } var browserFactory = new NOF_BrowserFactory(); var browser = browserFactory.getBrowser(); /***************************************** NOF.Menu Constants *****************************************/ var CONSTANTS = { MENU_TYPE_IMAGE : "Image", MENU_TYPE_TEXT : "Text", BUTTON_TYPE_IMAGE : "image", BUTTON_TYPE_TEXT : "text", MENU_TABLE_HEADER : '', MENU_TABLE_END : '
', MOUSE_OVER_IMAGE : 1, MOUSE_OUT_IMAGE : 2, MENU_ITEM_HORIZONTAL : false, MENU_ITEM_VERTICAL : true, MENU_LAYER_SUFIX : "LYR", NOT_A_MAIN_ITEM : 1, MENU_REFRESH_TIME : 600 } /** * NOF_Menu */ function NOF_Menu() { return this; } /** * NOF_Menu_Item */ function NOF_Menu_Item() { this.id = arguments[0]; //div id this.orientation = arguments[1]; this.openEffect = arguments[2]; this.offsetX = arguments[3]; this.offsetY = arguments[4]; this.buttons = new Array(); this.submenuHeight = 0; for (var i = 5; i < arguments.length; i++) this.buttons[i - 5] = arguments[i]; this.getPosition = function () { return new Array(this.offsetX, this.offsetY); } this.getOffsetX = function getOffsetX() { return this.offsetX;} this.getOffsetY = function getOffsetY() { return this.offsetY;} this.getOpenEffect = function getOffsetY() { return this.openEffect;} this.getOrientation = function getOrientation() { return this.orientation; } return this; } /** @name NOF_Menu_Button @parameter normal : image name (src) or text (link value), depending on button type : image or text. @parameter rollover : rollover image name or css attributes, depending on button type : image or text. @parameter submenu : a NOF_Menu_Item instance. */ function NOF_Menu_Button(link, normal, rollover, submenu) { this.link = link; this.normal = normal; this.rollover = rollover != "" ? rollover : normal; this.submenu = submenu; this.hasSubmenu = function hasSubmenu() { return (this.submenu != null) } this.type = function type() { if (typeof(this.rollover) == "object") return CONSTANTS.BUTTON_TYPE_TEXT; else if (typeof(this.rollover) == "string") return CONSTANTS.BUTTON_TYPE_IMAGE; else return null; } return this; } /** *@name NOF_Main_Menu *@description Menu generation - HTML code insertion in page *@parameter NOF_Menu_Item menuItem *@parameter parentId (another NOF_Menu_Item) of NOF_Menu_Item menuItem */ function NOF_Main_Menu(menuItem, parentId) { if(typeof(menuItem) == "undefined") return; var menuItemId = menuItem.id; var buffer = browser.getMenuItemLayerStartString(menuItemId, parentId) + ''; var i = 0; buffer += ''; while (i < menuItem.buttons.length) { var menuButton = menuItem.buttons[i]; if (menuButton == null) // If page is excluded from navigation then button is 'null' return; var submenuId = ""; if (menuButton.hasSubmenu() && menuButton.submenu) { submenuId = menuButton.submenu.id; } var link = menuButton.link; // Link to Page var image = menuButton.normal; // Image - menu cell var rollOverButton = menuButton.rollover; // Roll over image - loaded onmouseover, var isImageMenu = menuButton.type() == CONSTANTS.BUTTON_TYPE_IMAGE ? true : false; var imageName = isImageMenu ? menuItemId + 's' + i : 'NavigationButton_' + menuItemId + '_' + i; var isVertical = menuItem.orientation == "vertical" ? true : false; // Extract link target and href var target = ''; if (link.indexOf(' target=') != -1) { target = link.substr(link.indexOf(' target=') + 8); link = link.substr(0, link.indexOf(' target=')); } // Append buttons on vertical or horizontal buffer += (isVertical && i > 1) ? '' : '><' + browser.getLayerTag() + ' id="' + imageName + '_padding" style="padding:' + rollOverButton[1] + '" padding="' + rollOverButton[1] + '" paddingOver="' + rollOverButton[3] + '">' + image + ''; buffer += isVertical ? "" : ""; i++; } buffer += CONSTANTS.MENU_TABLE_END + browser.getMenuItemLayerEndString(); document.writeln(buffer); var k = 0; while (k < menuItem.buttons.length) { if (menuItem.buttons[k].hasSubmenu()) { NOF_Main_Menu(menuItem.buttons[k].submenu, menuItem.id); } k++; } } /** *@name NOF.MenuLoadRollOverImage *@parameter button: *@parameter buttonName: *@parameter submenu: Array(int offsetX, int offsetY, String submenuId, boolean ??). */ function NOF_MenuLoadRollOver(button, buttonName, submenu) { // Check if button is image if (button && button.src && (null == button.out || typeof(button.out) == typeof(void(0)))) { var imageSrc = button.src; button.out = new Image(); button.out.src = imageSrc; button.over = new Image(); if (buttonName.lastIndexOf('/') >= 0 || buttonName.lastIndexOf('\\') >= 0) { imageSrc = buttonName; } else { var i = imageSrc.lastIndexOf('/'); if (i < 0) i = imageSrc.lastIndexOf('\\'); if (i < 0) imageSrc = buttonName; else imageSrc = imageSrc.substring(0, i + 1) + buttonName; } button.over.src = imageSrc; button.submenu = submenu; GLOBAL_LoadedImages[button.name] = button; // Button is text } else { if (typeof(buttonName) == "object") { if (typeof(GLOBAL_LoadedImages[button]) == "undefined") { GLOBAL_LoadedImages[button + "Normal"] = buttonName[0]; GLOBAL_LoadedImages[button + "Over"] = buttonName[2]; GLOBAL_LoadedImages[button] = submenu; } return; } if (typeof(submenu) != "undefined" && typeof(button) == "string" && typeof(GLOBAL_LoadedImages[button]) == "undefined") GLOBAL_LoadedImages[button] = submenu; } } /** *@name NOF.MenuRollButton *@description Show rollover cell *@parameter buttonName: image name *@parameter over: 1 means mouse over (load rollverimage) , 0 means mouseout (load original image). */ function NOF_MenuRollButton(buttonName, over, layerId, isNotMainItem) { var rollType = (over == CONSTANTS.MOUSE_OVER_IMAGE) ? "over" : "out"; // Defined in NOF_MenuLoadRollOver var isOver = (over == CONSTANTS.MOUSE_OVER_IMAGE) ? true : false; var rollOver = GLOBAL_LoadedImages[buttonName]; if (typeof(rollOver) == "undefined") return; var menuType = typeof(rollOver.src) == "undefined" ? CONSTANTS.MENU_TYPE_TEXT : CONSTANTS.MENU_TYPE_IMAGE; if (menuType == CONSTANTS.MENU_TYPE_IMAGE) { // Image menu var imageRollSrcString = "rollOver." + rollType + ".src"; if (rollOver) rollOver.src = eval(imageRollSrcString) ? eval(imageRollSrcString) : ""; } else if (menuType == CONSTANTS.MENU_TYPE_TEXT){ // Text menu if (typeof(buttonName) == "string") { browser.getItem(buttonName).className = isOver ? buttonName + "Hover" : buttonName; if (browser.getItem(buttonName + "_padding")){ browser.getItem(buttonName + "_padding").style.padding = isOver ? browser.getItem(buttonName + "_padding").paddingOver : browser.getItem(buttonName + "_padding").padding; } if (typeof(browser.getItem(buttonName).style) != "undefined") browser.getItem(buttonName).style.cssText = isOver ? GLOBAL_LoadedImages[buttonName + "Over"] : GLOBAL_LoadedImages[buttonName + "Normal"]; } } else // Undefined menu type return; if ((isNotMainItem == null || typeof(isNotMainItem) == "undefined" ) && over == CONSTANTS.MOUSE_OUT_IMAGE) { GLOBAL_CurrentItem = ""; GLOBAL_items.removeAll(); } var hasSubmenu = null; if (menuType == CONSTANTS.MENU_TYPE_IMAGE) hasSubmenu = rollOver.submenu; else if (menuType == CONSTANTS.MENU_TYPE_TEXT) hasSubmenu = typeof(rollOver) == "object"; if (hasSubmenu) { if (over == CONSTANTS.MOUSE_OVER_IMAGE) { if ( layerId && typeof(layerId) != "undefined" && layerId != "null") { if (GLOBAL_Close != null) clearTimeout(GLOBAL_Close); GLOBAL_items.removeSubitems(layerId + CONSTANTS.MENU_LAYER_SUFIX); } else GLOBAL_items.removeAll(); if (menuType == CONSTANTS.MENU_TYPE_IMAGE) NOF_MenuOpenItem(rollOver, rollOver.submenu, layerId); else NOF_MenuOpenItem(buttonName, rollOver, layerId); } else { // MOUSE_OUT_IMAGE if (menuType == CONSTANTS.MENU_TYPE_IMAGE) NOF_MenuCloseItem(rollOver.submenu); else NOF_MenuCloseItem(rollOver); } } else if (over == CONSTANTS.MOUSE_OVER_IMAGE ) { // This image doesn't have a submenu, only a rollover button if ( layerId && typeof(layerId) != "undefined" && layerId != "null" ) { GLOBAL_CurrentItem = layerId + CONSTANTS.MENU_LAYER_SUFIX; GLOBAL_items.removeSubitems(GLOBAL_CurrentItem); } else // Only for html - always visible - menu part browser.hideMenuItem(GLOBAL_CurrentItem); } } /** *@name NOF.MenuOpenItem *@description Opens (visibility = 'visible') one menu item *@parameter image Image object that is parent for this submenu *@parameter imageSubmenu : Array(offset, layerId, horizontal) : * offsetX - distance from parent left * offsetY - distance from parent top * layerId - layer ID that will be opened * horizontal - indicates if it's horizontal or vertical. True = vertical, False = horizontal *@parameter parentId *@parameter */ function NOF_MenuOpenItem(image, submenu, parentId) { var layerId = submenu[0] + CONSTANTS.MENU_LAYER_SUFIX; var orientation = submenu[1]; var openEffect = submenu[2]; var offsetX = submenu[3]; var offsetY = submenu[4]; GLOBAL_items.addItem(layerId, parentId); GLOBAL_CurrentItem = layerId; // Current opened layer browser.showMenuItem(image, layerId, offsetX, offsetY, openEffect); } /** *@name NOF.MenuCloseItem *@description Close a menu item if mouse is out of it but not on his child. *@parameter */ function NOF_MenuCloseItem(imageSubmenu) { if (imageSubmenu[0]) { var layerId = imageSubmenu[0] + CONSTANTS.MENU_LAYER_SUFIX; // If mouse outside a cell that belongs to main menu (root) - close it if (GLOBAL_items.toArray().length == 1) GLOBAL_CurrentItem = 0; GLOBAL_Close = setTimeout("NOF_MenuHideItem('" + layerId + "')", CONSTANTS.MENU_REFRESH_TIME/4); } } /** *@name NOF.MenuHideItem *@description *@parameter itemId */ function NOF_MenuHideItem(itemId) { if (itemId && itemId != null && GLOBAL_CurrentItem != itemId) { // Close item if mouse not over it browser.hideMenuItem(itemId); } } /** *@name NOF_KeepOpen *@description Keeps a menu item (child) opened when mouse over it *@parameter item Layer (Div) object */ function NOF_KeepOpen(itemId, parentId) { GLOBAL_CurrentItem = itemId; if (GLOBAL_Hide != null) for (var i = 0; i < GLOBAL_Hide.length; i++) clearTimeout(GLOBAL_Hide[i]); } /** *@name NOF_KeepClose *@description Keeps a menu item (child) closed when mouse out of it */ function NOF_KeepClose() { GLOBAL_CurrentItem = ""; setTimeout("NOF_CloseChilds()", CONSTANTS.MENU_REFRESH_TIME); } /** *@name NOF_CloseChilds *@description Close submenus when mouse goes out of layer */ function NOF_CloseChilds() { var itemsList = GLOBAL_items.toArray(); GLOBAL_Hide = new Array(); if (GLOBAL_CurrentItem == "" || GLOBAL_CurrentItem == 0) for (var i in itemsList) if (itemsList[i]) GLOBAL_Hide[i] = setTimeout("browser.hideMenuItem('" + itemsList[i] + "')", CONSTANTS.MENU_REFRESH_TIME/4); if (!isMenuAutoClose()) { itemsList = GLOBAL_items.toArray(); // Keep visible current opened submenus for ( var i in itemsList ) if (itemsList[i]) NOF_KeepOpen(itemsList[i]); } } function isMenuAutoClose() { var itemsList = GLOBAL_items.toArray(); if (itemsList[0] && itemsList[0].length) { var autoClose = browser.getItemAttribute(itemsList[0], "isautoclose"); if ( autoClose == "true") return true; else return false; } return false; } /** *@name HideMenu() *@description Hide menu when click outside his area. Used in 'Non auto close navbars'. */ function HideMenu() { if (isMenuAutoClose()) return; var itemsList = GLOBAL_items.toArray(); if (GLOBAL_Hide == null) GLOBAL_Hide = new Array(); for (var i in itemsList) if (itemsList[i] && itemsList[i].length) { GLOBAL_items.removeItem(itemsList[i]); GLOBAL_Hide[i] = browser.hideMenuItem(itemsList[i]); } } /** *@name NOF_OpenedItems() *@description Keeps a list w/ current submenus open (visible) */ function NOF_OpenedItems() { this.openedItems = ""; this.separator = "*"; /** method addItem *@description: adds one item in list using "*" separator */ this.addItem = function addItem(item, parent) { if ( item == null || !item || item == "" ) return; if (this.openedItems.indexOf(item) == -1) { this.openedItems += this.openedItems.length ? ( this.openedItems.indexOf(this.separator) == this.openedItems.length - 1 ? "" : this.separator ) + item : item; } } /** method removeItem *@description: remove one item */ this.removeItem = function removeItem(item) { if ( item == GLOBAL_CurrentItem ) return; var temp = this.openedItems; if (temp.indexOf(item) > 0) { var a = temp.substring(0, temp.indexOf(item)); var b = temp.substring(temp.indexOf(item) + item.length, temp.length ); temp = a + b; } while (temp.lastIndexOf(this.separator) == temp.length - 1) temp = temp.substring(0, temp.length - 1); this.openedItems = temp; } /** method removeSubitems *@description: remove all subitems (items above) 'item' */ this.removeSubitems = function removeSubitems(item) { if (item && typeof(item) != "undefined") { var temp = this.openedItems; temp = temp.substring(0, temp.lastIndexOf(item) + item.length); var temp1 = this.openedItems.substring(this.openedItems.indexOf(temp) + temp.length, this.openedItems.length); temp1 = temp1.split(this.separator); for (var i = temp1.length - 1; i >= 0; i--) if (temp1[i]) browser.hideMenuItem(temp1[i]); this.openedItems = temp; } } /** method currentItem *@description: return current item */ this.currentItem = function currentItem() { var list = this.toArray(); return list[list.length - 1]; } /** method removeAll *@description: remove all items and hide them */ this.removeAll = function removeAll() { var items = this.toArray(); clearTimeout(GLOBAL_Close); for (var i = items.length - 1; i >= 0; i--) if ( items[i] != null && items[i] != "" ) { clearTimeout(items[i]); browser.hideMenuItem(items[i]); } this.openedItems = ""; } /** method toArray *@description: return an array with all items using split method by list separator */ this.toArray = function toArray() { return this.openedItems.split(this.separator); } } /** *@name F_menu() *@description backward compatibility */ function F_menu(item) { NOF_Menu(item); } /** *@name F_roll() *@description backward compatibility */ function F_roll(itemId, over, layerId, isNotMainItem){ var layerId = (layerId == null || typeof(layerId) == "undefined") ? null : layerId; var isNotMainItem = (isNotMainItem == null || typeof(isNotMainItem) == "undefined") ? null : isNotMainItem; NOF_MenuRollButton(itemId, over, layerId, isNotMainItem); } /** F_loadRollover *@param image *@param submenu: Array(String submenuId, submenuOrientation, int offsetX, int offsetY). */ function F_loadRollover(image, rollOverButton, submenu) { return NOF_MenuLoadRollOver(image, rollOverButton, submenu); }
' : ''; // Append button link and mouse over event buffer += '' : '>'; // If button is image then append tag, otherwise append
buffer += isImageMenu ? '