1 | /**
|
---|
2 | * Fusion 8 DHTML Menus
|
---|
3 | */
|
---|
4 |
|
---|
5 |
|
---|
6 | /*****************************************
|
---|
7 | Global Parameters
|
---|
8 | *****************************************/
|
---|
9 |
|
---|
10 | var GLOBAL_LoadedImages = new Array();
|
---|
11 | var GLOBAL_CurrentItem = "";
|
---|
12 | var GLOBAL_Close = null;
|
---|
13 | var GLOBAL_Hide = null;
|
---|
14 | var GLOBAL_items = new NOF_OpenedItems();
|
---|
15 |
|
---|
16 | var GLOBAL_slideItem = null;
|
---|
17 | var GLOBAL_slideSpeed = 10; //Defines how fast the slide submenus will unfold
|
---|
18 | var GLOBAL_slidePixel = 0;
|
---|
19 | var GLOBAL_slideMinOffset = -800;
|
---|
20 | var GLOBAL_slideMaxOffset = 800;
|
---|
21 |
|
---|
22 | var useDebuger = false;
|
---|
23 |
|
---|
24 |
|
---|
25 | /*
|
---|
26 | * DOM compliant browsers
|
---|
27 | */
|
---|
28 | function 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 | */
|
---|
201 | function 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 | }
|
---|
213 | NOF_BrowserNetscapeNavigator.prototype = new NOF_DOMBrowser;
|
---|
214 |
|
---|
215 | /*
|
---|
216 | * Internet Explorer 5+
|
---|
217 | */
|
---|
218 | function NOF_BrowserInternetExplorer() {
|
---|
219 |
|
---|
220 | //Event capture
|
---|
221 | document.onmouseup = HideMenu;
|
---|
222 | }
|
---|
223 | NOF_BrowserInternetExplorer.prototype = new NOF_DOMBrowser;
|
---|
224 |
|
---|
225 |
|
---|
226 | /*
|
---|
227 | * Nestcape Navigator version 4.x
|
---|
228 | */
|
---|
229 | function 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 | }
|
---|
381 | NOF_BrowserNetscape4x.prototype = new NOF_DOMBrowser;
|
---|
382 |
|
---|
383 |
|
---|
384 | /** NOF.BrowserFactory
|
---|
385 | *@return The associate class for the browser
|
---|
386 | */
|
---|
387 |
|
---|
388 | function 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 |
|
---|
447 | var browserFactory = new NOF_BrowserFactory();
|
---|
448 | var browser = browserFactory.getBrowser();
|
---|
449 |
|
---|
450 |
|
---|
451 |
|
---|
452 | /*****************************************
|
---|
453 | NOF.Menu Constants
|
---|
454 | *****************************************/
|
---|
455 |
|
---|
456 | var 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 | */
|
---|
482 | function NOF_Menu() {
|
---|
483 | return this;
|
---|
484 | }
|
---|
485 |
|
---|
486 |
|
---|
487 | /**
|
---|
488 | * NOF_Menu_Item
|
---|
489 | */
|
---|
490 | function 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 | */
|
---|
526 | function 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 | */
|
---|
555 | function 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 | */
|
---|
666 | function 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 | */
|
---|
717 | function 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 | */
|
---|
807 | function 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 | */
|
---|
827 | function 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 | */
|
---|
846 | function 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 | */
|
---|
859 | function 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 | */
|
---|
872 | function 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 | */
|
---|
883 | function 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 |
|
---|
902 | function 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 | */
|
---|
919 | function 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 | */
|
---|
941 | function 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 | */
|
---|
1042 | function F_menu(item) {
|
---|
1043 | NOF_Menu(item);
|
---|
1044 | }
|
---|
1045 |
|
---|
1046 | /**
|
---|
1047 | *@name F_roll()
|
---|
1048 | *@description backward compatibility
|
---|
1049 | */
|
---|
1050 | function 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 | */
|
---|
1068 | function F_loadRollover(image, rollOverButton, submenu) {
|
---|
1069 | return NOF_MenuLoadRollOver(image, rollOverButton, submenu);
|
---|
1070 | }
|
---|
1071 |
|
---|