// 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 = 5;//original value: 30
var yOffset = 5;//original value: -5

function showPopup (targetObjectId, eventObj, hideExistingPopup) {
    if(eventObj) {
		// hide any currently-visible popups
		if (hideExistingPopup) {
			hideExistingPopuphideCurrentPopup();
		}
		// stop event from bubbling up any farther
		eventObj.cancelBubble = true;

                // move popup div to current cursor position 
		// (add scrollTop to account for scrolling for IE)
                //=========== COORDINATES ON DOCUMENT =======================
		var newXCoordinate = (eventObj.pageX)?eventObj.pageX + xOffset:eventObj.x + xOffset + ((document.body.scrollLeft)?document.body.scrollLeft:0);
		var newYCoordinate = (eventObj.pageY)?eventObj.pageY + yOffset:eventObj.y + yOffset + ((document.body.scrollTop)?document.body.scrollTop:0);
                
                if (is_opera5 || is_nav4) { //from browser_detector.js
                    //our adjustments below do not seem to work particularly well for Opera5 or NS4, so we just use the original code we had from Apple
                    moveObject(targetObjectId, newXCoordinate, newYCoordinate);
                } else {
                        //=========== COORDINATES ON BROWSER'S VISIBLE AREA ====================
			var currentXCoordinate = (eventObj.pageX)?eventObj.pageX + xOffset:eventObj.x + xOffset;
			var currentYCoordinate = (eventObj.pageY)?eventObj.pageY + yOffset:eventObj.y + yOffset;
                        //========== POPUP DIMENSIONS ===============
			var popupWidth = document.getElementById(targetObjectId).offsetWidth;
			var popupHeight = document.getElementById(targetObjectId).offsetHeight;
                        //=========== BROWSER WINDOW's DIMENSIONS ==============
                        var browserHeight = getBrowserHeight(); 
                        var browserWidth = getBrowserWidth();
                        
  			/*var status = "POPUP DIMENSIONS: \r\n " +
                                "popupWidth: " + popupWidth + " popupHeight: " + popupHeight + "\r\n\r\n" +
                                "BROWSER DIMENSIONS: \r\n" +
                                "browserWidth: " + browserWidth + ", browserHeight: " + browserHeight + "\r\n\r\n" + 
                                "COORDINATES ON THE BROWSER's VISIBLE AREA: \r\n" +
				"currentXCoordinate=" + currentXCoordinate + ", currentYCoordinate=" + currentYCoordinate + "\r\n\r\n" +
                                "COORDINATES ON THE DOCUMENT: \r\n" +
                                "newXCoordinate: " + newXCoordinate + ", newXCoordinate: " + newXCoordinate + "\r\n\r\n" + 
                                "LET'S SEE IF POPUP WILL FIT: \r\n" +
                                " We have this much space: X=" + (browserWidth-currentXCoordinate) + ", Y=" + (browserHeight-currentYCoordinate) + "\r\n\r\n";
                        */
                        if ((browserWidth-currentXCoordinate) < popupWidth) {
                            //status += "====> there is NOT enough WIDTH \r\n";
                            newXCoordinate = newXCoordinate - popupWidth;
                            if (is_opera6) newXCoordinate = newXCoordinate - getScrollX();
                            
                            if ((browserHeight-currentYCoordinate) < popupHeight) {
				//status += "====> there is NOT enough HEIGHT EITHER \r\n\r\n";
				newYCoordinate = newYCoordinate - popupHeight;
                                if (is_opera6) newYCoordinate = newYCoordinate - getScrollY();
                            }
			} else {
                            if ((browserHeight-currentYCoordinate) < popupHeight) {
				//status += "====> there is NOT enough HEIGHT \r\n\r\n";
				newYCoordinate = newYCoordinate - popupHeight;
                                if (is_opera6) newYCoordinate = newYCoordinate - getScrollY();
                            } else {
                                //status += "====> IT FITS JUST FINE, SO WE JUST LEAVE IT AS IS!\r\n\r\n";
                            }
                        }
			//status += "FINAL COORDINATES FOR THE POPUP: \r\n" + "new coordinates: X=" + newXCoordinate + " Y=" + newYCoordinate + "\r\n";
			//alert(status);
			moveObject(targetObjectId, newXCoordinate, newYCoordinate);
		}
		// and make it visible
		if( changeObjectVisibility(targetObjectId, 'visible') ) {
			// if we successfully showed the popup
			// store its Id on a globally-accessible object
			window.currentlyVisiblePopup = targetObjectId;
			return true;
		} else {
			// we couldn't show the popup, boo hoo!
			return false;
		}
	} else {
		// there was no event object, so we won't be able to position anything, so give up
		return false;
    }
} // showPopup

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;
    }
} // hideCurrentPopup



// ***********************
// 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);
}



// ***************************************************

//Added May15th, 2003
//cross-browser getBrowserHeight function
//modified from http://www.howtocreate.co.uk/tutorials/index.php?tut=0&part=16
function getBrowserHeight() {
    var browserHeight = 0;
    if(typeof(window.innerWidth) == 'number') { //if true then it is Non-IE
        browserHeight = window.innerHeight;
    } else {
        if(document.documentElement && document.documentElement.clientHeight) { //if true then it is IE 6+ in 'standards compliant mode'
        browserHeight = document.documentElement.clientHeight;
        } else {
            if(document.body && document.body.clientHeight) { //if true then it is IE 4 compatible
                browserHeight = document.body.clientHeight;
            }
        }
    }
    return browserHeight;
}

//Added May15th, 2003
//cross-browser getBrowserWidth function
//modified from http://www.howtocreate.co.uk/tutorials/index.php?tut=0&part=16
function getBrowserWidth() {
    var browserWidth = 0;
    if(typeof(window.innerWidth) == 'number') { //if true then it is Non-IE
        browserWidth = window.innerWidth;
    } else {
        if( document.documentElement && document.documentElement.clientWidth) { //if true then it is IE 6+ in 'standards compliant mode'
            browserWidth = document.documentElement.clientWidth;
        } else {
            if(document.body && document.body.clientWidth) { //if true then it is IE 4 compatible
                browserWidth = document.body.clientWidth;
            }
        }
    }
    return browserWidth;
}

//Added May20th, 2003
//cross-browser getScrollX function
//modified from http://www.howtocreate.co.uk/tutorials/index.php?tut=0&part=16
function getScrollX() {
    var scrollOfX = 0;
    if(typeof(window.pageYOffset) == 'number') { //if true then it is Netscape compliant
        scrollOfX = window.pageXOffset;
    } else {
        if(document.body && document.body.scrollLeft) { //if true then it is DOM compliant
            scrollOfX = document.body.scrollLeft;
        } else {
            if(document.documentElement && document.documentElement.scrollLeft) { //if true then it is IE6 standards compliant mode
                scrollOfX = document.documentElement.scrollLeft;
            }
        }
    }
    return scrollOfX;
}

//Added May20th, 2003
//cross-browser getScrollY function
//modified from http://www.howtocreate.co.uk/tutorials/index.php?tut=0&part=16
function getScrollY() {
var scrollOfY = 0;
    if(typeof(window.pageYOffset) == 'number') {  //if true then is Netscape compliant
        scrollOfY = window.pageYOffset;
    } else {
        if(document.body && document.body.scrollTop) { //if true then it is DOM compliant
        scrollOfY = document.body.scrollTop;
        } else {
            if(document.documentElement && document.documentElement.scrollTop) { //if true then it is IE6 standards compliant mode
                scrollOfY = document.documentElement.scrollTop;
            }
        }
  }
  return scrollOfY;
}