﻿
function Telligent_Tree(varName,selectId,stateId,enableDragDrop,onNodeSelectedFunction,getSubNodesFunction,canHaveChildrenFunction,onContextMenuFunction,onNodeRemovedFunction,onNodeMovedFunction,onNodeAddedFunction,nodeHtml,draggableTreeNames)
{this._variableName=varName;this._wrapper=null;this._container=null;this._select=document.getElementById(selectId);this._state=document.getElementById(stateId);this._selectedState=null;this._selectedNode=null;this._nodes=new Array();this._backgroundColor=null;this._enableDragDrop=enableDragDrop;this._onNodeSelectedFunction=onNodeSelectedFunction;this._getSubNodesFunction=getSubNodesFunction;this._canHaveChildrenFunction=canHaveChildrenFunction;this._onNodeRemovedFunction=onNodeRemovedFunction;this._onNodeMovedFunction=onNodeMovedFunction;this._onNodeAddedFunction=onNodeAddedFunction;this._onContextMenuFunction=onContextMenuFunction;this._movingNode=null;this._movingNodeStartParent=null;this._draggingInitialized=false;this._pagePosition=null;this._movingNodeIsFloating=false;this._movingNodeFloat=null;this._nodeHeightsCache=null;this._movingNodeStartIndex=null;this._movingNodeLastIndex=null;this._moveStartY=null;this._moveScrollStartY=null;this._draggableTreeNames=draggableTreeNames;this._draggableTrees=new Array();this._initialized=false;this._initialize(nodeHtml);Telligent_Common.RegisterDisposableControl(this._variableName);if(this._container)
this._container.dispose=new Function(this._variableName+'.Dispose();');}
Telligent_Tree.prototype.Dispose=function()
{if(this._initialized)
{this._initialized=false;this._state=null;this._container=null;this._select=null;this._movingNodeFloat=null;for(var i=0;i<this._nodes.length;i++)
{this._nodes[i].Dispose();}}}
Telligent_Tree.prototype._getCommonParent=function(node1,node2)
{var parents1=new Array();var tNode=node1;while(tNode)
{parents1[parents1.length]=tNode;tNode=tNode._parent;}
tNode=node2;while(tNode)
{for(var i=parents1.length-1;i>=0;i--)
{if(parents1[i]==tNode)
return tNode;}
tNode=tNode._parent;}
return null;}
Telligent_Tree.prototype._highlight=function()
{for(var i=0;i<this._nodes.length;i++)
{this._nodes[i]._highlight();}
this._wrapper.style.backgroundColor='#cccccc';this._wrapper.style.borderColor='#666666';}
Telligent_Tree.prototype._unhighlight=function()
{for(var i=0;i<this._nodes.length;i++)
{this._nodes[i]._unhighlight();}
this._wrapper.style.backgroundColor=this._backgroundColor;this._wrapper.style.borderColor='#999999';}
Telligent_Tree.prototype._setCursor=function(cursor)
{for(var i=0;i<this._nodes.length;i++)
{this._nodes[i]._setCursor(cursor);}
this._wrapper.style.cursor=cursor;}
Telligent_Tree.prototype._addDraggedNode=function(node,parentNode,index,event)
{if(!event)
event=window.event;if(parentNode)
{parentNode.InsertNode(node,index);parentNode.Refresh();}
else
{this.InsertNode(node,index);this.Refresh();}
if(this._onNodeAddedFunction)
this._onNodeAddedFunction(this,node);this.SelectNode(node);this._nodeMouseDown(event,node);this._initializeDragging();}
Telligent_Tree.prototype._isMouseOver=function(x,y,allowMargin)
{if(this._pagePosition==null)
this._refreshPagePosition();var left=this._pagePosition.Left;var right=this._pagePosition.Left+this._pagePosition.Width
var top=this._pagePosition.Top;var bottom=this._pagePosition.Top+this._pagePosition.Height;if(allowMargin)
{left-=10;right+=10;top-=10;bottom+=10;}
return(x>left&&x<right&&y>top&&y<bottom);}
Telligent_Tree.prototype._getParentNodeAndIndex=function(x,y)
{if(this._pagePosition==null)
this._refreshPagePosition();var nodeAndIndex=new Object();nodeAndIndex.ParentNode=null;nodeAndIndex.Index=-1;if(x>this._pagePosition.Left&&x<this._pagePosition.Left+this._pagePosition.Width&&y>this._pagePosition.Top-10&&y<this._pagePosition.Top+this._pagePosition.Height+10)
{y-=this._pagePosition.Top;y-=this._container.offsetTop;y+=this._wrapper.scrollTop;nodeAndIndex.Index=0;for(var i=0;i<this._nodes.length;i++)
{if(this._nodes[i]._element)
{if(y<this._nodes[i]._element.offsetHeight)
{var childNodeAndIndex=this._nodes[i]._getParentNodeAndIndex(y);if(childNodeAndIndex)
{if(childNodeAndIndex.MoveNext)
nodeAndIndex.Index++;else
nodeAndIndex=childNodeAndIndex;}
break;}
else
{y-=this._nodes[i]._element.offsetHeight;nodeAndIndex.Index++;}}}}
return nodeAndIndex;}
Telligent_Tree.prototype._getNodeHeight=function(node)
{if(node.IsExpanded()&&node.GetNodeCount()>0)
return node._element.offsetHeight-node._element.childNodes[2].offsetHeight;else
return node._element.offsetHeight;}
Telligent_Tree.prototype._populateNodeHeightsCache=function(nodes,node)
{for(var i=0;i<nodes.length;i++)
{if(nodes[i]._element)
{if(nodes[i]===node)
{var nodeHeight=new Object();nodeHeight.ParentNode=nodes[i]._parent;nodeHeight.Height=nodes[i]._element.offsetHeight;nodeHeight.Index=i;this._nodeHeightsCache[this._nodeHeightsCache.length]=nodeHeight;this._movingNodeStartIndex=this._nodeHeightsCache.length-1;this._movingNodeLastIndex=this._nodeHeightsCache.length-1;}
else
{var nodeHeight=new Object();nodeHeight.ParentNode=nodes[i]._parent;nodeHeight.Height=this._getNodeHeight(nodes[i]);nodeHeight.Index=i;nodeHeight.IsBeforeNode=nodes[i]._parent==node._parent;this._nodeHeightsCache[this._nodeHeightsCache.length]=nodeHeight;var fractionHeight=nodeHeight.Height*.25;if(nodes[i].IsExpanded())
{if(nodes[i]._nodes.length>0)
this._populateNodeHeightsCache(nodes[i]._nodes,node);else if(nodes[i].GetCanHaveChildren())
{nodeHeight.Height-=fractionHeight;var subNodeHeight=new Object();subNodeHeight.ParentNode=nodes[i];subNodeHeight.Height=fractionHeight;subNodeHeight.Index=0;this._nodeHeightsCache[this._nodeHeightsCache.length]=subNodeHeight;}}
var afterNodeHeight=null;if(nodes[i]._parent==node._parent)
{afterNodeHeight=new Object();afterNodeHeight.ParentNode=nodes[i]._parent;afterNodeHeight.Height=nodeHeight.Height;afterNodeHeight.Index=i;afterNodeHeight.IsAfterNode=true;this._nodeHeightsCache[this._nodeHeightsCache.length]=afterNodeHeight;}
if(i==nodes.length-1)
{nodeHeight.Height-=fractionHeight;if(afterNodeHeight)
afterNodeHeight.Height=nodeHeight.Height;nodeHeight=new Object();nodeHeight.ParentNode=nodes[i]._parent;nodeHeight.Height=fractionHeight;nodeHeight.Index=i+1;this._nodeHeightsCache[this._nodeHeightsCache.length]=nodeHeight;}}}}}
Telligent_Tree.prototype._getMovingParentNodeAndIndex=function(originalIndex,yOffset)
{var parentNodeAndIndex=new Object();parentNodeAndIndex.ParentNode=null;parentNodeAndIndex.Index=-1;parentNodeAndIndex.NodeHeightsCacheIndex=originalIndex;if(this._nodeHeightsCache&&originalIndex>=0&&originalIndex<this._nodeHeightsCache.length)
{var newIndex=originalIndex;var movingDown=yOffset>0;var done=false;while(!done)
{if(yOffset>0)
{if(newIndex<this._nodeHeightsCache.length-1&&(yOffset>this._nodeHeightsCache[newIndex+1].Height||this._nodeHeightsCache[newIndex+1].IsBeforeNode))
{newIndex++;if(!this._nodeHeightsCache[newIndex].IsBeforeNode)
yOffset-=this._nodeHeightsCache[newIndex].Height;}
else
done=true;}
else if(yOffset<0)
{if(newIndex>0&&(-yOffset>this._nodeHeightsCache[newIndex-1].Height||this._nodeHeightsCache[newIndex-1].IsAfterNode))
{newIndex--;if(!this._nodeHeightsCache[newIndex].IsAfterNode)
yOffset+=this._nodeHeightsCache[newIndex].Height;}
else
done=true;}
else
done=true;}
if(movingDown)
{while(this._nodeHeightsCache[newIndex].IsBeforeNode&&newIndex>0)
newIndex--;}
else
{while(this._nodeHeightsCache[newIndex].IsAfterNode&&newIndex<this._nodeHeightsCache.length-1)
newIndex++;}
parentNodeAndIndex.ParentNode=this._nodeHeightsCache[newIndex].ParentNode;parentNodeAndIndex.Index=this._nodeHeightsCache[newIndex].Index;parentNodeAndIndex.NodeHeightsCacheIndex=newIndex;}
return parentNodeAndIndex;}
Telligent_Tree.prototype._saveState=function()
{var valueArray=new Array();for(var i=0;i<this._nodes.length;i++)
{this._nodes[i]._serialize(valueArray,0);}
this._state.value=valueArray.join('&');}
Telligent_Tree.prototype.SelectNode=function(node)
{var selectedNode=this._selectedNode;if(this._selectedNode&&this._selectedNode._tree==this&&this._selectedNode._element)
this._selectedNode._element.childNodes[1].style.backgroundColor=this._backgroundColor;if(node&&node._tree==this&&node._element)
{node._element.childNodes[1].style.backgroundColor='#ccc';this._selectedNode=node;this._selectedState.value=node.Value;this._scrollToNode(node);if(selectedNode!=node&&this._onNodeSelectedFunction)
this._onNodeSelectedFunction(this,this._selectedNode);}
else
{this._selectedNode=null;this._selectedState.value="";}}
Telligent_Tree.prototype.Resize=function(width,height)
{if(width<=4)
width=4;if(height<=4)
height=4;this._wrapper.style.width=(width-4)+'px';this._wrapper.style.height=(height-4)+'px';}
Telligent_Tree.prototype._initialize=function(nodeHtml)
{if(!this._select.offsetHeight)
{var d=new Object();d.nodeHtml=nodeHtml;var stateId=Telligent_Common.SaveStateByKey(this._variableName,'Telligent_Tree_initialize',d);window.setTimeout(new Function('var d = Telligent_Common.GetStateByStateId(\''+stateId+'\',\'Telligent_Tree_initialize\'); Telligent_Common.ClearStateByStateId(\''+stateId+'\',\'Telligent_Tree_initialize\');'+this._variableName+'._initialize(d.nodeHtml);'),249);return;}
if(this._select.disabled)
{this._select.disabled=false;this._select.readonly=true;}
this._backgroundColor=Telligent_Common.GetCurrentStyleValue(this._select,'background-color','backgroundColor','#ffffff');if(this._backgroundColor.replace(/\#[0-9a-f]*/gi,'')!='')
this._backgroundColor='#ffffff';this._wrapper=document.createElement('div');this._wrapper.style.backgroundColor=this._backgroundColor;this._wrapper.style.fontFamily=Telligent_Common.GetCurrentStyleValue(this._select,'font-family','fontFamily','Arial, Helvetica');this._wrapper.style.fontSize=Telligent_Common.GetCurrentStyleValue(this._select,'font-size','fontSize','100%');this._wrapper.style.lineHeight=Telligent_Common.GetCurrentStyleValue(this._select,'line-height','lineHeight','100%');this._wrapper.style.color=Telligent_Common.GetCurrentStyleValue(this._select,'color','color','#000000');this._wrapper.style.borderStyle='outset';this._wrapper.style.borderWidth='1px';this._wrapper.style.borderColor='#999999';this._wrapper.style.padding='2px';this._wrapper.style.overflow='auto';this._wrapper.style.width=(this._select.offsetWidth-4)+'px';this._wrapper.style.height=(this._select.offsetHeight-4)+'px';this._wrapper.style.cursor='default';this._wrapper.style.position='relative';this._container=document.createElement('ul');this._container.style.listStyleType='none';this._container.style.margin='0';this._container.style.whiteSpace='nowrap';this._container.style.padding='0';this._wrapper.appendChild(this._container);this._selectedState=document.createElement('input');this._selectedState.type='hidden';this._selectedState.name=this._select.name;this._selectedState.id=this._select.id;this._selectedState.value=this._select.selectedIndex==-1?"":this._select.options[this._select.selectedIndex].value;this._select.parentNode.insertBefore(this._wrapper,this._select);this._select.parentNode.removeChild(this._select);this._wrapper.appendChild(this._selectedState);this._parseNodes(null,this._select.options,0,this._state.value.split(/\&/),nodeHtml,0);this._select.style.display='none';this._initialized=true;if(this._select.readonly)
this.Disable();else
this.Enable();if(this._select.selectedIndex>=0)
{var node=this.GetNodeByValue(this._select.options[this._select.selectedIndex].value);if(node)
this.SelectNode(node);}}
Telligent_Tree.prototype.Disable=function()
{this._select.readonly=true;this.Refresh();}
Telligent_Tree.prototype.Enable=function()
{this._select.readonly=false;this.Refresh();}
Telligent_Tree.prototype.IsDisabled=function()
{return this._select.readonly;}
Telligent_Tree.prototype._parseNodes=function(parentTreeNode,optionsList,currentOptionIndex,nodeValues,nodeHtml,currentLevel)
{var currentNode,i,html,value,isExpanded,isLoaded,level,matches,canHaveChildren;for(i=currentOptionIndex;i<optionsList.length;i++)
{var optionText=optionsList[i].text;matches=optionText.match(/^(\-*)[^\-]/);if(matches)
{level=matches[1].length/2;optionText=optionText.substr(matches[1].length);}
else
level=0;if(level==currentLevel)
{value='';isExpanded=false;canHaveChildren=true;while(nodeValues.length>0)
{value=nodeValues.shift().split(/=/);html=nodeHtml.shift();if(!html)
html=optionText;if(value.length==4&&value[0]==level)
{isExpanded=(value[2]=="1");isLoaded=(value[2]!="2");canHaveChildren=(value[3]=="1");value=decodeURIComponent(value[1].replace(/\+/g,'%20'));break;}
else
value='';}
currentNode=new Telligent_TreeNode(html,value);currentNode._parent=parentTreeNode;currentNode._tree=this;currentNode._isExpanded=isExpanded;currentNode._isLoaded=isLoaded;currentNode._canHaveChildren=canHaveChildren;if(parentTreeNode)
parentTreeNode.AddNode(currentNode);else
this._nodes[this._nodes.length]=currentNode;}
else if(level>currentLevel&&currentNode)
{i+=this._parseNodes(currentNode,optionsList,i,nodeValues,nodeHtml,currentLevel+1)}
else
return i-currentOptionIndex-1;}
return optionsList.length-currentOptionIndex-1;}
Telligent_Tree.prototype._scrollToNode=function(node,showChildren)
{var top,left,height,element;if(showChildren)
{element=node._element;top=element.offsetTop;height=this._getNodeHeight(node);left=element.offsetLeft;}
else
{element=node._element.childNodes[1];top=element.offsetTop;height=this._getNodeHeight(node);left=element.offsetLeft-node._element.childNodes[0].offsetWidth;}
top-=6;left-=6;var parent=element.offsetParent;while(parent&&parent!=this._wrapper)
{top+=parent.offsetTop;left+=parent.offsetLeft;parent=parent.offsetParent;}
var wrapperWidth=this._wrapper.offsetWidth-24;if(left+element.offsetWidth>this._wrapper.scrollLeft+wrapperWidth&&element.offsetWidth<wrapperWidth)
this._wrapper.scrollLeft=left;else if(left<this._wrapper.scrollLeft||left+element.offsetWidth>this._wrapper.scrollLeft+wrapperWidth)
this._wrapper.scrollLeft=left;var wrapperHeight=this._wrapper.offsetHeight-24;if(top+height>this._wrapper.scrollTop+wrapperHeight&&height<wrapperHeight)
this._wrapper.scrollTop=(top+height)-wrapperHeight;else if(top<this._wrapper.scrollTop||top+height>this._wrapper.scrollTop+wrapperHeight)
this._wrapper.scrollTop=top;}
Telligent_Tree.prototype._initializeMoveFloat=function(node)
{if(!this._movingNodeFloat)
{this._movingNodeFloat=document.createElement('div');this._movingNodeFloat.style.position='absolute';this._movingNodeFloat.style.opacity='.75';if(Telligent_Common.IsIE())
this._movingNodeFloat.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity=75)';this._movingNodeFloat.style.backgroundColor='#cccccc';this._movingNodeFloat.style.borderColor='#666666';this._movingNodeFloat.style.fontFamily=this._wrapper.style.fontFamily;this._movingNodeFloat.style.fontSize=this._wrapper.style.fontSize;this._movingNodeFloat.style.lineHeight=this._wrapper.style.lineHeight;this._movingNodeFloat.style.color=this._wrapper.style.color;this._movingNodeFloat.style.padding='2px';this._movingNodeFloat.style.cursor='move';this._movingNodeFloat.style.borderStyle='dotted';this._movingNodeFloat.style.borderWidth='1px';document.body.appendChild(this._movingNodeFloat);}
while(this._movingNodeFloat.childNodes.length>0)
this._movingNodeFloat.removeChild(this._movingNodeFloat.childNodes[this._movingNodeFloat.childNodes.length-1]);this._movingNodeFloat.style.width=node._element.offsetWidth+'px';this._movingNodeFloat.style.height=node._element.offsetHeight+'px';this._movingNodeFloat.innerHTML=node._element.innerHTML;}
Telligent_Tree.prototype._initializeDraggableTrees=function()
{this._draggableTrees=new Array();if(!this._draggableTreeNames||this._draggableTreeNames.length<=0)
return;for(var i=0;i<this._draggableTreeNames.length;i++)
{try
{var tree=eval(this._draggableTreeNames[i]);if(tree&&tree._addDraggedNode&&tree!=this&&!tree.IsDisabled())
this._draggableTrees[this._draggableTrees.length]=tree;}
catch(e)
{}}}
Telligent_Tree.prototype._initializeDragging=function()
{this._refreshPagePosition();this._initializeDraggableTrees();var i;for(i=0;i<this._draggableTrees.length;i++)
{this._draggableTrees[i]._highlight();this._draggableTrees[i]._refreshPagePosition();}
if(this._draggableTrees.length>0)
this._setCursor('move');else
this._setCursor('n-resize');this._draggingInitalized=true;}
Telligent_Tree.prototype._refreshPagePosition=function()
{this._pagePosition=Telligent_Common.GetElementInfo(this._wrapper);}
Telligent_Tree.prototype._isMoving=function()
{return this._movingNode!=null;}
Telligent_Tree.prototype._nodeMouseDown=function(event,node)
{if(!event)
event=window.event;if(!this._isMoving())
{this._movingNode=node;this._movingNodeStartParent=node.GetParentNode();this._draggingInitalized=false;if(typeof(event.pageY)!='undefined')
this._moveStartY=event.pageY;else
{var windowInfo=Telligent_Common.GetWindowInfo();this._moveStartY=event.clientY+windowInfo.ScrollY;}
this._moveScrollStartY=this._wrapper.scrollTop;this._nodeHeightsCache=new Array();this._wrapper.style.overflow='hidden';this._populateNodeHeightsCache(this._nodes,node);document.onmouseup=new Function('event',this._variableName+'._endMoveTracking(event); return false;');document.onmousemove=new Function('event',this._variableName+'._mouseMoveHandler(event); return false;');}}
Telligent_Tree.prototype._nodeContextMenu=function(event,element,node)
{if(!event)
event=window.event;if(this._onContextMenuFunction)
this._onContextMenuFunction(this,node,element,event);}
Telligent_Tree.prototype._mouseMoveHandler=function(event)
{if(!event)
event=window.event;var eventY=0,eventX=0;if(typeof(event.pageY)!='undefined')
{eventY=event.pageY;eventX=event.pageX;}
else
{var windowInfo=Telligent_Common.GetWindowInfo();eventY=event.clientY+windowInfo.ScrollY;eventX=event.clientX+windowInfo.ScrollX;}
if(!this._isMoving())
return;if(!this._draggingInitalized)
this._initializeDragging();var yChange=eventY-this._moveStartY;yChange+=this._wrapper.scrollTop-this._moveScrollStartY;var parentAndIndex=this._getMovingParentNodeAndIndex(this._movingNodeStartIndex,yChange);if(this._draggableTrees.length>0&&!this._movingNodeIsFloating&&!this._isMouseOver(eventX,eventY,true))
{this._initializeMoveFloat(this._movingNode);this._movingNodeIsFloating=true;this._movingNodeFloat.style.display='block';}
if(this._movingNodeIsFloating)
{this._movingNodeFloat.style.left=(eventX-(this._movingNodeFloat.offsetWidth/2))+'px';this._movingNodeFloat.style.top=(eventY-(this._movingNodeFloat.offsetHeight/2))+'px';if(this._isMouseOver(eventX,eventY,true))
{this._movingNodeFloat.style.display='none';this._movingNodeIsFloating=false;}
else
{var externalNodeAndIndex=null;for(var i=0;i<this._draggableTrees.length;i++)
{if((externalNodeAndIndex=this._draggableTrees[i]._getParentNodeAndIndex(eventX,eventY)).Index!=-1)
{var node=this._movingNode;this._endMoveTracking(event,true);this.RemoveNode(node);this.Refresh();if(this._onNodeRemovedFunction)
this._onNodeRemovedFunction(this,node);this._draggableTrees[i]._addDraggedNode(node,externalNodeAndIndex.ParentNode,externalNodeAndIndex.Index,event);this._movingNodeFloat.style.display='none';this._movingNodeIsFloating=false;}}}}
if(this._isMoving()&&!this._movingNodeIsFloating&&parentAndIndex.NodeHeightsCacheIndex!=this._movingNodeLastIndex)
{this._movingNodeLastIndex=parentAndIndex.NodeHeightsCacheIndex;var previousParent=this._movingNode._parent;if(parentAndIndex.ParentNode)
parentAndIndex.ParentNode.InsertNode(this._movingNode,parentAndIndex.Index);else
this.InsertNode(this._movingNode,parentAndIndex.Index);var commonParent=this._getCommonParent(previousParent,parentAndIndex.ParentNode);if(commonParent)
commonParent.Refresh();else
this.Refresh();this.SelectNode(this._movingNode);}}
Telligent_Tree.prototype._endMoveTracking=function(event,ignoreMoveEvents)
{this._setCursor('default');if(!ignoreMoveEvents&&this._movingNode&&this._onNodeMovedFunction&&this._movingNodeStartIndex!=this._movingNodeLastIndex)
this._onNodeMovedFunction(this,this._movingNode,this._movingNodeStartParent);this._wrapper.style.cursor='auto';this._wrapper.style.overflow='auto';document.onmouseup=null;document.onmousemove=null;this._movingNode=null;this._nodeHeightsCache=new Array();if(this._movingNodeIsFloating)
{this._movingNodeIsFloating=false;this._movingNodeFloat.style.display='none';}
for(var i=0;i<this._draggableTrees.length;i++)
{this._draggableTrees[i]._unhighlight();}
this._unhighlight();}
Telligent_Tree.prototype.Refresh=function()
{if(!this._initialized)
return;while(this._container.childNodes.length>0)
this._container.removeChild(this._container.childNodes[0]);for(var i=0;i<this._nodes.length;i++)
{this._nodes[i].Dispose(true);this._nodes[i].Refresh();}
if(this._selectedNode)
this.SelectNode(this._selectedNode);this._saveState();}
Telligent_Tree.prototype.AddNode=function(treeNode)
{this.RemoveNode(treeNode);treeNode._parent=null;treeNode._tree=this;this._nodes[this._nodes.length]=treeNode;}
Telligent_Tree.prototype.RemoveNode=function(treeNode)
{if(treeNode._parent)
treeNode._parent._removeNode(treeNode);else if(treeNode._tree)
treeNode._tree._removeNode(treeNode);}
Telligent_Tree.prototype._removeNode=function(treeNode)
{var newNodes=new Array();var found=false;for(var i=0;i<this._nodes.length;i++)
{if(this._nodes[i]==treeNode)
found=true;else
newNodes[newNodes.length]=this._nodes[i];}
if(found)
{treeNode.Dispose();this._nodes=newNodes;}}
Telligent_Tree.prototype.InsertNode=function(treeNode,index)
{if(index>=0)
{this.RemoveNode(treeNode);if(index>=this._nodes.length)
index=this._nodes.length;for(var i=this._nodes.length;i>index;i--)
{this._nodes[i]=this._nodes[i-1];}
treeNode._parent=null;treeNode._tree=this;this._nodes[index]=treeNode;}}
Telligent_Tree.prototype.GetNodeByValue=function(value)
{var node;for(var i=0;i<this._nodes.length;i++)
{if(this._nodes[i].Value==value)
return this._nodes[i];else if((node=this._nodes[i].GetNodeByValue(value))!=null)
return node;}
return null;}
Telligent_Tree.prototype.GetIndexByNode=function(node)
{for(var i=0;i<this._nodes.length;i++)
{if(this._nodes[i]==node)
return i;}
return-1;}
Telligent_Tree.prototype.GetNodeAtIndex=function(index)
{if(index<this._nodes.length&&index>=0)
return this._nodes[index];else
return null;}
Telligent_Tree.prototype.GetNodeCount=function()
{return this._nodes.length;}
Telligent_Tree.prototype.GetSelectedNode=function()
{return this._selectedNode;}
function Telligent_TreeNode(html,value)
{this._parent=null;this.Html=html;this.Value=value;this._canHaveChildren=true;this._isExpanded=false;this._isLoaded=false;this._tree=null;this._element=null;this._nodes=new Array();}
Telligent_TreeNode.prototype.AddNode=function(treeNode)
{treeNode.Parent=this;this._nodes[this._nodes.length]=treeNode;}
Telligent_TreeNode.prototype._serialize=function(valueArray,level)
{valueArray[valueArray.length]=(new Array(level,"=",encodeURIComponent(this.Value),"=",(this._isExpanded?"1":(this._isLoaded?"0":"2")),"=",(this._canHaveChildren?"1":"0"))).join('');for(var i=0;i<this._nodes.length;i++)
{this._nodes[i]._serialize(valueArray,level+1);}}
Telligent_TreeNode.prototype.Dispose=function(ignoreCascade)
{this._element=null;if(!ignoreCascade)
{for(var i=0;i<this._nodes.length;i++)
{this._nodes[i].Dispose();}}}
Telligent_TreeNode.prototype.Refresh=function()
{var nodeLi;var nodeUl;var createNewNode=false;if(!this._element)
createNewNode=true;if(createNewNode)
{this.Dispose(true);nodeLi=document.createElement('li');nodeLi.style.margin='0';nodeLi.style.padding='0';nodeLi.onselectstart=new Function('return false;');try{nodeLi.style.MozUserSelect='none';}catch(e){}
try{nodeLi.style.userSelect='none';}catch(e){}
try{nodeLi.style.WebkitUserSelect='ignore';}catch(e){}}
else
{nodeLi=this._element;}
while(nodeLi.childNodes.length>0)
nodeLi.removeChild(nodeLi.childNodes[0]);nodeLi.appendChild(document.createElement('img'));nodeLi.appendChild(document.createElement('span'));nodeLi.childNodes[1].innerHTML=this.Html;if(!this._tree.IsDisabled())
{nodeLi.childNodes[1].onclick=new Function(this._tree._variableName+'.SelectNode(this.parentNode._telligentTreeNode); return false;');if(this._tree._enableDragDrop)
nodeLi.childNodes[1].onmousedown=new Function('event','window.'+this._tree._variableName+'._nodeMouseDown(event, this.parentNode._telligentTreeNode);');if(this._tree._onContextMenuFunction)
nodeLi.childNodes[1].oncontextmenu=new Function('event','window.'+this._tree._variableName+'._nodeContextMenu(event, this, this.parentNode._telligentTreeNode); return false;');else
nodeLi.childNodes[1].oncontextmenu=null;}
this._element=nodeLi;nodeLi._telligentTreeNode=this;if(this._tree._selectedNode==this)
this._element.childNodes[1].style.backgroundColor='#ccc';if(this._nodes.length>0)
{this._isLoaded=true;nodeLi.childNodes[0].src=this._isExpanded?Telligent_Tree._expandedImageUrl:Telligent_Tree._collapsedImageUrl;if(!this._tree.IsDisabled())
{nodeLi.childNodes[0].style.cursor='pointer';var currentNode=this;nodeLi.childNodes[0].onclick=function(){currentNode.SetExpanded(!currentNode._isExpanded,true);};}
else
nodeLi.childNodes[0].style.cursor='default';if(this._isExpanded)
{nodeUl=document.createElement('ul');nodeUl.style.listStyleType='none';nodeUl.style.margin='0';nodeUl.style.padding='0';nodeUl.style.paddingLeft='16px';nodeLi.appendChild(nodeUl);for(var i=0;i<this._nodes.length;i++)
{this._nodes[i].Dispose(true);this._nodes[i]._parent=this;this._nodes[i]._tree=this._tree;this._nodes[i].Refresh();}}}
else if(this._isLoaded||this._isExpanded||!this._tree._getSubNodesFunction)
{nodeLi.childNodes[0].src=Telligent_Tree._blankImageUrl;nodeLi.childNodes[0].style.cursor='default';}
else
{nodeLi.childNodes[0].src=this._isExpanded?Telligent_Tree._expandedImageUrl:Telligent_Tree._collapsedImageUrl;if(!this._tree.IsDisabled())
{nodeLi.childNodes[0].style.cursor='pointer';var currentNode=this;nodeLi.childNodes[0].onclick=function(){currentNode.SetExpanded(!currentNode._isExpanded,true);};}
else
nodeLi.childNodes[0].style.cursor='default';}
if(createNewNode)
{if(this._parent)
this._parent._element.childNodes[2].appendChild(nodeLi);else
this._tree._container.appendChild(nodeLi);}
else
{if(this._selectedNode)
this._tree.SelectNode(this._tree._selectedNode);this._tree._saveState();}}
Telligent_TreeNode.prototype._getParentNodeAndIndex=function(yOffset)
{if(yOffset>(this._element.childNodes[1].offsetHeight/2)&&(this._nodes.length==0||!this._isExpanded))
{var nodeAndIndex=new Object();nodeAndIndex.MoveNext=true;return nodeAndIndex;}
yOffset-=this._element.childNodes[1].offsetHeight;if(yOffset<0||this._nodes.length==0||!this._isExpanded)
{return null;}
else
{var nodeAndIndex=new Object();nodeAndIndex.ParentNode=this;nodeAndIndex.Index=0;nodeAndIndex.MoveNext=false;for(var i=0;i<this._nodes.length;i++)
{if(this._nodes[i]._element)
{if(yOffset<this._nodes[i]._element.offsetHeight)
{var childNodeAndIndex=this._nodes[i]._getParentNodeAndIndex(yOffset);if(childNodeAndIndex)
{if(childNodeAndIndex.MoveNext)
nodeAndIndex.Index++;else
nodeAndIndex=childNodeAndIndex;}
break;}
else
{yOffset-=this._nodes[i]._element.offsetHeight;nodeAndIndex.Index++;}}}
return nodeAndIndex;}}
Telligent_TreeNode.prototype._highlight=function()
{if(this._element)
{this._element.style.backgroundColor='#cccccc';if(this._isExpanded)
{for(var i=0;i<this._nodes.length;i++)
{this._nodes[i]._highlight();}}}}
Telligent_TreeNode.prototype._unhighlight=function()
{if(this._element)
{this._element.style.backgroundColor=this._tree._backgroundColor;if(this._isExpanded)
{for(var i=0;i<this._nodes.length;i++)
{this._nodes[i]._unhighlight();}}}}
Telligent_TreeNode.prototype._setCursor=function(cursor)
{if(this._element)
{this._element.style.cursor=cursor;if(this._isExpanded)
{for(var i=0;i<this._nodes.length;i++)
{this._nodes[i]._setCursor(cursor);}}}}
Telligent_TreeNode.prototype.SetExpanded=function(isExpanded,scroll)
{this._isExpanded=isExpanded?true:false;if(!this._tree)
return;if(this._element&&this._element.childNodes.length==3)
{this._element.childNodes[2].style.display=this._isExpanded?'block':'none';this._element.childNodes[0].src=this._isExpanded?Telligent_Tree._expandedImageUrl:Telligent_Tree._collapsedImageUrl;}
else if(this._isExpanded&&!this._isLoaded&&this._tree._getSubNodesFunction)
{this._tree._getSubNodesFunction(this);this._isLoaded=true;this.Refresh();}
else
this.Refresh();if(scroll)
{if(this._isExpanded)
this._tree._scrollToNode(this,true);else
this._tree._scrollToNode(this,false);}
this._tree._saveState();}
Telligent_TreeNode.prototype.AddNode=function(treeNode)
{this.RemoveNode(treeNode);treeNode._parent=this;treeNode._tree=this._tree;this._nodes[this._nodes.length]=treeNode;}
Telligent_TreeNode.prototype.RemoveNode=function(treeNode)
{if(treeNode._parent)
treeNode._parent._removeNode(treeNode);else if(treeNode._tree)
treeNode._tree._removeNode(treeNode);}
Telligent_TreeNode.prototype._removeNode=function(treeNode)
{var newNodes=new Array();var found=false;for(var i=0;i<this._nodes.length;i++)
{if(this._nodes[i]==treeNode)
found=true;else
newNodes[newNodes.length]=this._nodes[i];}
if(found)
{treeNode.Dispose();this._nodes=newNodes;}}
Telligent_TreeNode.prototype.GetCanHaveChildren=function()
{if(this._tree&&this._tree._canHaveChildrenFunction)
return this._tree._canHaveChildrenFunction(this._tree,this);else
return this._canHaveChildren;}
Telligent_TreeNode.prototype.SetCanHaveChildren=function(canHaveChildren)
{this._canHaveChildren=canHaveChildren;if(this._tree)
this._tree._saveState();}
Telligent_TreeNode.prototype.InsertNode=function(treeNode,index)
{if(index>=0)
{this.RemoveNode(treeNode);if(index>this._nodes.length)
index=this._nodes.length;for(var i=this._nodes.length;i>index;i--)
{this._nodes[i]=this._nodes[i-1];}
this._nodes[index]=treeNode;treeNode._parent=this;treeNode._tree=this._tree;}}
Telligent_TreeNode.prototype.GetNodeByValue=function(value)
{var node;for(var i=0;i<this._nodes.length;i++)
{if(this._nodes[i].Value==value)
return this._nodes[i];else if((node=this._nodes[i].GetNodeByValue(value))!=null)
return node;}
return null;}
Telligent_TreeNode.prototype.GetIndexByNode=function(node)
{for(var i=0;i<this._nodes.length;i++)
{if(this._nodes[i]==node)
return i;}
return-1;}
Telligent_TreeNode.prototype.GetNodeAtIndex=function(index)
{if(index<this._nodes.length&&index>=0)
return this._nodes[index];else
return null;}
Telligent_TreeNode.prototype.GetNodeCount=function()
{return this._nodes.length;}
Telligent_TreeNode.prototype.GetParentNode=function()
{return this._parent;}
Telligent_TreeNode.prototype.GetTree=function()
{return this._tree;}
Telligent_TreeNode.prototype.IsExpanded=function()
{return this._isExpanded;}
Telligent_TreeNode.prototype.IsLoaded=function()
{return this._isLoaded;}
Telligent_Tree.Initialize=function(expandedImageUrl,collapsedImageUrl,blankImageUrl)
{Telligent_Tree._expandedImageUrl=expandedImageUrl;Telligent_Tree._collapsedImageUrl=collapsedImageUrl;Telligent_Tree._blankImageUrl=blankImageUrl;};
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();