source: GTP-Internal/trunk/Webpage/NOF/gtp_webpage/gtp_webpage_html/assets/rollover.js @ 1067

Revision 1067, 33.4 KB checked in by giegl, 18 years ago (diff)

gtp_webpage_html - exported webpage folder

Line 
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
Note: See TracBrowser for help on using the repository browser.