// Copyright © 2000 by Apple Computer, Inc., All Rights Reserved.
//
// You may incorporate this Apple sample code into your own code
// without restriction. This Apple sample code has been provided "AS IS"
// and the responsibility for its operation is yours. You may redistribute
// this code, but you are not permitted to redistribute it as
// "Apple sample code" after having made changes.
// ********************************
// application-specific functions *
// ********************************

// store variables to control where the popup will appear relative to the cursor position
// positive numbers are below and to the right of the cursor, negative numbers are above and to the left
var xOffset = 0;
var yOffset = 20;

function getPosition(element)
{  
    var valueT = 0, valueL = 0;  

    do
    {  
        valueT += element.offsetTop  || 0;  
        valueL += element.offsetLeft || 0;  
        element = element.offsetParent;  
    } while (element);  
    
    return [valueL, valueT];  
}

function showPopup (targetObjectId, eventObj)
{
    if(eventObj)
    {
	    // hide any currently-visible popups
	    hideCurrentPopup();
	    // stop event from bubbling up any farther
	    eventObj.cancelBubble = true;

	    var e = eventObj;
	    var targ;
        var newXCoordinate;
        var newYCoordinate;
    
	    if (!e) e = window.event;

	    if (e.target) targ = e.target;
	    else if (e.srcElement) targ = e.srcElement;
	    
        // Defeat Safari bug
	    if (targ.nodeType == 3) targ = targ.parentNode;

	    var aPos = getPosition(targ);
	    
	    newXCoordinate = aPos[0] + xOffset;
	    newYCoordinate = aPos[1] + yOffset;
	    moveObject(targetObjectId, newXCoordinate, newYCoordinate);
	
	    if(changeObjectVisibility(targetObjectId, 'visible'))
	    {
    	    window.currentlyVisiblePopup = targetObjectId;
	        return true;
	    }
	}
	
    return false;
}

function hideCurrentPopup()
{
    // note: we've stored the currently-visible popup on the global object window.currentlyVisiblePopup
    if(window.currentlyVisiblePopup)
    {
	    changeObjectVisibility(window.currentlyVisiblePopup, 'hidden');
	    window.currentlyVisiblePopup = false;
    }
}



// ***********************
// hacks and workarounds *
// ***********************

// initialize hacks whenever the page loads
window.onload = initializeHacks;

// setup an event handler to hide popups for generic clicks on the document
document.onclick = hideCurrentPopup;

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();
}

function createFakeEventObj() {
    // create a fake event object for older browsers to avoid errors in function call
    // when we need to pass the event object to functions
    if (!window.event) {
	window.event = false;
    }
} // createFakeEventObj

function resizeBlankDiv() {
    // resize blank placeholder div so IE 5 on mac will get all clicks in window
    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;
    }
}

function explorerMacResizeFix () {
    location.reload(false);
}

