function
Node(id, pid, name, url, title, target, icon, iconOpen, open) {
this
.id
=
id;
this
.pid
=
pid;
this
.name
=
name;
this
.url
=
url;
this
.title
=
title;
this
.target
=
target;
this
.icon
=
icon;
this
.iconOpen
=
iconOpen;
this
._io
=
open
||
false
;
this
._is
=
false
;
this
._ls
=
false
;
this
._hc
=
false
;
this
._ai
=
0
;
this
._p;
};
//
Tree object
function
dTree(objName) {
this
.config
=
{
target :
null
,
folderLinks :
true
,
useSelection :
true
,
useCookies :
true
,
useLines :
true
,
useIcons :
true
,
useStatusText :
false
,
closeSameLevel :
false
,
inOrder :
false
}
this
.icon
=
{
root :
'
img/base.gif
'
,
folder :
'
img/folder.gif
'
,
folderOpen :
'
img/folderopen.gif
'
,
node :
'
img/page.gif
'
,
empty :
'
img/empty.gif
'
,
line :
'
img/line.gif
'
,
join :
'
img/join.gif
'
,
joinBottom :
'
img/joinbottom.gif
'
,
plus :
'
img/plus.gif
'
,
plusBottom :
'
img/plusbottom.gif
'
,
minus :
'
img/minus.gif
'
,
minusBottom :
'
img/minusbottom.gif
'
,
nlPlus :
'
img/nolines_plus.gif
'
,
nlMinus :
'
img/nolines_minus.gif
'
};
this
.obj
=
objName;
this
.aNodes
=
[];
this
.aIndent
=
[];
this
.root
=
new
Node(
-
1
);
this
.selectedNode
=
null
;
this
.selectedFound
=
false
;
this
.completed
=
false
;
};
//
Adds a new node to the node array
dTree.prototype.add
=
function
(id, pid, name, url, title, target, icon, iconOpen, open) {
this
.aNodes[
this
.aNodes.length]
=
new
Node(id, pid, name, url, title, target, icon, iconOpen, open);
};
//
Open/close all nodes
dTree.prototype.openAll
=
function
() {
this
.oAll(
true
);
};
dTree.prototype.closeAll
=
function
() {
this
.oAll(
false
);
};
//
Outputs the tree to the page
dTree.prototype.toString
=
function
() {
var
str
=
'
<div class="dtree">/n
'
;
if
(document.getElementById) {
if
(
this
.config.useCookies)
this
.selectedNode
=
this
.getSelected();
str
+=
this
.addNode(
this
.root);
}
else
str
+=
'
Browser not supported.
'
;
str
+=
'
</div>
'
;
if
(
!
this
.selectedFound)
this
.selectedNode
=
null
;
this
.completed
=
true
;
return
str;
};
//
Creates the tree structure
dTree.prototype.addNode
=
function
(pNode) {
var
str
=
''
;
var
n
=
0
;
if
(
this
.config.inOrder) n
=
pNode._ai;
for
(n; n
<
this
.aNodes.length; n
++
) {
if
(
this
.aNodes[n].pid
==
pNode.id) {
var
cn
=
this
.aNodes[n];
cn._p
=
pNode;
cn._ai
=
n;
this
.setCS(cn);
if
(
!
cn.target
&&
this
.config.target) cn.target
=
this
.config.target;
if
(cn._hc
&&
!
cn._io
&&
this
.config.useCookies) cn._io
=
this
.isOpen(cn.id);
if
(
!
this
.config.folderLinks
&&
cn._hc) cn.url
=
null
;
if
(
this
.config.useSelection
&&
cn.id
==
this
.selectedNode
&&
!
this
.selectedFound) {
cn._is
=
true
;
this
.selectedNode
=
n;
this
.selectedFound
=
true
;
}
str
+=
this
.node(cn, n);
if
(cn._ls)
break
;
}
}
return
str;
};
//
Creates the node icon, url and text
dTree.prototype.node
=
function
(node, nodeId) {
var
str
=
'
<div class="dTreeNode">
'
+
this
.indent(node, nodeId);
if
(
this
.config.useIcons) {
if
(
!
node.icon) node.icon
=
(
this
.root.id
==
node.pid)
?
this
.icon.root : ((node._hc)
?
this
.icon.folder :
this
.icon.node);
if
(
!
node.iconOpen) node.iconOpen
=
(node._hc)
?
this
.icon.folderOpen :
this
.icon.node;
if
(
this
.root.id
==
node.pid) {
node.icon
=
this
.icon.root;
node.iconOpen
=
this
.icon.root;
}
str
+=
'
<img id="i
'
+
this
.obj
+
nodeId
+
'
" src="
'
+
((node._io)
?
node.iconOpen : node.icon)
+
'
" alt="" />
'
;
}
if
(node.url) {
str
+=
'
<a id="s
'
+
this
.obj
+
nodeId
+
'
" class="
'
+
((
this
.config.useSelection)
?
((node._is
?
'
nodeSel
'
:
'
node
'
)) :
'
node
'
)
+
'
" href="
'
+
node.url
+
'
"
'
;
if
(node.title) str
+=
'
title="
'
+
node.title
+
'
"
'
;
if
(node.target) str
+=
'
target="
'
+
node.target
+
'
"
'
;
if
(
this
.config.useStatusText) str
+=
'
οnmοuseοver="window.status=/'
'
+
node.name
+
'
/';return true;" οnmοuseοut="window.status=/'/';return true;"
'
;
if
(
this
.config.useSelection
&&
((node._hc
&&
this
.config.folderLinks)
||
!
node._hc))
str
+=
'
οnclick="javascript:
'
+
this
.obj
+
'
.s(
'
+
nodeId
+
'
);"
'
;
str
+=
'
>
'
;
}
else
if
((
!
this
.config.folderLinks
||
!
node.url)
&&
node._hc
&&
node.pid
!=
this
.root.id)
str
+=
'
<a href="javascript:
'
+
this
.obj
+
'
.o(
'
+
nodeId
+
'
);" class="node">
'
;
str
+=
node.name;
if
(node.url
||
((
!
this
.config.folderLinks
||
!
node.url)
&&
node._hc)) str
+=
'
</a>
'
;
str
+=
'
</div>
'
;
if
(node._hc) {
str
+=
'
<div id="d
'
+
this
.obj
+
nodeId
+
'
" class="clip" style="display:
'
+
((
this
.root.id
==
node.pid
||
node._io)
?
'
block
'
:
'
none
'
)
+
'
;">
'
;
str
+=
this
.addNode(node);
str
+=
'
</div>
'
;
}
this
.aIndent.pop();
return
str;
};