PHP Classes

File: Shared/_menus2.js

Recommend this page to a friend!
  Classes of Michael J. Fuhrman   Security   Shared/_menus2.js   Download  
File: Shared/_menus2.js
Role: Example script
Content type: text/plain
Description: Javascript menus
Class: Security
Manage user accounts and access controls
Author: By
Last change:
Date: 13 years ago
Size: 5,899 bytes
 

Contents

Class file image Download
/* =======================================
    Copyright 1998 - 2010 - E Net Arch
    This program is distributed under the terms of the GNU
    General Public License (or the Lesser GPL).
    www.ENetArch.net
    ======================================= */

var NS = (navigator.appName == "Netscape");
var IE = (navigator.appName != "Netscape");
var NS6 = (NS && parseFloat (navigator.appVersion) >= 5.0)
var NS4 = (NS && parseFloat (navigator.appVersion) < 5.0)

ENetArch.Menu = function ()
    { return (
    {
        nID : parseInt (Math.random()*9999999999999),
        szDisplay : "",
        szURL : "",
        menuDirection : "V", // Vertical or Horizontal

        Max : 0,
        Menus : new Array (),
        parent : null,

        add : function (thsDisplay, thsURL)
        {
            var thsInst = this;
            var menu = new ENetArch.Menu ();

            menu.szDisplay = thsDisplay
            menu.szURL = thsURL;
            menu.parent = thsInst;

            var x = thsInst.Max++;
            thsInst.Menus [x+1] = menu;

            return menu;
        },

        remove : function ()
        {
            var thsInst = this;
            var thsParent = thsInst.parent;

            for (var t=1; t<thsParent.Max+1; t++)
            {
                var nID = thsParent.Menus[t].nID ;
                if (nID == this.nID)
                {
                    thsParent.Menus.splice (t,1);
                    thsParent.Max--;
                }
            }
        },
    });
    };

ENetArch.DOMMenus =
    {
        divMenu : null,
        menuActive : false,
        activeMenusCnt : 0,
        activeMenus : new Array(),
        Menus : null,

        _init : function (thsDiv, thsMenus)
        {
            if (thsMenus == null) return;

            if (thsDiv != null)
            {
                this.divMenu = thsDiv;
                this.Menus = thsMenus;

            }
            else
            {
                var divBody = document.getChild ("BODY");
                divBody.innerHTML += "\n" +
                    "<div id='Menus_" + this.szRandom + "' class=''>" +
                    "</div>";

                this.divMenu = divBody;
            }
        },

        show : function ()
        {
            var thsInst = this;
            var divMenu = thsInst.divMenu;
            divMenu.innerHTML = "";
            var nLevel = 1;

            thsInst.draw (thsInst.Menus, nLevel);
            var szMenuName = "Menu_" + thsInst.Menus.nID;
            var divMenu = $(szMenuName);
            thsInst.visible (divMenu, true);
        },

        draw : function (mnu, nLevel)
        {
            if (mnu == null) return;

            var thsInst = this;
            var divMenu = thsInst.divMenu;

            if (mnu.Max == 0) return;

            var szClass = ( (mnu.menuDirection == "H") ? "mnuBar" : "mnuList");

            var szMenuName = "Menu_" + mnu.nID;

            divMenu.innerHTML += "\n" +"\n" +
                "<div ID='" + szMenuName + "' class='" + szClass + "' " +
                    'onMouseOver="ENetArch.DOMMenus.menuActive=true;" ' +
                    'onMouseOut="ENetArch.DOMMenus.menuActive=false;" ' +
                    'style="visibility:hidden;" ' +
                ">" +
                "</div>";

            var divMenuItems = $(szMenuName);

            for (var t=1; t<mnu.Max+1; t++)
            {
                var nID = mnu.Menus[t].nID ;
                var szID = "MenuItem_" + nID;
                var szDisplay = mnu.Menus[t].szDisplay;
                var szURL = mnu.Menus[t].szURL;

                if (szURL == "") szURL = "javascript:void(0);";

                var szMnuItem = "";
                if (szDisplay == "<HR>")
                { szMnuItem = "<HR>"; }
                else
                {
                    szMnuItem =
                        '<span ID="' + szID + '" class="mnuItem">' +
                        '<a href="' + szURL + '" class="mnuStyle" ' +
                            'onMouseOver="ENetArch.DOMMenus.onMouseOver (this, ' + nLevel + ');" ' +
                            'Name="' + nID + '" ' +
                        '>' + szDisplay + '</a></span> ';

                    if (mnu.menuDirection == "V")
                        szMnuItem += "<BR>";
                }

                divMenuItems.innerHTML += "\n" + szMnuItem;
            }

            for (var t=1; t<mnu.Max+1; t++)
                thsInst.draw (mnu.Menus[t], nLevel +1);

            setInterval("ENetArch.DOMMenus.hideMenus()",250);

        },

        peek : function ()
        {
            var thsInst = this;
            var mnu
            for (var t=1; t<thsInst.Max+1; t++)
            {
                var szName = "MenuItem_" + thsInst.Menus[t].szRandom ;
                var aHref = $(szName).$("A");

                // note that <div id="szStatus"></div> must exist in the DOM
                var divStatus = $("szStatus");
                divStatus.innerHTML += "<BR>\n" +
                    "aHref.id = " + aHref.parentNode.id + ", " +
                    "aHref.onclick = " + aHref.onclick;
            }
        },

        hideMenus : function ()
        {
            if (! this.menuActive)
            {
                for (var t=0; t<this.activeMenusCnt; t++)
                    this.visible (this.activeMenus [t], false);

                this.activeMenusCnt = 0;
            }
        },

        closeMenus : function (nLevel)
        {
            for (var t=nLevel-1; t<this.activeMenusCnt; t++)
                if (this.activeMenus [t] != null)
                this.visible (this.activeMenus [t], false);

            this.activeMenusCnt = nLevel -1;
        },

        visible : function (divMenu, tf)
        {
            if (divMenu == null) return;
            divMenu.style.visibility = ((tf) ? "visible" : "hidden");
        },

        onClick : function (ths) { window.alert ("clicked " + ths.parentNode.id); },

        onMouseOut : function (p) {},

        onMouseOver : function (p, nLevel)
        {
            var thsInst = this;

            // get the layer that is to be displayed

            var thsSpan = $("MenuItem_" + p.name);
            var thsDiv = p.offsetParent;

            var thsLayer = $("Menu_" + p.name);
            if (thsLayer == null) return;

            // close all other layers that may be open
            // and unnecessary

            thsInst.closeMenus(nLevel);
            thsInst.menuActive = true;

            // position the layer

            var ofx = 0;
            var ofy = 0;

            if (thsInst.activeMenusCnt > 0)
            {
                var t = thsInst.activeMenusCnt -1;
                ofx = thsInst.activeMenus [t].offsetWidth-10;
            }

            thsInst.activeMenus [nLevel-1] = thsLayer;
            thsInst.activeMenusCnt = nLevel;
            thsLayer.zIndex = nLevel;

            // Position the new Menu Layer

            var x = 0;
            var y = 0;

            x = thsSpan.offsetLeft;
            y = thsSpan.offsetTop ;
            if (nLevel == 1)
                y += thsSpan.offsetHeight - 2;

            x += thsDiv.offsetLeft;
            y += thsDiv.offsetTop; // + thsDiv.offsetHeight;

            thsLayer.style.left = x + ofx;
            thsLayer.style.top = y + ofy;
            thsLayer.style.visibility = "visible";
        }
    };