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;
    }
} // getStyleObject


function changeObjectDisplay(objectId, newDisplay) {
    var styleObject = getStyleObject(objectId);
    if (styleObject) {
        styleObject.display = newDisplay;
        return true;
    } else {
        return false;
    }
}


function changeObjectVisibility(objectId, newVisibility) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = getStyleObject(objectId);
    if(styleObject) {
	styleObject.visibility = newVisibility;
	return true;
    } else {
	// we couldn't find the object, so we can't change its visibility
	return false;
    }
} // changeObjectVisibility

function moveObject(objectId, newXCoordinate, newYCoordinate) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = getStyleObject(objectId);
    if(styleObject) {
	styleObject.left = newXCoordinate;
	styleObject.top = newYCoordinate;
	return true;
    } else {
	// we couldn't find the object, so we can't very well move it
	return false;
    }
} // moveObject




// 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 = 30;
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.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);
	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



var ajDisplayed = 0;
var startAJ = 0;

function hideCurrentAjaxPopup() {
  if (ajDisplayed == 1) {
     ajDisplayed = 0;
     hideCurrentPopup();
  }  
}

function clearAJTimer() {
  startAJ = 0;
}

function whenLoading(){
  var e = document.getElementById('replaceme');
  e.innerHTML = "<p>Loading data.  This make take a few seconds...<p>";
}

function showAjaxPopup (targetObjectId, eventObj, mId, mediaType, url) {
  if (eventObj) {
    // stop event from bubbling up any farther
    eventObj.cancelBubble = true;

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

    startAJ = mId;

    setTimeout("showAjaxPopup2('" + targetObjectId + "','" + newXCoordinate + "','" + newYCoordinate + "','" + mId + "','" + mediaType + "','"+url+"')", 200);
  }
}


function showAjaxPopup2 (targetObjectId, newXCoordinate, newYCoordinate, mId, mediaType, url) {
  if((startAJ == mId ) && ajDisplayed == 0) {
  	var ajax = new sack();
        var varsString = "";
        ajax.setVar("mId", mId); 
        ajax.setVar("mediaType", mediaType); 
	if (url == "null")  { url = ""; }
        ajax.setVar("url", url); 
//    	ajax.requestFile = "/ondemand/common/ajaxPodcastDisplay.jsp";
//-MM  did this to test using servlet to forward to ajax, thus keeping the session fresh
	//ajax.requestFile = "ondemand.ondemandmain?action=showAjax&mId="+mId+"&mediaType="+mediaType+"&";
	ajax.requestFile = "ondemand.ondemandmain?action=showAjax&mId="+mId+"&mediaType="+mediaType+"&url="+url+"&";
    	ajax.method = 'GET';
    	ajax.element = 'replaceme';
    	ajax.runAJAX(varsString);
	ajax.onLoading = whenLoading();

	// move popup div to current cursor position 
	// (add scrollTop to account for scrolling for IE)
	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;

	    ajDisplayed = 1;

	    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


//***************************
// motoole 01.10.06 - check for onMouseOut event for ajaxPopup
//***************************
function containsDOM (container, containee) {
  var isParent = false;
  do {
    if ((isParent = container == containee))
      break;
    containee = containee.parentNode;
  }
  while (containee != null);
  return isParent;
}

function checkMouseLeave (element, evt) {
  if (element.contains && evt.toElement) {
    return !element.contains(evt.toElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

// ***********************
// 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);
}
