home *** CD-ROM | disk | FTP | other *** search
- /* navbar.js Copyright 2000 by Mike Hall. Web address: http://www.brainjar.com
- Last update: August 12, 2000. Creates interactive DHTML navigation bars with drop-down menus.
- Note: requires dhtmllib.js */
- // Need this to fix a bug with IE 5.5.
- var isMinIE5_5 = (isMinIE5 && navigator.appVersion.indexOf("5.5") >= 0) ? 1 : 0;
- var navBars = new Array(); // Used to track all navigation bars.
- //*****************************************************************************
- // NavBarMenuItem constructor.
- //*****************************************************************************
- function NavBarMenuItem(text, link) {
- this.text = text; // Item text.
- this.link = link; // Link URL or JavaScript code.
- }
- //*****************************************************************************
- // NavBarMenu constructor.
- //*****************************************************************************
- function NavBarMenu(hdrWidth, menuWidth) {
- this.hdrWidth = hdrWidth;
- this.width = menuWidth;
- this.height = 0;
- this.items = new Array();
- // Define methods.
- this.addItem = navBarMenuAddItem;
- }
- //*****************************************************************************
- // NavBarMenu methods.
- //*****************************************************************************
- function navBarMenuAddItem(item) {
- this.items[this.items.length] = item;
- }
- //*****************************************************************************
- // NavBar constructor.
- //*****************************************************************************
- function NavBar(width) {
- this.x = 0;
- this.y = 0;
- this.width = width;
- this.height = 0;
- this.align = "left";
- this.minWidth = 0;
- this.inverted = false;
- this.menus = new Array();
- this.created = false;
- // Set default sizes.
- this.border = 2;
- this.padding = 4;
- this.separator = 1;
- // Set default colors.
- this.borderColor = "#000000";
- this.hdrFgColor = "#000000";
- this.hdrBgColor = "#999999";
- this.hdrHiFgColor = "#ffffff";
- this.hdrHiBgColor = "#666666";
- this.itmFgColor = "#000000";
- this.itmBgColor = "#cccccc";
- this.itmHiFgColor = "#ffffff";
- this.itmHiBgColor = "#000080";
- // Set default fonts.
- this.hdrFontFamily = "Arial,Helvetica,sans-serif";
- this.hdrFontStyle = "plain";
- this.hdrFontWeight = "bold";
- this.hdrFontSize = "10pt";
- this.itmFontFamily = "Verdana,MS Sans Serif,Arial,Helvetica,sans-serif";
- this.itmFontStyle = "plain";
- this.itmFontWeight = "";
- this.itmFontSize = "8pt";
- // Define methods.
- this.setSizes = navBarSetSizes;
- this.setColors = navBarSetColors;
- this.setFonts = navBarSetFonts;
- this.addMenu = navBarAddMenu;
- this.create = navBarCreate;
- this.hide = navBarHide;
- this.show = navBarShow;
- this.moveTo = navBarMoveTo;
- this.moveBy = navBarMoveBy;
- this.getzIndex = navBarGetzIndex;
- this.setzIndex = navBarSetzIndex;
- this.getWidth = navBarGetWidth;
- this.getMinWidth = navBarGetMinWidth;
- this.getAlign = navBarGetAlign;
- this.setAlign = navBarSetAlign;
- this.resize = navBarResize;
- this.invert = navBarInvert;
- this.isInverted = navBarIsInverted;
- // Add to the list.
- this.index = navBars.length;
- navBars[this.index] = this;
- }
- //*****************************************************************************
- // NavBar methods.
- //*****************************************************************************
- function navBarSetSizes(border, padding, separator) {
- if (!this.created) {
- this.border = border;
- this.padding = padding;
- this.separator = separator;
- }
- }
- function navBarSetColors(bdColor,
- hdrFgColor, hdrBgColor, hdrHiFgColor, hdrHiBgColor,
- itmFgColor, itmBgColor, itmHiFgColor, itmHiBgColor) {
- if (!this.created) {
- this.borderColor = bdColor;
- this.hdrFgColor = hdrFgColor;
- this.hdrBgColor = hdrBgColor;
- this.hdrHiFgColor = hdrHiFgColor;
- this.hdrHiBgColor = hdrHiBgColor;
- this.itmFgColor = itmFgColor;
- this.itmBgColor = itmBgColor;
- this.itmHiFgColor = itmHiFgColor;
- this.itmHiBgColor = itmHiBgColor;
- }
- }
- function navBarSetFonts(hdrFamily, hdrStyle, hdrWeight, hdrSize,
- itmFamily, itmStyle, itmWeight, itmSize) {
- if (!this.created) {
- this.hdrFontFamily = hdrFamily;
- this.hdrFontStyle = hdrStyle;
- this.hdrFontWeight = hdrWeight;
- this.hdrFontSize = hdrSize;
- this.itmFontFamily = itmFamily;
- this.itmFontStyle = itmStyle;
- this.itmFontWeight = itmWeight;
- this.itmFontSize = itmSize;
- }
- }
- function navBarAddMenu(menu) {
- if (!this.created)
- this.menus[this.menus.length] = menu;
- }
- function navBarCreate() {
- var str;
- var i, j;
- var norm, high, end;
- var width, height;
- var x, y;
- var scrX, scrY;
- if (this.created || (!isMinNS4 && !isMinIE4))
- return;
- // Build HTML for filler and header layers.
- str = "";
- // For IE4, need to scroll to end of page before inserting HTML.
- if (isMinIE4 && !isMinIE5) {
- scrX = getPageScrollX();
- scrY = getPageScrollY();
- window.scrollTo(getPageWidth(), getPageHeight());
- }
- if (isMinNS4)
- str += '<layer name="navBar' + this.index + '_filler"></layer>\n'
- + '<layer name="navBar' + this.index + '_hdrsBase">\n';
- if (isMinIE4)
- str += '<div id="navBar' + this.index + '_filler"'
- + ' style="position:absolute;">'
- + '</div>\n'
- + '<div id="navBar' + this.index + '_hdrsBase"'
- + ' style="position:absolute;">\n';
- // Build HTML for the headers.
- for (i = 0; i < this.menus.length; i++) {
- norm = '<table border=0 cellpadding=' + this.padding
- + ' cellspacing=0'
- + (this.menus[i].hdrWidth > 0 ? ' width=' + this.menus[i].hdrWidth : '')
- + ((isMinIE4 && !isMinIE5) ? ' id="navBar' + this.index + '_tbl' + i + '"': '')
- + '><tr><td'
- + (this.menus[i].hdrWidth == 0 ? ' nowrap=1' + this.menus[i].hdrWidth : '')
- + '>'
- + '<span style="color:' + this.hdrFgColor + ';'
- + 'font-family:' + this.hdrFontFamily + ';'
- + 'font-size:' + this.hdrFontSize + ';'
- + 'font-style:' + this.hdrFontStyle + ';'
- + 'font-weight:' + this.hdrFontWeight + ';">';
- high = '<table border=0 cellpadding=' + this.padding
- + ' cellspacing=0'
- + (this.menus[i].hdrWidth > 0 ? ' width=' + this.menus[i].hdrWidth : '')
- + '><tr><td'
- + (this.menus[i].hdrWidth == 0 ? ' nowrap=1' + this.menus[i].hdrWidth : '')
- + '>'
- + '<span style="color:' + this.hdrHiFgColor + ';'
- + 'font-family:' + this.hdrFontFamily + ';'
- + 'font-size:' + this.hdrFontSize + ';'
- + 'font-style:' + this.hdrFontStyle + ';'
- + 'font-weight:' + this.hdrFontWeight + ';">';
- end = '</span></td></tr></table>';
- if (isMinNS4)
- str += '<layer name="navBar' + this.index + '_head' + i + '">'
- + norm + this.menus[i].items[0].text + end
- + '</layer>\n'
- + '<layer name="navBar' + this.index + '_headHigh' + i + '">'
- + high + this.menus[i].items[0].text + end
- + '</layer>\n'
- + '<layer name="navBar' + this.index + '_headDummy' + i + '">'
- + '</layer>\n';
- if (isMinIE4) {
- str += '<div id="navBar' + this.index + '_head' + i + '"'
- + ' style="position:absolute;">'
- + norm + this.menus[i].items[0].text + end
- + '</div>\n'
- + '<div id="navBar' + this.index + '_headHigh' + i + '"'
- + ' style="position:absolute;">'
- + high + this.menus[i].items[0].text + end
- + '</div>\n'
- + '<div id="navBar' + this.index + '_headDummy' + i + '"'
- + ' style="position:absolute;">';
- if (isMinIE5_5)
- str += '<table cellspacing=0 width="100%" height="100%"><tr><td></td></tr></table>';
- str += '</div>\n';
- }
- }
- if (isMinNS4) {
- str += '</layer>\n';
- this.baseLayer = new Layer(this.width);
- this.baseLayer.document.open();
- this.baseLayer.document.write(str);
- this.baseLayer.document.close();
- }
- if (isMinIE4) {
- str += '</div>\n';
- str = '<div id="navBar' + this.index + '"'
- + ' style="position:absolute;left:0px;top:0px;">\n'
- + str
- + '</div>\n';
- document.body.insertAdjacentHTML("beforeEnd", str);
- this.baseLayer = getLayer("navBar" + this.index);
- }
- // Position and initialize each header.
- width = 0;
- height = 0;
- for (i = 0; i < this.menus.length; i++) {
- this.menus[i].hdrNormLayer = getLayer('navBar' + this.index + '_head' + i);
- this.menus[i].hdrHighLayer = getLayer('navBar' + this.index + '_headHigh' + i);
- this.menus[i].hdrDmmyLayer = getLayer('navBar' + this.index + '_headDummy' + i);
- height = Math.max(height, getHeight(this.menus[i].hdrNormLayer));
- this.height = height + 2 * this.border;
- // Fix for IE4 to resize headers to fit text width.
- if (isMinIE4 && !isMinIE5) {
- width = this.menus[i].hdrWidth;
- if (width == 0)
- width = eval('document.all.navBar' + this.index + '_tbl' + i + '.clientWidth');
- navBarIEResizeLayer(this.menus[i].hdrNormLayer, width, height);
- navBarIEResizeLayer(this.menus[i].hdrHighLayer, width, height);
- navBarIEResizeLayer(this.menus[i].hdrDmmyLayer, width, height);
- }
- }
- x = this.border;
- y = this.border;
- for (i = 0; i < this.menus.length; i++) {
- width = Math.max(this.menus[i].hdrWidth, getWidth(this.menus[i].hdrNormLayer));
- if (this.menus[i].width == 0)
- this.menus[i].width = width + 2 * this.border;
- moveLayerTo(this.menus[i].hdrNormLayer, x, y);
- setBgColor(this.menus[i].hdrNormLayer, this.hdrBgColor);
- clipLayer(this.menus[i].hdrNormLayer, 0, 0, width, height);
- inheritLayer(this.menus[i].hdrNormLayer);
- moveLayerTo(this.menus[i].hdrHighLayer, x, y);
- setBgColor(this.menus[i].hdrHighLayer, this.hdrHiBgColor);
- clipLayer(this.menus[i].hdrHighLayer, 0, 0, width, height);
- hideLayer(this.menus[i].hdrHighLayer);
- moveLayerTo(this.menus[i].hdrDmmyLayer, x, y);
- if (isMinIE4)
- navBarIEResizeLayer(this.menus[i].hdrDmmyLayer, width, height);
- clipLayer(this.menus[i].hdrDmmyLayer, 0, 0, width, height);
- inheritLayer(this.menus[i].hdrDmmyLayer);
- this.menus[i].hdrDmmyLayer.highLayer = this.menus[i].hdrHighLayer;
- this.menus[i].hdrLeft = x;
- x += width + this.border;
- this.menus[i].hdrRight = x;
- }
- // Save resulting width of headers and total width.
- this.minWidth = x;
- this.width = Math.max(this.minWidth, this.width);
- // Position and initialize base, filler and headers base layers.
- moveLayerTo(this.baseLayer, this.x, this.y);
- setBgColor(this.baseLayer, this.borderColor);
- if (isMinIE4)
- navBarIEResizeLayer(this.baseLayer, this.width, this.height);
- clipLayer(this.baseLayer, 0, 0, this.width, this.height);
- this.fillerLayer = getLayer('navBar' + this.index + '_filler');
- moveLayerTo(this.fillerLayer, this.border, this.border);
- setBgColor(this.fillerLayer, this.hdrBgColor);
- width = this.width - 2 * this.border;
- height = this.height - 2 * this.border;
- if (isMinIE4)
- navBarIEResizeLayer(this.fillerLayer, width, height);
- clipLayer(this.fillerLayer, 0, 0, width, height);
- inheritLayer(this.fillerLayer);
- this.hdrsBaseLayer = getLayer('navBar' + this.index + '_hdrsBase');
- if (this.align == "left")
- this.hdrsOffsetX = 0;
- else if (this.align == "center")
- this.hdrsOffsetX = Math.round((this.width - this.minWidth) / 2);
- else if (this.align == "right")
- this.hdrsOffsetX = this.width - this.minWidth;
- else
- this.hdrsOffsetX = Math.min(parseInt(this.align, 10), this.width - this.minWidth);
- moveLayerTo(this.hdrsBaseLayer, this.hdrsOffsetX, 0);
- setBgColor(this.hdrsBaseLayer, this.borderColor);
- if (isMinIE4)
- navBarIEResizeLayer(this.hdrsBaseLayer, this.minWidth, this.height);
- clipLayer(this.hdrsBaseLayer, 0, 0, this.minWidth, this.height);
- inheritLayer(this.hdrsBaseLayer);
- // Set up event handling and positioning for headers.
- for (i = 0; i < this.menus.length; i++) {
- this.menus[i].hdrDmmyLayer.index = this.index;
- this.menus[i].hdrDmmyLayer.offsetX = this.menus[i].hdrLeft - this.border;
- if (this.menus[i].hdrDmmyLayer.offsetX + this.menus[i].width > this.width)
- this.menus[i].hdrDmmyLayer.offsetX = this.menus[i].hdrRight - this.menus[i].width;
- this.menus[i].hdrDmmyLayer.offsetY = this.height - this.border;
- this.menus[i].hdrDmmyLayer.onmouseover = navBarHeaderOn;
- this.menus[i].hdrDmmyLayer.onmouseout = navBarHeaderOff;
- if (isMinNS4) {
- this.menus[i].hdrDmmyLayer.document.highLayer = this.menus[i].hdrHighLayer;
- this.menus[i].hdrDmmyLayer.document.link = this.menus[i].items[0].link;
- this.menus[i].hdrDmmyLayer.document.captureEvents(Event.MOUSEUP);
- this.menus[i].hdrDmmyLayer.document.onmouseup = navBarItemClick;
- }
- if (isMinIE4) {
- this.menus[i].hdrDmmyLayer.highLayer = this.menus[i].hdrHighLayer;
- this.menus[i].hdrDmmyLayer.link = this.menus[i].items[0].link;
- this.menus[i].hdrDmmyLayer.onclick = navBarItemClick;
- }
- }
- // Build the drop down menus.
- norm = '<table border=0 cellpadding=' + this.padding
- + ' cellspacing=0 width="100%"><tr><td>'
- + '<span style="color:' + this.itmFgColor + ';'
- + 'font-family:' + this.itmFontFamily + ';'
- + 'font-size:' + this.itmFontSize + ';'
- + 'font-style:' + this.itmFontStyle + ';'
- + 'font-weight:' + this.itmFontWeight + ';">';
- high = '<table border=0 cellpadding=' + this.padding
- + ' cellspacing=0 width="100%"><tr><td>'
- + '<span style="color:' + this.itmHiFgColor + ';'
- + 'font-family:' + this.itmFontFamily + ';'
- + 'font-size:' + this.itmFontSize + ';'
- + 'font-style:' + this.itmFontStyle + ';'
- + 'font-weight:' + this.itmFontWeight + ';">';
- end = '</span></td></tr></table>';
- for (i = 0; i < this.menus.length; i++) {
- width = this.menus[i].width - 2 * this.border;
- str = "";
- for (j = 1; j < this.menus[i].items.length; j++) {
- if (isMinNS4)
- str += '<layer name="navBar' + this.index + '_menu' + i + '_norm' + j + '"'
- + ' width=' + width + '>'
- + norm + this.menus[i].items[j].text + end
- + '</layer>\n'
- + '<layer name="navBar' + this.index + '_menu' + i + '_high' + j + '"'
- + ' width=' + width + '>'
- + high + this.menus[i].items[j].text + end
- + '</layer>\n'
- + '<layer name="navBar' + this.index + '_menu' + i + '_dmmy' + j + '"'
- + ' width=' + width + '>'
- + '</layer>\n';
- if (isMinIE4) {
- str += '<div id="navBar' + this.index + '_menu' + i + '_norm' + j + '"'
- + ' style="position:absolute;width:' + width + 'px;">'
- + norm + this.menus[i].items[j].text + end
- + '</div>\n'
- + '<div id="navBar' + this.index + '_menu' + i + '_high' + j + '"'
- + ' style="position:absolute;width:' + width + 'px;">'
- + high + this.menus[i].items[j].text + end
- + '</div>\n'
- + '<div id="navBar' + this.index + '_menu' + i + '_dmmy' + j + '"'
- + ' style="position:absolute;width:' + width + 'px;">';
- if (isMinIE5_5)
- str += '<table cellspacing=0 width="100%" height="100%"><tr><td></td></tr></table>';
- str += '</div>\n';
- }
- }
- if (isMinNS4) {
- this.menus[i].baseLayer = new Layer(this.menus[i].width);
- this.menus[i].baseLayer.document.open();
- this.menus[i].baseLayer.document.write(str);
- this.menus[i].baseLayer.document.close();
- }
- if (isMinIE4) {
- str = '<div id="navBar' + this.index + '_menu' + i + '"'
- + ' style="position:absolute;left:0px; top:0px;'
- + 'width:' + this.menus[i].width + 'px;visibility:hidden;">\n'
- + str
- + '</div>\n';
- document.body.insertAdjacentHTML("beforeEnd", str);
- this.menus[i].baseLayer = getLayer("navBar" + this.index + "_menu" + i);
- }
- }
- // Restore original scroll position in IE4.
- if (isMinIE4 && !isMinIE5)
- window.scrollTo(x, y);
- // Position and initialize each menu.
- for (i = 0; i < this.menus.length; i++) {
- moveLayerTo(this.menus[i].baseLayer, this.menus[i].hdrDmmyLayer.offsetX, this.menus[i].hdrDmmyLayer.offsetY);
- setBgColor(this.menus[i].baseLayer, this.borderColor);
- if (this.menus[i].items.length > 1) {
- this.menus[i].hdrDmmyLayer.menuLayer = this.menus[i].baseLayer;
- if (isMinNS4)
- this.menus[i].hdrDmmyLayer.document.menuLayer = this.menus[i].baseLayer;
- }
- else {
- this.menus[i].hdrDmmyLayer.menuLayer = null;
- if (isMinNS4)
- this.menus[i].hdrDmmyLayer.document.menuLayer = this.menus[i].baseLayer;
- }
- // Position and initialize each item in the menu.
- x = this.border;
- y = this.border;
- width = this.menus[i].width - 2 * this.border;
- for (j = 1; j < this.menus[i].items.length; j++) {
- this.menus[i].items[j].normLayer = getLayer('navBar' + this.index + '_menu' + i + '_norm' + j);
- this.menus[i].items[j].highLayer = getLayer('navBar' + this.index + '_menu' + i + '_high' + j);
- this.menus[i].items[j].dmmyLayer = getLayer('navBar' + this.index + '_menu' + i + '_dmmy' + j);
- height = getHeight(this.menus[i].items[j].normLayer);
- moveLayerTo(this.menus[i].items[j].normLayer, x, y);
- setBgColor(this.menus[i].items[j].normLayer, this.itmBgColor);
- clipLayer(this.menus[i].items[j].normLayer, 0, 0, width, height);
- inheritLayer(this.menus[i].items[j].normLayer);
- moveLayerTo(this.menus[i].items[j].highLayer, x, y);
- setBgColor(this.menus[i].items[j].highLayer, this.itmHiBgColor);
- clipLayer(this.menus[i].items[j].highLayer, 0, 0, width, height);
- hideLayer(this.menus[i].items[j].highLayer);
- // Set up event handling for each item.
- moveLayerTo(this.menus[i].items[j].dmmyLayer, x, y);
- if (isMinIE4)
- navBarIEResizeLayer(this.menus[i].items[j].dmmyLayer, width, height);
- clipLayer(this.menus[i].items[j].dmmyLayer, 0, 0, width, height);
- inheritLayer(this.menus[i].items[j].dmmyLayer);
- this.menus[i].items[j].dmmyLayer.highLayer = this.menus[i].items[j].highLayer;
- this.menus[i].items[j].dmmyLayer.onmouseover = navBarItemOn;
- this.menus[i].items[j].dmmyLayer.onmouseout = navBarItemOff;
- if (isMinNS4) {
- this.menus[i].items[j].dmmyLayer.document.highLayer = this.menus[i].items[j].highLayer;
- this.menus[i].items[j].dmmyLayer.document.parentHighLayer = this.menus[i].hdrHighLayer;
- this.menus[i].items[j].dmmyLayer.document.menuLayer = this.menus[i].baseLayer;
- this.menus[i].items[j].dmmyLayer.document.link = this.menus[i].items[j].link;
- this.menus[i].items[j].dmmyLayer.document.captureEvents(Event.MOUSEUP);
- this.menus[i].items[j].dmmyLayer.document.onmouseup = navBarItemClick;
- }
- if (isMinIE4) {
- this.menus[i].items[j].dmmyLayer.highLayer = this.menus[i].items[j].highLayer;
- this.menus[i].items[j].dmmyLayer.parentHighLayer = this.menus[i].hdrHighLayer;
- this.menus[i].items[j].dmmyLayer.menuLayer = this.menus[i].baseLayer;
- this.menus[i].items[j].dmmyLayer.link = this.menus[i].items[j].link;
- this.menus[i].items[j].dmmyLayer.onclick = navBarItemClick;
- }
- y += height + this.separator;
- }
- width = this.menus[i].width;
- height = y - this.separator + this.border;
- this.menus[i].baseLayer.width = this.menus[i].width;
- this.menus[i].baseLayer.height = height;
- if (isMinIE4)
- navBarIEResizeLayer(this.menus[i].baseLayer, width, height);
- clipLayer(this.menus[i].baseLayer, 0, 0, width, height);
- // Set up event handling for the menu.
- this.menus[i].baseLayer.parentHighLayer = this.menus[i].hdrHighLayer;
- this.menus[i].baseLayer.onmouseout = navBarMenuOff;
- }
- this.created = true;
- this.resize(this.width);
- showLayer(this.baseLayer);
- }
- function navBarHide() {
- if (this.created)
- hideLayer(this.baseLayer);
- }
- function navBarShow() {
- if (this.created)
- showLayer(this.baseLayer);
- }
- function navBarMoveTo(x, y) {
- this.x = x;
- this.y = y;
- if (this.created)
- moveLayerTo(this.baseLayer, this.x, this.y);
- }
- function navBarMoveBy(dx, dy) {
- this.x += dx;
- this.y += dy;
- if (this.created)
- moveLayerTo(this.baseLayer, this.x, this.y);
- }
- function navBarGetzIndex() {
- if (this.created)
- return getzIndex(this.baseLayer);
- return 0;
- }
- function navBarSetzIndex(z) {
- var i;
- if (this.created) {
- setzIndex(this.baseLayer, z);
- for (i = 0; i < this.menus.length; i++)
- setzIndex(this.menus[i].baseLayer, z);
- }
- }
- function navBarGetWidth() {
- return this.width;
- }
- function navBarGetMinWidth() {
- return this.minWidth;
- }
- function navBarGetAlign() {
- return this.align;
- }
- function navBarSetAlign(align) {
- this.align = align;
- if (this.created)
- this.resize(this.width);
- }
- function navBarResize(width) {
- if (this.created) {
- this.width = Math.max(width, this.minWidth);
- if (isMinIE4) {
- navBarIEResizeLayer(this.fillerLayer, this.width - 2 * this.border, this.height - 2 * this.border);
- navBarIEResizeLayer(this.baseLayer, this.width, this.height);
- }
- clipLayer(this.fillerLayer, 0, 0, this.width - 2 * this.border, this.height - 2 * this.border);
- clipLayer(this.baseLayer, 0, 0, this.width, this.height);
- if (this.align == "left")
- this.hdrsOffsetX = 0;
- else if (this.align == "center")
- this.hdrsOffsetX = Math.round((this.width - this.minWidth) / 2);
- else if (this.align == "right")
- this.hdrsOffsetX = this.width - this.minWidth;
- else
- this.hdrsOffsetX = Math.min(parseInt(this.align, 10), this.width - this.minWidth);
- moveLayerTo(this.hdrsBaseLayer, this.hdrsOffsetX, 0);
- for (i = 0; i < this.menus.length; i++) {
- this.menus[i].hdrDmmyLayer.offsetX = this.menus[i].hdrLeft - this.border;
- if (this.hdrsOffsetX + this.menus[i].hdrDmmyLayer.offsetX + this.menus[i].width > this.width)
- this.menus[i].hdrDmmyLayer.offsetX = this.menus[i].hdrRight - this.menus[i].width;
- }
- }
- else
- this.width = width;
- }
- function navBarInvert() {
- this.inverted = !this.inverted;
- }
- function navBarIsInverted() {
- return this.inverted;
- }
- //*****************************************************************************
- // Layer resize function for IE.
- //*****************************************************************************
- function navBarIEResizeLayer(layer, width, height) {
- layer.style.pixelWidth = width;
- layer.style.pixelHeight = height;
- }
- //*****************************************************************************
- // Event handlers for the navigation bar.
- //*****************************************************************************
- function navBarHeaderOn(e) {
- var bar;
- var x, y;
- bar = navBars[this.index];
- // Position drop down menu.
- if (this.menuLayer != null) {
- x = bar.x + bar.hdrsOffsetX + this.offsetX;
- y = bar.y + this.offsetY;
- if (bar.inverted)
- y = bar.y - this.menuLayer.height + bar.border;
- moveLayerTo(this.menuLayer, x, y);
- // Save drop down menu position and show it. Need to fudge values for IE
- // for reasons unknown.
- this.menuLayer.left = x;
- this.menuLayer.top = y;
- this.menuLayer.right = this.menuLayer.left + this.menuLayer.width;
- this.menuLayer.bottom = this.menuLayer.top + this.menuLayer.height;
- if (isMinIE4) {
- this.menuLayer.left += 2;
- this.menuLayer.right -= 2;
- if (bar.inverted) {
- this.menuLayer.top += 2;
- this.menuLayer.bottom += 2;
- }
- else {
- this.menuLayer.top -= 2;
- this.menuLayer.bottom -= 2;
- }
- }
- }
- // Hide any currently active header and drop down.
- if (isMinIE4) {
- if (bar.activeHeader != null && bar.activeHeader != this) {
- hideLayer(bar.activeHeader.highLayer);
- if (bar.activeHeader.menuLayer != null)
- hideLayer(bar.activeHeader.menuLayer);
- }
- bar.activeHeader = this;
- }
- // Display the header highlight layer and drop down menu.
- showLayer(this.highLayer);
- if (this.menuLayer != null)
- showLayer(this.menuLayer);
- }
- function navBarHeaderOff(e) {
- // If over drop down menu, exit. Otherwise hide menu and highlight layers.
- if (this.menuLayer != null) {
- if (isMinIE4) {
- mouseX = window.event.clientX + document.body.scrollLeft;
- mouseY = window.event.clientY + document.body.scrollTop;
- }
- if (mouseX >= this.menuLayer.left &&
- mouseX <= this.menuLayer.right &&
- mouseY >= this.menuLayer.top &&
- mouseY <= this.menuLayer.bottom)
- return;
- hideLayer(this.menuLayer);
- }
- hideLayer(this.highLayer);
- }
- function navBarMenuOff(e) {
- // If over drop down menu, exit. Otherwise hide menu and header highlight
- // layers.
- if (isMinIE4) {
- mouseX = window.event.clientX + document.body.scrollLeft;
- mouseY = window.event.clientY + document.body.scrollTop;
- if (mouseX >= this.left &&
- mouseX <= this.right &&
- mouseY >= this.top &&
- mouseY <= this.bottom)
- return;
- }
- // Otherwise, hide menu and header highlight layers.
- hideLayer(this);
- hideLayer(this.parentHighLayer);
- }
- function navBarItemOn() {
- showLayer(this.highLayer);
- }
- function navBarItemOff() {
- hideLayer(this.highLayer);
- }
- function navBarItemClick(e) {
- // If there is no link, exit.
- if (this.link == "")
- return true;
- // Hide the drop down menu and highlight layer.
- if (this.menuLayer != null) {
- hideLayer(this.menuLayer);
- }
- if (this.parentHighLayer != null) {
- hideLayer(this.parentHighLayer);
- }
- hideLayer(this.highLayer);
- // If the link starts with "javascript:" execute the code. Otherwise just
- // link to the URL.
- if (this.link.indexOf("javascript:") == 0)
- eval(this.link);
- else
- window.location.href = this.link;
- return true;
- }
- //*****************************************************************************
- // Code for tracking the mouse position.
- //*****************************************************************************
- // These variables will hold the current mouse pointer position.
- var mouseX = 0;
- var mouseY = 0;
- // Set up event capturing.
- if (isMinNS4)
- document.captureEvents(Event.MOUSEMOVE);
- document.onmousemove = navBarGetMousePosition;
- function navBarGetMousePosition(e) {
- // Save mouse pointer position.
- if (isMinNS4) {
- mouseX = e.pageX;
- mouseY = e.pageY;
- }
- if (isMinIE4) {
- mouseX = window.event.clientX + document.body.scrollLeft;
- mouseY = window.event.clientY + document.body.scrollTop;
- }
- }
- //*****************************************************************************
- // Code to handle a window resize.
- //*****************************************************************************
- // These variables are used to determine if a resize event is a true one in
- // older releases of NS4.
- var origWidth;
- var origHeight;
- // Reload page in case of a browser resize.
- if (isMinNS4) {
- origWidth = window.innerWidth;
- origHeight = window.innerHeight;
- }
- window.onresize = navBarReload;
- function navBarReload() {
- if (isMinNS4 && origWidth == window.innerWidth && origHeight == window.innerHeight)
- return;
- // For IE, reload on a timer in case the Windows 'Show window contents while
- // dragging' display option is on.
- if (isMinIE4)
- setTimeout('window.location.href = window.location.href', 2000);
- else
- window.location.href = window.location.href;
- }