
// 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 = false;
var TipWidth = 220;
var TipHeight = 40;
var TipOffsetY = 16;
var TipOffsetX = 4;

var TipLayerId = "HelpTip";	// this could be set from showtip function so different tip layers for different links

var MouseMoveTip = false;


// 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;
	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 ) 
	{ 
		Ypos -= addToY;

		if( Ypos < 0 )
		{  Ypos = 0; }

	}
	else
	{
		Ypos += TipOffsetY;
	}
}


// REGISTER EVENT HANDLERS
    
document.onmousemove = MoveHandler; // NOT FOR IFA




// 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";
}

var HelpTipPlacementDivisionFactor = 2.3;  // determines left point x co-ord of tip by divising overall screen width by this division denominator value

function FocusTip(tipText, tipWidth, x, y)
{
	MouseMoveTip = false;
	var tipObjRef = document.getElementById(TipLayerId);
  //  var scrollYoff = GetYscrollOffset();
  //  y += scrollYoff;
	tipObjRef.style.width = tipWidth + "px";
	tipObjRef.innerHTML = tipText;

	//tipObjRef.style.left = x + "px";  // updated 23/09/09 xpos calculated based on screen size

	GetAvailableDisplayArea();
	var tipX = parseInt(DisplayAreaWidth / HelpTipPlacementDivisionFactor);
	tipObjRef.style.left = tipX + "px"; 
	
	tipObjRef.style.top = y + "px";
	tipObjRef.style.visibility = "visible";

	ShowTip = true;
}


// RENDER LinkId DIV INTO PAGE MARKUP

//document.write('<div id="LinkTip"></div>');

// -- added 28/3/08 (displays focus tips and colours bg of input control (control id passed as function parameter) -----

var FocusHelpTipBg = "#66ff00";

  function ShowFocusHelpTip(tiptext,tipwidth,xpos,ypos,controlid)
  {
    var tipmsg = tiptext;
  
      if(tiptext == '')  // get tip skills help text from hidden div
      {
        tipmsg = document.getElementById("SkillsTipMsg").innerHTML;
      }

      GetAvailableDisplayArea();
      var x = parseInt(DisplayAreaWidth / HelpTipPlacementDivisionFactor);

      document.getElementById(controlid).style.backgroundColor = FocusHelpTipBg;
      FocusTip(tipmsg,tipwidth,x,ypos);
  }
  
  
  function HideFocusHelpTip(controlid)
  {
    document.getElementById(controlid).style.backgroundColor = "#ffffff";
    HideTip();
  }


