document.onmouseover = autoClear;
document.onclick = hideAllMenus;
window.onload = initializeHacks;
window.onerror = null;

var timeOn = null;
var activeMenu = null;
var offsetArrayX = new Array;
var offsetArrayY = new Array;
var CrossBrowserMenus_InitalizationFunctions = new Array;


var numMenus = DDMMenuCount;
if(numMenus == null)
	numMenus = 0;

function autoClear()
{
	if(!document.getElementById) 
		return;
		
	menuActive = 0;
	
	if(timeOn == null)
		timeOn = setTimeout("hideAllMenus()", 400);

	
}

function menuOver() {
	if(!document.getElementById) 
		return;
		
	clearTimeout(timeOn)
	timeOn = null;
	menuActive = 1;
}

function menuOut() {
 	if(!document.getElementById) 
		return;
	
	
	if(timeOn == null)
		{
			timeOn = setTimeout("hideAllMenus()", 400);			
		}
	
	
}



function getStyleObject(objectId) {
    // cross-browser function to get an object's style object given its id
    if(document.getElementById && document.getElementById(objectId)) {
		// W3C DOM
		return document.getElementById(objectId).style;
    } else if (document.all && document.all(objectId)) {
		// MSIE 4 DOM
		return document.all(objectId).style;
    } else if (document.layers && document.layers[objectId]) {
		// NN 4 DOM.. note: this won't find nested layers
		return document.layers[objectId];
    } else {
		return false;
    }
}

// get a reference to the cross-browser style object and make sure the object exists
function changeObjectVisibility(objectId, newVisibility) {
     
    var styleObject = getStyleObject(objectId);
   
    if(styleObject) 
    {
		styleObject.visibility = newVisibility;
		return true;
    } 
    else 
    {
		return false;
		
    }
}

function getOffsetX(element, menuNumber)
{
	return(element.offsetLeft + getParentOffsetX(element.offsetParent) - element.offsetParent.offsetLeft);
	
	/* caching, not needed right now...
	if(offsetArrayX[menuNumber] == null)
	{
		offsetArrayX[menuNumber] = element.offsetLeft + getParentOffsetX(element.offsetParent) - element.offsetParent.offsetLeft;
	}	
	
	return(offsetArrayX[menuNumber]);	
	*/
}

function getParentOffsetX(element)
{
	if(element.offsetParent != null)
		return(element.offsetLeft + getParentOffsetX(element.offsetParent));
	else
		return(0);
}

function getOffsetY(element, menuNumber)
{
	return(element.offsetHeight + element.offsetTop + getParentOffsetY(element.offsetParent));
	
	/* Caching, not needed right now...
	if(offsetArrayY[menuNumber] == null)
	{
		offsetArrayY[menuNumber] = element.offsetHeight + element.offsetTop + getParentOffsetY(element.offsetParent);
		//alert("set: " + offsetArrayY[menuNumber]);
	}
	else
	{
		//alert("get: " + offsetArrayY[menuNumber]);
	}
	
	return(offsetArrayY[menuNumber]);
	*/
}

function getParentOffsetY(element)
{
	if(element.offsetParent != null)
		return(element.offsetTop + getParentOffsetY(element.offsetParent));
	else
		return(0);
}

function showMenu(menuNumber, eventObj, labelID) {
	
	//alert(menuNumber + " " + labelID);
	
	if(document.getElementById == null)
		return;
		
	activeMenu = document.getElementById('menu_' + menuNumber);

	if(activeMenu == null || document.getElementById('menu_' + menuNumber).style.visibility != "hidden")
		return;
		
	clearTimeout(timeOn);
	timeOn = null;
        hideAllMenus(menuNumber);
    
	

	//alert(document.getElementById('anchor' + menuNumber).offsetParent);
	//alert(document.getElementById('anchor' + menuNumber).offsetParent.offsetLeft);
	
	//alert(getOffsetX(document.getElementById('anchor' + menuNumber)));
	
	//document.getElementById('DDMMenu_' + menuNumber).style.top = document.getElementById('anchor' + menuNumber)offsetParent.offsetTop;
	//document.getElementById('DDMMenu_' + menuNumber).style.left = document.getElementById('anchor' + menuNumber).offsetParent.offsetLeft;
	

	//Set Pull Down Menu Location
	document.getElementById('menu_' + menuNumber).style.left = getOffsetX(document.getElementById(labelID)) + 98;
	document.getElementById('menu_' + menuNumber).style.top = getOffsetY(document.getElementById(labelID)) - 27;
	
	//alert(document.getElementById('DDMAnchor_' + menuNumber).offsetWidth + " " + document.getElementById('DDMAnchor_' + menuNumber).offsetLeft);
	
	//-orginal document.getElementById('menu_' + menuNumber).style.top = 0;
	//-orignial document.getElementById('menu_' + menuNumber).style.left = 0;
	
	//if(offsetArrayY[menuNumber] == null)
	//{
		//document.getElementById('menu_' + menuNumber).style.left = getOffsetX(document.getElementById('Anchor_menu_' + menuNumber), menuNumber);
		//document.getElementById('menu_' + menuNumber).style.top = getOffsetY(document.getElementById('Anchor_menu_' + menuNumber), menuNumber);
	//}
	
	eventObj.cancelBubble = true;
	
	//hideSelect();
	
    var menuId = 'menu_' + menuNumber;
    
    if(changeObjectVisibility(menuId, 'visible')) {
		return true;
    } else {
		return false;
    }
}


function hideAllMenus(menuNumber) {

	//if(activeMenu == null)
	//	return;
		
    for(counter = 1; counter <= numMenus; counter++) 
    {
		if(counter != menuNumber)
			changeObjectVisibility('menu_' + counter, 'hidden');
    }

    
    //Inactivate all Rollovers if no menu is active
    if (menuNumber == null)
	inactivateALL();			
        
   
// if(activeMenu != null)
		showSelect();
    
    //activeMenu = null;
}


// Sets up all the browser compatibility hacks.
function initializeHacks() 
{	
    // this ugly little hack resizes a blank div to make sure you can click
    // anywhere in the window for Mac MSIE 5
    if ((navigator.appVersion.indexOf('MSIE 5') != -1) 
		&& (navigator.platform.indexOf('Mac') != -1)
		&& getStyleObject('blankDiv'))
	{
		window.onresize = explorerMacResizeFix;
    }
    resizeBlankDiv();
    
    // this next function creates a placeholder object for older browsers
    createFakeEventObj();
    
    // Mark the DDM code as ready to run.
    DDM_IsLoaded = true;
    
    // Run any other module's initialization functions.
    CrossBrowserMenus_ExecuteInitializationFunctions();
}

// create a fake event object for older browsers to avoid errors in function call
// when we need to pass the event object to functions
function createFakeEventObj() 
{
    if (!window.event)
		window.event = false;
}

 // resize blank placeholder div so IE 5 on mac will get all clicks in window
function resizeBlankDiv() {
   
    if ((navigator.appVersion.indexOf('MSIE 5') != -1) 
		&& (navigator.platform.indexOf('Mac') != -1)
		&& getStyleObject('blankDiv')) 
	{
		getStyleObject('blankDiv').width = document.body.clientWidth - 20;
		getStyleObject('blankDiv').height = document.body.clientHeight - 20;
    }
}

// Whenever the browser is resized on mac 5.0, then cause the current
// page to reload so that mouse events are trapped properly.
function explorerMacResizeFix () {
    location.reload(false);
}


//show dropdown when menu is hidden
// This so that divs will appear above select controls 
function showSelect()
{
	var obj;
	
	if(document.all)
	{
		for(var i = 0; i < document.all.tags("select").length; i++)
		{
			obj = document.all.tags("select")[i];
			//alert(obj.id);
			if(!obj || !obj.offsetParent)
				continue;
			obj.style.visibility = 'visible';
		}
	}
}

//hide dropdown so menu can cover it when menu is visible
function hideSelect()
{
	var obj;
	var currentEle;
	var top = 0;
	var left = 0;
	var menuHeight;
	var timeout;
	
	if(document.all)
	{
		for(var i = 0; i < document.all.tags("select").length; i++)
		{
			//alert(document.all.tags("select")[i]);
			obj = document.all.tags("select")[i];
			currentEle = obj;
		
			while(currentEle.tagName.toLowerCase() != 'body')
			{
				top += currentEle.offsetTop;
				left += currentEle.offsetLeft;
				currentEle = currentEle.offsetParent;
			}
			if(activeMenu != null)
			{
				menuHeight = (activeMenu.offsetTop + activeMenu.offsetHeight);
				
				if(top < menuHeight)
				{			
					if((left < (activeMenu.offsetLeft + activeMenu.offsetWidth)) && (left + obj.offsetWidth > activeMenu.offsetLeft)) 
						obj.style.visibility = 'hidden';
				}
			}
			top = 0;
			left = 0;
		}
	}
}

// Add an initialization function to the list of functions that will be 
// run when the window containing this script is loaded (onLoad).
function CrossBrowserMenus_AddInitalizationFunction(functionName)
{
	CrossBrowserMenus_InitalizationFunctions[CrossBrowserMenus_InitalizationFunctions.length] = functionName;
}

// Run each function in the initialization function list.
function CrossBrowserMenus_ExecuteInitializationFunctions()
{
	for(i = 0; i < CrossBrowserMenus_InitalizationFunctions.length; i++)
	{
		eval(CrossBrowserMenus_InitalizationFunctions[i]);
	} 
}
