﻿function SingleLevelMenu(xOffset, yOffset) 
{
    this.menuID  = new String();
    this.timerID = -1;
    this.xOffset = xOffset;
    this.yOffset = yOffset;

    this.ShowInsideSubMenu = function(linkID, subMenuID) {
        var objLink = null;
        var objSubMenu = null;
        var xPos = 0;
        var yPos = 0;

        objLink = GetDocumentElement(linkID);
        objSubMenu = GetDocumentElement(subMenuID);
        if ((objSubMenu != null) && (objLink != null)) {

            if ((this.menuID != "") && (this.menuID != subMenuID)) {
                this.HideInsideSubMenuImediate();
            }
            else if (this.menuID == subMenuID) {
                this.SuspendInsideSubMenu(linkID, subMenuID);
                return;
            }

            xPos = GetXPos(objLink) + xOffset;
            yPos = GetYPos(objLink) + yOffset;

            objSubMenu.style.left = xPos.toString() + "px";
            objSubMenu.style.top = yPos.toString() + "px";

            objSubMenu.style.visibility = "visible";
            objSubMenu.style.display = "block";

            this.menuID = subMenuID;
             
        }
    }

    this.SuspendInsideSubMenu = function(linkID, subMenuID) {
        var objLink = null;
        var objSubMenu = null;

        objLink = GetDocumentElement(linkID);
        objSubMenu = GetDocumentElement(subMenuID);
        if ((objSubMenu != null) && (objLink != null)) {
            if (this.menuID == subMenuID) {
                if (this.timerID != -1) {
                    self.clearTimeout(this.timerID);
                    this.timerID = -1;
                }
            }
        }
    }

    this.HideInsideSubMenuImediate = function() {
        var objSubMenu = null;
        if (this.menuID != "") {
            objSubMenu = GetDocumentElement(this.menuID);
            if (objSubMenu != null) {
                self.clearTimeout(this.timerID);
                objSubMenu.style.visibility = "hidden";
                objSubMenu.style.display = "none";
                this.menuID = "";
                this.timerID = -1;
            }
        }
    }

    this.HideInsideSubMenu = function() {
        if (this.timerID != -1) {
            self.clearTimeout(this.timerID);
        }
        if (this.timerID != "") {
            var reference = this;
            this.timerID = self.setTimeout(function() {reference.HideInsideSubMenuImediate(); }, 500);
        }
    }
    
    return this;
}


function SingleLevelMenu2(parentID, xOffset, yOffset) {
    this.menuID = new String();
    this.timerID = -1;
    this.xOffset = xOffset;
    this.yOffset = yOffset;


    this.ShowInsideSubMenu = function(linkID, subMenuID) {
        var objParent = null;
        var objCell = null;
        var objLink = null;
        var objSubMenu = null;
        var relX = 0;
        var relWidth = 0;
        var relOffset = 0;
        var xPos = 0;
        var yPos = 0;
        var cellClass = "";
        var cellHoverClass = "";

        objLink = GetDocumentElement(linkID);
        objSubMenu = GetDocumentElement(subMenuID);
        objParent = GetDocumentElement(parentID);

        if ((objSubMenu != null) && (objLink != null) && (objParent != null)) {

            if ((this.menuID != "") && (this.menuID != subMenuID)) {
                this.HideInsideSubMenuImediate();
            }
            else if (this.menuID == subMenuID) {
                this.SuspendInsideSubMenu(linkID, subMenuID);
                return;
            }

            objCell = objLink.offsetParent;

            if (objCell != null) {

                relX = GetXPos(objParent);
                xPos = GetXPos(objCell) + xOffset;
                yPos = GetYPos(objLink) + yOffset;
                cellClass = objCell.className;


                if (cellClass.indexOf("clsInnerTopMenuStdItemFirst") >= 0) {
                    cellHoverClass = "clsInnerTopMenuStdItemFirstHover";
                    relOffset = -2;
                }
                else if (cellClass.indexOf("clsInnerTopMenuNormalItemFirst") >= 0) {
                    cellHoverClass = "clsInnerTopMenuNormalItemFirstHover";
                    relOffset = -2;
                }
                else if (cellClass.indexOf("clsInnerTopMenuStdItem") >= 0) {
                    cellHoverClass = "clsInnerTopMenuStdItemHover";
                    relOffset = -1;
                }
                else if (cellClass.indexOf("clsInnerTopMenuNormalItem") >= 0) {
                    cellHoverClass = "clsInnerTopMenuNormalItemHover";
                    relOffset = -1;
                }
                else if (cellClass.indexOf("clsInnerTopMenuSelectedItem") >= 0) {
                    relOffset = -1;
                }

                if (cellHoverClass != "") {
                    objCell.className = cellHoverClass;
                }

                objSubMenu.style.visibility = "visible";
                objSubMenu.style.display = "block";

                relWidth = objSubMenu.offsetWidth + xPos + relOffset - relX;
                if (relWidth > 1000) {
                    xPos = xPos + objCell.offsetWidth - objSubMenu.offsetWidth - relOffset;
                }
                else {
                    xPos = xPos + relOffset;
                }

                objSubMenu.style.left = xPos.toString() + "px";
                objSubMenu.style.top = yPos.toString() + "px";

                this.menuID = subMenuID;
            }
        }
    }

    this.SuspendInsideSubMenu = function(linkID, subMenuID) {
        var objLink = null;
        var objSubMenu = null;

        objLink = GetDocumentElement(linkID);
        objSubMenu = GetDocumentElement(subMenuID);
        if ((objSubMenu != null) && (objLink != null)) {
            if (this.menuID == subMenuID) {
                if (this.timerID != -1) {
                    self.clearTimeout(this.timerID);
                    this.timerID = -1;
                }
            }
        }
    }

    this.HideInsideSubMenuImediate = function() {
        var objSubMenu = null;
        if (this.menuID != "") {
            objSubMenu = GetDocumentElement(this.menuID);

            if (objSubMenu != null) {
                var linkID = this.menuID.replace('sbm', 'lnk');
                var objLink = GetDocumentElement(linkID);
                if ((objLink != null) && (objLink.offsetParent != null)) {
                    var cellClass = objLink.offsetParent.className;
                    var cellHoverClass = "";

                    if (cellClass.indexOf("clsInnerTopMenuStdItemFirst") >= 0) {
                        cellHoverClass = "clsInnerTopMenuStdItemFirst";
                    }
                    else if (cellClass.indexOf("clsInnerTopMenuNormalItemFirst") >= 0) {
                        cellHoverClass = "clsInnerTopMenuNormalItemFirst";
                    }
                    else if (cellClass.indexOf("clsInnerTopMenuStdItem") >= 0) {
                        cellHoverClass = "clsInnerTopMenuStdItem";
                    }
                    else if (cellClass.indexOf("clsInnerTopMenuNormalItem") >= 0) {
                        cellHoverClass = "clsInnerTopMenuNormalItem";
                    }

                    if (cellHoverClass != "") {
                        objLink.offsetParent.className = cellHoverClass;
                    }

                }

                self.clearTimeout(this.timerID);
                objSubMenu.style.visibility = "hidden";
                objSubMenu.style.display = "none";
                this.menuID = "";
                this.timerID = -1;
            }
        }
    }

    this.HideInsideSubMenu = function() {
        if (this.timerID != -1) {
            self.clearTimeout(this.timerID);
        }
        if (this.timerID != "") {
            var reference = this;
            this.timerID = self.setTimeout(function() { reference.HideInsideSubMenuImediate(); }, 500);
        }
    }

    return this;
}


function SingleMenu(xOffset, yOffset, triggerID, triggerClass, menuID, offsetElementID) {
    this.triggerID = triggerID;
    this.triggerClass = triggerClass;
    this.menuID = menuID;
    this.offsetElementID = offsetElementID;
    this.xOffset = xOffset;
    this.yOffset = yOffset;
    this.timerID = -1;
    this.isVisible = false;


    this.ShowSubMenu = function() {
        var objTrigger = null;
        var objMenu = null;
        var objOffset = null;
        var xPos = 0;
        var yPos = 0;

        if (!this.isVisible) {
            objTrigger = GetDocumentElement(this.triggerID);
            objMenu = GetDocumentElement(this.menuID);
            objOffset = GetDocumentElement(this.offsetElementID);
            if ((objTrigger != null) && (objMenu != null) && (objOffset)) {
                xPos = GetXPos(objTrigger) + xOffset;
                yPos = GetYPos(objTrigger) + yOffset;
                objMenu.style.left = xPos.toString() + "px";
                objMenu.style.top = yPos.toString() + "px";
                objMenu.style.visibility = "visible";
                objMenu.style.display = "block";

                if ((objMenu.offsetHeight != null) && (objOffset.offsetHeight != null)) {
                    if (objOffset.offsetHeight > objMenu.offsetHeight) {
                        objMenu.style.height = objOffset.offsetHeight + "px";
                    }
                }
                objTrigger.className = this.triggerClass + "Hover";
                this.isVisible = true;
            }
        }
        else {
            this.SuspendSubMenu();
        }
    }

    this.SuspendSubMenu = function() {
        var objTrigger = null;
        var objMenu = null;

        if (this.isVisible) {
            objTrigger = GetDocumentElement(this.triggerID);
            objMenu = GetDocumentElement(this.menuID);
            if ((objTrigger != null) && (objMenu != null)) {
                if (this.timerID != -1) {
                    self.clearTimeout(this.timerID);
                    this.timerID = -1;
                }
            }
        }
    }

    this.HideSubMenuImediate = function() {
        var objTrigger = null;
        var objMenu = null;

        if (this.isVisible) {
            objTrigger = GetDocumentElement(this.triggerID);
            objMenu = GetDocumentElement(this.menuID);
            if ((objTrigger != null) && (objMenu != null)) {
                self.clearTimeout(this.timerID);
                objMenu.style.visibility = "hidden";
                objMenu.style.display = "none";
                objTrigger.className = this.triggerClass;
                this.timerID = -1;
                this.isVisible = false;
            }
        }
    }

    this.HideSubMenu = function() {
        if (this.isVisible) {
            if (this.timerID != -1) {
                self.clearTimeout(this.timerID);
            }
            if (this.timerID != "") {
                var reference = this;
                this.timerID = self.setTimeout(function() { reference.HideSubMenuImediate(); }, 500);
            }
        }
    }

    return this;
} 
