﻿
// Author: DAVID LEGHORN 	Date: 2006 (code originally created for davidleghorn.com 2006)

// Purpose:
// Provides hover info tips positioned next to mouse cursor or on input element focus

// This file differs from HoverTip.js as follows;
// ShowTip(), ShowFocusHelpTip() and HideFocusHelpTip() contain an if statement that checks show help checkbox
// ( document.getElementById("chkShowHelp").checked ) to determin whether or not help tip should be displayed.

// This file is utilised in GoResourcingApplication by Menu.aspx and CandidateSearch.aspx pages and by JobSearch.aspx page.

// 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;


// 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) {
    if (document.getElementById("chkShowHelp").checked == true) {
        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() {
    if (document.getElementById("chkShowHelp").checked == true) {
        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) {
    if (document.getElementById("chkShowHelp").checked == true) {
        document.getElementById(controlid).style.backgroundColor = FocusHelpTipBgColour;
        GetAvailableDisplayArea();

        var x = parseInt(DisplayAreaWidth / 2.6);
        FocusTip(tiptext, tipwidth, x, ypos);
    }
}

function HideFocusHelpTip(controlid) {
    if (document.getElementById("chkShowHelp").checked == true) {
        document.getElementById(controlid).style.backgroundColor = OnBlurHelpTipBgColour;
        HideTip();
    }
}
