var PulldownMenus = {
    closeDelay: 50,
    closeTimer: new Object(), 

    ShowDropDownMenu: function(sourceElem, menuElemID) {
	    // Clear the close timeout
	    if (PulldownMenus.closeTimer[menuElemID]) clearTimeout(PulldownMenus.closeTimer[menuElemID]);
	    // Reset the menu first, just to be safe
	    PulldownMenus.HideDropDownMenu(sourceElem, menuElemID);
    	
	    var menuElem = Get(menuElemID);

	    // Position the menu
	    menuElem.style.left = (findPosX(sourceElem) - 7) + "px";
	    menuElem.style.top  = (findPosY(sourceElem) + sourceElem.offsetHeight) + "px";
    	
	    // Show the menu
	    menuElem.style.display = "block";
	    menuElem.style.zIndex = 10000;
	    
	    // Highlight the active link
	    sourceElem.className = "open-menu";
    	
	    menuElem = null;
    }, 

    HideDropDownMenu: function(sourceElem, menuElemID) {
	    // Clear the close timeout
	    clearTimeout(PulldownMenus.closeTimer[menuElemID]);

	    // Hide the menu
	    Get(menuElemID).style.display = "none";
	    
	    // Un-highlight the active link
	    sourceElem.className = "closed-menu";
    }, 

    CloseDropDownMenu: function(sourceElem, menuElemID) {
	    PulldownMenus.closeTimer[menuElemID] = setTimeout(function() { PulldownMenus.HideDropDownMenu(sourceElem, menuElemID); }, PulldownMenus.closeDelay);
    }, 

    MouseOverMenu: function(menuElemID) {
	    // Clear the close timeout
	    clearTimeout(PulldownMenus.closeTimer[menuElemID]);
    }
};

function Get(o) { return document.getElementById(o); }

function findPosX(obj)
{
	var curleft = 0;
	if(obj.offsetParent)
		while(1)
		{
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	else if(obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if(obj.offsetParent)
		while(1)
		{
			curtop += obj.offsetTop;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	else if(obj.y)
		curtop += obj.y;
	return curtop;
}