/********************************************************************************************
* BlueShoes Framework; This file is part of the php application framework.
* NOTE: This code is stripped (obfuscated). To get the clean documented code goto 
*       www.blueshoes.org and register for the free open source *DEVELOPER* version or 
*       buy the commercial version.
* 
* @copyright see www.blueshoes.org
* @author    Samuel Blume <sam at blueshoes dot org>
* @author    Andrej Arn <andrej at blueshoes dot org>
*/function Bs_TreeElement() {this.id;this.parent;this._tree;this.caption;this.url;this.target;this.onClick;this.isOpen = false;this.visible = true;this.isChecked = 0;this.checkboxName;this._checkboxObject;this._level = 0;this._children = new Array;this.imageDir;this.icon;this.beforeIconSpan;this.beforeCaptionSpan;this.afterCaptionSpan;this._attachedEvents;this._isOutrendered = false;this._errorArray;this.getThis = function() {return this;}
this.addChild = function(treeElement) {treeElement.parent = this;if (this._children.push) {this._children.push(treeElement);} else {this._children[this._children.length] = treeElement;}
}
this.render = function(omitDivTags) {var imageDir = this._getVar('imageDir');var out      = new Array();var outI     = 0;var evalStr  = '';if (!omitDivTags) {out[outI++] = '<span id="BsTree_' + this._tree._instanceName + '_e_' + this.id + '"';out[outI++] = ' style="';if (!this.visible) {out[outI++] = 'display:none;';}
out[outI++] = '">';}
if ((this._level) > 0 || (this._tree.showPseudoElement)) {out[outI++] = '<nobr>';out[outI++] = '<div style="float:none;"><div style="overflow:visible; height:16; font-family: Arial, Helvetica, sans-serif; font-size: 11px;">';var level = this._level;if (!this._tree.showPseudoElement) --level;var obj = null;var outTemp = '';for (var i=0; i<level; i++) {if (!obj) {obj = this.parent;} else {obj = obj.parent;}
if (obj.hasSiblingsDown()) {var img = 'line1';} else {var img = 'empty';}
outTemp = '<img src="' + imageDir + img + '.gif" width="16" height="16" border="0" align="top">' + outTemp;}
out[outI++] = outTemp;if (this.hasSiblingsDown()) {var imgNumber = 3;} else {var imgNumber = 2;}
if (this.hasVisibleChildren()) {if ((this._level == 0) || (!this._tree.showPseudoElement && (this._level == 1) && ((this._tree.useAutoSequence && (this.id == 2)) || (!this._tree.useAutoSequence && true)))) {if (this.hasSiblingsDown()) {imgNumber++;} else {imgNumber--;}
}
if (this.isOpen) {var plusImg = 'minus' + imgNumber;var onClick = 'Close';} else {var plusImg = 'plus' + imgNumber;var onClick = 'Open';}
} else {var plusImg = 'line' + imgNumber;var onClick = false;}
if (onClick) {var onClickStr = 'onClick="' + this._tree._instanceName + '.elementToggleOpenClose(\'' + this.id + '\');"';} else {var onClickStr = '';}
if (this.onClick) {var onClick = this.onClick;onClick = onClick.replace(/__this\.id__/g, this.id);out[outI++] = '<span style="cursor:pointer; cursor:hand;" onClick="' + onClick + '">';}
out[outI++] = '<img id="BsTree_' + this._tree._instanceName + '_e_' + this.id + '_openClose" src="' + imageDir + plusImg + '.gif" width="16" height="16" border="0" ' + onClickStr + ' align="top">';if (this.beforeIconSpan) {out[outI++] = "<span>" + this.beforeIconSpan + "</span>";}
if (this.url) {var hRef = '<a href="' + this.url + '"';if (this.target) {hRef += ' target="' + this.target + '"';}
hRef += '>';out[outI++] = hRef;}
var folderIconId = 'BsTree_' + this._tree._instanceName + '_e_' + this.id + '_folder';if (this._getVar('useFolderIcon')) {if (hRef) out[outI++] = hRef;switch (typeof(this.icon)) {case 'undefined':
if (this._tree.useLeaf && !this.hasChildren()) {var folderImg = 'leaf';} else {var folderImg = 'folder';folderImg += (this.isOpen) ? 'Open' : 'Closed';}
out[outI++] = '<img id="' + folderIconId + '" src="' + imageDir + folderImg + '.gif" width="16" height="16" border="0" align="top">';break;case 'bool':
case 'boolean':
break;case 'string':
if (this.icon != 'false') {out[outI++] = '<img id="' + folderIconId + '" src="' + imageDir + this.icon + '" width="16" height="16" border="0" align="top">';}
}
if (hRef) out[outI++] = '</a>';}
if (this.beforeCaptionSpan) {out[outI++] = "<span>" + this.beforeCaptionSpan + "</span>";}
if (this._tree.useCheckboxSystem) {var checkboxSpan = this.checkboxName + 'Span';var checkboxObj  = this.checkboxName + 'Obj';out[outI++] = '&nbsp;<span id="' + checkboxSpan + '">';var t = new Bs_Checkbox();t.objectName = checkboxObj;t.checkboxName = this.checkboxName;t.value = this.isChecked;if (this._getVar('checkboxSystemGuiNochange')) {t.guiNochange = true;}
var chkImagDir = this._getVar('checkboxSystemImgDir');if (chkImagDir) {t.imgDir = chkImagDir;} else {t.imgDir     = "images/img/win2k_noBorder/";}
t.imgWidth   = '13';t.imgHeight  = '13';if (this._tree.checkboxSystemWalkTree) {t.attachOnClick(this._tree._instanceName + '.elementCheckboxEvent(\'' + this.id + '\', ' + checkboxObj + '.value);');}
eval(checkboxObj + ' = t;');this._checkboxObject = t;evalStr += checkboxObj + ".draw('" + checkboxSpan + "');";out[outI++] = '</span>';}
out[outI++] = '&nbsp;';if (this.hasEventAttached('onClickCaption')) {out[outI++] = '<span id="BsTree_' + this._tree._instanceName + '_e_' + this.id + '_caption" style="cursor:pointer; cursor:hand;" onClick="' + this._tree._instanceName + '.executeOnElement(\'' + this.id + '\', \'fireEvent\', Array(\'onClickCaption\'));">';}
if (hRef) out[outI++] = hRef;out[outI++] = this.caption;if (hRef) out[outI++] = '</a>';if (this.hasEventAttached('onClickCaption')) {out[outI++] = '</span>';}
if (this.onClick) {out[outI++] = '</span>';}
out[outI++] = '</div>';if (this.afterCaptionSpan) {out[outI++] = '<div style="float:right; width:40;">' + this.afterCaptionSpan + '</div>';out[outI++] = '<div style="overflow:visible;">' + this.afterCaptionSpan + '</div>';} else {out[outI++] = '<div style="overflow:visible;"></div>';}
out[outI++] = '</nobr>';out[outI++] = '</div>';}
if ((this._tree.preloadDown == -1) || (this.isOpen && this.hasChildren())) {out[outI++] = '<span id="BsTree_' + this._tree._instanceName + '_e_' + this.id + '_children"';if (!this.isOpen) {out[outI++] = ' style="display:none;"';}
out[outI++] = '>';for (var i=0; i<this._children.length; i++) {var t = this._children[i].render();out[outI++] = t[0];evalStr    += t[1];}
out[outI++] = '</span>';}
if (!omitDivTags) {out[outI++] = '</span>';}
out[outI++] = "\n";this._isOutrendered = true;return new Array(out.join(''), evalStr);}
this.reset = function() {this.caption           = null;this.url               = null;this.target            = null;this.onClick           = null;this.isOpen            = false;this.isChecked         = 0;this.checkboxName      = null;this.beforeIconSpan    = null;this.beforeCaptionSpan = null;this.afterCaptionSpan  = null;}
this.initByArray = function(a, tree, level) {this._tree   = tree;this._level  = level;if (this._tree.useAutoSequence && (level > 0)) {this.id      = ++this._tree._elementSequence;} else {if (typeof(a['id']) == 'undefined') {this._addError('tree error: useAutoSequence is set to false, but for an array element there is no id defined.');return false;}
this.id = a['id'];}
if (typeof(a['caption'])           != 'undefined') this.caption            = a['caption'];if (typeof(a['url'])               != 'undefined') this.url                = a['url'];if (typeof(a['target'])            != 'undefined') this.target             = a['target'];if (typeof(a['onClick'])           != 'undefined') this.onClick            = a['onClick'];if (typeof(a['isOpen'])            != 'undefined') this.isOpen             = a['isOpen'];if (typeof(a['isChecked'])         != 'undefined') this.isChecked          = a['isChecked'];if (typeof(a['visible'])           != 'undefined') this.visible            = a['visible'];if (typeof(a['icon'])              != 'undefined') this.icon               = a['icon'];if (typeof(a['imageDir'])          != 'undefined') this.imageDir           = a['imageDir'];if (typeof(a['beforeIconSpan'])    != 'undefined') this.beforeIconSpan     = a['beforeIconSpan'];if (typeof(a['beforeCaptionSpan']) != 'undefined') this.beforeCaptionSpan  = a['beforeCaptionSpan'];if (typeof(a['afterCaptionSpan'])  != 'undefined') this.afterCaptionSpan   = a['afterCaptionSpan'];if (typeof(a['checkboxName']) != 'undefined') {this.checkboxName  = a['checkboxName'];} else {if (this._tree.useCheckboxSystem) {this.checkboxName = 'bsTreeCheckbox' + this.id;}
}
if (typeof(a['onClickCaption'])    != 'undefined') {this.attachEvent('onClickCaption', a['onClickCaption']);}
if (typeof(a['onChangeCheckbox'])    != 'undefined') {this.attachEvent('onChangeCheckbox', a['onChangeCheckbox']);}
return true;}
this.updateObjectByArray = function(a) {this.reset();if (a['caption'])            this.caption            = a['caption'];if (a['url'])                this.url                = a['url'];if (a['target'])             this.target             = a['target'];if (a['onClick'])            this.onClick            = a['onClick'];if (a['isOpen'])             this.isOpen             = a['isOpen'];if (a['isChecked'])          this.isChecked          = a['isChecked'];if (a['imageDir'])           this.imageDir           = a['imageDir'];if (a['checkboxName']) {this.checkboxName  = a['checkboxName'];} else {if (this._tree.useCheckboxSystem) {this.checkboxName = 'bsTreeCheckbox' + this.id;}
}
if (a['beforeIconSpan'])     this.beforeIconSpan     = a['beforeIconSpan'];if (a['beforeCaptionSpan'])  this.beforeCaptionSpan  = a['beforeCaptionSpan'];if (a['afterCaptionSpan'])   this.afterCaptionSpan   = a['afterCaptionSpan'];}
this.getJavascriptCode = function(varName, recursive) {var ret = "";if (
(this._tree.useAutoSequence && (this.id > 1)) 
|| (!this._tree.useAutoSequence && !this.parent)
) {} else {ret += varName + " = new Array();\n";if (!this._tree.useAutoSequence) {ret += varName + "['id'] = \"" + this.id + "\";\n";}
if (this.caption)           ret += varName + "['caption']            = \"" + this.caption            + "\";\n";if (this.url)               ret += varName + "['url']                = \"" + this.url                + "\";\n";if (this.target)            ret += varName + "['target']             = \"" + this.target             + "\";\n";if (this.onClick) {var onClick = this.onClick.replace(/"/g,  '\\"');ret += varName + "['onClick']            = \"" + onClick            + "\";\n";}
if (this.imageDir)          ret += varName + "['imageDir']           = \"" + this.imageDir          + "\";\n";if (this.isOpen)            ret += varName + "['isOpen']             = '" + this.isOpen             + "';\n";if (this.isChecked)         ret += varName + "['isChecked']          = '" + this.isChecked          + "';\n";if (this.checkboxName)      ret += varName + "['checkboxName']       = '" + this.checkboxName       + "';\n";if (this.icon)              ret += varName + "['icon']               = \"" + this.icon              + "\";\n";if (this.beforeIconSpan)    ret += varName + "['beforeIconSpan']     = \"" + this.beforeIconSpan     + "\";\n";if (this.beforeCaptionSpan) ret += varName + "['beforeCaptionSpan']  = \"" + this.beforeCaptionSpan  + "\";\n";if (this.afterCaptionSpan)  ret += varName + "['afterCaptionSpan']   = \"" + this.afterCaptionSpan   + "\";\n";varName += "['children']";}
if (recursive) {if (this._children.length > 0) {ret += varName + " = new Array();\n"
for (var i=0; i<this._children.length; i++) {ret += this._children[i].getJavascriptCode(varName + "[" + i + "]", recursive);}
}
}
return ret;}
this.setActive = function() {if (this._tree._currentActiveElement) this._tree._currentActiveElement.unsetActive();var e = document.getElementById('BsTree_' + this._tree._instanceName + '_e_' + this.id + '_caption');e.style.backgroundColor = this._getVar('captionBgColor');this._tree._currentActiveElement = this;}
this.unsetActive = function() {var e = document.getElementById('BsTree_' + this._tree._instanceName + '_e_' + this.id + '_caption');e.style.backgroundColor = 'transparent';}
this.toggleOpenClose = function() {if (this.isOpen) {this.close();} else {this.open();}
}
this.open = function() {this.isOpen = true;if (this._isOutrendered) {var d = document.getElementById('BsTree_' + this._tree._instanceName + '_e_' + this.id + '_children');d.style.display = 'block';this._switchIconsOnToggleOpenClose();} else {var content = this.render(true);document.getElementById('BsTree_' + this._tree._instanceName + '_e_' + this.id).innerHTML = content[0];if (content[1] != '') {eval(content[1]);}
}
}
this.close = function() {this.isOpen = false;if (this._isOutrendered) {var d = document.getElementById('BsTree_' + this._tree._instanceName + '_e_' + this.id + '_children');d.style.display = 'none';this._switchIconsOnToggleOpenClose();} else {var content = this.render(true);document.getElementById('BsTree_' + this._tree._instanceName + '_e_' + this.id).innerHTML = content[0];if (content[1] != '') {eval(content[1]);}
}
}
this._switchIconsOnToggleOpenClose = function() {var openClose = document.getElementById('BsTree_' + this._tree._instanceName + '_e_' + this.id + '_openClose');openClose.src = this._getSourceOpenCloseIcon();if (this._getVar('useFolderIcon')) {var folderIconId = 'BsTree_' + this._tree._instanceName + '_e_' + this.id + '_folder';var fIcon = document.getElementById(folderIconId);if (fIcon) {fIcon.src = this._getSourceFolderIcon();}
}
}
this._getSourceOpenCloseIcon = function() {if (this.hasSiblingsDown()) {var imgNumber = 3;} else {var imgNumber = 2;}
if (this.hasVisibleChildren()) {if ((this._level == 0) || ((this.id == 2) && !this._tree.showPseudoElement)) {if (this.hasSiblingsDown()) {imgNumber++;} else {imgNumber--;}
}
if (this.isOpen) {var plusImg = 'minus' + imgNumber;var onClick = 'Close';} else {var plusImg = 'plus' + imgNumber;var onClick = 'Open';}
} else {var plusImg = 'line' + imgNumber;}
var imageDir = this._getVar('imageDir');return imageDir + plusImg + '.gif';}
this._getSourceFolderIcon = function() {var imageDir = this._getVar('imageDir');switch (typeof(this.icon)) {case 'undefined':
if (this._tree.useLeaf && !this.hasChildren()) {var folderImg = 'leaf';} else {var folderImg = 'folder';folderImg += (this.isOpen) ? 'Open' : 'Closed';}
return imageDir + folderImg + '.gif';break;case 'bool':
case 'boolean':
break;case 'string':
if (this.icon != 'false') {return imageDir + this.icon + '.gif';}
}
return '';}
this.hasChildren = function() {return (this._children.length > 0);}
this.hasVisibleChildren = function() {if (!this._children || !(this._children.length > 0)) return false;for (var i=0; i<this._children.length; i++) {if (this._children[i].visible) return true;}
return false;}
this.numChildren = function() {return this._children.length;}
this.childPos = function(id) {for (var i=0; i<this._children.length; i++) {if (this._children[i].id == id) return ++i;}
return false;}
this.hasSiblings = function() {}
this.hasSiblingsDown = function() {try {var tot = this.parent.numChildren();var pos = this.parent.childPos(this.id);return (pos < tot);} catch (e) {return false;}
}
this.hasSiblingsAbove = function() {}
this.getSiblings = function() {try {return this.parent.getChildren();} catch(e) {return new Array;}
}
this.getChildren = function() {return this._children;}
this.getParentId = function() {try {return this.parent.id;} catch (e) {return false;}
}
this.hasParent = function() {return (this.parent);}
this.attachEvent = function(trigger, yourEvent) {if (typeof(this._attachedEvents) == 'undefined') {this._attachedEvents = new Array();}
if (typeof(this._attachedEvents[trigger]) == 'undefined') {this._attachedEvents[trigger] = new Array(yourEvent);} else {this._attachedEvents[trigger][this._attachedEvents[trigger].length] = yourEvent;}
}
this.hasEventAttached = function(trigger) {return ((typeof(this._attachedEvents) != 'undefined') && (typeof(this._attachedEvents[trigger]) != 'undefined'));}
this.fireEvent = function(trigger) {if ((typeof(this._attachedEvents) != 'undefined') && (typeof(this._attachedEvents[trigger]) != 'undefined')) {if (trigger == 'onClickCaption') {this.setActive();}
var e = this._attachedEvents[trigger];if ((typeof(e) == 'string') || (typeof(e) == 'function')) {e = new Array(e);}
for (var i=0; i<e.length; i++) {if (typeof(e[i]) == 'function') {e[i](this);} else if (typeof(e[i]) == 'string') {eval(e[i]);}
}
}
}
this._addError = function(str) {if (typeof(this._errorArray) == 'undefined') {this._errorArray = new Array(str);} else {this._errorArray[this._errorArray.length] = str;}
}
this.getLastError = function() {if (typeof(this._errorArray) != 'undefined') {if (this._errorArray.length > 0) {return this._errorArray[this._errorArray.length -1];}
}
return false;}
this._getVar = function(varName) {if (typeof(this[varName]) != 'undefined') {return this[varName];} else {if (this._tree.walkTree && this.parent) {return this.parent._getVar(varName);} else if (typeof(this._tree[varName]) != 'undefined') {return this._tree[varName];} else {return null;}
}
}
this.onMouseOver = function() {var img = document.getElementById(this._spanId + 'icon');if (!img.swapOver0) {img.swapOver0 = new Image();img.swapOver0.src = this.imgDir + 'enabled_0_over.gif';img.swapOver1 = new Image();img.swapOver1.src = this.imgDir + 'enabled_1_over.gif';img.swapOver2 = new Image();img.swapOver2.src = this.imgDir + 'enabled_2_over.gif';img.swapOut0 = new Image();img.swapOut0.src = this.imgDir + 'enabled_0.gif';img.swapOut1 = new Image();img.swapOut1.src = this.imgDir + 'enabled_1.gif';img.swapOut2 = new Image();img.swapOut2.src = this.imgDir + 'enabled_2.gif';}
img.src = img['swapOver' + this.value].src;}
this.onMouseOut = function() {var img = document.getElementById(this._spanId + 'icon');img.src = img['swapOut' + this.value].src;}
/* ******** checkbox system functions ******** */
this.checkboxEvent = function(value) {if (!this.hasChildren()) {value = (value) ? 2 : 0;} else {if (this.isChecked == 1) {if ((!this._tree.checkboxSystemIfPartlyThenFull) || ((this._tree.checkboxSystemWalkTree) && (this._tree.checkboxSystemWalkTree != 2) && (this._tree.checkboxSystemWalkTree != 3))) {value = 0;} else {value = 2;}
} else if (this.isChecked == 0) {if (this._tree.checkboxSystemWalkTree && (this._tree.checkboxSystemWalkTree != 2) && (this._tree.checkboxSystemWalkTree != 3) && this.hasChildren()) {value = 1;}
}
}
this.isChecked = value;this._checkboxObject.setTo(value, true);if (this.hasEventAttached('onChangeCheckbox')) this.fireEvent('onChangeCheckbox');if ((this._tree.checkboxSystemWalkTree == 3) || (this._tree.checkboxSystemWalkTree == 1) || (this._tree.checkboxSystemWalkTree == 4)) {this.parent.updateCheckboxFromChild();}
if ((this._tree.checkboxSystemWalkTree == 3) || (this._tree.checkboxSystemWalkTree == 2) || ((this._tree.checkboxSystemWalkTree == 4) && (value == 0))) {this.checkboxUpdateDown(value);}
}
this.checkboxUpdateDown = function(value) {for (var i=0; i<this._children.length; i++) {this._children[i]._updateCheckboxFromParent(value, true);}
}
this.updateCheckboxVisually = function() {if (typeof(this._checkboxObject) == 'object') {try {this._checkboxObject.setTo(this.isChecked);} catch (e) {}
}
}
this._updateCheckboxFromParent = function(newValue, recursiveDown) {var backupValue = this.isChecked;this.isChecked = (newValue) ? 2 : 0;var hasChanged = (this.isChecked != backupValue);if (hasChanged) {this.updateCheckboxVisually();if (this.hasEventAttached('onChangeCheckbox')) this.fireEvent('onChangeCheckbox');}
if (recursiveDown) this.checkboxUpdateDown(newValue, true);}
this.updateCheckboxFromChild = function() {var backupIsChecked = this.isChecked;var numYes   = 0;var numNo    = 0;var isPartly = false;for (var i=0; i<this._children.length; i++) {if (this._children[i].isChecked == 1) {isPartly = true;this.isChecked = 1;break;} else if (this._children[i].isChecked) {numYes++;} else {numNo++;}
if ((numYes > 0) && (numNo > 0)) {break;}
}
if (!isPartly) {if ((numYes > 0) && (numNo > 0)) {this.isChecked = 1;} else if (numYes > 0) {this.isChecked = 2;} else {this.isChecked = 0;}
}
if (backupIsChecked != this.isChecked) {this.updateCheckboxVisually();if (this.hasEventAttached('onChangeCheckbox')) this.fireEvent('onChangeCheckbox');}
if (typeof(this.parent) == 'object') {this.parent.updateCheckboxFromChild();}
}
}
