/* If isToggle is true, it overrides specified isDisplayed (isDisplayed is set to opposite of previous value exactly as if we'd specified that) */
function popup_repairs(isDisplayed, isToggle)
{
	var	rdiv = document.getElementById('repairsdiv');
	var	rshadow = document.getElementById('repairsshadow');
	var	ddmenubar = document.getElementById('ddmenubar');
	var	repairslink = document.getElementById('repairslink');
	var	x, y;
	
	x = findPosX(repairslink); 
	y = findPosY(repairslink) + ddmenubar.clientHeight + 4; 

	rdiv.style.top = y + 'px';
	rdiv.style.left = x + 'px';
	rshadow.style.top = (y - 10) + 'px';
	rshadow.style.left = (x - 10) + 'px';

	if (isToggle) {
		isDisplayed = !(rdiv.style.display == 'inline');
	}	

	if (isDisplayed) {
		rshadow.style.display = 'inline';
		rdiv.style.display = 'inline';
		popup_menu(false, false);
	} else {
		rshadow.style.display = 'none';
		rdiv.style.display = 'none';
	}

	var	width = document.getElementById('repairsdiv').clientWidth;
	var	height = document.getElementById('repairsdiv').clientHeight;
	var	shadowElm = document.getElementById('repairsshadow');

	shadowElm.style.width = 1.1 * width + 'px';
	shadowElm.style.height = 1.3 * height + 'px';
}

function popup_menu(isDisplayed, isToggle)
{
	var	mdiv = document.getElementById('menudiv');
	var	mshadow = document.getElementById('menushadow');
	var	ddmenubar = document.getElementById('ddmenubar');
	var	menulink = document.getElementById('menulink');
	var	x, y;

	x = findPosX(menulink); 
	y = findPosY(menulink) + ddmenubar.clientHeight + 4; 


	mdiv.style.top = y + 'px';
	mdiv.style.left = x + 'px';
	mshadow.style.top = (y - 10) + 'px';
	mshadow.style.left = (x - 10) + 'px';

	if (isToggle) {
		isDisplayed = !(mdiv.style.display == 'inline');
	}	

	if (isDisplayed) {
		mshadow.style.display = 'inline';
		mdiv.style.display = 'inline';
		popup_repairs(false, false);
	} else {
		mshadow.style.display = 'none';
		mdiv.style.display = 'none';
	}

	var	width = document.getElementById('menudiv').clientWidth;
	var	height = document.getElementById('menudiv').clientHeight;
	var	shadowElm = document.getElementById('menushadow');

	shadowElm.style.width = 1.1 * width + 'px';
	shadowElm.style.height = 1.3 * height + 'px';
}

function main_onclick_handler(e) 
{
	var	elm = e.target ? e.target : e.srcElement;

	var	menu_id = get_menu_id(elm);

	if (menu_id === null) {
		hide_both_menus();
	} 
}

/* Get the enclosing menu id of the specified element; if this wasn't part of any popup menu, null is returned */
function get_menu_id(elm)
{
	do {
		var	id = elm.id;

		if ((id == 'menudiv')  ||  (id == 'repairsdiv')  ||  (id == 'menulink')  ||  (id == 'repairslink')) {
			return id;
		}
	} while (elm = elm.parentNode);

	return null;
}

function hide_both_menus()
{
	popup_menu(false, false);
	popup_repairs(false, false);
}

function onunload_handler()
{
	hide_both_menus();
}

/* findPosX by Peter-Paul Koch & Alex Tingle
 * http://blog.firetree.net/2005/07/04/javascript-find-position/
 */
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;
}

/* findPosX by Peter-Paul Koch & Alex Tingle
 * http://blog.firetree.net/2005/07/04/javascript-find-position/
 */
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;
}

