var treerenderer_explorer_selectable = true;

var alttexts=new Array();
alttexts["open"]="offen";
alttexts["close"]="gesclossen";
alttexts["line"]="Linie";
alttexts["end"]="Eintrag";
alttexts["entry"]="Letzter Eintrag";

function treerenderer_explorer_gethover_object(obj)
{
  terminator = 5;
  table = obj;
  while (table.nodeName.toLowerCase()!="table" && terminator>=0)
  {
    table = table.parentNode;
    terminator--;
  }
    
  if (table.nodeName.toLowerCase()=="table") obj = table;
  
  return obj;
}

function treerenderer_explorer_mouseover(obj)
{
  obj = treerenderer_explorer_gethover_object(obj);

  if (obj.className != "htreenodeselected")
  {
    obj.className = "htreenodehover";
  }
}

function treerenderer_explorer_mouseout(obj)
{
  obj = treerenderer_explorer_gethover_object(obj);
  
  if (obj.className != "htreenodeselected")
  {
    obj.className = "htreenode";
  }
}

function treerenderer_explorer_select(obj)
{
  if (treerenderer_explorer_selectable)
  {
    obj = treerenderer_explorer_gethover_object(obj);
  
    if (document.getElementsByClassName(obj.nodeName.toLowerCase(), "htreenodeselected").length>0) 
    {
      document.getElementsByClassName(obj.nodeName.toLowerCase(), "htreenodeselected")[0].className = "htreenode";
    }
    
    obj.className = "htreenodeselected";
  }
}

function treerenderer_explorer()
{
  this.togglelink = "<a href=\"javascript: togglenode('$tree$', '$id$');\" title=\"$alt$\" onmouseover=\"treerenderer_explorer_selectable=false\" onmouseout=\"treerenderer_explorer_selectable=true\"><img src=\"$icon$\" alt=\"$alt$\" align=\"absmiddle\" width=\"16\" height=\"16\" border=\"0\" /></a>";
  this.notoggle = "<img alt=\"$alt$\" src=\"$icon$\" align=\"absmiddle\" width=\"16\" height=\"16\" border=\"0\" />";

  this.createcontainer = function(treenode, level, indent)
  {
    var _container = document.createElement("div");

    _container.id = treenode.tree + "_" + treenode.id;
    _container.style.paddingLeft = "0px";
    _container.style.display = "block";
    _container.innerHTML = treenode.cid;
    
    return _container;
  }
  
  this.isrendered = function(treenode, withchildren)
  {
    if (treenode && document.getElementById(treenode.cid) && (!withchildren || document.getElementById(treenode.cid).childNodes.length>1))
    {
      return true;
    }
    
    return false;
  }
  
  this.paint = function(treenode, styles, template)
  {
    var _table = document.createElement("table");
    
    _table.id = treenode.cid + "_node";
    
    _table.setAttribute("style", "border: none; border-collapse: collapse;");
    
    _table.style.border = "none";
    _table.style.borderCollapse = "collapse";
    
    if (! navigator.userAgent.match(/opera/i))
      _table.style.tableLayout = "fixed";
    
    _table.width = "100%";
    if (treenode.selected)
      _table.className = "htreenodeselected";
    else
    _table.className = "htreenode";
    
    var _tr = document.createElement("tr");
   
    var _tbody = document.createElement("tbody");

    _tbody.appendChild(_tr);
    _table.appendChild(_tbody);
    
    for (i=0; i<treenode.level; i++)
    {
      var _td = document.createElement("td");
      
      _td.style.width = "16px";
      _td.style.padding = "0px";
      _td.style.border = "none";
      
      _td.setAttribute("style", "width: 16px; padding: 0px; border: none;");
      
      var _c = treenode;
      for (j=treenode.level; j>i; j--)
      {
        _c = getObject('tree', _c.tree).nodes[_c.parentid];
      }

      if (_c.last)
      {
       // _td.innerHTML = this.notoggle.replace(/\$icon\$/, styles["imgpath"] + "n.gif").replace(/\$alt\$/, alttexts["line"]);;
      }
      else
      {
       // _td.innerHTML = this.notoggle.replace(/\$icon\$/, styles["imgpath"] + "l.gif").replace(/\$alt\$/, alttexts["line"]);;
      }
      
      _tr.appendChild(_td);
    }
    
    
    /* Toggle */
    var _td = document.createElement("td");
    
    _td.setAttribute("style", "border: none; width: 16px; padding: 0px;");
    
    _td.style.width = "16px";
    _td.style.border = "none";
    _td.style.padding = "0px";
    
    if (treenode["cssclass"])
      _td.className = treenode["cssclass"];
    
    if (!treenode.childcount || treenode.childcount>0)
    {
      if (treenode.last)
      {
        _td.innerHTML = treenode.render(this.togglelink.replace(/\$icon\$/, styles["imgpath"] + "t_closed_last.gif").replace(/\$alt\$/,alttexts["close"]));
      }
      else
      {
        _td.innerHTML = treenode.render(this.togglelink.replace(/\$icon\$/, styles["imgpath"] + "t_closed.gif").replace(/\$alt\$/,alttexts["close"]));
      }
    }
    else
    {
      if (treenode.last)
      {
       // _td.innerHTML = treenode.render(this.notoggle.replace(/\$icon\$/, styles["imgpath"] + "").replace(/\$alt\$/,alttexts["entry"]));
      }
      else
      {
       // _td.innerHTML = treenode.render(this.notoggle.replace(/\$icon\$/, styles["imgpath"] + "").replace(/\$alt\$/,alttexts["end"]));
      }
    }
    
    _tr.appendChild(_td);
    
    /* Descr */
    var _td = document.createElement("td");
    
    _td.setAttribute("style", "border: none; width: auto; padding: 0px;");

    _td.style.width = "auto";
    _td.style.border = "none";
    _td.style.padding = "0px";
    
    if (! navigator.userAgent.match(/MSIE/))
      _td.style.overflow = "hidden";
      
    _td.noWrap = "nowrap";
    _td.style.whiteSpace = "nowrap";
    _td.style.overflow = "hidden";
    if (navigator.userAgent.match(/MSIE/))
      _td.style.textOverflow = "ellipsis";
      
    _td.innerHTML = "<nowrap>" + treenode.render(template).replace(/<a /, "<a onfocus=\"this.blur()\" onmouseover=\"treerenderer_explorer_mouseover(this)\" onmouseout=\"treerenderer_explorer_mouseout(this)\" onclick=\"treerenderer_explorer_select(this);\"") + "</nowrap>";
    
    if (treenode["cssclass"])
      _td.className = treenode["cssclass"];
      
    _tr.appendChild(_td);
    
    
    if (navigator.userAgent.match(/MSIE/))
      return _table.outerHTML;
      
    var _containerTmp = document.createElement("div");
    _containerTmp.appendChild(_table);
    return _containerTmp.innerHTML
  }
  
  this.repaint = function(treenode, styles, toggle)
  {
    var _node = document.getElementById(treenode.cid);
    
    /* Check visibility of first child */
    if (_node.childNodes[1] && _node.childNodes[1].style.display!="none")
    {
      _display = "none";
      _rc = false;
    }
    else
    {
      var _display = "block";
      _rc = true;
    }
    
    if ((toggle && _display=="none") || (!toggle && _display!="none"))
    {
      _match1 = new RegExp(styles["imgpath"] + "t_opened.gif", "g");
      _replace1 = styles["imgpath"] + "t_closed.gif";
      
      _match2 = new RegExp(styles["imgpath"] + "t_opened_last.gif", "g");
      _replace2 = styles["imgpath"] + "t_closed_last.gif";

      _match3 = new RegExp(alttexts["open"], "g");
      _replace3 = alttexts["close"];
    }
    else
    {
      _match1 = new RegExp(styles["imgpath"] + "t_closed.gif", "g");
      _replace1 = styles["imgpath"] + "t_opened.gif";
      
      _match2 = new RegExp(styles["imgpath"] + "t_closed_last.gif", "g");
      _replace2 = styles["imgpath"] + "t_opened_last.gif";

      _match3 = new RegExp(alttexts["close"], "g");
      _replace3 = alttexts["open"];

    }
    
    if (toggle && _node.childNodes && _node.childNodes.length>1)
    {
      _child = _node.childNodes[1]; 
      do
      {
        _child.style.display = _display;
        _child = _child.nextSibling;
      }
      while (_child!=null)
    }  
    
    if (_node.childNodes && _node.childNodes[0])
    {
      if (navigator.userAgent.match(/MSIE/))
      {
        _node.childNodes[0].outerHTML = _node.childNodes[0].outerHTML.replace(_match1, _replace1);
        _node.childNodes[0].outerHTML = _node.childNodes[0].outerHTML.replace(_match2, _replace2);
        _node.childNodes[0].outerHTML = _node.childNodes[0].outerHTML.replace(_match3, _replace3);
      }
      else if (navigator.userAgent.match(/onqu/))
      {
        _imgs = _node.childNodes[0].getElementsByTagName("img");
        
        for (i = 0; i < _imgs.length; i++)
        {
          _imgs[i].src = _imgs[i].src.replace(_match1, _replace1);
          _imgs[i].src = _imgs[i].src.replace(_match2, _replace2);
          _imgs[i].src = _imgs[i].src.replace(_match3, _replace3);
        }
      }
      else
      {
        _node.childNodes[0].innerHTML = _node.childNodes[0].innerHTML.replace(_match1, _replace1);
        _node.childNodes[0].innerHTML = _node.childNodes[0].innerHTML.replace(_match2, _replace2);
        _node.childNodes[0].innerHTML = _node.childNodes[0].innerHTML.replace(_match3, _replace3);
      }
    }
    
    return _rc;
  }
}
