var typemenu = "horizontaal";
//var typemenu = "verticaal"; 

function BuildMenu(hoofdItem, subItem, activeItem)
{
    var menu = document.getElementById("mainMenu");
    var menubuilder = new CustomMenuBuilder();
    var openMenu;
    
    var output = menubuilder.BuildMenu(menu,0);//,openMenu);
    document.getElementById("menu").appendChild(output);
    
    // Controle alvorens menu's te openen
    
    // Hoofdmenu
    if ((hoofdItem == "") && (subItem == "") && (activeItem != "")) { hoofdItem = activeItem; }
    if (hoofdItem == '1' || hoofdItem == '33' || hoofdItem == '36' || hoofdItem == '37' || hoofdItem == '76' || hoofdItem == '359' || hoofdItem == '464' || hoofdItem == '465') hoofdItem = '35';
    
    var hoofdMenuItem = document.getElementById("dm"+hoofdItem);
    if (hoofdMenuItem)
    {
        hoofdMenuItem.className = "hoofdSelected";
        hoofdMenuItem.getElementsByTagName("A")[0].style.color = "#FC6721";
    }
    
    // Submenu
    if (document.getElementById("m"+activeItem))
    {
        document.getElementById("m"+activeItem).className = "subSelected";
        
        var subsubMenu = document.getElementById("m"+activeItem+"-sub");
        if (subsubMenu)
        {
            subsubMenu.style.display = "block";
        }
    }
    
    // Sub-Submenu
    var subsubMenu = document.getElementById("m"+subItem+"-sub");
    if (subsubMenu)
    {
        //document.getElementById("m"+subItem).className = "subSelected";
        subsubMenu.style.display = "block";
        
        var subsubMenuItem = document.getElementById("m"+activeItem);
        if (subsubMenuItem)
        {
            subsubMenuItem.style.color = "#FC6721";
            subsubMenuItem.style.backgroundImage = "url('http://klant.exed.nl/gsk/gsk.nl/images/page/arrow.gif')";
            subsubMenuItem.style.backgroundRepeat = "no-repeat";
            subsubMenuItem.style.backgroundPosition = "10px 2px";
            subsubMenuItem.style.paddingLeft = "30px";
        }
        else
        {
            var activeSub = document.getElementById("m" + subItem);
            activeSub.className = "subSelected";
        }
    }
    
    //alert(document.getElementById("menu").innerHTML);
}

function MenuBuilder()
{
    this._construct();
}

MenuBuilder.prototype._construct = function ()
{
    this.showDelay = 0;
    this.hideDelay = 500;
}

MenuBuilder.prototype.BuildMenu = function (ul, level)//, naam)
{
    if (!level)
    {
        var level = 0;
        this.CreateBehaviours();
    }
    
    var menu = this.CreateMenu(ul, level);
    for (var i = 0; i < ul.childNodes.length; i++)
    {
        if (ul.childNodes[i].tagName == "LI")
        {
            var li = ul.childNodes[i];
            var item = this.CreateItem(li, level);//, naam);
            var uls = li.getElementsByTagName("UL");
            if (uls.length > 0)
            {
                var subMenu = this.BuildMenu(uls[0], level + 1);//, naam);
                item.appendMenu(subMenu);
            }
            menu.appendItem(item);
        }
    }
    
    return menu;
}

MenuBuilder.prototype.CreateMenu = function (ul, level)//, naam)
{
    var div = document.createElement("DIV");
    div.className = "menu";
    div.subItems = new Array ();
    div.appendItem = function (item)
    {
        this.subItems[this.subItems.length] = this.appendChild(item);
        item.parentMenu = this;
    }
    
    if (level > 0)
    {
        div.style.display = "none";
    }
    return div;
}

MenuBuilder.prototype.CreateItem = function (li, level)
{
    var div = document.createElement("DIV");
    
    var a1 = li.getElementsByTagName("A")[0];
    var a2 = document.createElement("A");
    a2.href = a1.href;

    a2.innerHTML = a1.innerHTML;
    div.appendChild(a2);
    


    div.appendMenu = function (menu)
    {
        if (typemenu == "horizontaal")
        {
            this.subMenu = this.insertBefore(menu, this.firstChild);
        } 
        else if (typemenu == "verticaal")
        {
            this.subMenu = this.appendChild(menu, this.firstChild);
        }
        this.subMenu.parentItem = this;
    }
    
    this.ApplyItemBehaviours(div, level);
    
    return div;
}

MenuBuilder.prototype.ApplyItemBehaviours = function (item, level)
{
    item.onmouseover = function ()
    {
        if (this.SetActive) this.SetActive();
        var divs = this.getElementsByTagName("DIV");
        if (divs.length > 0)
        {
            window.menuBehaviours.Show(divs[0]);
        }
    }
    
    item.onmouseout = function ()
    {
        if (this.SetInactive) this.SetInactive();
        var divs = this.getElementsByTagName("DIV");
        if (divs.length > 0)
        {
            window.menuBehaviours.Hide(divs[0]);
        }
    }
}

MenuBuilder.prototype.CreateBehaviours = function ()
{
    window.menuBehaviours = new Object();
    window.menuBehaviours.showDelay = this.showDelay;
    window.menuBehaviours.hideDelay = this.hideDelay;
    
    window.menuBehaviours.Hide = function (obj)
    {
        if (!obj.id)
        {
            obj.id = new Date().getTime();
        }
        if (obj.showTimeout)
        {
            window.clearTimeout(obj.showTimeout);
        }
        obj.hideTimeout = window.setTimeout("window.menuBehaviours.HideNow(document.getElementById('" + obj.id + "'))", window.menuBehaviours.hideDelay);
    }
    
    window.menuBehaviours.HideNow = function (obj)
    {
        obj.style.display = "none";
        if (obj.SetInactive) obj.SetInactive();
    }
    
    window.menuBehaviours.Show = function (obj)
    {
        if (!obj.id)
        {
            obj.id = new Date().getTime();
        }
        if (obj.hideTimeout)
        {
            window.clearTimeout(obj.hideTimeout);
        }
        obj.showTimeout = window.setTimeout("window.menuBehaviours.ShowNow(document.getElementById('" + obj.id + "'))", window.menuBehaviours.showDelay);
    }
    
    window.menuBehaviours.ShowNow = function (obj)
    {
        window.menuBehaviours.HideInactive(obj.parentItem.parentMenu);
        if (obj.SetActive) obj.SetActive();
        obj.style.display = "block";
    }
    
    window.menuBehaviours.HideInactive = function (obj)
    {
        for (var i = 0; i < obj.subItems.length; i++)
        {
            var subItem = obj.subItems[i];
            if (!subItem.active && subItem.subMenu) window.menuBehaviours.HideNow(subItem.subMenu);
        }
    }
}

function CustomMenuBuilder()
{
	this._construct();
}

CustomMenuBuilder.prototype = new MenuBuilder();
CustomMenuBuilder.prototype.base = new MenuBuilder();


CustomMenuBuilder.prototype.CreateItem = function (li, level)//, naam)
{
	if (level > 0)
	{
		return this.base.CreateItem.call(this, li, level);

	}
	
    var div = document.createElement("DIV");
    
    var a1 = li.getElementsByTagName("A")[0];
    var a2 = document.createElement("A");
    a2.href = a1.href;
    a2.innerHTML = a1.innerHTML;
    div.appendChild(a2);
    div.id = "d" + a1.id;


    /*if(a1.innerHTML == naam)
    {
        div.className = "menuSelected";
    }
    else
    {
        div.className = "menuItemInactive";
    }*/
    
    
    /*div.SetActive = function ()
    {
        this.className = "menuItemActive";
    }
    
    div.SetInactive = function ()
    {
        this.className = "menuItemInactive";
    }
	
    div.appendMenu = function (menu)
    {
        if (typemenu == "horizontaal")
        {
            this.subMenu = this.insertBefore(menu, this.firstChild);
        } 
        else if (typemenu == "verticaal")
        {
            this.subMenu = this.appendChild(menu, this.firstChild);
        }
        this.subMenu.parentItem = this;
    }*/
    
    this.ApplyItemBehaviours(div, level);
    
    return div;
}

function GetParentByTagName(obj, tagName)
{
    return obj.parentNode ? (obj.parentNode.tagName == tagName ? obj.parentNode : GetParentByTagName(obj.parentNode, tagName)) : null;
}