1/** 2 * Fusion 8 DHTML Menus 3 */ 4 5 6/***************************************** 7Global Parameters 8*****************************************/ 9 10var GLOBAL_LoadedImages = new Array(); 11var GLOBAL_CurrentItem = ""; 12var GLOBAL_Close = null; 13var GLOBAL_Hide = null; 14var GLOBAL_items = new NOF_OpenedItems(); 15 16var GLOBAL_slideItem = null; 17var GLOBAL_slideSpeed = 10; //Defines how fast the slide submenus will unfold 18var GLOBAL_slidePixel = 0; 19var GLOBAL_slideMinOffset = -800; 20var GLOBAL_slideMaxOffset = 800; 21 22var useDebuger = false; 23 24 25/* 26* DOM compliant browsers 27*/ 28function NOF_DOMBrowser() { 29 30 this.getMenuItemLayerStartString = function getMenuItemLayerStartString(menuItemId, parentId) { 31 32 parentId = ( (parentId != null) && (parentId != "undefined") && (typeof(parentId) != "undefined")) 33 ? new String(parentId + CONSTANTS.MENU_LAYER_SUFIX) : null; 34 menuItemId += CONSTANTS.MENU_LAYER_SUFIX; 35 36 var isAutoClose = typeof(C_MENU_AUTO_CLOSE) == "undefined" || C_MENU_AUTO_CLOSE == true ? "true" : "false"; 37 38 return '<DIV ID="' + menuItemId + '" isautoclose="' + isAutoClose + '" STYLE="z-index:5; filter:blendTrans(duration=0.5)" onmouseover="NOF_KeepOpen(\'' + menuItemId + '\', ' + parentId + ')" onmouseout="NOF_KeepClose()">'; 39 } 40 41 this.getMenuItemLayerEndString = function getMenuItemLayerEndString() { 42 return '</DIV>'; 43 } 44 45 /** method showMenuItem 46 *@parameter image Image object - item parent 47 *@parameter item String or Object coresponding to a layer 48 *@parameter offsetX: horizontal offset distance from parent 49 *@parameter offsetY: vertical offset distance from parent 50 *@parameter direction Horizontal = false, Vertical = true 51 */ 52 this.showMenuItem = function showMenuItem(image, item, offsetX, offsetY, openEffect) { 53 54 if (typeof(item) == "string") 55 item = this.getItem(item) 56 57 image = typeof(image) == "string" ? this.getItem(image) : image; 58 59 var top = this.findItemTopOffset(image); 60 var left = this.findItemLeftOffset(image); 61 62 var slideDirection = ""; 63 if (openEffect.indexOf("left") > -1 || openEffect.indexOf("Left") > -1 ) { 64 top += offsetY; 65 left -= offsetX; 66 slideDirection = "left"; 67 } else if (openEffect.indexOf("top") > -1 || openEffect.indexOf("Top") > -1 ) { 68 top -= offsetY; 69 left += offsetX; 70 slideDirection = "top"; 71 } else if (openEffect.indexOf("right") > -1 || openEffect.indexOf("Right") > -1 ) { 72 top += offsetY; 73 left += offsetX; 74 slideDirection = "right"; 75 } else { // Bottom 76 top += offsetY; 77 left += offsetX; 78 slideDirection = "bottom"; 79 } 80 81 if (item == null || typeof(item.style) == "undefined" || item.style == null ) 82 return; 83 84 item.style.top = top; 85 item.style.left = left; 86 item.style.visibility = "visible"; 87 88 if (openEffect.indexOf("slide") > -1) 89 this.slideEffect(item, slideDirection); 90 else if (openEffect.indexOf("fade") > -1) 91 this.fadeEffect(item); 92 } 93 94 95 this.hideMenuItem = function hideMenuItem(item) { 96 //try { 97 if (typeof(item) == "string") 98 item = this.getItem(item) 99 100 if ( item == null || typeof(item) == "undefined" || item == "" || typeof(item) == "number") 101 return; 102 103 item.style.visibility = "hidden"; 104 //} catch(ignoreEx) { } 105 } 106 107 this.findItemLeftOffset = function findItemLeftOffset(item) { 108 109 var offset = item.offsetLeft; 110 if (item.offsetParent) 111 offset += this.findItemLeftOffset(item.offsetParent); 112 113 return offset; 114 } 115 116 this.findItemTopOffset = function findItemTopOffset(item) { 117 118 var offset = item.offsetTop; 119 if (item.offsetParent) 120 offset += this.findItemTopOffset(item.offsetParent); 121 122 return offset; 123 } 124 125 this.getItem = function getItem(itemId) { 126 return document.getElementById(itemId); 127 } 128 129 this.getItemAttribute = function getItemAttribute(itemId, attrId) { 130 131 if (this.getItem(itemId)) { 132 var attr = this.getItem(itemId).attributes; 133 return eval("attr." + attrId.toLowerCase() + ".value"); 134 } 135 } 136 137 this.debug = function debug(txt) { 138 139 var container = this.getItem("debug"); 140 if ( useDebuger ) 141 container.value += txt + "\n"; 142 } 143 144 this.fadeEffect = function fadeEffect(item) { 145 146 item.style.visibility = "hidden"; 147 item.filters.blendTrans.Apply(); 148 item.filters.blendTrans.Play(); 149 item.style.visibility = "visible"; 150 } 151 152 this.slideEffect = function slideEffect(item, margin) { 153 154 GLOBAL_slideItem = item; 155 this.setItemClip('rect(auto, auto, auto, auto)'); 156 157 GLOBAL_slidePixel = (margin == "top" || margin == "left") ? 100 : 0; 158 this.playEffect(margin); 159 } 160 161 this.playEffect = function playEffect(margin) { 162 163 var clip = GLOBAL_slideItem.style.clip; 164 if (clip.indexOf("-") > 0) // NS7.x fix 165 return; 166 167 if (GLOBAL_slidePixel < GLOBAL_slideMinOffset || GLOBAL_slidePixel > GLOBAL_slideMaxOffset) 168 return; 169
170 var rect = 'rect('; 171 if (margin == "top") { 172 GLOBAL_slidePixel -= 3; 173 rect += GLOBAL_slidePixel +'px auto auto auto)'; 174 } else if (margin == "right") { 175 GLOBAL_slidePixel += 3; 176 rect += 'auto ' + GLOBAL_slidePixel +'px auto auto)'; 177 } else if (margin == "bottom") { 178 GLOBAL_slidePixel += 3; 179 rect += 'auto auto ' + GLOBAL_slidePixel + 'px auto)'; 180 } else {//left 181 GLOBAL_slidePixel -= 3; 182 rect += 'auto auto auto ' + GLOBAL_slidePixel + 'px)'; 183 } 184 185 186 this.setItemClip(rect); 187 setTimeout('browser.playEffect("' + margin + '")', GLOBAL_slideSpeed); 188 } 189 190 this.setItemClip = function setItemClip(rect) { 191 GLOBAL_slideItem.style.clip = rect; 192 } 193 194 this.getLayerTag = function getLayerTag() { return "div" }; 195} 196 197 198/* 199* Netscape 6+ and Mozilla 200*/ 201function NOF_BrowserNetscapeNavigator() { 202 203 //Event capture 204 window.onclick= HideMenu; 205 206 this.fadeEffect = function fadeEffect() { return; }; 207 208 // Set a higher sliding speed 209 GLOBAL_slideSpeed = 1; 210 211 return this; 212} 213NOF_BrowserNetscapeNavigator.prototype = new NOF_DOMBrowser; 214 215/* 216* Internet Explorer 5+ 217*/ 218function NOF_BrowserInternetExplorer() { 219 220 //Event capture 221 document.onmouseup = HideMenu; 222} 223NOF_BrowserInternetExplorer.prototype = new NOF_DOMBrowser; 224 225 226/* 227* Nestcape Navigator version 4.x 228*/ 229function NOF_BrowserNetscape4x() { 230 231 this.getMenuItemLayerStartString = function getMenuItemLayerStartString(menuItemId, parentId) { 232 233 parentId = ( (parentId != null) && (parentId != "undefined") && (typeof(parentId) != "undefined")) 234 ? new String(parentId + CONSTANTS.MENU_LAYER_SUFIX) : null; 235 menuItemId += CONSTANTS.MENU_LAYER_SUFIX; 236 237 var isAutoClose = typeof(C_MENU_AUTO_CLOSE) == "undefined" || C_MENU_AUTO_CLOSE == true ? "true" : "false"; 238 239 return '<layer ID="' + menuItemId + '" isautoclose="' + isAutoClose + '" onmouseover="NOF_KeepOpen(\'' + menuItemId + '\', ' + parentId + ')" onmouseout="NOF_KeepClose()">'; 240 } 241 242 this.getMenuItemLayerEndString = function getMenuItemLayerEndString() { 243 return '</layer>'; 244 } 245 246 this.getImageParent = function getImageParent(imageObject){ 247 248 for (var position = 0; position < document.layers.length; position++) { 249 var layer = document.layers[position]; 250 for (var imagePosition = 0; imagePosition < layer.document.images.length; imagePosition++) { 251 if (layer.document.images[imagePosition].name == imageObject.name) { 252 return layer; 253 } 254 } 255 } 256 257 return null; 258 } 259 260 /** method showMenuItem 261 *@parameter image Image object - item parent 262 *@parameter item String or Object coresponding to a layer 263 *@parameter offsetX: horizontal offset distance from parent 264 *@parameter offsetY: vertical offset distance from parent 265 *@parameter direction Horizontal = false, Vertical = true 266 */ 267 this.showMenuItem = function showMenuItem(image, item, offsetX, offsetY, openEffect) { 268 269 var parent = this.getImageParent(image); 270 271 var itemId = image; 272 if (typeof(item) == "string") 273 item = this.getItem(item) 274 275 image = typeof(image) == "string" ? this.getItem(image) : image; 276 277 var top = this.findItemTopOffset(image); 278 var left = this.findItemLeftOffset(image); 279 280 if (parent != null) { 281 left += parent.pageX; 282 top += parent.pageY; 283 } 284 285 var slideDirection = ""; 286 if (openEffect.indexOf("left") > -1 || openEffect.indexOf("Left") > -1 ) { 287 top += offsetY; 288 left -= offsetX; 289 slideDirection = "left"; 290 } else if (openEffect.indexOf("top") > -1 || openEffect.indexOf("Top") > -1 ) { 291 top -= offsetY; 292 left += offsetX; 293 slideDirection = "top"; 294 } else if (openEffect.indexOf("right") > -1 || openEffect.indexOf("Right") > -1 ) { 295 top += offsetY; 296 left += offsetX; 297 slideDirection = "right"; 298 } else { // Bottom 299 top += offsetY; 300 left += offsetX; 301 slideDirection = "bottom"; 302 } 303 304 if (typeof(item) == "undefined") 305 return; 306 307 308 309 item.y = parseInt(top); 310 item.x = parseInt(left); 311 item.visibility = "visible"; 312 313 if (openEffect.indexOf("slide") > -1) 314 this.slideEffect(item, slideDirection); 315 else if (openEffect.indexOf("fade") > -1) { 316 this.fadeEffect(item); 317 } 318 } 319 320 this.hideMenuItem = function hideMenuItem(item) { 321 if (typeof(item) == "string") 322 item = this.getItem(item) 323 324 if ( item == null || typeof(item) == "undefined" || item == "") 325 return; 326 327 item.visibility = "hide"; 328 } 329 330 this.findItemLeftOffset = function findItemLeftOffset(item) { 331 return item.x; 332 } 333 334 this.findItemTopOffset = function findItemTopOffset(item) { 335 return item.y; 336 } 337 338 this.getItem = function getItem(itemId) { 339 340 if (itemId == "") 341 return; 342 343 var item = eval("document.layers['" + itemId + "']"); 344 345 return item; 346 } 347 348 this.getItemAttribute = function getItemAttribute(itemId, attrId) { 349 350 return eval("document.layers['" + itemId.toLowerCase() + "']." + attrId); 351 } 352 353 this.getLayerTag = function getLayerTag() { return "layer" }; 354 355 this.slideEffect = function slideEffect(item, margin) { 356 357 GLOBAL_slideItem = item; 358 GLOBAL_slidePixel = (margin == "bottom" || margin == "left") ? 200 : 0; 359 360 this.playEffect(margin); 361 } 362 363 this.playEffect = function playEffect(margin) { 364 365 if (GLOBAL_slidePixel < GLOBAL_slideMinOffset || GLOBAL_slidePixel > GLOBAL_slideMaxOffset) 366 return; 367 368 if (margin == "top") { 369 GLOBAL_slideItem.clip.bottom = GLOBAL_slidePixel += 1; 370 } else if (margin == "right") { 371 GLOBAL_slideItem.clip.right = GLOBAL_slidePixel += 1; 372 } else if (margin == "bottom") { 373 GLOBAL_slideItem.clip.top = GLOBAL_slidePixel -= 1;
374 } else {//left 375 GLOBAL_slideItem.clip.left = GLOBAL_slidePixel -= 1; 376 } 377 378 setTimeout('browser.playEffect("' + margin + '")', GLOBAL_slideSpeed); 379 } 380} 381NOF_BrowserNetscape4x.prototype = new NOF_DOMBrowser; 382 383 384/** NOF.BrowserFactory 385*@return The associate class for the browser 386*/ 387 388function NOF_BrowserFactory() { 389 390 var agt = navigator.userAgent.toLowerCase(); 391 392 var is_major = parseInt(navigator.appVersion); 393 var is_minor = parseFloat(navigator.appVersion); 394 395 var is_nav = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) 396 && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) 397 && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)); 398 var is_nav2 = (is_nav && (is_major == 2)); 399 var is_nav3 = (is_nav && (is_major == 3)); 400 var is_nav4 = (is_nav && (is_major == 4)); 401 var is_nav4up = (is_nav && (is_major >= 4)); 402 var is_navonly = (is_nav && ((agt.indexOf(";nav") != -1) || 403 (agt.indexOf("; nav") != -1)) ); 404 var is_nav6 = (is_nav && (is_major == 5)); 405 var is_nav6up = (is_nav && (is_major >= 5)); 406 var is_gecko = (agt.indexOf('gecko') != -1); 407 408 409 var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1)); 410 var is_ie3 = (is_ie && (is_major < 4)); 411 var is_ie4 = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) ); 412 var is_ie4up = (is_ie && (is_major >= 4)); 413 var is_ie5 = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) ); 414 var is_ie5_5 = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1)); 415 var is_ie5up = (is_ie && !is_ie3 && !is_ie4); 416 var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5); 417 var is_ie6 = (is_ie && (is_major == 4) && (agt.indexOf("msie 6.")!=-1) ); 418 var is_ie6up = (is_ie && !is_ie3 && !is_ie4 && !is_ie5 && !is_ie5_5); 419 420 var is_opera = (agt.indexOf("opera") != -1); 421 var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1); 422 var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1); 423 var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1); 424 var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1); 425 var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4); 426 427 this.getBrowser = function getBrowser() { 428 429 if (is_ie5up) { 430 return new NOF_BrowserInternetExplorer(); 431 } 432 433 if (is_nav6up) { 434 return new NOF_BrowserNetscapeNavigator(); 435 } 436 437 if (is_opera5up) { 438 return new NOF_BrowserInternetExplorer(); 439 } 440 441 if (is_nav4) { 442 return new NOF_BrowserNetscape4x(); 443 } 444 } 445} 446 447var browserFactory = new NOF_BrowserFactory(); 448var browser = browserFactory.getBrowser(); 449 450 451 452/***************************************** 453NOF.Menu Constants 454*****************************************/ 455 456var CONSTANTS = { 457 MENU_TYPE_IMAGE : "Image", 458 MENU_TYPE_TEXT : "Text", 459 460 BUTTON_TYPE_IMAGE : "image", 461 BUTTON_TYPE_TEXT : "text", 462 463 MENU_TABLE_HEADER : '<table border="0" cellspacing="0" cellpadding="0">', 464 MENU_TABLE_END : '</table>', 465 466 MOUSE_OVER_IMAGE : 1, 467 MOUSE_OUT_IMAGE : 2, 468 469 MENU_ITEM_HORIZONTAL : false, 470 MENU_ITEM_VERTICAL : true, 471 472 MENU_LAYER_SUFIX : "LYR", 473 474 NOT_A_MAIN_ITEM : 1, 475 476 MENU_REFRESH_TIME : 600 477} 478 479/** 480* NOF_Menu 481*/ 482function NOF_Menu() { 483 return this; 484} 485 486 487/** 488* NOF_Menu_Item 489*/ 490function NOF_Menu_Item() { 491 492 this.id = arguments[0]; //div id 493 494 this.orientation = arguments[1]; 495 this.openEffect = arguments[2]; 496 this.offsetX = arguments[3]; 497 this.offsetY = arguments[4]; 498 499 this.buttons = new Array(); 500 501 this.submenuHeight = 0; 502 for (var i = 5; i < arguments.length; i++) 503 this.buttons[i - 5] = arguments[i]; 504 505 506 this.getPosition = function () { 507 return new Array(this.offsetX, this.offsetY); 508 } 509 510 511 this.getOffsetX = function getOffsetX() { return this.offsetX;} 512 this.getOffsetY = function getOffsetY() { return this.offsetY;} 513 this.getOpenEffect = function getOffsetY() { return this.openEffect;} 514 this.getOrientation = function getOrientation() { return this.orientation; } 515 516 return this; 517} 518 519 520/** 521@name NOF_Menu_Button 522@parameter normal : image name (src) or text (link value), depending on button type : image or text. 523@parameter rollover : rollover image name or css attributes, depending on button type : image or text. 524@parameter submenu : a NOF_Menu_Item instance. 525*/ 526function NOF_Menu_Button(link, normal, rollover, submenu) { 527 528 this.link = link; 529 this.normal = normal;
530 this.rollover = rollover != "" ? rollover : normal; 531 this.submenu = submenu; 532 533 this.hasSubmenu = function hasSubmenu() { 534 return (this.submenu != null) 535 } 536 537 this.type = function type() { 538 if (typeof(this.rollover) == "object") 539 return CONSTANTS.BUTTON_TYPE_TEXT; 540 else if (typeof(this.rollover) == "string") 541 return CONSTANTS.BUTTON_TYPE_IMAGE; 542 else 543 return null; 544 } 545 return this; 546} 547 548 549/** 550*@name NOF_Main_Menu 551*@description Menu generation - HTML code insertion in page 552*@parameter NOF_Menu_Item menuItem 553*@parameter parentId (another NOF_Menu_Item) of NOF_Menu_Item menuItem 554*/ 555function NOF_Main_Menu(menuItem, parentId) { 556 557 if(typeof(menuItem) == "undefined") 558 return; 559 560 var menuItemId = menuItem.id; 561 var buffer = browser.getMenuItemLayerStartString(menuItemId, parentId) + '<table width="10" border="' + C_MENU_BORDER + '" cellspacing="' + C_MENU_SPACING + '" cellpadding="0" bgcolor="' + C_MENU_BGCOLOR + '">'; 562 var i = 0; 563 564 buffer += '<tr>'; 565 while (i < menuItem.buttons.length) { 566 var menuButton = menuItem.buttons[i]; 567 if (menuButton == null) // If page is excluded from navigation then button is 'null' 568 return; 569 570 var submenuId = ""; 571 572 if (menuButton.hasSubmenu() && menuButton.submenu) { 573 submenuId = menuButton.submenu.id; 574 } 575 576 var link = menuButton.link; // Link to Page 577 var image = menuButton.normal; // Image - menu cell 578 var rollOverButton = menuButton.rollover; // Roll over image - loaded onmouseover, 579 var isImageMenu = menuButton.type() == CONSTANTS.BUTTON_TYPE_IMAGE ? true : false; 580 var imageName = isImageMenu ? menuItemId + 's' + i : 'NavigationButton_' + menuItemId + '_' + i; 581 var isVertical = menuItem.orientation == "vertical" ? true : false; 582 583 // Extract link target and href 584 var target = ''; 585 if (link.indexOf(' target=') != -1) { 586 target = link.substr(link.indexOf(' target=') + 8); 587 link = link.substr(0, link.indexOf(' target=')); 588 } 589 590 // Append buttons on vertical or horizontal 591 buffer += (isVertical && i > 1) ? '<tr><td>' : '<td>'; 592 593 var cursor = link != 'javascript:void(0)' ? 'hand' : 'default'; 594 // Append button link and mouse over event 595 buffer += '<a style="text-decoration:none; cursor:' + cursor + ';" href="' + link + '" '; 596 buffer += 'onMouseOver="F_roll(\'' + imageName + '\' ,' + CONSTANTS.MOUSE_OVER_IMAGE + ', \'' + menuItemId + '\', \''+ 597 CONSTANTS.NOT_A_MAIN_ITEM + '\')" onMouseOut="F_roll(\'' + imageName + '\' ,' + 598 CONSTANTS.MOUSE_OUT_IMAGE + ', \''+menuItemId+'\', \'' + CONSTANTS.NOT_A_MAIN_ITEM + '\')"'; 599 600 // Append button link target 601 buffer += target.length ? ' target="' + target + '">' : '>'; 602 603 // If button is image then append <img> tag, otherwise append <div>
604 buffer += isImageMenu ? '<img border="0" src="' + image + '"' : '<' + browser.getLayerTag() + ' '; 605 606 if (typeof(rollOverButton) != "undefined" || rollOverButton.length || !isImageMenu) { 607 // This item has a submenu 608 if (submenuId != "") { 609 var submenu = menuButton.submenu; 610 if (isImageMenu) { 611 buffer += 'id="' + imageName + '" name="' + imageName + 612 '" onLoad="F_loadRollover(this,\'' + rollOverButton + '\', new Array(\'' + submenuId + '\',\'' + submenu.getOrientation() + '\' , \'' + submenu.getOpenEffect() + '\', ' + submenu.getOffsetX() + ',' + submenu.getOffsetY() + '))"'; 613 } else { 614 NOF_MenuLoadRollOver(imageName, rollOverButton, new Array(submenuId, submenu.getOrientation(), submenu.getOpenEffect(), submenu.getOffsetX(), submenu.getOffsetY() )); 615 buffer += 'id="' + imageName + '" name="' + imageName + '" class="' + imageName + '" ' ; 616 617 // Text menu has inline css 618 if (typeof(menuButton.rollover) == "object") 619 buffer+= ' style="' + rollOverButton[0] + '"'; 620 } 621 } 622 // No submenu, simple rollover 623 else { 624 if (isImageMenu) 625 buffer += 'id="' + imageName + '" name="' + imageName + 626 '" onLoad="F_loadRollover(this,\'' + rollOverButton + '\',0)"'; 627 else { 628 NOF_MenuLoadRollOver(imageName, rollOverButton, 0); 629 buffer += 'id="' + imageName + '" name="' + imageName + '" class="' + imageName + '" '; 630 // Text menu has inline css 631 if (typeof(menuButton.rollover) == "object") 632 buffer+= ' style="' + rollOverButton[0] +'"'; 633 } 634 } 635 } 636 637 // For text buttons 'image' is the name appears on it. 638 buffer += isImageMenu ? '></a></td>' : 639 '><' + browser.getLayerTag() + ' id="' + imageName + '_padding" style="padding:' + rollOverButton[1] + '" padding="' + rollOverButton[1] + '" paddingOver="' + rollOverButton[3] + '">' + image + 640 '</' + browser.getLayerTag() + '></' + browser.getLayerTag() + '></a></td>'; 641 buffer += isVertical ? "</tr>" : ""; 642 643 i++; 644 } 645 646 buffer += CONSTANTS.MENU_TABLE_END + browser.getMenuItemLayerEndString(); 647 document.writeln(buffer); 648 649 var k = 0; 650 while (k < menuItem.buttons.length) { 651 if (menuItem.buttons[k].hasSubmenu()) { 652 NOF_Main_Menu(menuItem.buttons[k].submenu, menuItem.id); 653 } 654 k++; 655 } 656} 657 658 659 660/** 661*@name NOF.MenuLoadRollOverImage 662*@parameter button: 663*@parameter buttonName: 664*@parameter submenu: Array(int offsetX, int offsetY, String submenuId, boolean ??). 665*/ 666function NOF_MenuLoadRollOver(button, buttonName, submenu) { 667 668 // Check if button is image 669 if (button && button.src && 670 (null == button.out || typeof(button.out) == typeof(void(0)))) { 671 672 673 var imageSrc = button.src; 674 button.out = new Image(); 675 button.out.src = imageSrc; 676 button.over = new Image(); 677 678 679 if (buttonName.lastIndexOf('/') >= 0 || buttonName.lastIndexOf('\\') >= 0) { 680 imageSrc = buttonName; 681 } else { 682 var i = imageSrc.lastIndexOf('/'); 683 if (i < 0) 684 i = imageSrc.lastIndexOf('\\'); 685 if (i < 0) 686 imageSrc = buttonName; 687 else 688 imageSrc = imageSrc.substring(0, i + 1) + buttonName; 689 } 690 691 button.over.src = imageSrc; 692 button.submenu = submenu; 693 GLOBAL_LoadedImages[button.name] = button; 694 695 // Button is text 696 } else { 697 if (typeof(buttonName) == "object") { 698 if (typeof(GLOBAL_LoadedImages[button]) == "undefined") { 699 GLOBAL_LoadedImages[button + "Normal"] = buttonName[0]; 700 GLOBAL_LoadedImages[button + "Over"] = buttonName[2]; 701 GLOBAL_LoadedImages[button] = submenu; 702 } 703 return; 704 } 705 if (typeof(submenu) != "undefined" && typeof(button) == "string" && typeof(GLOBAL_LoadedImages[button]) == "undefined") 706 GLOBAL_LoadedImages[button] = submenu; 707 } 708} 709 710 711/** 712*@name NOF.MenuRollButton 713*@description Show rollover cell 714*@parameter buttonName: image name 715*@parameter over: 1 means mouse over (load rollverimage) , 0 means mouseout (load original image). 716*/ 717function NOF_MenuRollButton(buttonName, over, layerId, isNotMainItem) { 718 719 var rollType = (over == CONSTANTS.MOUSE_OVER_IMAGE) ? "over" : "out"; // Defined in NOF_MenuLoadRollOver 720 var isOver = (over == CONSTANTS.MOUSE_OVER_IMAGE) ? true : false; 721 var rollOver = GLOBAL_LoadedImages[buttonName]; 722
723 if (typeof(rollOver) == "undefined") 724 return; 725 726 var menuType = typeof(rollOver.src) == "undefined" ? CONSTANTS.MENU_TYPE_TEXT : 727 CONSTANTS.MENU_TYPE_IMAGE; 728 729 if (menuType == CONSTANTS.MENU_TYPE_IMAGE) { // Image menu 730 var imageRollSrcString = "rollOver." + rollType + ".src"; 731 if (rollOver) 732 rollOver.src = eval(imageRollSrcString) ? eval(imageRollSrcString) : ""; 733 734 } else if (menuType == CONSTANTS.MENU_TYPE_TEXT){ // Text menu 735 if (typeof(buttonName) == "string") { 736 browser.getItem(buttonName).className = isOver ? buttonName + "Hover" : buttonName; 737 738 if (browser.getItem(buttonName + "_padding")){ 739 browser.getItem(buttonName + "_padding").style.padding = isOver ? 740 browser.getItem(buttonName + "_padding").paddingOver : 741 browser.getItem(buttonName + "_padding").padding; 742 } 743 744 if (typeof(browser.getItem(buttonName).style) != "undefined") 745 browser.getItem(buttonName).style.cssText = isOver ? 746 GLOBAL_LoadedImages[buttonName + "Over"] : 747 GLOBAL_LoadedImages[buttonName + "Normal"]; 748 } 749 750 } else // Undefined menu type 751 return; 752 753 if ((isNotMainItem == null || typeof(isNotMainItem) == "undefined" ) && over == CONSTANTS.MOUSE_OUT_IMAGE) { 754 GLOBAL_CurrentItem = ""; 755 GLOBAL_items.removeAll(); 756 } 757 758 var hasSubmenu = null; 759 if (menuType == CONSTANTS.MENU_TYPE_IMAGE) 760 hasSubmenu = rollOver.submenu; 761 else if (menuType == CONSTANTS.MENU_TYPE_TEXT) 762 hasSubmenu = typeof(rollOver) == "object"; 763 764 if (hasSubmenu) { 765 if (over == CONSTANTS.MOUSE_OVER_IMAGE) { 766 if ( layerId && typeof(layerId) != "undefined" && layerId != "null") { 767 if (GLOBAL_Close != null) 768 clearTimeout(GLOBAL_Close); 769 GLOBAL_items.removeSubitems(layerId + CONSTANTS.MENU_LAYER_SUFIX); 770 } else 771 GLOBAL_items.removeAll(); 772 773 if (menuType == CONSTANTS.MENU_TYPE_IMAGE) 774 NOF_MenuOpenItem(rollOver, rollOver.submenu, layerId); 775 else 776 NOF_MenuOpenItem(buttonName, rollOver, layerId); 777 } 778 else { // MOUSE_OUT_IMAGE 779 if (menuType == CONSTANTS.MENU_TYPE_IMAGE) 780 NOF_MenuCloseItem(rollOver.submenu); 781 else 782 NOF_MenuCloseItem(rollOver); 783 } 784 785 } else if (over == CONSTANTS.MOUSE_OVER_IMAGE ) { // This image doesn't have a submenu, only a rollover button 786 if ( layerId && typeof(layerId) != "undefined" && layerId != "null" ) { 787 GLOBAL_CurrentItem = layerId + CONSTANTS.MENU_LAYER_SUFIX; 788 GLOBAL_items.removeSubitems(GLOBAL_CurrentItem); 789 } else // Only for html - always visible - menu part 790 browser.hideMenuItem(GLOBAL_CurrentItem); 791 } 792} 793 794 795/** 796*@name NOF.MenuOpenItem 797*@description Opens (visibility = 'visible') one menu item 798*@parameter image Image object that is parent for this submenu 799*@parameter imageSubmenu : Array(offset, layerId, horizontal) : 800* offsetX - distance from parent left 801* offsetY - distance from parent top 802* layerId - layer ID that will be opened 803* horizontal - indicates if it's horizontal or vertical. True = vertical, False = horizontal 804*@parameter parentId 805*@parameter 806*/ 807function NOF_MenuOpenItem(image, submenu, parentId) { 808 809 var layerId = submenu[0] + CONSTANTS.MENU_LAYER_SUFIX; 810 var orientation = submenu[1]; 811 var openEffect = submenu[2]; 812 var offsetX = submenu[3]; 813 var offsetY = submenu[4]; 814 815 GLOBAL_items.addItem(layerId, parentId); 816 GLOBAL_CurrentItem = layerId; // Current opened layer 817 818 browser.showMenuItem(image, layerId, offsetX, offsetY, openEffect); 819} 820 821 822/** 823*@name NOF.MenuCloseItem 824*@description Close a menu item if mouse is out of it but not on his child. 825*@parameter 826*/ 827function NOF_MenuCloseItem(imageSubmenu) { 828 829 if (imageSubmenu[0]) { 830 var layerId = imageSubmenu[0] + CONSTANTS.MENU_LAYER_SUFIX; 831 832 // If mouse outside a cell that belongs to main menu (root) - close it 833 if (GLOBAL_items.toArray().length == 1) 834 GLOBAL_CurrentItem = 0; 835 836 GLOBAL_Close = setTimeout("NOF_MenuHideItem('" + layerId + "')", CONSTANTS.MENU_REFRESH_TIME/4); 837 } 838} 839 840 841/** 842*@name NOF.MenuHideItem 843*@description 844*@parameter itemId 845*/ 846function NOF_MenuHideItem(itemId) { 847 848 if (itemId && itemId != null && GLOBAL_CurrentItem != itemId) { // Close item if mouse not over it 849 browser.hideMenuItem(itemId); 850 } 851} 852 853 854/** 855*@name NOF_KeepOpen 856*@description Keeps a menu item (child) opened when mouse over it 857*@parameter item Layer (Div) object 858*/ 859function NOF_KeepOpen(itemId, parentId) { 860 861 GLOBAL_CurrentItem = itemId; 862 if (GLOBAL_Hide != null) 863 for (var i = 0; i < GLOBAL_Hide.length; i++) 864 clearTimeout(GLOBAL_Hide[i]); 865} 866 867 868/** 869*@name NOF_KeepClose 870*@description Keeps a menu item (child) closed when mouse out of it 871*/ 872function NOF_KeepClose() { 873 874 GLOBAL_CurrentItem = ""; 875 setTimeout("NOF_CloseChilds()", CONSTANTS.MENU_REFRESH_TIME); 876} 877 878 879/** 880*@name NOF_CloseChilds 881*@description Close submenus when mouse goes out of layer 882*/ 883function NOF_CloseChilds() { 884 885 var itemsList = GLOBAL_items.toArray(); 886 GLOBAL_Hide = new Array(); 887 if (GLOBAL_CurrentItem == "" || GLOBAL_CurrentItem == 0) 888 for (var i in itemsList) 889 if (itemsList[i]) 890 GLOBAL_Hide[i] = setTimeout("browser.hideMenuItem('" + itemsList[i] + "')", CONSTANTS.MENU_REFRESH_TIME/4); 891 892 if (!isMenuAutoClose()) { 893 itemsList = GLOBAL_items.toArray(); 894 895 // Keep visible current opened submenus 896 for ( var i in itemsList ) 897 if (itemsList[i]) 898 NOF_KeepOpen(itemsList[i]); 899 } 900} 901 902function isMenuAutoClose() { 903 904 var itemsList = GLOBAL_items.toArray(); 905 if (itemsList[0] && itemsList[0].length) { 906 var autoClose = browser.getItemAttribute(itemsList[0], "isautoclose"); 907 if ( autoClose == "true") 908 return true; 909 else 910 return false; 911 } 912 return false; 913} 914 915/** 916*@name HideMenu()
917*@description Hide menu when click outside his area. Used in 'Non auto close navbars'. 918*/ 919function HideMenu() { 920 921 if (isMenuAutoClose()) 922 return; 923 924 var itemsList = GLOBAL_items.toArray(); 925 926 if (GLOBAL_Hide == null) 927 GLOBAL_Hide = new Array(); 928 929 for (var i in itemsList) 930 if (itemsList[i] && itemsList[i].length) { 931 GLOBAL_items.removeItem(itemsList[i]); 932 GLOBAL_Hide[i] = browser.hideMenuItem(itemsList[i]); 933 } 934} 935 936 937/** 938*@name NOF_OpenedItems() 939*@description Keeps a list w/ current submenus open (visible) 940*/ 941function NOF_OpenedItems() { 942 943 this.openedItems = ""; 944 this.separator = "*"; 945 946 /** method addItem 947 *@description: adds one item in list using "*" separator 948 */ 949 this.addItem = function addItem(item, parent) { 950 951 if ( item == null || !item || item == "" ) 952 return; 953 954 if (this.openedItems.indexOf(item) == -1) { 955 956 this.openedItems += this.openedItems.length ? 957 ( this.openedItems.indexOf(this.separator) == this.openedItems.length - 1 ? "" : this.separator ) + item : 958 item; 959 } 960 } 961 962 963 /** method removeItem 964 *@description: remove one item 965 */ 966 this.removeItem = function removeItem(item) { 967 968 if ( item == GLOBAL_CurrentItem ) 969 return; 970 971 var temp = this.openedItems; 972 if (temp.indexOf(item) > 0) { 973 var a = temp.substring(0, temp.indexOf(item)); 974 var b = temp.substring(temp.indexOf(item) + item.length, temp.length ); 975 temp = a + b; 976 } 977 978 while (temp.lastIndexOf(this.separator) == temp.length - 1) 979 temp = temp.substring(0, temp.length - 1); 980 981 this.openedItems = temp; 982 } 983 984 985 /** method removeSubitems 986 *@description: remove all subitems (items above) 'item' 987 */ 988 this.removeSubitems = function removeSubitems(item) { 989 990 if (item && typeof(item) != "undefined") { 991 var temp = this.openedItems; 992 temp = temp.substring(0, temp.lastIndexOf(item) + item.length); 993 var temp1 = this.openedItems.substring(this.openedItems.indexOf(temp) + temp.length, this.openedItems.length); 994 temp1 = temp1.split(this.separator); 995 996 for (var i = temp1.length - 1; i >= 0; i--) 997 if (temp1[i]) 998 browser.hideMenuItem(temp1[i]); 999 1000 this.openedItems = temp; 1001 } 1002 } 1003 1004 /** method currentItem 1005 *@description: return current item 1006 */ 1007 this.currentItem = function currentItem() { 1008 1009 var list = this.toArray(); 1010 return list[list.length - 1]; 1011 } 1012 1013 /** method removeAll 1014 *@description: remove all items and hide them 1015 */ 1016 this.removeAll = function removeAll() { 1017 1018 var items = this.toArray(); 1019 clearTimeout(GLOBAL_Close); 1020 for (var i = items.length - 1; i >= 0; i--) 1021 if ( items[i] != null && items[i] != "" ) { 1022 clearTimeout(items[i]); 1023 browser.hideMenuItem(items[i]); 1024 } 1025 1026 this.openedItems = ""; 1027 } 1028 1029 /** method toArray 1030 *@description: return an array with all items using split method by list separator 1031 */ 1032 this.toArray = function toArray() { 1033 return this.openedItems.split(this.separator); 1034 } 1035} 1036 1037 1038/** 1039*@name F_menu() 1040*@description backward compatibility 1041*/ 1042function F_menu(item) { 1043 NOF_Menu(item); 1044} 1045 1046/** 1047*@name F_roll() 1048*@description backward compatibility 1049*/ 1050function F_roll(itemId, over, layerId, isNotMainItem){ 1051 var layerId = (layerId == null || typeof(layerId) == "undefined") ? null : layerId; 1052 var isNotMainItem = (isNotMainItem == null || typeof(isNotMainItem) == "undefined") ? null : isNotMainItem; 1053 1054 if (typeof(itemId) == "object" && itemId.constructor == Array) { 1055 for (var i = 0; i < itemId.length; i++) { 1056 NOF_MenuRollButton(itemId[i], over, layerId, isNotMainItem); 1057 } 1058 } 1059 else { 1060 NOF_MenuRollButton(itemId, over, layerId, isNotMainItem); 1061 } 1062} 1063 1064/** F_loadRollover 1065*@param image 1066*@param submenu: Array(String submenuId, submenuOrientation, int offsetX, int offsetY). 1067*/ 1068function F_loadRollover(image, rollOverButton, submenu) { 1069 return NOF_MenuLoadRollOver(image, rollOverButton, submenu); 1070} 1071
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.