function NavBar(container)
{
    this.holderElement = container;
    this.section_list_type = "ul";
    this.link_list_type = "ul";
    this.config = null;
    this.initial_section = null;
    this.initial_link = null;
    this.section_class_name = "sections";
    this.section_item_class_name = "item";
    this.link_class_name = "links";
    this.link_item_class_name = "item";

    this.init = function (initialSection, initialLink)
    {
        this.initial_section = initialSection;
        this.initial_link = initialLink;
        this.draw(initialSection)
    }

    this.draw = function (selectedSection)
    {
        var viewSectionIndex = 0;
        var viewSection = null;
        var sectionMenu = document.createElement(this.section_list_type);
        var sectionMenuClass = document.createAttribute("class");

        sectionMenuClass.nodeValue = this.section_class_name;

        sectionMenu.setAttributeNode(sectionMenuClass);

        for (var i = 0; i< this.config.length; i++)
        {
            var initial = (this.config[i].name == this.initial_section);
            var selected = (this.config[i].name == selectedSection);
            
            if (this.config[i].name == null) { continue; }
            
            var sectionItem = document.createElement("li");
            var sectionItemText = document.createTextNode(this.config[i].name);
            var sectionItemClass = document.createAttribute("class");
            var sectionItemTitle = document.createAttribute("title");

            sectionItemClass.nodeValue = this.section_item_class_name;

            if (selected)
            {
                sectionItemClass.nodeValue += " selected";
            }
            else if (initial)
            {
                sectionItemClass.nodeValue += " initial";
            }

            if (this.config[i].id != null)
            {
                var sectionItemId = document.createAttribute("id");
                sectionItemId.nodeValue = this.config[i].id;
                sectionItem.setAttributeNode(sectionItemId);
            }

            sectionItemTitle.nodeValue = this.config[i].title;

            sectionItem.setAttributeNode(sectionItemClass);
            sectionItem.setAttributeNode(sectionItemTitle);
            sectionItem.parentNavBar = this;
            sectionItem.sectionName = this.config[i].name;

            if (!selected)
            {
                sectionItem.onclick = function () { this.parentNavBar.draw(this.sectionName); };
            }
            else
            {
                viewSectionIndex = i;
                viewSection = this.config[i].name;
            }

            sectionItem.appendChild(sectionItemText);
            sectionMenu.appendChild(sectionItem);
        }

        var linkMenu = document.createElement(this.link_list_type);
        var linkMenuClass = document.createAttribute("class");

        linkMenuClass.nodeValue = this.link_class_name;

        linkMenu.setAttributeNode(linkMenuClass);

        for (var i = 0; i< this.config[viewSectionIndex].links.length; i++)
        {
            if (this.config[viewSectionIndex].links[i].name == null) { continue; }
            
            var selected = (this.config[viewSectionIndex].links[i].name == this.initial_link && selectedSection == viewSection);
            var linkItem = document.createElement("li");
            var linkItemClass = document.createAttribute("class");
            var linkItemText = document.createTextNode(this.config[viewSectionIndex].links[i].name);

            linkItemClass.nodeValue =  (selected) ? this.link_item_class_name + " selected": this.link_item_class_name;

            linkItem.setAttributeNode(linkItemClass);

            if (this.config[viewSectionIndex].links[i].pre != null)
            {
                var linkItemPreText = document.createTextNode(this.config[viewSectionIndex].links[i].pre);
                linkItem.appendChild(linkItemPreText);
            }

            if (selected)
            {
                linkItem.appendChild(linkItemText);
            }
            else
            {
                var linkItemAnchor = document.createElement("a");
                var linkItemAnchorHRef = document.createAttribute("href");
                var linkItemAnchorTitle = document.createAttribute("title");

                linkItemAnchorHRef.nodeValue = this.config[viewSectionIndex].links[i].url;
                linkItemAnchorTitle.nodeValue = this.config[viewSectionIndex].links[i].title;

                linkItemAnchor.setAttributeNode(linkItemAnchorHRef);
                linkItemAnchor.setAttributeNode(linkItemAnchorTitle);

                linkItemAnchor.appendChild(linkItemText);
                linkItem.appendChild(linkItemAnchor);
            }

            if (this.config[viewSectionIndex].links[i].post != null)
            {
                var linkItemPostText = document.createTextNode(this.config[viewSectionIndex].links[i].post);
                linkItem.appendChild(linkItemPostText);
            }

            linkMenu.appendChild(linkItem);
        }

        var holder = document.getElementById(this.holderElement)

        while (holder.childNodes[0])
        {
            holder.removeChild(holder.childNodes[0]);
        }

        holder.appendChild(sectionMenu);
        holder.appendChild(linkMenu);
    }
}