//===========================================================================
// jnu2xmlmenu_c.asp
//
// Wrapper for multiple main menus
//
// Last updated by Henk de Jong 18-09-2001 21:00
//===========================================================================
// nu2XMLMenus, constructor
//===========================================================================
function nu2XMLMenus() {
this.aMMenu = new Array();
this.nMenuPos = null;
}
// Methods
nu2XMLMenus.prototype.init = nu2InitXMLMenu;
nu2XMLMenus.prototype.createArea = nu2CrMenuArea;
nu2XMLMenus.prototype.goto = nu2GotoMenu;
nu2XMLMenus.prototype.clrSP = nu2ClrSPM;
nu2XMLMenus.prototype.show = nu2ShowMenu;
//===========================================================================
// nu2InitXMLMenu, initialize nu2 menu system
// [sXMLMenuTag] (string) : XML Menu tag, default is NU2MENU
//===========================================================================
function nu2InitXMLMenu( sXMLMenuTag ) {
var oMenuArea, oMenu;
var oDoc = nu2MenuSys.XMLDocument;
if( typeof(sXMLMenuTag) != "string" ) sXMLMenuTag = "NU2MENU";
var oNodeList = oDoc.getElementsByTagName( sXMLMenuTag );
var bMCr = false;
// nodeName = NU2MENU / MENU / MITEM
for( var i=0; i < oNodeList.length; ++i ) {
oMenu = new nu2XMLMenu();
this.aMMenu[this.aMMenu.length] = oMenu;
oMenuArea = this.createArea( oNodeList(i).attributes );
if( !oMenuArea ) continue;
document.body.appendChild( oMenuArea );
oXMLM = oNodeList(i).childNodes;
for( var j=0; j < oXMLM.length; j++ ) {
if( oXMLM(j).nodeName != "MENU" ) continue;
oDivMenu = nu2CrMenuObj( oXMLM(j), this.aMMenu.length-1 );
//oMenu.aMenu[oMenu.aMenu.length] = oDivMenu;
oMenuArea.appendChild( oDivMenu );
bMCr = true;
}
}
if( bMCr ) this.nMenuPos = 0;
return true;
}
//===========================================================================
// nu2CrMenuArea, creates menu area
// oAtsNode (object) : attributes node from NU2MENU (xml element)
// returns (object) : area object (div)
//===========================================================================
function nu2CrMenuArea( oAtsNode ) {
var oArea = document.createElement( "DIV" );
for( var j=0; j < oAtsNode.length; j++ ) {
switch( oAtsNode(j).nodeName .toUpperCase()) {
case "ID" :
oArea.id = "_nu2ID_"+oAtsNode(j).nodeValue;
break;
case "TOP" :
oArea.style.top = oAtsNode(j).nodeValue;
break;
case "LEFT" :
oArea.style.left = oAtsNode(j).nodeValue;
break;
}
}
with( oArea.style) {
position = (top && left) ? "absolute" : "relative";
}
oArea.onmouseleave = function(){_nu2MObj.aMMenu[_nu2MObj.nMenuPos].clearSP();}
return (oArea.id)?oArea:null;
}
//===========================================================================
// nu2GotoMenu, goto main menu
// nMenuPos (number) : number of main menu
//===========================================================================
function nu2GotoMenu( nMenuPos ) {
if( nMenuPos < 0 ) return;
if( nMenuPos > (this.aMMenu.length-1) ) return;
this.nMenuPos = nMenuPos;
}
//===========================================================================
// nu2ClrSPM, clears menu stackpointer for current selected main menu
//===========================================================================
function nu2ClrSPM(){
if( this.nMenuPos < 0 ) return;
this.aMMenu[this.nMenuPos].clearSP();
}
//===========================================================================
// nu2ShowMenu, Show submenu for current selected main menu
// sParent (string) : name of parent menu
// sMenuName (string) : menu to show
// bHor( boolean) : true -> showmenu horizontal from parentmenu
// false -> showmenu vertical from parentmenu
//===========================================================================
function nu2ShowMenu( sParent, sMenuName, bHor ) {
if( this.nMenuPos < 0 ) return;
this.aMMenu[this.nMenuPos].handleSP( sParent, sMenuName, bHor );
}
//===========================================================================
// nu2XMLMenu, single menusystem (one mainmenu with sub menus)
// constructor
//===========================================================================
function nu2XMLMenu() {
this.sName = null;
this.aSMStack = new Array();
}
// Methods
nu2XMLMenu.prototype.existsMenu = nu2ExistsMenu;
nu2XMLMenu.prototype.handleSP = nu2MSP;
nu2XMLMenu.prototype.clearSP = nu2ClrMSP;
//===========================================================================
// nu2ExistsMenu, check if menu exists in menu stack
// sMenu (string) : menu name
// returns -1 -> not found
// > -1 position in stack
//===========================================================================
function nu2ExistsMenu( sMenu ) {
var aSP = this.aSMStack;
for(var i=0; i < aSP.length; i++ ) {
if( aSP[i]==sMenu ) return i;
}
return -1;
}
//===========================================================================
// nu2MSP, menu stack pointer
// is menu in stack list then removes the underlaying menus
// is menu not in stack list then add menu to stack
// sMenu (object) : menu name
// bHor( boolean) : true -> showmenu horizontal from parentmenu
// false -> showmenu vertical from parentmenu
//===========================================================================
function nu2MSP( sParent, sMenu, bHor ) {
if( !_nu2IsLoaded ) return;
// if menu exist then remove underlaying menus from stack and hide them
var nPos = this.existsMenu( "nu2s_"+sMenu );
var aSP = this.aSMStack;
var aLen = aSP.length;
var bFound = false;
if( aSP[aLen-1] != "nu2s_" + sParent ) {
var i;
for( i=0; i< aLen; i++ ) {
if( aSP[i] == "nu2s_" + sParent ) {
bFound = true;
break;
}
}
if( bFound ) {
// delete childmenus
for( var j=0; j < ((aLen - i)-1); j++ ) {
ctsDisplayDiv( aSP.pop(), 'none' );
}
}
}
if( sParent != sMenu ) {
aSP.push( "nu2s_"+sMenu );
nu2ShowSubMenu( sMenu, bHor );
}
}
//===========================================================================
// nu2ClrMSP, clears all entries from menu stack pointer
//===========================================================================
function nu2ClrMSP() {
if( !_nu2IsLoaded ) return;
var aSP = this.aSMStack;
while( aSP.length>0 ) {
ctsDisplayDiv( aSP.pop(), 'none' );
}
}
//===========================================================================
// Global functions / methods
//===========================================================================
//===========================================================================
// nu2CrMainTable, create main menu
// oMenuNode (object) : XML MENU object
// bHor (boolean) : true -> create horizontal menu
// false -> create vertical menu
// returns (string) : created html string
//===========================================================================
function nu2CrMainTable( oMenuNode, nMenuPos, bHor ) {
var sHtml = "
";
return sHtml;
}
//===========================================================================
// nu2CrMainTable, create sub menu
// oMenuNode (object) : XML MENU object
// bHor (boolean) : true -> create horizontal menu
// false -> create vertical menu
// returns (string) : created html string
//===========================================================================
function nu2CrSubTable( sMenuName, oMenuNode, nMenuPos, bHor ) {
var sHtml = "";
return sHtml;
}
//===========================================================================
// nu2CrMenuObj, creates menu object (main & sub menu)
// oMenuNode (object) : XML MENU object
// returns (object) : created menu object/element (div)
//===========================================================================
function nu2CrMenuObj( oMenuNode, nMenuPos ) {
var bHor = false;
var bIsParentMenu = false;
// create div element (menu)
oDiv = document.createElement( "DIV" );
oDiv.style.position = "absolute";
with( oDiv.style ) {
top = "0px";
left = "0px";
}
var sMenuID = null;
// read menu attributes
oAts = oMenuNode.attributes;
for( var i=0; i < oAts.length; i++ ) {
sMenuItem = oAts(i).nodeValue.toUpperCase();
switch( oAts(i).nodeName ) {
case "ID" :
sMenuID = oAts(i).nodeValue;
oDiv.id = "nu2s_" + sMenuID
break;
case "VIEW" : if( sMenuItem=="HORIZONTAL" ) bHor = true;
break;
case "NODE" : if( sMenuItem=="PARENT" ) bIsParentMenu=true;
}
}
if(!sMenuID) return null;
if( bIsParentMenu ) {
oDiv.style.display = "block";
oDiv.innerHTML = nu2CrMainTable( oMenuNode, nMenuPos, bHor );
}
else {
oDiv.style.display = "none";
oDiv.innerHTML = nu2CrSubTable( sMenuID, oMenuNode, nMenuPos, bHor );
}
return oDiv;
}
//===========================================================================
// nu2GetAreaID, Area-ID for oMenuElement
// oMenuElement (object) : Menu element, (td or tr html tag)
//===========================================================================
function nu2GetAreaID( oMenuElement ) {
var oEl = oMenuElement;
var i=0;
while( (oEl = oEl.parentElement) != null) {
if( oEl.id ) {
if( oEl.id.substr(0,7) == "_nu2ID_" ) return oEl.id;
}
}
return null;
}
//===========================================================================
// nu2ShowSubMenu, show sub menu
// sSubmenu (string) : name of submenu
// bHor( boolean) : true -> showmenu horizontal from parentmenu
// false -> showmenu vertical from parentmenu
//===========================================================================
function nu2ShowSubMenu( sSubmenu, bHor ) {
if( !_nu2IsLoaded ) return;
var oMenu = window.event.srcElement;
if( bHor ) {
oMenu = oMenu.parentElement;
if( !(oMenu && oMenu.tagName=="TR") ) return;
}
var sAreaID = nu2GetAreaID( oMenu );
if( !sAreaID ) return;
oMenuBar = document.getElementById( sAreaID );
var xpos = ctsGetOffsetLeft( oMenuBar );
var ypos = ctsGetOffsetTop( oMenuBar );
if( bHor ) {
ypos = (ctsGetOffsetTop( oMenu )-3)-ypos;
xpos = (ctsGetOffsetLeft( oMenu )+ oMenu.offsetWidth-2)-xpos;
}
else {
ypos = (ctsGetOffsetTop( oMenu ) + oMenu.offsetHeight+2)-ypos;
xpos = (ctsGetOffsetLeft( oMenu )-3)-xpos;
}
var oTbs = ctsFindObj( "nu2s_"+sSubmenu );
if( oTbs ) {
ctsSetDivPos( oTbs, xpos, ypos );
ctsDisplayDiv( "nu2s_"+sSubmenu, 'block' );
}
}
//===========================================================================
// nu2MenuOnload, initializes menu system
//===========================================================================
function nu2MenuOnload() {
_nu2IsLoaded = true;
_nu2MObj = new nu2XMLMenus();
_nu2MObj.init();
// call other onloads
_nu2MOnload();
}
var _nu2MObj = null;
var _nu2IsLoaded = false;
var _nu2MOnload = (window.onload) ? window.onload : new Function;
window.onload = nu2MenuOnload;