
// Author: DAVID LEGHORN 	Date: 2006 (code originally created for davidleghorn.com 2006)

// Purpose: 
// Provides hover info tips positioned next to mouse cursor

// Notes:

// Any pages importing this script must also import Scripts/Universal.js (nearly all go plan pages import
// universal.js by default as it is defined in Controls/HeaderControl.ascx). Universal.js must be imported 
// as it defines global variables DisplayAreaWidth, DisplayAreaHeight and function GetAvailableDisplayArea()
// utilised by this script. Global variable IsIE is defined and set in Controls/HeaderControl.ascx

// LinkTip div is automatically written into page code at the end of this script (hence, no need to add 
// <div id="LinkTip"></div> to each aspx file)

// TipLayerId defaults to layer id = "LinkTip , however this variable could be re-assigned to a different layer
// within page importing this code

var TipFunctionalitySupported = true;
var Xpos=0;
var Ypos=0;

var ShowTip = true;
var TipWidth = 220;
var TipHeight = 40;
var TipOffsetY = 16;
var TipOffsetX = 10;

var TipLayerId = "HelpTip";	// this could be set from showtip function so different tip layers for different links

var MouseMoveTip = false;

var HelpTipPlacementDivisionFactor = 2.6;  // determines left point x co-ord of tip by divising overall screen width by this division denominator value

// mouse move event handler

function MoveHandler(e)
{
	if( ShowTip == true && MouseMoveTip == true)
	{ 
		if( IsIE == true )
		{
			Xpos = event.clientX + document.documentElement.scrollLeft; //   event.clientX+ietruebody().scrollLeft;
			Ypos = event.clientY + document.documentElement.scrollTop; //event.clientY+ietruebody().scrollTop;
		}
		else
		{
			Xpos = e.pageX;
			Ypos = e.pageY;        }

		positionTip();
	}
 
   // return true;
}


// calculates and sets tips x and y position (accounting for screen offsets and display area boundary checks)

function positionTip() 
{
    GetAvailableDisplayArea(); // get available screen space;
    Ypos += GetPageScrollYOffset();
    checkWidthBoundary();
	checkHeightBoundary();
	document.getElementById(TipLayerId).style.left = Xpos + "px";

	document.getElementById(TipLayerId).style.top = Ypos + "px";
}


// performs width boundary check and sets tip xpos accordingly

function checkWidthBoundary()
{
	var addToX = TipWidth + TipOffsetX + 20;  // + 20 added to prevent occassional scrollbars/screen jump
	
	if( Xpos + addToX > DisplayAreaWidth ) 
	{ 
		Xpos -= addToX;		// + 20 to accomodate for vertical scroller margin - could create some variable here
								// to be added for custom -ve x offset when too close to right screen edge
	}
	else
	{
		Xpos += TipOffsetX;
	}
}



// performs height boundary check and sets tip ypos accordingly

function checkHeightBoundary() 
{
	TipHeight = document.getElementById(TipLayerId).offsetHeight;	// set here or inmouse over?
	var addToY = TipHeight + TipOffsetY;

	if ((Ypos + addToY) > (DisplayAreaHeight + GetPageScrollYOffset()) ) 
	{
	    var yDiff = (Ypos + addToY) - (DisplayAreaHeight + GetPageScrollYOffset());
		Ypos -= yDiff;

		if (Ypos < 0) 
		{
		    Ypos = 0 + GetPageScrollYOffset(); 
		 }

	}
	else
	{
		Ypos += TipOffsetY;
	}
}


// REGISTER EVENT HANDLERS
    
document.onmousemove = MoveHandler; 




// display tip 

function DisplayTip(tipText, tipWidth, moveWithMouse)
{
    MouseMoveTip = moveWithMouse;
    TipWidth = tipWidth;
    var tipObjRef = document.getElementById(TipLayerId);

    tipObjRef.style.width = tipWidth + "px";
    tipObjRef.innerHTML = tipText;

    // positionTip();  // also called here in case this tip is a different width from previously visible tip

    tipObjRef.style.visibility = "visible";   // added 15/05/08

    //document.getElementById(TipLayerId).innerHTML = tipText;
    ShowTip = true;
}


// set display tip off screen

function HideTip()
{
    ShowTip = false;
    MouseMoveTip = false;
    //document.getElementById(TipLayerId).style.top = -2000 +"px";
    document.getElementById(TipLayerId).style.visibility = "hidden";
}


function FocusTip(tipText, tipWidth, x, y)
{
	MouseMoveTip = false;
	var tipObjRef = document.getElementById(TipLayerId);
	tipObjRef.style.width = tipWidth + "px";
	tipObjRef.innerHTML = tipText;
	tipObjRef.style.left = x + "px";
	tipObjRef.style.top = y + "px";
	tipObjRef.style.visibility = "visible";

	ShowTip = true;
}



var FocusHelpTipBgColour = "#f5f8f9";
var OnBlurHelpTipBgColour = "#ffffff";

function ShowFocusHelpTip(tiptext, tipwidth, xpos, ypos, controlid) 
{
    document.getElementById(controlid).style.backgroundColor = FocusHelpTipBgColour;
    GetAvailableDisplayArea();

    var x = parseInt(DisplayAreaWidth / HelpTipPlacementDivisionFactor );
    FocusTip(tiptext, tipwidth, x, ypos);
}

function HideFocusHelpTip(controlid) 
{
    document.getElementById(controlid).style.backgroundColor = OnBlurHelpTipBgColour;
    HideTip();
}


