/*
 *	popup.js
 *
 *	Copyright (c) 2004 Functional Software
 *	All Rights Reserved
 *
 *	Popup menu routines for portal
 *
 *	Author:		Daniel Simington
 *
 *	Date:		Wed Jan  7 10:26:45 EST 2004
 *
 *	ident "@(#)popup.js	1.1 (Functional Software - Sentinel) 04/03/01"
 *
 */

// ********************************
// 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;
var yOffset = 5;

function showPopup (targetObjectId, eventObj) {
    if(eventObj) {
	// hide any currently-visible popups
	hideCurrentPopup();
	// 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)

	var newXCoordinate = (eventObj.clientX)?eventObj.clientX + xOffset:eventObj.clientX + xOffset + ((document.body.scrollLeft)?document.body.scrollLeft:0);
	var newYCoordinate = (eventObj.clientY)?eventObj.clientY + yOffset:eventObj.clientY + yOffset + ((document.body.scrollTop)?document.body.scrollTop:0);

	if (document.body.scrollTop) {
		newYCoordinate = newYCoordinate + document.body.scrollTop;
	}
	if (document.body.scrollLeft) {
		newXCoordinate = newXCoordinate + document.body.scrollLeft;
	}
		
	if ((newXCoordinate + 700) > document.body.clientWidth) {
		// if the horizontal position of the mouse would force the pop up to display over the edge of the iframe, this will move it back so that it will align with the edge.
		newXCoordinate = (document.body.clientWidth - 230);
	}

	if ((newYCoordinate + 400) > (document.body.clientHeight + document.body.scrollTop)) {
		// if the vertical position of the mouse would force the pop up to display over the bottom edge of the iframe,this will move it up to align with the bottom.
		newYCoordinate = (document.body.clientHeight - 125) + document.body.scrollTop;
	}

	if (targetObjectId.indexOf('config') != -1) {
		newYCoordinate = 40;
		newXCoordinate = 35;
	}

	if (targetObjectId.indexOf('limitZone') != -1) { // if this is in use on the intranet for adding files, this should trigger
		newXCoordinate = newXCoordinate + 50;
		newYCoordinate = newYCoordinate + 20;
	}

	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) {

	var newXCoordinate = 0;
	var newYCoordinate = 0;

	moveObject(window.currentlyVisiblePopup, newXCoordinate, newYCoordinate);

	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);
}


