function WDF_menu (menuTitle, itemWidth, itemHeight, submenuImageName, parentMenu,
		collapsedImage, expandedImage)
{
this.menuTitle = menuTitle;
this.itemWidth = itemWidth;
this.itemHeight = itemHeight;
this.submenuImageName = submenuImageName;
this.parentMenu = parentMenu;
this.currentImage = collapsedImage;
this.collapsedImage = collapsedImage;
this.expandedImage = expandedImage;
this.mouseOutStart;
this.mouseOutFlag = false;
this.mouseOutTimer;
this.mouseOutDelay = 2000;
this.imageName = new Array ();
this.originalImage = new Array ();
this.swapImage = new Array ();
this.url = new Array ();
this.submenu = new Array ();
this.target = new Array ();

this.currentSubmenu = null;
this.submenuImage = null;

this.addMenuItem = WDF_addMenuItem;
this.expandSubmenu = WDF_expandSubmenu;
this.collapseSubmenu = WDF_collapseSubmenu;
this.showMenu = WDF_showMenu;
this.writeMenuItem = WDF_writeMenuItem;
this.writeSubmenuItem = WDF_writeSubmenuItem;
this.mouseOut = WDF_onMouseOut;
// this.mouseOver = WDF_onMouseOver;
this.startTimeout = WDF_startTimeout;
this.cancelTimeout = WDF_cancelTimeout;

if (!window.menus) window.menus = new Array ();
window.menus[this.menuTitle] = this;

}

function WDF_addMenuItem (imageName, originalImage, swapImage, url, target, submenu)
{
this.imageName[this.imageName.length] = imageName;
this.originalImage[this.originalImage.length] = originalImage;
this.swapImage[this.swapImage.length] = swapImage;
WDF_buildPreloadImageArray (originalImage, swapImage);
this.url[this.url.length] = url;
this.target[this.target.length] = target;
this.submenu[this.submenu.length] = submenu;
}

function WDF_buildPreloadImageArray ()
{
var doc = document, arg = WDF_buildPreloadImageArray.arguments;
var i;
// alert ('buildPreload: parameter count = '+arg.length);
if (!doc.preloadImageArray) doc.preloadImageArray = new Array ();
for (i = 0; i < arg.length; i++)
	{
	if (!doc.preloadImageArray[arg[i]])
		{
		doc.preloadImageArray[arg[i]] = arg[i];
		WDF_preloadImages (arg[i]);
		}
	}
}

function WDF_preloadImages() {
  var doc = document;	// shortcut to document
  if(doc.images)		// images array must exist
  	{
	if(!doc.WDF_images) doc.WDF_images = new Array();
    var argIndex, imageIndex = doc.WDF_images.length, arg = WDF_preloadImages.arguments;
	for(argIndex=0; argIndex<arg.length; argIndex++)
	  {
      if (arg[argIndex].indexOf("#")!=0)
	    {
		doc.WDF_images[imageIndex]=new Image;
		doc.WDF_images[imageIndex].src=arg[argIndex];
		}
	  }
	}
  else alert ('WDF_preloadImages: doc.images does not exist!');
}

function WDF_expandSubmenu ()
{
this.cancelTimeout ();
var currentSubmenu = this.parentMenu.currentSubmenu;
if (currentSubmenu != null && currentSubmenu != this) currentSubmenu.collapseSubmenu();
this.currentImage = this.expandedImage;
this.submenuImage.src = this.currentImage;
this.parentMenu.currentSubmenu = this;
}

function WDF_collapseSubmenu ()
{
this.currentImage = this.collapsedImage;
this.submenuImage.src = this.currentImage;
this.currentSubmenu = null;
}

function WDF_showMenu ()
{
if (this.imageName.length == 0)
	{
	alert ('WDF_showMenu: No menu items for menu '+ this.menuTitle);
	return;
	}

var d = document;
var tableStr = '<table name="'+this.menuTitle+'" width="'+this.itemWidth+' border="0" cellspacing="0" cellpadding="0">';
d.writeln (tableStr);
var width=this.itemWidth;
var i;
var imageName, originalImage, swapImage, url, target;
for (i = 0; i < this.imageName.length; i++)
	{
	if (this.submenu[i] == null)
		this.writeMenuItem (i);
	else
		this.submenu[i].writeSubmenuItem ();
	}
d.writeln ('</table>');
}

function WDF_writeMenuItem (i)
{
var d = document;
var name = ' name="'+this.imageName[i]+'"';
var href = ' href="'+this.url[i]+'"';
var target = ' target="'+this.target[i]+'"';
var out = ' onMouseOut="'+this.imageName[i]+'.src=\''+this.originalImage[i]+'\';"';
var over = ' onMouseOver="'+this.imageName[i]+'.src=\''+this.swapImage[i]+'\';"';
var src = ' src="'+this.originalImage[i]+'"';
var width = ' width="'+this.itemWidth+'"';
var anchorString = '<a'+href+target+out+over+'>'
var imageString = '<img'+name+src+width+' border=0>'
var fullString = '<tr><td>'+anchorString+imageString+'</a></td></tr>';
d.writeln (fullString);
}

function WDF_writeSubmenuItem ()
{
var d=document;
var imgName = ' name="'+this.submenuImageName+'"';
var src = ' src="'+this.collapsedImage+'"';
var width = ' width="'+this.itemWidth+'"';
var mapName = ' name="map_'+this.menuTitle+'"';
var useMap = ' usemap="#map_'+this.menuTitle+'"';
var whenClicked = ' onClick="'+this.menuTitle+'.expandSubmenu()"';
var mouseOver;
var mouseOut = ' onMouseOut="'+this.menuTitle+'.startTimeout()"';
var height = this.itemHeight;
var left, top, right, bottom;
var i, coords, href, target;
var imgStr = '<img'+imgName+src+width+useMap+' border="0">';
var mapStr = '<map'+mapName+'>';
var areaStr;

d.writeln ('<tr><td>'+imgStr+'</td>');
// alert ('d.images[this.submenuImageName]='+d.images[this.submenuImageName]);
this.submenuImage = d.images[this.submenuImageName];
// this.submenuImage = FIND (this.submenuImageName);
d.writeln (mapStr);
for (i = 0; i < this.imageName.length; i++)
	{
	left = 0;
	top = i*height;
	right = this.itemWidth;
	bottom = (i+1) * height;
	coords = ' coords="'+left+','+top+','+right+','+bottom+'"';
	if (this.url[i].length)
		href = ' href="'+this.url[i]+'"';
	else
		href = '';
	if (this.target[i].length)
		target = ' target="'+this.target[i]+'"';
	else
		target = '';	
	mouseOver = ' onMouseOver="'+this.menuTitle+'.cancelTimeout();'+this.submenuImageName+'.src=\''+this.swapImage[i]+'\'"';
	areaStr = '<area shape="rect"'+coords+href+target+mouseOver+mouseOut+whenClicked+'>';
	d.writeln (areaStr);
	}
d.writeln ('</map></tr>');
}

function WDF_cancelTimeout()
{
if (this.mouseOutTimer) clearTimeout(this.mouseOutTimer);
this.mouseOutTimer = null;
this.mouseOutFlag = false;
}

function WDF_startTimeout()
{
// alert ('Starting timer');
this.submenuImage.src = this.expandedImage;
this.mouseOutStart = new Date();
this.mouseOutFlag = true;
this.mouseOutTimer = setTimeout(this.menuTitle+'.mouseOut()', this.mouseOutDelay);
}

function WDF_onMouseOut ()
{
if (!this.mouseOutFlag) return;

var elapsed = new Date() - this.mouseOutStart;
if (elapsed < this.mouseOutDelay)
	this.mouseOutTimer = setTimeout(this.menuTitle+'.mouseOut()', this.mouseOutDelay+200-elapsed);
else
	{
	this.mouseOutFlag = false;
	this.submenuImage.src = this.currentImage;
	}
}
	

