// 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 = 25;
var yOffset = -45;
var fixed = 0;

function setFixed(fix) {
   fixed = fix;
}

function setOffsets(x,y) {
   if (x != 0) {
	  xOffset = x;
   }
   if (y != 0) {
	  yOffset = y;
   }
}

function showPopup (targetObjectId, capObjectId, 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 =  xOffset + ((document.body.scrollLeft)?document.body.scrollLeft:0);
	var newYCoordinate =  yOffset;
	
	if(document.all)
	{
		newYCoordinate += ((document.body.scrollTop)?document.body.scrollTop:0);
	}

	if(fixed == 0) {
		 // bug fix: use .clientX/Y not .x/y
	   newXCoordinate += (eventObj.pageX)?eventObj.pageX + xOffset:eventObj.clientX;
	   newYCoordinate += (eventObj.pageY)?eventObj.pageY + yOffset:eventObj.clientY;
	}

	moveObject(targetObjectId, newXCoordinate, newYCoordinate);
	moveObject(capObjectId, newXCoordinate, (newYCoordinate-20));
	// and make it visible
	if( changeObjectVisibility(targetObjectId, 'visible') && changeObjectVisibility(capObjectId, 'visible')) {
	    // if we successfully showed the popup
	    // store its Id on a globally-accessible object
	    window.currentlyVisiblePopup = targetObjectId;
		window.currentlyVisibleCap = capObjectId;
	    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 setPopupColors(strBorder, strBorderText, strBox, strBoxText)
{		
	userCap.style.color = strBorderText; 
	userCap.style.backgroundColor = strBorder;
	userCap.style.borderColor = strBorder;
	
	userPopup.style.color = strBoxText; 
	userPopup.style.backgroundColor = strBox;
	userPopup.style.borderColor = strBorder;	
}

function setPopupHeader(strText)
{
	if(strText == "")
	{
		strText = "(no info)";
	}
	userCap.innerHTML = strText;
}

function setPopupUser(chrSex, strAge, strLocation, strTitle, strText, strLastActivity, strSectionHeader)
{	
	var strGender = "male";
	if(strTitle != "")	{	strTitle = "<br><br><b><i>" + strTitle + "</i></b>"; }
	if(strText == "")	{	strText = "(no info)"; }
	if(chrSex == "f")	{	strGender = "female"; }
	if(strSectionHeader != "")	{	strSectionHeader = "<b>" + strSectionHeader + "</b><br>"; }
		
	userPopup.innerHTML = strAge + " " + strGender + "<br>" + strLocation + strTitle + "<br><br>" + strSectionHeader + strText + "<br><br><div align=right>" + strLastActivity + "</div>";
}

function setPopupInfo(strCap, strText)
{			
	infoCap.innerHTML = strCap;
	infoPopup.innerHTML = strText;
}

function setPopupRating(strCap, strMaleScore, strMaleCount, strFemaleScore, strFemaleCount)
{	
	var blnNaughty = false;
	var strNaughty = "";
	if(strCap == "Naughtiness") { blnNaughty = true; strNaughty = "% naughty"; }
	strMaleScore = new Number(strMaleScore);
	strMaleCount = new Number(strMaleCount);
	strFemaleScore = new Number(strFemaleScore);
	strFemaleCount = new Number(strFemaleCount);

	infoCap.innerHTML = strCap;
	var strMVote;
	if(strMaleCount == 1) { strMVote = "vote" } else { strMVote = "votes" }
	var strFVote;
	if(strFemaleCount == 1) { strFVote = "vote" } else { strFVote = "votes" }
	var strTVote;
	if((strMaleCount + strFemaleCount) == 1) { strTVote = "vote" } else { strTVote = "votes" }
		
  var fMaleScore = 0;
	if(strMaleCount > 0)
	{
		if(blnNaughty) { fMaleScore = (20 * strMaleScore)/strMaleCount; fMaleScore = fMaleScore.toFixed(2); }
		else { fMaleScore = strMaleScore/strMaleCount; fMaleScore = fMaleScore.toFixed(2); }
	}
  var fFemaleScore = 0;
	if(strFemaleCount > 0)
	{
		if(blnNaughty) { fFemaleScore = (20 * strFemaleScore)/strFemaleCount; fFemaleScore = fFemaleScore.toFixed(2); }
		else { fFemaleScore = strFemaleScore/strFemaleCount; fFemaleScore = fFemaleScore.toFixed(2); }
	}	
  var fOverallScore = 0;
	if((strMaleCount + strFemaleCount) > 0)
	{
		if(blnNaughty) { fOverallScore = (20 * (strMaleScore + strFemaleScore))/(strMaleCount + strFemaleCount); fOverallScore = fOverallScore.toFixed(0); }
		else { fOverallScore = (strMaleScore + strFemaleScore)/(strMaleCount + strFemaleCount); fOverallScore = fOverallScore.toFixed(2); }
	}
		
	infoPopup.innerHTML = "Overall: <b>" + setFont(fOverallScore, 2) + strNaughty + "</b> (" + (strMaleCount + strFemaleCount) + " " + strTVote + ")<br><br>Males: <b>" + setFont(fMaleScore, 2) + strNaughty + "</b> (" + strMaleCount + " " + strMVote + ")<br><br>Females: <b>" + setFont(fFemaleScore, 2) + strNaughty + "</b> (" + strFemaleCount + " " + strFVote + ")";
}

function setFont(strText, nSize)
{
	var	strReturn = "<font size='" + nSize + "'>" + strText + "</font>";
	return(strReturn);
}

function setInfoPopupColors(strBorder, strBorderText, strBox, strBoxText)
{		
	infoCap.style.color = strBorderText; 
	infoCap.style.backgroundColor = strBorder;
	infoCap.style.borderColor = strBorder;
	
	infoPopup.style.color = strBoxText; 
	infoPopup.style.backgroundColor = strBox;
	infoPopup.style.borderColor = strBorder;	
}

function hideCurrentPopup() {
    // note: we've stored the currently-visible popup on the global object window.currentlyVisiblePopup
    if(window.currentlyVisiblePopup) {
	changeObjectVisibility(window.currentlyVisiblePopup, 'hidden');
	changeObjectVisibility(window.currentlyVisibleCap, 'hidden');
	window.currentlyVisiblePopup = false;
	window.currentlyVisibleCap = false;
    }
} // hideCurrentPopup



// ***********************
// hacks and workarounds *
// ***********************

// initialize hacks whenever the page loads

var oldOnload;

if (window.onload) {
	oldOnload = window.onload;
}

window.onload = initializeHacks;

// setup an event handler to hide popups for generic clicks on the document
document.onclick = hideCurrentPopup;

function initializeHacks() {
		if (typeof oldOnload == 'function') {
			oldOnload(); 
		}
	
    // 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);
}

