var submenu     = new Array();
var tmr         = new Array();
var adj         = new Array();
var last_zIndex = 10000;
var lastOverId  = '';


// EXAMPLE CONFIG
var alignSubmenu 	= 'bottom';		//bottom or right side of the main button.
var useLastItemCSS	= true;			//generate last menu item too
									//if false, it will behave as a normal item
									//and the css menuItemLast class will not be used
var adjustFirst		= false;		//overlap the first submenu too?
var adjustTop		= 0;			//move the submenu's some pixels. Positive number (10) for down, negative (-10) for up.
var adjustLeft		= 0;			//move the submenu's some pixels. Positive number (10) for right, negative (-10) for left.

/*
//fisrt submenu tree
submenu['menu1'] = new Array();
submenu['menu1'][0] = menuItem('my own website','http://www.daantje.nl','_top');
submenu['menu1'][1] = menuItem('other sites');
	submenu['menu1_1'] = new Array();
	submenu['menu1_1'][0] = menuItem('google','http://www.google.nl','demoFrame');
	submenu['menu1_1'][1] = menuItem('/.','http://www.slashdot.org','demoFrame');
	submenu['menu1_1'][2] = menuItem('Open in _BLANK:');
		submenu['menu1_1_2'] = new Array();
		submenu['menu1_1_2'][0] = menuItem('check test','http://www.google.nl','_blank');
		submenu['menu1_1_2'][1] = menuItem('test again','http://www.slashdot.org','_blank');
submenu['menu1'][2] = menuItem('This should be the last one');

//second submenu tree
submenu['menu2'] = new Array();
submenu['menu2'][0] = menuItem('project 1','http://www.daantje.nl','_self');
submenu['menu2'][1] = menuItem('project 2');
*/

// END OF EXAMPLE CONFIG


//build or unhide submenu div...
function buildSubmenu(obj)
{
    lastOverId = obj.id;

    // get common part of div id
    menuPath = obj.id.split('_');

    // unset mousout of parent menus and make sure they are visible...
    x = "div";
    for(i = 0; i < menuPath.length; i++)
    {
        x+= '_' + menuPath[i];
        if(document.getElementById(x))
        {
            if(tmr[x])
                window.clearTimeout(tmr[x]);
            document.getElementById(x).style.visibility = 'visible';
        }
    }

    // check if we have a submenu of the obj...
    if(submenu[obj.id])
    {
        // calc position of mouseover
        d = obj;
        if(d)
        {
			L_pos = d.offsetLeft + d.offsetWidth;
			T_pos = d.offsetTop;
			while(d.offsetParent)
			{
				d      = d.offsetParent;
				L_pos += d.offsetLeft;
				T_pos += d.offsetTop;
			}
		}

		// patch first submenu to go right below the main buttons...
		if(obj.className.indexOf('menuItem') < 0 && alignSubmenu == 'bottom')
		{
			L_pos -= obj.offsetWidth;
			T_pos += obj.offsetHeight;
		}

		// move the submenu (overlap?)
		if((adjustTop || adjustLeft) && (adjustFirst || (!adjustFirst && obj.className.indexOf('menuItem') >= 0)))
		{
			L_pos += adjustLeft;
			T_pos += adjustTop;
		}

		// Only parse when position is higher than 0,0... Else we dont have the right position!
		if(L_pos > 0 && T_pos >0)
		{
			// check if allready build...
			c = document.getElementById('div_' + obj.id);
			if(c)
			{
				// unhide...
				c.style.visibility = 'visible';
				c.style.zIndex     = last_zIndex++;

				// hard replace
				c.style.top  = (T_pos - 1) + "px";
				c.style.left = (L_pos - 1) + "px";
			}
			else {
				// build new div
				subObj                = document.createElement('div');
				subObj.id             = 'div_' + obj.id;
				subObj.className      = 'submenu';
				subObj.style.position = 'absolute';
				subObj.style.zIndex   = last_zIndex++;
				subObj.style.top      = (T_pos - 1) + "px";
				subObj.style.left     = (L_pos - 1) + "px";

				// write div to the body...
				document.getElementsByTagName('body')[0].appendChild(subObj);

				// build html for submenu
				content = "";
				m = submenu[obj.id];
				for(i = 0; i < m.length; i++)
				{
					// determine target for onclick...
					if(m[i][1])
					{
						if(m[i][1].substring(0,11) == 'javascript:')
						{
							act = m[i][1].substring(11);
						}
						else {
							if(!m[i][2] || m[i][2] == '_self')
								act = "self.location.href='" + m[i][1] + "';";
							else if(m[i][2] == '_top')
								act = "top.location.href='" + m[i][1] + "';";
							else if(m[i][2] == '_parent')
								act = "parent.location.href='" + m[i][1] + "';";
							else if(m[i][2] == '_blank')
								act = "window.open('" + m[i][1] + "');";
							else
								act = "window.frames['"+m[i][2]+"'].location.href='" + m[i][1] + "';";
						}
					}

					// make item
					content += "<div onmouseout=\"hideSubmenu(this)\" onmouseover=\"buildSubmenu(this)\" "+ (m[i][1] ? "onclick=\""+ act + "\" " : "") +"class=menuItem" + (i==0 ? 'First' : (i==(m.length -1) && useLastItemCSS ? 'Last' : '')) + " id=\"" + obj.id + "_" + i +"\">" + m[i][0] + "</div>";
					adj[i] = obj.id + "_" + i;
				}

				// insert new menu
				subObj.innerHTML = content;
			}
		}
	}
}

// hide a submebu div
function hideSubmenu(obj)
{
	// get common part of div id
	closePath = obj.id.split('_');

	// hide path
	x = "div";
	for(i = 0; i < closePath.length; i++)
	{
		x += '_' + closePath[i];
		if(document.getElementById(x))
			tmr[x] = window.setTimeout("document.getElementById('"+x+"').style.visibility = 'hidden';",500);
		// The timeout above is needed for MSIE browsers... Or else the menu's will disapear on EVERY mousout!
		// Please get a normal browser like Firefox, Mozilla or Opera. :-(
	}
}

// add an menu item to the config array (called in the config lines)
function menuItem(txt, url, tar)
{
	return new Array(txt, url, tar);
}

//change div's on mouse over and out...
document.onmouseover = function(e)
                       {
	                       obj = document.all ? event.srcElement : e.target;
	                       if(obj.className == 'menuItemFirst' || obj.className == 'menuItem' || obj.className == 'menuItemLast')
		                       obj.className+='Over';
                       }
                       
document.onmouseout = function(e)
                      {
	                      obj = document.all ? event.srcElement : e.target;
	                      if(obj.className == 'menuItemFirstOver' || obj.className == 'menuItemOver' || obj.className == 'menuItemLastOver')
		                      obj.className = obj.className.substring(0,(obj.className.length - 4));
                      }

// *** Patch for firefox bug with focus on mouseover...
//	This function should be called onMouseOver of every iFrame that's under the menu structure.
function iFramePatch()
{
	if(!document.all && lastOverId)
		hideSubmenu(document.getElementById(lastOverId));
}

