/*
+-------------------------------------------------------------------+
| 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 += '
';
}
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;
}
//----------------------------------------------------------------------------------------------------