var count=0;
var openNodes=new Array()
var actObj="";
var newAct="";
var etreeVersion=0;

images=new Array("vert_line_","blank","plus_end_","plus_cont_","branch_end_","branch_cont_","folder_closed","html","folder_open")
imgcache=new Array();
var imgcached=0;
var root_item

function etreeHover() {
   return
}


function etreeInit_2() {
   imgcached+=1
//   alert(imgcached+":"+images.length)
   if (imgcached==images.length) {
      document.body.style.cursor="default"
      toggle(root_item)
   }
}

function etreeInit(root) {
   root_item=root;
   if (document.all) {
      document.body.style.cursor="wait"
      for (var c=0;c<images.length;c++) {
         var img=new Image
         imgcache.push(img);
         img.onload = etreeInit_2;
         img.onerror = etreeInit_2;
         img.onabort = etreeInit_2;
         img.src = etreeImgPath+images[c]+".gif";
      }
   } else {
      toggle(root)
   }
}

function arrayContains(arr,val) { //helper
   for (var c=0;c<arr.length;c++) {
      if (arr[c]==val) return 1
   }
   return 0
}

function act(id) { //sets the style of the active Item, and sets the last active bak
   var obj;

   if (actObj!="") {
      obj=document.getElementById(actObj)
      if (obj) { 
         obj.childNodes[1].style.backgroundColor=""
         obj.childNodes[1].className=""
               }
   }
   if (id!="") {
      obj=document.getElementById(id)
      if (obj) {
         //obj.childNodes[1].style.backgroundColor="#A8B4C3"
         obj.childNodes[1].className="act"
         actObj=id;

      if (!isOpen(obj)) openFolder(obj)         
      }
   }
}

function removeItem(id) { //called from page before setActive
   var obj=document.getElementById("item_"+id)
   if (obj) {
      var p=obj.parentNode
      if (p) {
         if (!obj.nextSibling) {
            var prev=obj.previousSibling
            if (prev && prev.tagName=="DIV") {
               toEndItem(prev) //convert _cont_ to _end_
               //remove line at level(l) from children
               var a=prev.getElementsByTagName("NOBR")
               if (a.length) {
                  var l
                  for (l=0;l<a[0].childNodes.length;l++) {
                     if (a[0].childNodes[l].tagName!="IMG") break
                  }
                  for (var c=1;c<a.length;c++) {
                     if (a[c].childNodes.length>l && a[c].childNodes[l].tagName=="IMG") {
                        var str=a[c].childNodes[l].src
                        var off=str.indexOf("~vert_line_")
                        if (off>=0) {
                           a[c].childNodes[l].src=str.substr(0,off)+"~blank"
                        }
                     }
                  }
               }
            } else {
               toItem(p)
            }
         }
         p.removeChild(obj);
      }
   }
}

function setActive(id,name) { //called from page to activate the page-item and update the name
   act("a"+id)
   if (document.getElementById("a"+id)) {
      newAct=""
      var obj=document.getElementById("a"+id)
      if (name && obj.lastChild) {
         obj.lastChild.innerHTML="&nbsp;"+name+"&nbsp;"
      }

//      obj.scrollIntoView(false)
//      obj.childNodes[1].nodeValue=" "+name+" "
   } else {
      newAct="a"+id
      count++;
      if (etreeVersion>0) {
         var url = etreePath+"fun=openItem&count="+count+"&etId="+id
      } else {
         var url = etreePath+"fun=openItem&count="+count+"&id="+id
      }
      var myAjax = new Ajax.Request(url, {method: 'get', onSuccess: etreeCallback });      
   }
}
function redraw(id) { //called from page to redraw the item
   loadSubtree("item_"+id)
}
function openItem(a) { //called async from setActive if item is not visible
   for (var c=1;c<a.length;c++) {
      var obj=document.getElementById("item_"+a[c])
      if (obj) {
//         if (isOpen(obj)) closeFolder(obj)
         loadSubtree(obj.id)
         break;
      } else { 
         if (!arrayContains(openNodes,"item_"+a[c])) openNodes.push("item_"+a[c])
      }
   }
}

function toEndItem(obj) { //todo passt wegen den linien nich ganz
   for (var c=0;c<obj.childNodes.length;c++) {
      if (obj.childNodes[c].nodeType==1) {
         if (obj.childNodes[c].tagName=="IMG") {
            var str=obj.childNodes[c].src;
            var off=str.indexOf("_cont_")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"_end_"+str.substr(off+6)
               break;
            }
         }
         if (obj.childNodes[c].tagName=="DIV") break;
         toEndItem(obj.childNodes[c])
      }
   }   
}

function toItem(obj) {
   if (etreeKeepFolder == 1) return
/*
   for (var c=0;c<openNodes.length;c++){
      if (openNodes[c]==obj.id) {
         openNodes.splice(c,1);
         break;
      }
   }
*/
   for (var c=0;c<obj.childNodes.length;c++) {
      if (obj.childNodes[c].nodeType==1) {
         if (obj.childNodes[c].tagName=="IMG") {
            var str=obj.childNodes[c].src;
            if ( etreeKeepFolder == -1 ) { //alex, foldericon soll beibehalten werden
               var off=str.indexOf("~folder_closed")
               if (off>=0) {
                  obj.childNodes[c].src=str.substr(0,off)+"~folder_open"+str.substr(off+14)
               }
            }
            else {
               var off=str.indexOf("~folder_open")
               if (off>=0) {
                  obj.childNodes[c].src=str.substr(0,off)+"~html"+str.substr(off+12)
               }
               var off=str.indexOf("~folder_closed")
               if (off>=0) {
                  obj.childNodes[c].src=str.substr(0,off)+"~html"+str.substr(off+14)
               }
            }
             
            off=str.indexOf("~minus")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"~branch"+str.substr(off+6)
            }
            off=str.indexOf("~plus")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"~branch"+str.substr(off+5)
            }
            
         }
         if (obj.childNodes[c].tagName!="DIV") toItem(obj.childNodes[c]) 
      }
   }   
}


function closeFolder(obj) {
   for (var c=0;c<openNodes.length;c++){
      if (openNodes[c]==obj.id) {
         openNodes.splice(c,1);
         break;
      }
   }
   for (var c=0;c<obj.childNodes.length;c++) {
      if (obj.childNodes[c].nodeType==1) {
         if (obj.childNodes[c].tagName=="IMG") {
            var str=obj.childNodes[c].src;
            var off=str.indexOf("_open")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"_closed"+str.substr(off+5)
            }
            off=str.indexOf("~minus")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"~plus"+str.substr(off+6)
            }
         }
         if (obj.childNodes[c].tagName=="DIV") {
            obj.removeChild(obj.childNodes[c])
            c--;
            continue;
         }
         closeFolder(obj.childNodes[c])
      }
   }   
}



function openFolder(obj) {
   if (obj.id.substr(0,5)=="item_") openNodes.push(obj.id)
   for (var c=0;c<obj.childNodes.length;c++) {
      if (obj.childNodes[c].nodeType==1) {
         if (obj.childNodes[c].tagName=="IMG") {
            var str=obj.childNodes[c].src;
            var off=str.indexOf("_closed")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"_open"+str.substr(off+7)
            }
            off=str.indexOf("~plus")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"~minus"+str.substr(off+5)
            }
            
            //item2folder            
            off=str.indexOf("~branch")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"~minus"+str.substr(off+7)
            }
            var off=str.indexOf("~html")
            if (off>=0) {
               obj.childNodes[c].src=str.substr(0,off)+"~folder_open"+str.substr(off+5)
            }
         }
         if (obj.childNodes[c].tagName=="DIV") return 1
         if (openFolder(obj.childNodes[c])) return 1
      }
   }   
}


function isOpen(obj) {
   for (var c=0;c<obj.childNodes.length;c++) {
      if (obj.childNodes[c].nodeType==1) {
         if (obj.childNodes[c].tagName=="DIV") return 1
         if (isOpen(obj.childNodes[c])) return 1
      }
   }
   return 0
}


function toggle(id) {
   var obj=document.getElementById(id)
   if (!obj) return
   
   if ( isOpen(obj) ) {
       closeFolder(obj)
       
   } else {      
      loadSubtree(id);
   }
}   

function etreeCallback(resp) {
   eval(resp.responseText)
}
   
function loadSubtree(id) {
   count++;
   var url = etreePath+"fun=setChildren&count="+count+"&path="+id;
   var myAjax = new Ajax.Request(url, {method: 'get', onSuccess: etreeCallback });
//IFRAME
//   var cf=document.getElementById("code")
//   cf.contentWindow.document.location.replace(url+"&iframe=1")
}   

   
function addSubtree(id,doc) {   
   
   var obj=document.getElementById(id)
   if (!obj) return
   closeFolder(obj)
   openFolder(obj)

   if (!document.all) { //Mozilla
      var rng = document.createRange(); 
      rng.selectNode(obj);
      var frag=rng.createContextualFragment(doc)
      obj.appendChild(frag)
   } else {
      obj.innerHTML+=doc
   }
   if (newAct!="" && document.getElementById(newAct)) {
      act(newAct)
      newAct=""  
   } else {
      act(actObj)
   }

   for (var c=0;c<openNodes.length;c++){
      obj=document.getElementById(openNodes[c])
      if (obj && !isOpen(obj)) {
         toggle(openNodes[c])
         return;
      }
   }
}

function setChildren(id,data) {
   var obj=document.getElementById("item_"+id)
   if (!obj) return
   closeFolder(obj)
   if (!data.length) {
      toItem(obj)
      return
   }
   openFolder(obj)
   var step=4
   
   
   for (var c=0;c<data.length;c+=step) {
      var tmp,item=document.createElement("DIV")
      item.id="item_"+data[c]
      item.appendChild(document.createElement("NOBR"))

      if (obj.id!=root_item) {
         for (var i=0;i<obj.firstChild.childNodes.length;i++) {
            tmp=obj.firstChild.childNodes[i]
            if (tmp.tagName!="IMG") break;
            item.firstChild.appendChild(tmp.cloneNode(0))
         }  
         tmp=document.createElement("IMG")
         tmp.width=19
         tmp.height=16
         tmp.border=0
         tmp.align="textTop"
         
         if (obj.nextSibling) {
            tmp.src=etreeImgPath+"vert_line_.gif"
         } else {
            tmp.src=etreeImgPath+"blank.gif"
         }
         item.firstChild.appendChild(tmp)
      }

      tmp=document.createElement("A")
      tmp.href="javascript:toggle('"+item.id+"')"
      tmp.appendChild(document.createElement("IMG"))
      tmp.firstChild.width=19
      tmp.firstChild.height=16
      tmp.firstChild.border=0
      
      tmp.firstChild.align="textTop"
      
      if (data[c+2]) {
         if (c+step>=data.length) {
            tmp.firstChild.src=etreeImgPath+"plus_end_.gif"
         } else {
            tmp.firstChild.src=etreeImgPath+"plus_cont_.gif"
         }
      } else {
         if (c+step>=data.length) {
            tmp.firstChild.src=etreeImgPath+"branch_end_.gif"
         } else {
            tmp.firstChild.src=etreeImgPath+"branch_cont_.gif"
         }
      }
      item.firstChild.appendChild(tmp)
      
      tmp=document.createElement("A")
      tmp.id="a"+data[c]
      tmp.title=item.id.substr(5)
      tmp.href=data[c+3]
      if (etreeTarget) tmp.target=etreeTarget
            
      tmp.appendChild(document.createElement("IMG"))
      tmp.firstChild.width=16
      tmp.firstChild.height=16
      tmp.firstChild.border=0
      
      tmp.firstChild.align="textTop"
      if (data[c+2]) {
         tmp.firstChild.src=etreeImgPath+"folder_closed.gif"
      } else {
         tmp.firstChild.src=etreeImgPath+"html.gif"
      }
      var s=document.createElement("SPAN")
      s.innerHTML=unescape("&nbsp;"+data[c+1]+"&nbsp;")
      tmp.appendChild(s)
//      tmp.innerHTML+=unescape(" "+data[c+1]+" ")
//      tmp.appendChild(document.createTextNode(" "+unescape(data[c+1]+" ")))      
      item.firstChild.appendChild(tmp)
      obj.appendChild(item)
   }
   if (newAct!="" && document.getElementById(newAct)) {
      act(newAct)
      newAct=""  
   } else {
      act(actObj)
   }
etreeHover();


   for (var c=0;c<openNodes.length;c++){
      obj=document.getElementById(openNodes[c])
      if (obj && !isOpen(obj)) {
         toggle(openNodes[c])
         return;
      }
   }
   
}

