function llx3_Menu() {
    var This = this;
    MenuInfos = new Array();
    HoverLink=null;

    this.showMenu = function (link, menuElement, position) {
        This.addMenu(link, menuElement,position).showMenu();
    }

    this.addMenu = function (link, menuElement, position) {
        var m = GetMenu(link);
        if (m != null) return m;
        var mi = new MenuInfo();
        mi.link = link;
        mi.menuContainer = menuElement;
        mi.position = position;
        MenuInfos.push(mi);
        link.onmouseout = mi.hideMenu;
        menuElement.onmouseout = mi.hideMenu;
        menuElement.onmouseover = mi.showMenu2;
        menuElement.style.position = "absolute";
        return mi;
    }




    function MenuInfo() {
        var ThisMI = this;
        this.link = null;
        this.menuContainer = null;
        this.isOpen = false;
        var cTimeout = 0;
        this.position = "bottom";
        var effectIntv = 0;
        var effectCount = 0;

        this.showMenu = function () {
            HoverLink = ThisMI.link;
            clearTimeout(cTimeout);
            ThisMI.menuContainer.style.display = "block";
            switch (ThisMI.position) {
                case "right":
                    ThisMI.menuContainer.style.top = "0px";
                    ThisMI.menuContainer.style.left = ThisMI.link.offsetWidth + "px";
                    break;
                default:
                    ThisMI.menuContainer.style.left = (ThisMI.link.offsetWidth / 2 - ThisMI.menuContainer.offsetWidth / 2) + "px";
            }
            for (var i = 0; i < MenuInfos.length; i++) {
                if ((MenuInfos[i] != ThisMI)&&(IsLinkChild(MenuInfos[i].menuContainer,this.link)==false)) { MenuInfos[i].hideMenuNow(); }
            }

        }
        this.showMenu2 = function () {
            clearTimeout(cTimeout);
        }
        this.hideMenu = function () {
            clearTimeout(cTimeout);
            cTimeout = setTimeout(execHideMenu, 500);
        }
        this.hideMenuNow = function () {
            execHideMenu();
        }
        function execHideMenu() {
            ThisMI.menuContainer.style.display = "none";
        }
    }

    function GetMenu(link) {
        for (var i = 0; i < MenuInfos.length; i++) { if (MenuInfos[i].link == link) return MenuInfos[i]; }
        return null;
    }


    function IsLinkChild(parent, child) {
        var children = parent.getElementsByTagName("A");
        for (var i = 0; i < children.length; i++) { if (children[i] == child) return true;}
        return false;
    }

}
