/*----------------------------------------------------|
  | dTree 2.05 | www.destroydrop.com/javascript/tree/ |
  |---------------------------------------------------|
  | Copyright (c) 2002-2003 Geir Landro               |
  | Modified for Dokuwiki by Samuele Tognini          |
  |                                                   |
  | This script can be used freely as long as all     |
  | copyright messages are intact.                    |
  |                                                   |
  | Updated: 17.04.2003                               |
  |--------------------------------------------------*/
function Node(dokuid,id,pid,name,url,title,target,icon,iconOpen,open){this.dokuid=dokuid;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=false;}function dTree(objName,objImg){var objExt=indexmenu_findExt(objImg);this.config ={target:null,folderLinks:true,useSelection       :true,useCookies:true,useLines:true,useIcons:true,useStatusText:false,closeSameLevel:false,inOrder:false};this.icon ={root:objImg+'base.'+objExt,folder:objImg+'folder.'+objExt,folderH:objImg+'folderh.'+objExt,folderOpen:objImg+'folderopen.'+objExt,folderHOpen:objImg+'folderhopen.'+objExt,node:objImg+'page.'+objExt,empty:objImg+'empty.'+objExt,line:objImg+'line.'+objExt,join:objImg+'join.'+objExt,joinBottom:objImg+'joinbottom.'+objExt,plus:objImg+'plus.'+objExt,plusBottom:objImg+'plusbottom.'+objExt,minus:objImg+'minus.'+objExt,minusBottom:objImg+'minusbottom.'+objExt,nlPlus:objImg+'nolines_plus.'+objExt,nlMinus:objImg+'nolines_minus.'+objExt};this.obj=objName;this.aNodes=[];this.aIndent=[];this.root=new Node(false,-1);this.selectedNode=null;this.selectedFound=false;this.completed=false;this.currentNS=this.fcurrentNS();this.currentOpen=-1;}dTree.prototype.add=function(dokuid,id,pid,name,url,title,target,icon,iconOpen,open){this.aNodes[this.aNodes.length]=new Node(dokuid,id,pid,name,url,title,target,icon,iconOpen,open);};dTree.prototype.openAll=function(){if(!this.getCookie('co'+this.obj)){this.oAll(true);}};dTree.prototype.closeAll=function(){if(!this.getCookie('co'+this.obj)){this.oAll(false);}};dTree.prototype.toString=function(){var str= '';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;};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._hc&&cn.dokuid===this.currentNS){ this.currentOpen=cn.id;}if(cn._ls){break;}}}return str;};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)?((!node.url)? this.icon.folder:this.icon.folderH):this.icon.node);}if(!node.iconOpen){node.iconOpen =(node._hc)?((!node.url)? this.icon.folderOpen:this.icon.folderHOpen):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._hc)? 'nodeFdUrl':'nodeUrl')):((node._hc)? 'nodeFdUrl':'nodeUrl'))+ '" href="'+node.url+'"';if(node.title){str += ' title="'+node.title+'"';}if(node.target){str += ' target="'+node.target+'"';}if(this.config.useStatusText){str += ' onmouseover="window.status=\''+node.name+'\';return true;" onmouseout="window.status=\'\';return true;" ';}if(this.config.useSelection &&((node._hc&&this.config.folderLinks)|| !node._hc)){str += ' onclick="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;};dTree.prototype.indent=function(node,nodeId){var str='';if(this.root.id!=node.pid){for(var n=0;n<this.aIndent.length;n++){str += '<img src="' +((this.aIndent[n]==1&&this.config.useLines)? this.icon.line:this.icon.empty )+ '" alt="" />';}if(node._ls){this.aIndent.push(0);}else{this.aIndent.push(1);}if(node._hc){str += '<a href="javascript:'+this.obj+'.o('+nodeId+');"><img id="j'+this.obj+nodeId+'" src="';if(!this.config.useLines){str +=(node._io)? this.icon.nlMinus:this.icon.nlPlus;}else{str +=((node._io)?((node._ls&&this.config.useLines)? this.icon.minusBottom:this.icon.minus):((node._ls&&this.config.useLines)? this.icon.plusBottom:this.icon.plus ));}str += '" alt="" /></a>';}else{str += '<img src="' +((this.config.useLines)?((node._ls)? this.icon.joinBottom:this.icon.join ):this.icon.empty)+ '" alt="" />';}}return str;};dTree.prototype.setCS=function(node){var lastId;for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n].pid==node.id){node._hc=true;}if(this.aNodes[n].pid==node.pid){lastId=this.aNodes[n].id;}}if(lastId==node.id){node._ls=true;}};dTree.prototype.getSelected=function(){var sn=this.getCookie('cs'+this.obj);return(sn)? sn:null;};dTree.prototype.s=function(id){if(!this.config.useSelection){return;}var cn=this.aNodes[id];if(cn._hc&&!this.config.folderLinks){return;}if(this.selectedNode!=id){eNew=document.getElementById("s"+this.obj+id);if(!eNew ){return;}if(this.selectedNode||this.selectedNode===0){eOld=document.getElementById("s"+this.obj+this.selectedNode);eOld.className="node";}eNew.className="nodeSel";this.selectedNode=id;if(this.config.useCookies){this.setCookie('cs'+this.obj,cn.id);}}};dTree.prototype.o=function(id){var cn=this.aNodes[id];this.nodeStatus(!cn._io,id,cn._ls);cn._io=!cn._io;if(this.config.closeSameLevel){this.closeLevel(cn);}if(this.config.useCookies){this.updateCookie();}};dTree.prototype.oAll=function(status){for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n]._hc&&this.aNodes[n].pid!=this.root.id){this.nodeStatus(status,n,this.aNodes[n]._ls);this.aNodes[n]._io=status;}}if(this.config.useCookies){this.updateCookie();}};dTree.prototype.openTo=function(nId,bSelect,bFirst){if(!bFirst){for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n].id==nId){nId=n;break;}}}var cn=this.aNodes[nId];if(cn.pid==this.root.id||!cn._p){return;}cn._io=true;cn._is=bSelect;if(this.completed&&cn._hc){this.nodeStatus(true,cn._ai,cn._ls);}if(this.completed&&bSelect){this.s(cn._ai);}else if(bSelect){this._sn=cn._ai;}this.openTo(cn._p._ai,false,true);};dTree.prototype.getOpenTo=function(nodes){if(nodes===''){this.openAll();}else if(!this.getCookie('co'+this.obj)){var anodes=nodes.split(',');for(var n=0;n<anodes.length;n++){this.openTo(anodes[n],false);}}};dTree.prototype.closeLevel=function(node){for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n].pid==node.pid&&this.aNodes[n].id!=node.id&&this.aNodes[n]._hc){this.nodeStatus(false,n,this.aNodes[n]._ls);this.aNodes[n]._io=false;this.closeAllChildren(this.aNodes[n]);}}};dTree.prototype.closeAllChildren=function(node){for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n].pid==node.id&&this.aNodes[n]._hc){if(this.aNodes[n]._io){this.nodeStatus(false,n,this.aNodes[n]._ls);}this.aNodes[n]._io=false;this.closeAllChildren(this.aNodes[n]);}}};dTree.prototype.nodeStatus=function(status,id,bottom){eDiv= document.getElementById('d'+this.obj+id);eJoin= document.getElementById('j'+this.obj+id);if(this.config.useIcons){eIcon= document.getElementById('i'+this.obj+id);eIcon.src =(status)? this.aNodes[id].iconOpen:this.aNodes[id].icon;}eJoin.src =(this.config.useLines)?((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus)):((status)?this.icon.nlMinus:this.icon.nlPlus);eDiv.style.display =(status)? 'block':'none';};dTree.prototype.clearCookie=function(){var now=new Date();var yesterday=new Date(now.getTime()- 1000*60*60*24);this.setCookie('co'+this.obj,'cookieValue',yesterday);this.setCookie('cs'+this.obj,'cookieValue',yesterday);};dTree.prototype.setCookie=function(cookieName,cookieValue,expires,path,domain,secure){document.cookie =escape(cookieName)+ '='+escape(cookieValue)+(expires?';expires='+expires.toGMTString():'')+';path=/' +(domain?';domain='+domain:'')+(secure?';secure':'');};dTree.prototype.getCookie=function(cookieName){var cookieValue='';var posName=document.cookie.indexOf(escape(cookieName)+ '=');if(posName!=-1){var posValue=posName +(escape(cookieName)+ '=').length;var endPos=document.cookie.indexOf(';',posValue);if(endPos!=-1){cookieValue=unescape(document.cookie.substring(posValue,endPos));}else{cookieValue=unescape(document.cookie.substring(posValue));}}return(cookieValue);};dTree.prototype.updateCookie=function(){var str='';for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n]._io&&this.aNodes[n].pid!=this.root.id){if(str){str += '.';}str += this.aNodes[n].id;}}this.setCookie('co'+this.obj,str);};dTree.prototype.isOpen=function(id){var aOpen=this.getCookie('co'+this.obj).split('.');for(var n=0;n<aOpen.length;n++){if(aOpen[n]==id){return true;}}return false;};dTree.prototype.fcurrentNS=function(){var id=(window.indexmenu_ID)? indexmenu_ID:"";var ns=id.lastIndexOf(":");if( ns>-1){ns=id.substring(0,ns);}return ns;};dTree.prototype.openCurNS=function(){if(this.currentOpen>0){this.openTo(this.currentOpen,true);}};if(!Array.prototype.push){Array.prototype.push=function array_push(){for(var i=0;i<arguments.length;i++){this[this.length]=arguments[i];}return this.length;};}if(!Array.prototype.pop){Array.prototype.pop=function array_pop(){var lastElement=this[this.length-1];this.length=Math.max(this.length-1,0);return lastElement;};}
