/* +-------------------------------------------------------------------+ | J S - T R E E M E N U (v1.1) | | | | Copyright Gerd Tentler www.gerd-tentler.de/tools | | Created: Apr. 9, 2003 Last modified: Sep. 1, 2005 | +-------------------------------------------------------------------+ | This program may be used and hosted free of charge by anyone for | | personal purpose as long as this copyright notice remains intact. | | | | Obtain permission before selling the code for this program or | | hosting this software on a commercial website or redistributing | | this software over the Internet or in any other medium. In all | | cases copyright must remain intact. | +-------------------------------------------------------------------+ ====================================================================================================== This script was tested with the following systems and browsers: - Windows XP: IE 6, NN 7, Opera 7, Firefox 1 - Mac OS X: IE 5, Safari 1 If you use another browser or system, this script may not work for you - sorry. ====================================================================================================== */ var mObj = new Array(); function TREEMENU(openAll) { //---------------------------------------------------------------------------------------------------- // Configuration //---------------------------------------------------------------------------------------------------- this.width = '100%'; // menu width (pixels) this.bgColor = "#FDFDEB"; //#D5E0C6 // menu background color this.autoClose = false; // close folders automatically (true or false) this.itemMargin = 1; // item margin (pixels) this.itemPadding = 2; // item padding (pixels) this.itemColor = "#3A4730"; // item font color this.itemBGColor = "#F2F1E2"; // item background color this.itemBGColor1 = ""; //#EDECD8 // item background color for level-one-items this.itemFont = "Tahoma, Arial"; // item font family (CSS spec.) this.itemSize = 11; // item font size (pixels) this.itemBold = true; // item bold font (true or false) this.itemWrap = true; // item word wrap (true or false) this.itemActive = "#4F6971"; // active item font color this.itemActiveUnderline = true; // active item underline (true or false) this.iconWidth = 14; // icon width (pixels) this.iconHeight = 14; // icon height (pixels) /* this.iconClosed = "../TreeFiles/closed.gif"; // icon closed (path) this.iconClosedHilight = "../TreeFiles/closed_hilight.gif"; // icon closed hilight (path) this.iconOpen = "../TreeFiles/open.gif"; // icon open (path) this.iconOpenHilight = "../TreeFiles/open_hilight.gif"; // icon open hilight (path) this.iconPoint = "../TreeFiles/point.gif"; // icon point (path) this.iconPointHilight = "../TreeFiles/point_hilight.gif"; // icon point hilight (path) */ this.iconClosed = "../TreeFiles/closed.gif"; // icon closed (path) this.iconClosedHilight = "../TreeFiles/closed.gif"; // icon closed hilight (path) this.iconOpen = "../TreeFiles/open.gif"; // icon open (path) this.iconOpenHilight = "../TreeFiles/open.gif"; // icon open hilight (path) this.iconPoint = "../TreeFiles/point.gif"; // icon point (path) this.iconPointHilight = "../TreeFiles/point.gif"; // icon point hilight (path) this.imgBlank = "../TreeFiles/blank.gif"; // blank image (path) //---------------------------------------------------------------------------------------------------- // Functions //---------------------------------------------------------------------------------------------------- this.mNr = 0; this.actItem = -1; this.hilightItem = -1; this.targetWindow = 0; this.items = new Array(); if(openAll == null) openAll = false; this.openAll = openAll; this.entry = function(level, text, url, target, onClick) { var i = this.items.length; this.items[i] = new makeItem(level, text, url, target, onClick, this.openAll); } this.getObj = function(id) { var obj; if(document.getElementById) obj = document.getElementById(id); else if(document.all) obj = document.all[id]; return obj; } this.jump = function(item) { this.hilightItem = item; this.openMenu(item); if(this.items[item].onClick) eval(this.items[item].onClick); if(this.items[item].url) { if(this.items[item].target) { if(this.items[item].target.indexOf('parent.') == -1 && this.items[item].target.indexOf('top.') == -1) { if(this.targetWindow && !this.targetWindow.closed) this.targetWindow.location.href = this.items[item].url; else this.targetWindow = window.open(this.items[item].url, 'targetWindow'); this.targetWindow.focus(); } else eval(this.items[item].target + '.location.href = "' + this.items[item].url + '"'); } else document.location.href = this.items[item].url; } } this.openMenu = function(item) { if(this.items[item].knot) this.actItem = item; this.newMenu(); } this.closeMenu = function(item) { this.actItem = -1; if(this.items[item].knot) { this.items[item].icon = this.iconClosed; for(var i = item+1; i < this.items.length && this.items[i].level > this.items[item].level; i++) { if(this.items[i].level > 1) this.items[i].view = false; } } this.newMenu(); } this.viewMenu = function(item) { var icon = this.items[item].icon; if(icon == this.iconOpen || icon == this.iconOpenHilight) this.closeMenu(item); else this.openMenu(item); } this.setItems = function() { var i, showlevel; if(this.autoClose && this.actItem >= 0) { if(this.items[this.actItem].level <= 1) { for(i = 0; i < this.items.length; i++) { if(this.items[i].level > 1) this.items[i].view = false; } } } for(i = 0; i < this.items.length; i++) { if(i < this.items.length-1 && this.items[i+1].level > this.items[i].level) { this.items[i].icon = this.items[i+1].view ? this.iconOpen : this.iconClosed; this.items[i].knot = true; } else this.items[i].icon = this.iconPoint; } if(this.actItem >= 0) { showLevel = this.items[this.actItem].level + 1; this.items[this.actItem].icon = this.iconOpen; for(i = this.actItem+1; i < this.items.length && this.items[i].level >= showLevel; i++) { if(this.items[i].level == showLevel) this.items[i].view = true; } } if(this.hilightItem >= 0) { i = this.hilightItem; if(this.items[i].icon == this.iconOpen) this.items[i].icon = this.iconOpenHilight; else if(this.items[i].icon == this.iconClosed) this.items[i].icon = this.iconClosedHilight; else if(this.items[i].icon == this.iconPoint) this.items[i].icon = this.iconPointHilight; } } this.content = function(item) { var text = ''; if(item == null) item = 0; if(this.items[item].view) { var bgc = (this.items[item].level <= 1) ? this.itemBGColor1 : this.itemBGColor; text += '' + '' + '
'; if(this.items[item].level > 1) { for(i = 1; i < this.items[item].level; i++) { text += ''; } } text += '' + '' : ' nowrap>') + '' + (this.itemBold ? '' + this.items[item].text + '' : this.items[item].text) + '
'; if(this.items[item].knot) text += ''; text += '
'; } item++; if(item < this.items.length) text += this.content(item); return text; } this.newMenu = function() { var obj = this.getObj('divTreeMenu' + this.mNr); if(obj) { this.setItems(); obj.innerHTML = this.content(); } } this.buildContainer = function() { var lnk1 = '.cssLink' + this.mNr; var lnk2 = '.cssLinkHilight' + this.mNr; document.write('' + '
'); } this.create = function() { this.mNr = mObj.length; if(mObj[this.mNr] = this) { this.buildContainer(); this.newMenu(); } else alert("Could not create menu!"); } //------------------------------------------------------------------------ // Arguments: position level 1, [position level 2], ... [position level n] // Example: jumpTo(1, 3, 2, 1) ==> this jumps to menu item 1.3.2.1 // this.jumpTo = function() { var pos, aktPos; var item = 0; var level = 1; for(var i = 0; i < this.items.length; i++) { if(this.items[i].level > 1) this.items[i].view = false; } this.actItem = -1; this.setItems(); if(!arguments) var arguments = this.jumpTo.arguments; for(i = 0; i < arguments.length; i++, level++) { pos = arguments[i]; for(aktPos = 0; item < this.items.length && aktPos < pos; item++) { if(this.items[item].level == level) aktPos++; } if(aktPos == pos) { item -= 1; this.openMenu(item); } else break; } if(item) this.jump(item); } //------------------------------------------------------------------------ //--------------- Added by Darwish 11/10/2005 10:07 PM ------------------- this.goTo = function() { var pos, aktPos; var item = 0; var level = 1; for(var i = 0; i < this.items.length; i++) { if(this.items[i].level > 1) this.items[i].view = false; } this.actItem = -1; this.setItems(); if(!arguments) var arguments = this.jumpTo.arguments; for(i = 0; i < arguments.length; i++, level++) { pos = arguments[i]; for(aktPos = 0; item < this.items.length && aktPos < pos; item++) { if(this.items[item].level == level) aktPos++; } if(aktPos == pos) { item -= 1; this.openMenu(item); } else break; } } //------------------------------------------------------------------------ } function makeItem(level, text, url, target, onClick, openAll) { this.level = level; this.text = text; this.url = url; this.target = target; this.onClick = onClick; this.icon = ''; this.view = (level <= 1) ? true : openAll; this.knot = false; } //----------------------------------------------------------------------------------------------------