/*
Written by Nathan Wilkes, Saraden Studios
All rights reserved
Copyright (c) 2002
nathan@saraden.co.nz
*/
menuImageNone = 0;
menuImageIcon = 1;
menuImageFull = 2;
menuDivsDirty = new Array();
menuSpacers = 0;
menuNavWidth = 0;
function menuObjMenu (theClass)
{
this.CSSClass = theClass;
this.DisplayDiv = null;
this.Children = new Array();
this.AddChild = function AddChild (childobj)
{
var theIDX;
theIDX = this.Children.length;
this.Children[theIDX] = childobj;
return childobj;
}
}
function menuObjItem (theImage, imagemouseover, imagewidth, imageheight, theImageType, theText, theURL, theMenuObj)
{
this.Image = theImage;
this.ImageMouseover = imagemouseover;
this.ImageWidth = imagewidth
this.ImageHeight = imageheight;
this.ImageType = theImageType;
this.Text = theText;
this.URL = theURL;
this.PopupMenu = theMenuObj;
}
function menuDefine (baseclass)//, menuitem1(p=1)...
{
var theObj, x;
theObj = new menuObjMenu (baseclass);
for (x = 1; x < arguments.length; x++)
theObj.AddChild (arguments[x]);
return theObj;
}
function menuItem (image, imagemouseover, imagewidth, imageheight, imagetype, text, url, menuobj)
{
return new menuObjItem (image, imagemouseover, imagewidth, imageheight, imagetype, text, url, menuobj);
}
function menuCountChildren (obj)
{
var fChildren = false, iCount = 0, iTempCount = 0, x;
for (x = 0; x < obj.Children.length; x++)
{
if (obj.Children[x].PopupMenu != null)
{
fChildren = true;
iTempCount = menuCountChildren (obj.Children[x].PopupMenu);
if (iTempCount > iCount) iCount = iTempCount;
}
}
return fChildren?iCount+1:iCount;
}
function menuSetImage (imageid, image)
{
if (document.getElementById)
document.getElementById(imageid).src = image;
else if (eval ("document."+imageid))
eval ("document."+imageid+".src = '"+image+"'");
}
function DrawNavigation (NavWidth)
{
var x, ImagesWidth, aFlag, moverextra, moutextra;
for (x = 0; x < menuMaxLevels; x++)
menuDivsDirty[x] = false;
//work out how big the spacers need to be
menuNavWidth = NavWidth;
ImagesWidth = 0;
for (x = 0; x < menu_RootObject.Children.length; x++)
ImagesWidth += menu_RootObject.Children[x].ImageWidth;
menuSpacers = Math.round((NavWidth-ImagesWidth) / (menu_RootObject.Children.length+1));
//Draw the nav images and tags in
for (x = 0; x < menu_RootObject.Children.length; x++)
{
if (menuSpacers > 0) document.write ("
");
aFlag = false;
if (menu_RootObject.Children[x].URL != null) aFlag = true;
if (menu_RootObject.Children[x].PopupMenu != null) aFlag = true;
if (menu_RootObject.Children[x].ImageMouseover != null) aFlag = true;
if (aFlag)
{
moverextra = ""; moutextra = "";
if (menu_RootObject.Children[x].ImageMouseover != null)
{
moverextra = "menuSetImage ('menuimgroot"+x+"', '"+menu_RootObject.Children[x].ImageMouseover+"');";
moutextra = "menuSetImage ('menuimgroot"+x+"', '"+menu_RootObject.Children[x].Image+"');";
}
document.write ("");
}
document.write ("");
if (aFlag) document.write ("");
}
}
function setZIndex (styleobj)
{
var high;
high = 20;
if (document.getElementById)
{
var aDivs = document.getElementsByTagName("DIV");
for (var x = 0; x < aDivs.length; x++)
if (aDivs[x].style.zIndex > high) high = aDivs[x].style.zIndex;
}
else
{
for (var x = 0; x < document.layers.length; x++)
if (document.layers[x].zIndex > high) high = document.layers[x].zIndex;
}
styleobj.zIndex = high+1;
}
function GetMenuWidth (menuobj)
{
var iIdx = menuobj.DisplayDiv;
var tobj;
if (document.getElementById) tobj = document.getElementById("menuLayer"+iIdx);
else if (document.layers) tobj = document.layers["menuLayer"+iIdx];
if (tobj)
{
if (document.getElementById) return Number(tobj.offsetWidth);
else if (document.layers) return Number(tobj.document.width);
}
else return 0;
}
function menuDrawPopup (parent, child)
{
var x, layIDX, pObj, cObj, mObj, sContent, iLayX, iLayY, rObj, rChild, pPath;
var sWidth, flag, tobj, cutidx, tmpstr, pcut, iChildNum;
//Get objects
pObj = eval(parent);
cObj = eval(parent+"."+child);
mObj = eval(parent+"."+child+".PopupMenu");
//Check for allready open state
if (mObj.DisplayDiv != null)
{
if (document.getElementById) tobj = document.getElementById("menuLayer"+mObj.DisplayDiv);
else if (document.layers) tobj = document.layers["menuLayer"+mObj.DisplayDiv];
tobj.onmouseover();
return;
}
//Get free layer.
layIDX = -1;
for (x = 0; x < menuMaxLevels; x++)
if (!menuDivsDirty[x])
{
menuDivsDirty[x] = true;
layIDX = x;
break;
}
//No free layers - see if there is one marked as closing we can destroy
if (layIDX == -1)
for (x = 0; x < menuMaxLevels; x++)
{
if (document.getElementById) tobj = document.getElementById("menuLayer"+x);
else if (document.layers) tobj = document.layers["menuLayer"+x];
if (tobj.menuTimerID != null)
{
menuClosePopup (tobj.parentref, tobj.childref, true);
menuDivsDirty[x] = true;
layIDX = x;
break;
}
}
if (layIDX == -1) return;
mObj.DisplayDiv = layIDX;
//build content
sContent = "
"
for (x = 0; x < mObj.Children.length; x++)
{
flag = false;
if (mObj.Children[x].PopupMenu != null) flag = true;
tags = "onMouseOver=\"menuDrawPopup('"+parent+"."+child+".PopupMenu', 'Children["+x+"]');\" onMouseOut=\"menuClosePopup ('"+parent+"."+child+".PopupMenu', 'Children["+x+"]');\"";
if (flag)
sContent = sContent + "
" } sContent = sContent +" | "
+"||||||