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

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

MenuBuilder.prototype.BuildMenu = function (ul, level)
{
    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);
            var uls = li.getElementsByTagName("UL");
            if (uls.length > 0)
            {
                var subMenu = this.BuildMenu(uls[0], level + 1);
                item.appendMenu(subMenu);
            }
            menu.appendItem(item);
        }
    }

    return menu;
}

MenuBuilder.prototype.CreateMenu = function (ul, level)
{
    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)
    {
        this.subMenu = this.appendChild(menu);
        this.subMenu.parentItem = this;
    }

    div.SetActive = function ()
    {
        this.active = true;
        this.className = "active";
    }

    div.SetInactive = function ()
    {
        this.active = false;
        this.className = "inactive";
    }

    this.ApplyItemBehaviours(div, level);

    return div;
}

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

    item.onmouseout = function ()
    {
        var divs = this.getElementsByTagName("DIV");
        if (divs.length > 0)
        {
            window.menuBehaviours.Hide(divs[0]);
        }
    }
}

MenuBuilder.prototype.CreateBehaviours = function (menu)
{
    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";
        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);
        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 ExedMenuBuilder()
{
    this._construct();
}

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

ExedMenuBuilder.prototype.CreateMenu = function (ul, level)
{
    var div = document.createElement("DIV");
    div.subItems = new Array ();

    if (level > 0)
    {
        div.className = "submenu";

        div.appendItem = function (item)
        {
            this.subItems[this.subItems.length]
                = this.getElementsByTagName("TABLE")[0]
                .getElementsByTagName("TBODY")[0]
                .getElementsByTagName("TR")[1]
                .getElementsByTagName("TD")[1].appendChild(item);
            item.parentMenu = this;
        }

        // menu content
        var td5 = document.createElement("TD");
        td5.className = "content";

        // create table
        var table = document.createElement("TABLE");
        table.cellPadding = 0;
        table.cellSpacing = 0;
        table.border = 0;
        var tbody = document.createElement("TBODY");
        table.appendChild(tbody);

        // create corners
        var tr1 = tbody.appendChild(document.createElement("TR"));

        var td1 = tr1.appendChild(document.createElement("TD"));
/*        td1.className = "corner";
        var img1 = td1.appendChild(document.createElement("IMG"));
        img1.src = "http://klant.exed.nl/gsk/corporate/images/menu/corner_lt.gif";
  */
        var td2 = tr1.appendChild(document.createElement("TD"));
/*        td2.className = "topbar";
        td2.innerHTML = "";
  */
        var td3 = tr1.appendChild(document.createElement("TD"));
/*        td3.className = "corner";
        var img3 = td3.appendChild(document.createElement("IMG"));
        img3.src = "http://klant.exed.nl/gsk/corporate/images/menu/corner_rt.gif";
  */
        // middle tr
        var tr2 = tbody.appendChild(document.createElement("TR"));

        var td4 = tr2.appendChild(document.createElement("TD"));
/*        td4.className = "sidebar";
        td4.innerHTML = "&nbsp;";
*/
        tr2.appendChild(td5);

        var td6 = tr2.appendChild(document.createElement("TD"));
/*        td6.className = "sidebar";
        td6.innerHTML = "&nbsp;";
*/
        // bottom tr
        var tr3 = tbody.appendChild(document.createElement("TR"));

        var td7 = tr3.appendChild(document.createElement("TD"));
/*        td7.className = "corner";
        var img7 = td7.appendChild(document.createElement("IMG"));
        img7.src = "http://klant.exed.nl/gsk/corporate/images/menu/corner_lb.gif";
  */
        var td8 = tr3.appendChild(document.createElement("TD"));
/*        td8.className = "topbar";
        td8.innerHTML = "";
*/
        var td9 = tr3.appendChild(document.createElement("TD"));
/*        td9.className = "corner";
        var img9 = td9.appendChild(document.createElement("IMG"));
        img9.src = "http://klant.exed.nl/gsk/corporate/images/menu/corner_rb.gif";
      */
        div.style.display = "none";

        div.appendChild(table);
    }
    else
    {
        div.className = "mainmenu";
        div.appendItem = function (item)
        {
            this.subItems[this.subItems.length] = this.appendChild(item);
            item.parentMenu = this;
        }
    }

    return div;
}

ExedMenuBuilder.prototype.CreateItem = function (li, level)
{
    var div = document.createElement("DIV");

    div.appendMenu = function (menu)
    {
        this.subMenu = this.insertBefore(menu, this.childNodes[0]);
        menu.parentItem = this;
    }

    div.SetActive = function ()
    {
        this.active = true;
        this.className = "active";
    }

    div.SetInactive = function ()
    {
        this.active = false;
        this.className = "inactive";
    }

    if (level > 0)
    {
        var a1 = li.getElementsByTagName("A")[0];
        var a2 = document.createElement("A");
        a2.href = a1.href;
        a2.innerHTML = a1.innerHTML;
        if (a2.href.indexOf('bibliotheekblad') != -1)
        {
            a2.target = "_blank";
        }
        div.appendChild(a2);

        this.ApplyItemBehaviours(div, level);
    }
    else
    {
        div.className = "inactive";

        var table = div.appendChild(document.createElement("TABLE"));
        table.cellPadding = 0;
        table.cellSpacing = 0;
        table.style.borderCollapse = 'collapse';
        table.border = 0;
        table.className = "mainitem";
        var tbody = table.appendChild(document.createElement("TBODY"));
        var tr = tbody.appendChild(document.createElement("TR"));
        var td1 = tr.appendChild(document.createElement("TD"));
        td1.className = "left";
/*        var img1 = td1.appendChild(document.createElement("IMG"));
        img1.style.position = "absolute";
        img1.src = "http://klant.exed.nl/gsk/corporate/images/menu/corner_lt.gif";
*/
/*        var img2 = td1.appendChild(document.createElement("IMG"));
        img2.style.position = "absolute";
        img2.style.marginTop = "10px";
        img2.src = "http://klant.exed.nl/gsk/corporate/images/menu/corner_lb.gif";
*/
        var td2 = tr.appendChild(document.createElement("TD"));
        td2.className = "right";

        var a1 = li.getElementsByTagName("A")[0];
        var a2 = document.createElement("A");
        a2.href = a1.href;
        a2.innerHTML = a1.innerHTML;
        td2.appendChild(a2);

        this.ApplyItemBehaviours(div, level);
    }
    return div;
}

ExedMenuBuilder.prototype.ApplyItemBehaviours = function (item, level)
{
    item.onmouseover = function ()
    {
        var tables = this.getElementsByTagName("DIV");
        if (tables.length > 0)
        {
            window.menuBehaviours.Show(tables[0]);
        }
        //alert(this.innerHTML);
    }

    item.onmouseout = function ()
    {
        var tables = this.getElementsByTagName("DIV");
        if (tables.length > 0)
        {
            window.menuBehaviours.Hide(tables[0]);
        }
    }
}

ExedMenuBuilder.prototype.CreateBehaviours = function (menu)
{
    this.base.CreateBehaviours.call(this);

    window.menuBehaviours.HideNow = function (obj)
    {
        obj.parentItem.className = "inactive";
        obj.style.display = "none";
    }

    window.menuBehaviours.ShowNow = function (obj)
    {
        window.menuBehaviours.HideInactive(obj.parentItem.parentMenu);
        obj.parentItem.className = "active";
        if (obj.filters)
        {
            if (obj.filters.length > 0)
            {
                obj.filters[0].enabled = false;
                obj.style.width = "620px";
                obj.style.height = "300px";
                obj.style.display = "block";

                obj.filters[0].enabled = true;
            }
            else
            {
                obj.style.filter = "alpha(opacity=100)";
                obj.style.display = "block";
            }
        }
        else
        {
            obj.style.display = "block";
        }
    }
}

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