var g_pExpanded=new Array();

function myTreeNode(sTitle, sPage, sSubStyle)
{
  this.m_sTitle=sTitle;
  this.m_sPage=sPage;
  this.m_pParent=null;
  this.m_pSubItems=new Array();
  this.m_bExpanded=false;
  this.m_iNum=0;
  this.m_iLevel=0;
  this.m_sSubStyle=sSubStyle;
  this.m_iCnt=0;
  this.m_pTree=null;
  this.m_sPath="";
}

function myTree(sSubStyle,sElement,sVarName,sLinkStyle)
{
  this.m_sSubStyle=sSubStyle;
  this.m_pTreeNodes=new Array();
  this.m_sVarName=sVarName;
  this.m_sElement=sElement;
  this.m_sLinkStyle=sLinkStyle;
}

function addChild(pNode, pParent, pTree)
{
  pNode.m_iNum=pTree.m_pTreeNodes.length;
  pTree.m_pTreeNodes.push(pNode);
  pNode.m_pTree=pTree;
  pNode.m_pParent=pParent;
  pNode.m_sPath=pNode.m_sTitle;

  if (pParent==null)
  {
    pNode.m_iLevel=0;
  }
  else
  {
    pParent.m_pSubItems.push(pNode);
    pNode.m_iLevel=pParent.m_iLevel+1;
    pNode.m_sPath=pParent.m_sPath+"/"+pNode.m_sPath;
  }
}

function drawNode(pNode, sHTML, pTree)
{
  sHTML+="<div class='myTreeNodeLevel"+pNode.m_iLevel+"'>";
  if (pNode.m_pSubItems.length==0)
    sHTML+="<img src='pix/none.png' alt='nothing to be done' class='treeImageNoneLevel"+pNode.m_iLevel+"' />&nbsp;";
  else
    if (pNode.m_bExpanded)
    {
      sHTML+="<a href='#' onclick='clickNode("+pNode.m_iNum+","+pNode.m_pTree.m_sVarName+")'>";
      sHTML+="<img src='pix/collapse.png' alt='collapse node' class='treeImageCollapseLevel"+pNode.m_iLevel+"' /></a>&nbsp;";
    }
    else
    {
      sHTML+="<a href='#' onclick='clickNode("+pNode.m_iNum+","+pNode.m_pTree.m_sVarName+")'>";
      sHTML+="<img src='pix/expand.png' alt='expand node' class='treeImageExpandLevel"+pNode.m_iLevel+"' /></a>&nbsp;";
    }
	
  if (pNode.m_sPage!="")
  {
    sHTML+="<a href='"+pNode.m_sPage+"' style='"+pNode.m_pTree.m_sLinkStyle+"'>"+pNode.m_sTitle+"</a>";
  }
  else sHTML+=pNode.m_sTitle;

  sHTML+="</div>";

  if (pNode.m_bExpanded && pNode.m_pSubItems.length>0)
  {
    sHTML+="<div style='"+pNode.m_sSubStyle+"'>";
    for (pNode.m_iCnt=0; pNode.m_iCnt<pNode.m_pSubItems.length; pNode.m_iCnt++)
    {
      sHTML=drawNode(pNode.m_pSubItems[pNode.m_iCnt],sHTML);
    }
    sHTML+="</div>";
  }
  else sHTML+="";

  return sHTML;
}

function clickNode(iNr, pTree)
{
  if (iNr>=0 && iNr<pTree.m_pTreeNodes.length)
  {
    pDummy=pTree.m_pTreeNodes[iNr];

    if (pDummy.m_bExpanded)
      pDummy.m_bExpanded=false;
    else
      while (pDummy!=null)
      {
        pDummy.m_bExpanded=true;
        pDummy=pDummy.m_pParent;
      }
  }

  x=document.getElementById(pTree.m_sElement);

  s="";
  for (j=0; j<pTree.m_pTreeNodes.length; j++)
    if (pTree.m_pTreeNodes[j].m_iLevel==0)
    {
      s+="<div style='"+pTree.m_sSubStyle+"'>";
      s=drawNode(pTree.m_pTreeNodes[j],s,pTree);
      s+="</div>";
    }

  x.innerHTML=s;

  sCookie="";

  pDate=new Date((new Date()).valueOf()+60000);
  document.cookie="expires="+pDate.toGMTString()+";";
  for (j=0; j<pTree.m_pTreeNodes.length; j++)
    if (pTree.m_pTreeNodes[j].m_bExpanded)
      document.cookie=pTree.m_pTreeNodes[j].m_sPath+"=1;";
    else
      document.cookie=pTree.m_pTreeNodes[j].m_sPath+"=0;";
}

function initTree(pTree)
{
  s=document.cookie;

  while (s.indexOf(";")>=0)
  {
    if (s.substr(s.indexOf("=")+1,1)==1) g_pExpanded.push(new String(s.substr(0,s.indexOf("="))));
    s=s.substr(s.indexOf(";")+1,s.length);
  }

  if (s.substr(0,s.indexOf("="))==" expires")
  {
    pExpDate=new Date(s.substr(s.indexOf("=")+1));
    if (pExpDate<new Date()) while (g_pExpanded.length>0) g_pExpanded.pop(); 
  }

  g_pExpanded.push(s.substr(0,s.indexOf("=")));

  for (i=0; i<g_pExpanded.length; i++)
  {
    for (j=0; j<pTree.m_pTreeNodes.length; j++)
    {
      s1=String(g_pExpanded[i]);
      while (s1.substr(0,1)==" ") s1=s1.substr(1,s1.length);
      if (s1==pTree.m_pTreeNodes[j].m_sPath) pTree.m_pTreeNodes[j].m_bExpanded=true;
    }
  }

  clickNode(-1,pTree);
}