home *** CD-ROM | disk | FTP | other *** search
- // +------------------------------------------------------------+
- // | yx_menu Version 4 |
- // | Copyright 1999 Xin Yang yangxin@iname.com |
- // | Created 11/04/1999 Last Modified 08/27/2000 |
- // | Web Site: http://yx.webprovider.com |
- // +------------------------------------------------------------+
- // | Copyright 1999,2000 Xin Yang All Rights Reserved. |
- // +------------------------------------------------------------+
- // | For personal purpose, send me your URL and put a link back |
- // | to my web site, then you can use this script free. |
- // | |
- // | For commercial purpose, obtain quotation for referencing, |
- // | using, hosting, selling or distributing this script. |
- // | |
- // | In all cases copyright must remain intact. |
- // +------------------------------------------------------------+
-
- // Script begins
-
- var isIE4 = false;
- var isNN4 = false;
-
- var flagMenu = "M";
- var flagLink = "L";
- var flagCommand = "C";
- var flagSeparator = "S";
-
- var charWidth = 7; // character width
- var charHeight = 15; // character height
- var colorNormal = "#cccccc"; // menu pad color
- var colorHighlighted = "#ffffff"; // menu highlighted item color
- var colorTopLine = "#999999"; // separator upper line color
- var colorBottomLine = "#ffffff"; // separator lower line color
-
- var borderSize = 2;
- var marginSize = 4;
- var marginString = " ";
- var subMenuFlagSize = 4;
-
- var menuShown = -1;
- var itemOn = false;
- var nnWidth = 0, nnHeight = 0;
-
- var menuItemCount = -1;
- var menuItem = new Array();
- var menuFolderCount = -1;
- var menuFolder = new Array();
- var menuFolderSwitch = new Array();
- var menuWidth = new Array();
- var itemLayer = new Array();
- var menuLayer = new Array();
- var menuHolder = new Array();
- var menuDone = new Array();
-
- var focusIt = 0;
-
- function launchCommand(commandString) {
- eval(commandString);
- }
-
- function launchPage(pageURL) {
- document.location.assign(pageURL);
- }
-
- function getLayer(layerID) {
- return (isIE4)?document.all[layerID]:document.layers[layerID];
- }
-
- function clickMenu(menuNum,itemIndex) {
- var menuIndex = menuItem[menuNum][itemIndex].myFolder;
- var folderIndex = menuItem[menuNum][itemIndex].folder;
- var itemX = menuItem[menuNum][itemIndex].x;
- var itemY = menuItem[menuNum][itemIndex].y;
-
- var menuID = getMenu(menuNum,menuIndex,0,0);
- var theLayer = getLayer(menuID);
-
- if (menuItem[menuNum][itemIndex].type == flagMenu) {
- if (menuFolderSwitch[menuNum][folderIndex])
- hideMenu(menuNum,folderIndex)
- else
- showMenu(menuNum,folderIndex,itemX + menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize,itemY, theLayer.seDimX,theLayer.seDimY, ++focusIt);
- }
- else if (menuItem[menuNum][itemIndex].type == flagLink) {
- closeMenu(menuNum);
- launchPage(menuItem[menuNum][itemIndex].url);
- }
- else if (menuItem[menuNum][itemIndex].type == flagCommand) {
- closeMenu(menuNum);
- launchCommand(menuItem[menuNum][itemIndex].command);
- }
- }
-
- function mouseOver() {
- var menuNum = this.menuNum;
- var itemIndex = this.itemIndex;
- var menuIndex = menuItem[menuNum][itemIndex].myFolder;
- var menuLength = menuFolder[menuNum][menuIndex].length;
- var folderIndex = menuItem[menuNum][itemIndex].folder;
- var itemX = menuItem[menuNum][itemIndex].x;
- var itemY = menuItem[menuNum][itemIndex].y;
- var thisFolder = 0;
- var thisItem = 0;
-
- var menuID = getMenu(menuNum,menuIndex,0,0);
- var theLayer = getLayer(menuID);
-
- itemOn = true;
-
- if (menuItem[menuNum][itemIndex].type != flagSeparator) {
- if (isIE4) {
- this.style.backgroundColor = colorHighlighted;
- }
- else if (isNN4) {
- this.document.bgColor = colorHighlighted;
- }
- }
-
- for (var i = 0; i < menuLength; i++) {
- thisItem = menuFolder[menuNum][menuIndex][i];
-
- if (thisItem != itemIndex)
- if (menuItem[menuNum][thisItem].type == flagMenu) {
- thisFolder = menuItem[menuNum][thisItem].folder;
-
- if (menuFolderSwitch[menuNum][thisFolder])
- hideMenu(menuNum,thisFolder);
- }
- }
-
- if (menuItem[menuNum][itemIndex].type == flagMenu)
- if (!menuFolderSwitch[menuNum][folderIndex])
- showMenu(menuNum,folderIndex,itemX + menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize,itemY, theLayer.seDimX,theLayer.seDimY, ++focusIt);
-
- window.status = menuItem[menuNum][itemIndex].description;
- return true;
- }
-
- function mouseOut() {
- itemOn = false;
-
- if (isIE4)
- this.style.backgroundColor = colorNormal
- else if (isNN4)
- this.document.bgColor = colorNormal;
-
- window.status = "";
- return true;
- }
-
- function menuItemUnit() {
- this.type = "";
- this.name = "";
- this.description = "";
- this.url = "";
- this.command = "";
- this.menu = "";
- this.folder = -1;
- this.myFolder = -1;
- this.x = -1;
- this.y = -1;
- }
-
- function readMenu(menuNum,menuName) {
- var menu = eval(menuName);
- var menuLength = menu.length
- var thisFolder = ++menuFolderCount;
-
- menuFolder[menuNum][thisFolder] = new Array();
- menuFolderSwitch[menuNum][thisFolder] = false;
- menuWidth[menuNum][thisFolder] = 0;
- menuLayer[menuNum][thisFolder] = false;
- menuDone[menuNum][thisFolder] = false;
-
- for (var i = 0; i < menuLength; i++) {
- menuFolder[menuNum][thisFolder][i] = ++menuItemCount;
- itemLayer[menuNum][menuItemCount] = false;
-
- menuItem[menuNum][menuItemCount] = new menuItemUnit();
- menuItem[menuNum][menuItemCount].myFolder = thisFolder;
- menuItem[menuNum][menuItemCount].type = menu[i][0];
- menuItem[menuNum][menuItemCount].name = menu[i][1];
- menuItem[menuNum][menuItemCount].description = menu[i][2];
-
- if (menuWidth[menuNum][thisFolder] < (menuItem[menuNum][menuItemCount].name.length + marginSize))
- menuWidth[menuNum][thisFolder] = menuItem[menuNum][menuItemCount].name.length + marginSize;
-
- if (menuItem[menuNum][menuItemCount].type == flagMenu) {
- menuItem[menuNum][menuItemCount].menu = menu[i][3];
- menuItem[menuNum][menuItemCount].folder = menuFolderCount + 1;
- readMenu(menuNum,menuItem[menuNum][menuItemCount].menu);
- }
- else if (menuItem[menuNum][menuItemCount].type == flagLink) {
- menuItem[menuNum][menuItemCount].url = menu[i][3];
- }
- else if (menuItem[menuNum][menuItemCount].type == flagCommand) {
- menuItem[menuNum][menuItemCount].command = menu[i][3];
- }
- else if (menuItem[menuNum][menuItemCount].type != flagSeparator) {
- alert("Error found in " + menuName);
- }
- }
- }
-
- function getItem(menuNum,itemIndex,itemDimX,itemDimY,menuIndex) {
- var thisItem = null;
- var subMenuFlag = (menuItem[menuNum][itemIndex].type == flagMenu)?"subMenu.gif":"onePixel.gif";
- var singleQuote = "'";
- var itemID = "m" + menuNum + "i" + itemIndex + "";
- var layerString = '<div id="' + itemID + '" style="position:absolute; width:' + itemDimX + '; background-color:' + colorNormal + '; visibility:hidden;"></div>';
- var htmlString = (menuItem[menuNum][itemIndex].type == flagSeparator)?('<table width=' + itemDimX +' height=2 cellpadding=0 cellspacing=0 border=0><tr align=left valign=bottom><td bgcolor=' + colorTopLine + '><img src="onePixel.gif" width=1 height=1 border=0></td></tr><tr align=left valign=top><td bgcolor=' + colorBottomLine + '><img src="onePixel.gif" width=1 height=1 border=0></td></tr></table>'):('<table width=' + itemDimX +' height=' + itemDimY + ' cellpadding=0 cellspacing=0 border=0><tr align=left valign=middle><td nowrap><span id="menuText"><a class="menu" href="javascript:clickMenu(' + menuNum + ',' + itemIndex + ')" onMouseOver="window.status=' + singleQuote + menuItem[menuNum][itemIndex].description + singleQuote + ';return true;">' + marginString + menuItem[menuNum][itemIndex].name + marginString + '</a></span></td><td><img src="' + subMenuFlag + '" width=4 height=7 border=0 align=right></td></tr></table>');
-
- if (!itemLayer[menuNum][itemIndex]) {
- itemLayer[menuNum][itemIndex] = true;
-
- if (isIE4) {
- document.all[menuHolder[menuNum]].insertAdjacentHTML("BeforeEnd",layerString);
- thisItem = document.all[itemID];
-
- thisItem.innerHTML = htmlString;
- thisItem.style.zIndex = menuIndex * 2 + 1;
-
- thisItem.onmouseover = mouseOver;
- if (menuItem[menuNum][itemIndex].type != flagSeparator)
- thisItem.onmouseout = mouseOut;
- }
- else if (isNN4) {
- document.layers[itemID] = new Layer(itemDimX,document.layers[menuHolder[menuNum]]);
- thisItem = document.layers[itemID];
-
- thisItem.visibility = "hidden";
- thisItem.document.open();
- thisItem.document.writeln(htmlString);
- thisItem.document.close();
- thisItem.document.bgColor = colorNormal;
- thisItem.zIndex = menuIndex * 2 + 1;
-
- thisItem.onmouseover = mouseOver;
- if (menuItem[menuNum][itemIndex].type != flagSeparator)
- thisItem.onmouseout = mouseOut;
- }
-
- thisItem.itemIndex = itemIndex;
- thisItem.menuNum = menuNum;
- }
-
- return itemID;
- }
-
- function getMenu(menuNum,menuIndex,menuDimX,menuDimY) {
- var menuID = "m" + menuNum + "f" + menuIndex + "";
- var menuPadX = menuDimX + borderSize * 2;
- var menuPadY = menuDimY + borderSize * 2;
- var layerString = '<div id="' + menuID + '" style="position:absolute; width:' + menuPadX + '; visibility:hidden;"></div>';
- var htmlString = '<table width=' + menuPadX +' height=' + menuPadY + ' cellpadding=0 cellspacing=0 border=' + borderSize + '><tr align=left valign=middle><td></td></tr></table>';
- var theLayer = null;
-
- if (!menuLayer[menuNum][menuIndex]) {
- menuLayer[menuNum][menuIndex] = true;
-
- if (isIE4) {
- document.all[menuHolder[menuNum]].insertAdjacentHTML("BeforeEnd",layerString);
- theLayer = document.all[menuID];
-
- theLayer.innerHTML = htmlString;
- theLayer.style.zIndex = menuIndex * 2;
- }
- else if (isNN4) {
- document.layers[menuID] = new Layer(menuPadX,document.layers[menuHolder[menuNum]]);
- theLayer = document.layers[menuID];
-
- theLayer.visibility = "hidden";
- theLayer.zIndex = menuIndex * 2;
- theLayer.document.open();
- theLayer.document.writeln(htmlString);
- theLayer.document.close();
- }
-
- theLayer.padWidth = menuPadX;
- theLayer.padHeight = menuPadY;
- theLayer.paDimX = 0; theLayer.paDimY = 0; theLayer.seDimX = 0; theLayer.seDimY = 0;
- }
-
- return menuID;
- }
-
- function showLayer(layerID) {
- if (isIE4)
- document.all[layerID].style.visibility = "visible"
- else if (isNN4)
- document.layers[layerID].visibility = "show";
- }
-
- function hideLayer(layerID) {
- if (isIE4)
- document.all[layerID].style.visibility = "hidden"
- else if (isNN4)
- document.layers[layerID].visibility = "hidden";
- }
-
- function moveLayerTo(layerID,x,y) {
- if (isIE4) {
- document.all[layerID].style.pixelLeft = x;
- document.all[layerID].style.pixelTop = y;
- }
- else if (isNN4) {
- document.layers[layerID].left = x;
- document.layers[layerID].top = y;
- }
- }
-
- function hideMenu(menuNum,menuIndex) {
- var menuLength = menuFolder[menuNum][menuIndex].length;
- var menuID = getMenu(menuNum,menuIndex,0,0);
- var itemID = "";
- var itemIndex = 0;
-
- var theLayer = getLayer(menuID);
-
- for (var i = 0; i < menuLength; i++) {
- itemIndex = menuFolder[menuNum][menuIndex][i];
-
- if (menuItem[menuNum][itemIndex].type == flagMenu)
- if (menuFolderSwitch[menuNum][menuItem[menuNum][itemIndex].folder])
- hideMenu(menuNum,menuItem[menuNum][itemIndex].folder);
-
- itemID = getItem(menuNum,itemIndex,0,0,0);
- hideLayer(itemID);
- }
-
- hideLayer(menuID);
-
- if (isNN4) { setMenuSize(menuHolder[menuNum],theLayer.paDimX,theLayer.paDimY); }
-
- menuFolderSwitch[menuNum][menuIndex] = false;
- }
-
- function _getLeft(_holder) {
- return (_holder.offsetParent.tagName=="BODY")?(_holder.offsetLeft):(_holder.offsetLeft+_getLeft(_holder.offsetParent));
- }
-
- function _getTop(_holder) {
- return (_holder.offsetParent.tagName=="BODY")?(_holder.offsetTop):(_holder.offsetTop+_getTop(_holder.offsetParent));
- }
-
- function getLeft(_holder) {
- return (isIE4)?_getLeft(_holder):_holder.pageX;
- }
-
- function getTop(_holder) {
- return (isIE4)?_getTop(_holder):_holder.pageY;
- }
-
- function showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
- var menuLength = menuFolder[menuNum][menuIndex].length;
- var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
- var menuID = "";
- var itemID = "";
- var itemIndex = 0;
- var itemDimY = menuY;
-
- if (fCount == focusIt || fCount < 0) {
- for (var i = 0; i < menuLength; i++) {
- itemID = getItem(menuNum,menuFolder[menuNum][menuIndex][i],0,0,0);
-
- itemIndex = menuFolder[menuNum][menuIndex][i];
- menuItem[menuNum][itemIndex].x = menuX;
- menuItem[menuNum][itemIndex].y = itemDimY;
- itemDimY += (menuItem[menuNum][itemIndex].type != flagSeparator)?charHeight:2;
- moveLayerTo(itemID,menuItem[menuNum][itemIndex].x,menuItem[menuNum][itemIndex].y);
-
- showLayer(itemID);
- }
-
- menuID = getMenu(menuNum,menuIndex,0,0);
- moveLayerTo(menuID,menuX-borderSize,menuY-borderSize);
-
- if (isNN4) {
- var theLayer = document.layers[menuID];
- theLayer.paDimX = dimX; theLayer.paDimY = dimY;
- theLayer.seDimX = (dimX < menuX + borderSize + menuDimX)?(menuX + borderSize + menuDimX):dimX;
- theLayer.seDimY = (dimY < itemDimY + borderSize)?(itemDimY + borderSize):dimY;
- setMenuSize(menuHolder[menuNum],theLayer.seDimX,theLayer.seDimY);
- }
-
- showLayer(menuID);
-
- menuFolderSwitch[menuNum][menuIndex] = true;
- }
- }
-
- function showSubMenu(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
- var menuLength = menuFolder[menuNum][menuIndex].length;
- var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
- var menuID = "";
- var itemID = "";
- var theLayer = null;
- var itemIndex = 0;
- var dy=0,dx=0;
-
- var frameWidth,frameHeight,contentWidth,contentHeight,scrollX,scrollY;
-
- if (isNN4) {
- frameWidth=window.innerWidth; frameHeight=window.innerHeight;
- contentWidth=(frameHeight<window.document.height)?(frameWidth-20):frameWidth;
- contentHeight=(frameWidth<window.document.width)?(frameHeight-20):frameHeight;
- scrollX=window.pageXOffset;
- scrollY=window.pageYOffset;
- }
- else {
- contentWidth=window.document.body.clientWidth;
- contentHeight=window.document.body.clientHeight;
- scrollX=window.document.body.scrollLeft;
- scrollY=window.document.body.scrollTop;
- }
-
- menuID = getMenu(menuNum,menuIndex,0,0);
- theLayer = getLayer(menuID);
-
- var padLeft=getLeft(theLayer);
- var padRight=padLeft+theLayer.padWidth;
- var padTop=getTop(theLayer);
- var padBottom=padTop+theLayer.padHeight;
-
- if (padBottom-scrollY>contentHeight) {
- dy=contentHeight+scrollY-padBottom;
- if (padTop+dy<scrollY) { dy=scrollY-padTop; }
- }
-
- if (padRight-scrollX>contentWidth) {
- dx=contentWidth+scrollX-padRight;
- if (padLeft+dx<scrollX) { dx=scrollX-padLeft; }
- }
-
- if (dy != 0 || dx != 0) {
- menuX += dx; menuY += dy;
- if (menuX < borderSize) { menuX = borderSize; }
- if (menuY < borderSize) { menuY = borderSize; }
- }
-
- showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount);
- }
-
- function showMenu(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount) {
- var itemDimY = menuY;
- var menuLength = menuFolder[menuNum][menuIndex].length;
- var menuDimX = menuWidth[menuNum][menuIndex] * charWidth + subMenuFlagSize;
- var menuID = "";
- var itemID = "";
- var itemIndex = 0;
-
- if (menuShown != -1 && menuShown != menuNum)
- hideMenu(menuShown,0);
-
- menuShown = menuNum;
-
- if (!menuDone[menuNum][menuIndex]) {
- menuDone[menuNum][menuIndex] = true;
-
- for (var i = 0; i < menuLength; i++) {
- itemIndex = menuFolder[menuNum][menuIndex][i];
- itemDimY += (menuItem[menuNum][itemIndex].type != flagSeparator)?charHeight:2;
- itemID = getItem(menuNum,itemIndex,menuDimX,charHeight,menuIndex);
- }
- menuID = getMenu(menuNum,menuIndex,menuDimX,itemDimY-menuY);
- }
-
- if (menuIndex != 0) {
- menuID = getMenu(menuNum,menuIndex,0,0);
- moveLayerTo(menuID,menuX-borderSize,menuY-borderSize);
- setTimeout(("showSubMenu("+menuNum+","+menuIndex+","+menuX+","+menuY+","+dimX+","+dimY+","+fCount+")"),0);
- return;
- }
- else {
- showX(menuNum,menuIndex,menuX,menuY,dimX,dimY,fCount);
- }
- }
-
- function setMenuSize(menuHolderID,menuDimX,menuDimY) {
- document.layers[menuHolderID].clip.width=menuDimX;
- document.layers[menuHolderID].clip.height=menuDimY;
- }
-
- function buildMenu(menuArrayName) {
- isIE4 = document.all;
- isNN4 = document.layers;
-
- var menuArray = eval(menuArrayName);
- var menuCount = menuArray.length;
- var menuSizeX = 0;
- var menuSizeY = 0;
-
- if (isIE4 || isNN4) {
- for (var i = 0; i < menuCount; i++) {
- menuItemCount = -1;
- menuFolderCount = -1;
-
- menuItem[i] = new Array();
- menuFolder[i] = new Array();
- menuFolderSwitch[i] = new Array();
- menuWidth[i] = new Array();
-
- itemLayer[i] = new Array();
- menuLayer[i] = new Array();
- menuDone[i] = new Array();
-
- menuHolder[i] = menuArray[i][1];
-
- readMenu(i,menuArray[i][0]);
- }
-
- if (isNN4) {
- nnWidth = window.innerWidth;
- nnHeight = window.innerHeight;
- window.onResize = reloadMenu;
- }
-
- captureClick();
- }
- }
-
- function switchMenu() {
- if (!itemOn)
- if (menuShown != -1)
- closeMenu(menuShown);
-
- return true;
- }
-
- function captureClick() {
- if (isIE4)
- document.onclick = switchMenu;
- else {
- document.onClick = switchMenu;
- document.captureEvents(Event.CLICK);
- }
- }
-
- function reloadMenu() {
- if (nnWidth != window.innerWidth || nnHeight != window.innerHeight)
- document.location.reload();
- }
-
- function overMenu(menuNum) {
- itemOn = true;
-
- if (menuShown != -1 && menuShown != menuNum)
- openMenu(menuNum);
- }
-
- function outMenu(menuNum) {
- itemOn = false;
- }
-
- function openMenu(menuNum) {
- if (menuShown == menuNum)
- closeMenu(menuNum)
- else
- showMenu(menuNum,0,borderSize,borderSize,0,0, -1);
- }
-
- function closeMenu(menuNum) {
- menuShown = -1;
- hideMenu(menuNum,0);
- }
-
- // Script ends