
var alignLeft   = 1 ;
var alignCenter = 2 ;
var alignRight  = 3 ;

var cancelID = new Array() ;
var aMenuItems = new Array() ;


function menuItem (id, pid, title, url, target, isEmail, showLink)
{
	this.id       = id ;
	this.parentid = pid ;
	this.title    = title ;
	this.url      = url ;
	this.target   = target ;
	this.isEmail  = isEmail ;
	this.showLink = showLink ;
}



function buildMenu (pid, lvl)
{
	var mnu = "" ;
	var i;
	var isFirst = true ;
	var trgt ;
	var sLink ;
	
	mnu = "<table class=\"cssMenu" + lvl + "\"  " + GetMouseOverOut(lvl, true) + " cellspacing=\"0\" cellpadding=\"0\">" ;
	
	for (i=0; i<aMenuItems.length; i++)
	{
		if (aMenuItems[i].parentid == pid)
		{
		    // Draw a spacer
			if (! isFirst)
				mnu += "<tr " + GetMouseOverOut(lvl, true) + "><td colspan=\"2\"><div style=\"border-top:1px solid #000000;\"></div></td></tr>" ;
			
			
			// Set URL/Link based on type
			if (aMenuItems[i].showLink)
			{
			    if (aMenuItems[i].isEmail)
				    sLink = "mailto:" + aMenuItems[i].url ;
			    else
			    {
				    sLink = aMenuItems[i].url ;
			        if (aMenuItems[i].target != '')
				        sLink += "\" target=\"" + aMenuItems[i].target + "\"" ;
			    }
    			
			    sLink = "<a href=\"" + sLink + "\" onclick=\"closeAllMenus();\">" + aMenuItems[i].title + "</a>" ;
	        }
	        else
	        {
	            sLink = "<span style=\"color:#FFFFFF;\">" + aMenuItems[i].title + "</span>" ;
	        }


			if (HasChildren(aMenuItems[i].id))
		        mnu += "<tr " + GetMouseOverOut(lvl, false) + "><td><div id=\"td" + aMenuItems[i].id + "top\"></div><div style=\"padding-left:5px; padding-top:2px; padding-bottom:2px;\">" + sLink + "<div id=\"td" + aMenuItems[i].id + "\"></div></div></td><td  " + GetMouseOverOut(lvl+1, true) + " ><div onmouseover=\"openMenu(" + (lvl+1) + "," + aMenuItems[i].id + ", alignLeft);\" ><img src=\"" + sDomain + "/specialtyconference/images/arrow.gif\"></div></td></tr>" ;
			else
		        mnu += "<tr " + GetMouseOverOut(lvl, false) + "><td colspan=\"2\"><div id=\"td" + aMenuItems[i].id + "top\"></div><div style=\"padding-left:5px; padding-top:2px; padding-bottom:2px;\">" + sLink + "</div></td></tr>" ;		


			isFirst = false ;
		}
	}

	mnu += "</table>" ;
	
	return mnu ;
}



function GetMouseOverOut(lvl, hasChildren)
{
    var mouseOverOut = "" ;
    var mouseOver = "" ;
    var mouseOut = "" ;
    
            
    for (i=1; i<=lvl; i++)
    {
        mouseOver += " cancelTimer(" + i + "); " ;
        mouseOut  += " closeTimer(" + i + "); " ;
    }

    mouseOverOut = " onmouseover=\" " + mouseOver + " \" onmouseout=\" " + mouseOut + " \" " ;        

    return mouseOverOut ;
}



function HasChildren(pID)
{
	for (i=0; i<aMenuItems.length; i++)
	{
		if (aMenuItems[i].parentid == pID)
		   return true;
	}
	return false ;
}



function openMenu(mnuLevel, id, algn)
{
	var div = document.getElementById("divMenu" + mnuLevel) ;
var divInner = document.getElementById("divMenu" + mnuLevel + "Inner") ;	
	var td  = document.getElementById("td" + id) ;
	var xPos ;
	var yPos ;
	
		
	if (mnuLevel == 1)
	    cancelTimer() ;
	    
	    	
	xPos = findPosX(td) ;
	yPos = findPosY(td) ;
	

	// Modify the xPos based on orientation (align-left, center, or right)
	// Note: this is hardcoded to the current fixed width of the dropdown menu
	switch (algn)
	{
		case alignLeft:
			// Don't do anything
			xPos += (td.width - 28) ;
			//xPos = xPos ;
			break;
			
		case alignRight:
			xPos += (td.width - 150) ;
			break;

		case alignCenter:
			xPos += ((td.width - 150)/2) ;
			break;
	}
	
	//div.innerHTML = buildMenu(id, mnuLevel) ;
    divInner.innerHTML = buildMenu(id, mnuLevel) ;

	div.style.position = "absolute" ;


	if (mnuLevel == 1)
	{
	    div.style.left = xPos + 1 + "px" ;	 	    
        div.style.top  = findPosY(document.getElementById("td" + id + "bottom")) + 3  + "px" ;
	}
	else
	{
	    //div.style.left = xPos + 134 ;
	    div.style.left = xPos + 194  + "px" ;
        div.style.top  = findPosY(document.getElementById("td" + id + "top")) + 0 + "px"  ;
	}
	
	div.style.display = "block" ;
}




function cancelItem (cid, lid)
{
	this.cancelid = cid ;
	this.levelid  = lid ;
}


function closeTimer(mnuLevel)
{
	var cid ;

	cid = setTimeout("closeMenu(" + mnuLevel + ");", 500) ;
	
	cancelID.push(new cancelItem(cid, mnuLevel)) ;
}


function cancelTimer(lid)
{
    clearTimeouts(lid) ;
}


function closeMenu(mnuLevel)
{
	var div = document.getElementById("divMenu" + mnuLevel) ;
	div.style.display = "none" ;

    clearTimeouts(mnuLevel) ;
}


function clearTimeouts(lvl)
{
    for(i=0; i<cancelID.length; i++)
    {
        if (cancelID[i].levelid == lvl)
        {
            clearTimeout(cancelID[i].cancelid) ;
            cancelID.splice(i,1) ;
            i-- ;
        }
    }	

}



function closeAllMenus()
{
    closeMenu(4);
    closeMenu(3);
    closeMenu(2);
    closeMenu(1);
}



/*
The following functions come from: http://www.quirksmode.org/js/findpos.html
*/
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function genericPopup(href, width, height, scrollbars){ 
var param = "width="+width+", height="+height+", scrollbars="+scrollbars+", resizable, status";

window.open(href, "", param)
return false; 
}



