<!--
// DBUS! Deutschland - Enterprise Information Portal By Busskamp And Scholwin
// Source Code By Dirk Busskamp And Web Design By Sabine Busskamp
// Copyright 2000 - 2010 DBUS! Deutschland
// http://www.dbus.de
// mailto:info@dbus.de

var dbusfxTreeConfig = {
rootIcon        : 'foldericon.png',
openRootIcon    : 'openfoldericon.png',
folderIcon      : 'foldericon.png',
openFolderIcon  : 'openfoldericon.png',
fileIcon        : 'file.png',
iIcon           : 'i.png',
lIcon           : 'l.png',
lMinusIcon      : 'lminus.png',
lPlusIcon       : 'lplus.png',
tIcon           : 't.png',
tMinusIcon      : 'tminus.png',
tPlusIcon       : 'tplus.png',
blankIcon       : 'blank.png',
defaultText     : 'Tree Item',
defaultAction   : 'javascript:void(0);',
defaultBehavior : 'classic'
}

var dbusfxTreeHandler = {
idCounter : 0,
idPrefix  : "dbusfx-tree-object-",
all       : {},
behavior  : null,
selected  : null,
onSelect  : null,
getId     : function() { return this.idPrefix + this.idCounter++; },
toggle    : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); },
select    : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); },
focus     : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); },
blur      : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); },
keydown   : function (oItem, e) { return this.all[oItem.id].keydown(e.keyCode); },
cookies   : new dbusfxCookie(),
insertHTMLBeforeEnd : function (oElement, sHTML) {
if (oElement.insertAdjacentHTML != null) {
oElement.insertAdjacentHTML("BeforeEnd", sHTML)
return;
}
var df;
var r = oElement.ownerDocument.createRange();
r.selectNodeContents(oElement);
r.collapse(false);
df = r.createContextualFragment(sHTML);
oElement.appendChild(df);
}
}

function dbusfxCookie() {
if (document.cookie.length) {
this.cookies = ' ' + document.cookie;
}
}

dbusfxCookie.prototype.setCookie = function (key, value) {
document.cookie = key + "=" + escape(value);
}

dbusfxCookie.prototype.getCookie = function (key) {
if (this.cookies) {
var start = this.cookies.indexOf(' ' + key + '=');
if (start == -1) {
return null;
}
var end = this.cookies.indexOf(";", start);
if (end == -1) {
end = this.cookies.length;
}
end -= start;
var cookie = this.cookies.substr(start,end);
return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1));
}
else {
return null;
}
}

function dbusfxTreeAbstractNode(sText, sAction) {
this.childNodes  = [];
this.id     = dbusfxTreeHandler.getId();
this.text   = sText || dbusfxTreeConfig.defaultText;
this.action = sAction || dbusfxTreeConfig.defaultAction;
this._last  = false;
dbusfxTreeHandler.all[this.id] = this;
}

dbusfxTreeAbstractNode.prototype.add = function (node, bNoIdent) {
node.parentNode = this;
this.childNodes[this.childNodes.length] = node;
var root = this;
if (this.childNodes.length >=2) {
this.childNodes[this.childNodes.length -2]._last = false;
}
while (root.parentNode) {
root = root.parentNode;
}
if (root.rendered) {
if (this.childNodes.length >= 2) {
document.getElementById(this.childNodes[this.childNodes.length -2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?((this.childNodes[this.childNodes.length -2].open)?dbusfxTreeConfig.tMinusIcon:dbusfxTreeConfig.tPlusIcon):dbusfxTreeConfig.tIcon);
if (this.childNodes[this.childNodes.length -2].folder) {
this.childNodes[this.childNodes.length -2].plusIcon = dbusfxTreeConfig.tPlusIcon;
this.childNodes[this.childNodes.length -2].minusIcon = dbusfxTreeConfig.tMinusIcon;
}
this.childNodes[this.childNodes.length -2]._last = false;
}
this._last = true;
var foo = this;
while (foo.parentNode) {
for (var i = 0; i < foo.parentNode.childNodes.length; i++) {
if (foo.id == foo.parentNode.childNodes[i].id) { break; }
}
if (++i == foo.parentNode.childNodes.length) {
foo.parentNode._last = true;
}
else {
foo.parentNode._last = false;
}
foo = foo.parentNode;
}
dbusfxTreeHandler.insertHTMLBeforeEnd(document.getElementById(this.id + '-cont'), node.toString());
if ((!this.folder) && (!this.openIcon)) {
this.icon = dbusfxTreeConfig.folderIcon;
this.openIcon = dbusfxTreeConfig.openFolderIcon;
}
if (!this.folder) {
this.folder = true;
this.collapse(true);
}
if (!bNoIdent) {
this.indent();
}
}
return node;
}

dbusfxTreeAbstractNode.prototype.toggle = function() {
if (this.folder) {
if (this.open) {
this.collapse();
}
else {
this.expand();
}
}
}

dbusfxTreeAbstractNode.prototype.select = function() {
document.getElementById(this.id + '-anchor').focus();
}

dbusfxTreeAbstractNode.prototype.deSelect = function() {
document.getElementById(this.id + '-anchor').className = '';
dbusfxTreeHandler.selected = null;
}

dbusfxTreeAbstractNode.prototype.focus = function() {
if ((dbusfxTreeHandler.selected) && (dbusfxTreeHandler.selected != this)) {
dbusfxTreeHandler.selected.deSelect();
}
dbusfxTreeHandler.selected = this;
if ((this.openIcon) && (dbusfxTreeHandler.behavior != 'classic')) {
document.getElementById(this.id + '-icon').src = this.openIcon;
}
document.getElementById(this.id + '-anchor').className = 'selected';
document.getElementById(this.id + '-anchor').focus();
if (dbusfxTreeHandler.onSelect) {
dbusfxTreeHandler.onSelect(this);
}
}

dbusfxTreeAbstractNode.prototype.blur = function() {
if ((this.openIcon) && (dbusfxTreeHandler.behavior != 'classic')) {
document.getElementById(this.id + '-icon').src = this.icon;
}
document.getElementById(this.id + '-anchor').className = 'selected-inactive';
}

dbusfxTreeAbstractNode.prototype.doExpand = function() {
if (dbusfxTreeHandler.behavior == 'classic') {
document.getElementById(this.id + '-icon').src = this.openIcon;
}
if (this.childNodes.length) {
document.getElementById(this.id + '-cont').style.display = 'block';
}
this.open = true;
dbusfxTreeHandler.cookies.setCookie(this.id.substr(19,this.id.length - 19), '1');
}

dbusfxTreeAbstractNode.prototype.doCollapse = function() {
if (dbusfxTreeHandler.behavior == 'classic') {
document.getElementById(this.id + '-icon').src = this.icon;
}
if (this.childNodes.length) {
document.getElementById(this.id + '-cont').style.display = 'none';
}
this.open = false;
dbusfxTreeHandler.cookies.setCookie(this.id.substr(19,this.id.length - 19), '0');
}

dbusfxTreeAbstractNode.prototype.expandAll = function() {
this.expandChildren();
if ((this.folder) && (!this.open)) {
this.expand();
}
}

dbusfxTreeAbstractNode.prototype.expandChildren = function() {
for (var i = 0; i < this.childNodes.length; i++) {
this.childNodes[i].expandAll();
}
}

dbusfxTreeAbstractNode.prototype.collapseAll = function() {
this.collapseChildren();
if ((this.folder) && (this.open)) {
this.collapse(true);
}
}

dbusfxTreeAbstractNode.prototype.collapseChildren = function() {
for (var i = 0; i < this.childNodes.length; i++) {
this.childNodes[i].collapseAll();
}
}

dbusfxTreeAbstractNode.prototype.indent = function(lvl, del, last, level) {
if (lvl == null) {
lvl = -2;
}
var state = 0;
for (var i = this.childNodes.length - 1; i >= 0 ; i--) {
state = this.childNodes[i].indent(lvl + 1, del, last, level);
if (state) {
return;
}
}
if (del) {
if ((level >= this._level) && (document.getElementById(this.id + '-plus'))) {
if (this.folder) {
document.getElementById(this.id + '-plus').src = (this.open)?dbusfxTreeConfig.lMinusIcon:dbusfxTreeConfig.lPlusIcon;
this.plusIcon = dbusfxTreeConfig.lPlusIcon;
this.minusIcon = dbusfxTreeConfig.lMinusIcon;
}
else {
document.getElementById(this.id + '-plus').src = dbusfxTreeConfig.lIcon;
}
return 1;
}
}
var foo = document.getElementById(this.id + '-indent-' + lvl);
if (foo) {
if ((del) && (last)) {
foo._last = true;
}
if (foo._last) {
foo.src =  dbusfxTreeConfig.blankIcon;
}
else {
foo.src =  dbusfxTreeConfig.iIcon;
}
}
return 0;
}

function dbusfxTree(sText, sAction, sBehavior, sIcon, sOpenIcon) {
this.base = dbusfxTreeAbstractNode;
this.base(sText, sAction);
this.icon      = sIcon || dbusfxTreeConfig.rootIcon;
this.openIcon  = sOpenIcon || dbusfxTreeConfig.openRootIcon;
this.open      = (dbusfxTreeHandler.cookies.getCookie(this.id.substr(19,this.id.length - 19)) == '0')?false:true;
this.folder    = true;
this.rendered  = false;
this.onSelect  = null;
if (!dbusfxTreeHandler.behavior) {  dbusfxTreeHandler.behavior = sBehavior || dbusfxTreeConfig.defaultBehavior; }
}

dbusfxTree.prototype = new dbusfxTreeAbstractNode;

dbusfxTree.prototype.setBehavior = function (sBehavior) {
dbusfxTreeHandler.behavior =  sBehavior;
}

dbusfxTree.prototype.getBehavior = function (sBehavior) {
return dbusfxTreeHandler.behavior;
}

dbusfxTree.prototype.getSelected = function() {
if (dbusfxTreeHandler.selected) {
return dbusfxTreeHandler.selected;
}
else {
return null;
}
}

dbusfxTree.prototype.remove = function() { }

dbusfxTree.prototype.expand = function() {
this.doExpand();
}

dbusfxTree.prototype.collapse = function(b) {
if (!b) {
this.focus();
}
this.doCollapse();
}

dbusfxTree.prototype.getFirst = function() {
return null;
}

dbusfxTree.prototype.getLast = function() {
return null;
}

dbusfxTree.prototype.getNextSibling = function() {
return null;
}

dbusfxTree.prototype.getPreviousSibling = function() {
return null;
}

dbusfxTree.prototype.keydown = function(key) {
if (key == 39) {
if (!this.open) {
this.expand();
}
else if (this.childNodes.length) {
this.childNodes[0].select();
}
return false;
}
if (key == 37) {
this.collapse();
return false;
}
if ((key == 40) && (this.open) && (this.childNodes.length)) {
this.childNodes[0].select();
return false;
}
return true;
}

dbusfxTree.prototype.toString = function() {
var str = "<div id=\"" + this.id + "\" ondblclick=\"dbusfxTreeHandler.toggle(this);\" class=\"dbusfx-tree-item\" onkeydown=\"return dbusfxTreeHandler.keydown(this, event)\">";
str += "<img id=\"" + this.id + "-icon\" class=\"dbusfx-tree-icon\" src=\"" + ((dbusfxTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"dbusfxTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" onfocus=\"dbusfxTreeHandler.focus(this);\" onblur=\"dbusfxTreeHandler.blur(this);\">" + this.text + "</a></div>";
str += "<div id=\"" + this.id + "-cont\" class=\"dbusfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">";
for (var i = 0; i < this.childNodes.length; i++) {
str += this.childNodes[i].toString(i, this.childNodes.length);
}
str += "</div>";
this.rendered = true;
return str;
}

function dbusfxTreeItem(sText, sAction, eParent, sIcon, sOpenIcon) {
this.base = dbusfxTreeAbstractNode;
this.base(sText, sAction);
this.open = (dbusfxTreeHandler.cookies.getCookie(this.id.substr(19,this.id.length - 19)) == '1')?true:false;
if (sIcon) {
this.icon = sIcon;
}
if (sOpenIcon) {
this.openIcon = sOpenIcon;
}
if (eParent) {
eParent.add(this);
}
}

dbusfxTreeItem.prototype = new dbusfxTreeAbstractNode;

dbusfxTreeItem.prototype.remove = function() {
var iconSrc = document.getElementById(this.id + '-plus').src;
var parentNode = this.parentNode;
var prevSibling = this.getPreviousSibling(true);
var nextSibling = this.getNextSibling(true);
var folder = this.parentNode.folder;
var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true;
this.getPreviousSibling().focus();
this._remove();
if (parentNode.childNodes.length == 0) {
parentNode.folder = false;
parentNode.open = false;
}
if (!nextSibling) {
parentNode.indent(null, true, last, this._level);
}
if ((prevSibling == parentNode) && !(parentNode.childNodes.length)) {
prevSibling.folder = false;
prevSibling.open = false;
iconSrc = document.getElementById(prevSibling.id + '-plus').src;
iconSrc = iconSrc.replace('minus', '').replace('plus', '');
document.getElementById(prevSibling.id + '-plus').src = iconSrc;
document.getElementById(prevSibling.id + '-icon').src = dbusfxTreeConfig.fileIcon;
}
if (document.getElementById(prevSibling.id + '-plus')) {
if (parentNode == prevSibling.parentNode) {
iconSrc = iconSrc.replace('minus', '').replace('plus', '');
document.getElementById(prevSibling.id + '-plus').src = iconSrc;
}
}
}

dbusfxTreeItem.prototype._remove = function() {
for (var i = this.childNodes.length - 1; i >= 0; i--) {
this.childNodes[i]._remove();
}
for (var i = 0; i < this.parentNode.childNodes.length; i++) {
if (this == this.parentNode.childNodes[i]) {
for (var j = i; j < this.parentNode.childNodes.length; j++) {
this.parentNode.childNodes[j] = this.parentNode.childNodes[j+1];
}
this.parentNode.childNodes.length -= 1;
if (i + 1 == this.parentNode.childNodes.length) {
this.parentNode._last = true;
}
break;
}	}
dbusfxTreeHandler.all[this.id] = null;
if (document.getElementById(this.id)) {
var tmp = document.getElementById(this.id);
tmp.parentNode.removeChild(tmp);
}
}

dbusfxTreeItem.prototype.expand = function() {
this.doExpand();
document.getElementById(this.id + '-plus').src = this.minusIcon;
}

dbusfxTreeItem.prototype.collapse = function(b) {
if (!b) {
this.focus();
}
this.doCollapse();
document.getElementById(this.id + '-plus').src = this.plusIcon;
}

dbusfxTreeItem.prototype.getFirst = function() {
return this.childNodes[0];
}

dbusfxTreeItem.prototype.getLast = function() {
if (this.childNodes[this.childNodes.length - 1].open) {
return this.childNodes[this.childNodes.length - 1].getLast();
}
else {
return this.childNodes[this.childNodes.length - 1];
}
}

dbusfxTreeItem.prototype.getNextSibling = function() {
for (var i = 0; i < this.parentNode.childNodes.length; i++) {
if (this == this.parentNode.childNodes[i]) {
break;
}
}
if (++i == this.parentNode.childNodes.length) {
return this.parentNode.getNextSibling();
}
else {
return this.parentNode.childNodes[i];
}
}

dbusfxTreeItem.prototype.getPreviousSibling = function(b) {
for (var i = 0; i < this.parentNode.childNodes.length; i++) {
if (this == this.parentNode.childNodes[i]) {
break;
}
}
if (i == 0) {
return this.parentNode;
}
else {
if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) {
return this.parentNode.childNodes[i].getLast();
}
else {
return this.parentNode.childNodes[i];
}
}
}

dbusfxTreeItem.prototype.keydown = function(key) {
if ((key == 39) && (this.folder)) {
if (!this.open) {
this.expand();
}
else {
this.getFirst().select();
}
return false;
}
else if (key == 37) {
if (this.open) {
this.collapse();
}
else {
this.parentNode.select();
}
return false;
}
else if (key == 40) {
if (this.open) {
this.getFirst().select();
}
else {
var sib = this.getNextSibling();
if (sib) {
sib.select();
}
}
return false;
}
else if (key == 38) {
this.getPreviousSibling().select(); return false;
}
return true;
}

dbusfxTreeItem.prototype.toString = function (nItem, nItemCount) {
var foo = this.parentNode;
var indent = '';
if (nItem + 1 == nItemCount) {
this.parentNode._last = true;
}
var i = 0;
while (foo.parentNode) {
foo = foo.parentNode;
indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?dbusfxTreeConfig.blankIcon:dbusfxTreeConfig.iIcon) + "\">" + indent;
i++;
}
this._level = i;
if (this.childNodes.length) {
this.folder = 1;
}
else {
this.open = false;
}
if ((this.folder) || (dbusfxTreeHandler.behavior != 'classic')) {
if (!this.icon) {
this.icon = dbusfxTreeConfig.folderIcon;
}
if (!this.openIcon) {
this.openIcon = dbusfxTreeConfig.openFolderIcon;
}
}
else if (!this.icon) {
this.icon = dbusfxTreeConfig.fileIcon;
}
var label = this.text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
var str = "<div id=\"" + this.id + "\" ondblclick=\"dbusfxTreeHandler.toggle(this);\" class=\"dbusfx-tree-item\" onkeydown=\"return dbusfxTreeHandler.keydown(this, event)\">";
str += indent;
str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?dbusfxTreeConfig.lMinusIcon:dbusfxTreeConfig.tMinusIcon):((this.parentNode._last)?dbusfxTreeConfig.lPlusIcon:dbusfxTreeConfig.tPlusIcon)):((this.parentNode._last)?dbusfxTreeConfig.lIcon:dbusfxTreeConfig.tIcon)) + "\" onclick=\"dbusfxTreeHandler.toggle(this);\">"
str += "<img id=\"" + this.id + "-icon\" class=\"dbusfx-tree-icon\" src=\"" + ((dbusfxTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"dbusfxTreeHandler.select(this);\"><a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" onfocus=\"dbusfxTreeHandler.focus(this);\" onblur=\"dbusfxTreeHandler.blur(this);\">" + label + "</a></div>";
str += "<div id=\"" + this.id + "-cont\" class=\"dbusfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">";
for (var i = 0; i < this.childNodes.length; i++) {
str += this.childNodes[i].toString(i,this.childNodes.length);
}
str += "</div>";
this.plusIcon = ((this.parentNode._last)?dbusfxTreeConfig.lPlusIcon:dbusfxTreeConfig.tPlusIcon);
this.minusIcon = ((this.parentNode._last)?dbusfxTreeConfig.lMinusIcon:dbusfxTreeConfig.tMinusIcon);
return str;
}
//-->
