var GlobalNodes = new Array();

function NodeItem(parent, TreeViewObject)
{
    this.Type = 1;
    this.Name = "";
    this.Link = "";
    this.Parent = parent;
    this.TreeViewObject = TreeViewObject;
    this.SubItems = new Array();
    this.visible = true;
    this.Idx = GlobalNodes.length;
    GlobalNodes[this.Idx] = this;
    this.SubTexts = new Array();
    
    this.AddItem = function(Text, Link)
    {
    
        var SubItem = new NodeItem(this, this.TreeViewObject);


        SubItem.Name = Text;
        SubItem.Link = Link;
        
        for(var i = 2; i < this.AddItem.arguments.length; i++)
        {
            this.SubTexts.push(this.AddItem.arguments[i]);
        }
        
        this.SubItems.push(SubItem);

        return SubItem;        
    }
    
    this.Render = function(Depth)
    {
        var s = new String();
        if(this.SubItems.length != 0)
        {
            s = s + "<div id='TVHeaderItem"+this.Idx+"'>\n";
            s = s + "<a href='javascript:TreeViewChangeState("+this.Idx+")'>\n";
            if(this.TreeViewObject.Config.UseImages)
            {
                s = s + "<img border='0' id='TVHeaderImage"+this.Idx+"' src='"+this.GetHeaderImage()+"'>\n";
            }        
            s = s + "</a>\n";

			
			if(this.Link != "") s = s + "<a href='"+this.Link+"'>";
            s = s + this.Name;
			if(this.Link != "") s = s + "</a>";

            s = s + "</div>\n";    
   
            s = s + "<div class='menuitem"+Depth+"' style='padding-left: 0.3cm' id='TVSubItems"+this.Idx+"'>\n";
            for(var i = 0; i < this.SubItems.length; i++)
            {            
                s = s + this.SubItems[i].Render(Depth+1);
            }
            s = s + "</div>\n";
            
        }
        else
        {
			if(this.Link != "") s = s + "<a href='"+this.Link+"'>";
            s = s + this.Name;
			if(this.Link != "") s = s + "</a>";

            s = s + "<br>";
        }
        return s;
    }
    
    this.ChangeState = function()
    {
        var divelement = document.getElementById("TVSubItems"+this.Idx);
        if(this.visible)
        {
            divelement.style.display = "none";
            this.visible = false;
        }
        else
        {
            
            divelement.style.display = "block";
            this.visible = true;
        }
        if(this.TreeViewObject.Config.UseImages) 
        {
            document.getElementById("TVHeaderImage"+this.Idx).src = this.GetHeaderImage();        
        }
    }
    this.GetHeaderImage = function()
    {
        if(!this.TreeViewObject.Config.UseImages) return "";
        if(this.visible)
            return this.TreeViewObject.Config.CollapseImage;
        else
            return this.TreeViewObject.Config.ExpandImage;        
    }
    
    return this;
}

function TreeViewConfig()
{
    this.UseImages = true;
    this.ExpandImage = "expand.gif";
    this.CollapseImage = "collapse.gif";
    return this;
}

function TreeView(id, enablesearch)
{
    this.id = id;
    this.enablesearch = enablesearch;
    this.items = new Array();
    this.RootItem = new NodeItem(null, this);
    
    this.Config = new TreeViewConfig();
    
    this.Render = function()
    {
        var s = "";
         for(var i = 0; i < this.RootItem.SubItems.length; i++)
            {            
                s = s + this.RootItem.SubItems[i].Render(1);
            }
            
        document.getElementById(id).innerHTML = s;
    }
    return this;    
}

function TreeViewChangeState(id)
{
    GlobalNodes[id].ChangeState();
}
