/*
	
	divtooltip.js (c) Copyright 2005, 2006 by Lawyers Online Ltd.
	All Rights Reserved.  http://www.lawyersonline.co.uk/
	
	Author: Craig 'qbnut' Jones.
	
	$HeadURL: svn://HeBe/Customers/WyeUsk/trunk/includes/divtooltip.js $
	$Id: divtooltip.js 3722 2009-08-20 13:36:59Z qbnut $
	
	NOTE: All of the JS assumes W3C DOM Support, so everything newer than FF1 / IE6
	is supported. Although, with IE we get the Mouse Position using the IE-Specific
	DOM, as the W3C DOM method doesn't seem to work on Internet Explorer 6 / 7.

	To use this code, include this JS file in your document, and add a DIV layer
	with id "tooltip" in the body of your document, with "display: block" and
	"position: absolute" attributes set (style the DIV however you like otherwise).
	Then, add triggers to ShowTooltip() / HideTooltip() using onmouseover and onmouseout
	on the relevant elements.

	Tested: IE7, IE6, FF2, FF3, OP9, KQ3.5 - All working :)
*/

/* ---------- VARS ---------- */

var mouseX = 0;
var mouseY = 0;

// var debug_element = 'bookingoffice_map';
var debug_element = '';

function IsOldIEVersion()
{
	var agent = navigator.userAgent.toLowerCase();
	var bstring = 'msie';
	var versionindex = agent.indexOf(bstring) + 1;

	if (versionindex > 0) {
		version = agent.charAt(versionindex + bstring.length);
		if (version < 7) {
			return true;
		}
	} else {
		return false;
	}
}

var oldIEVersion = IsOldIEVersion();

/* ---------- FUNCTIONS ---------- */

function FindPos(element) {

	var top = 0;
	var left = 0;

	if (element != null) {

		if (element.offsetParent) {
			do {
				top += element.offsetTop;
				left += element.offsetLeft;
			} while (element = element.offsetParent);
		}

		return [top, left];

	}

}

function GetMousePosition(e) {

	if (document.all) {
		e = window.event;
		if (oldIEVersion) {
			// MSIE 6 and below
			mouseX = e.clientX + document.body.scrollLeft;
			mouseY = e.clientY + document.body.scrollTop;
		} else {
			// MSIE 7 and above
			mouseX = e.clientX + document.documentElement.scrollLeft;
			mouseY = e.clientY + document.documentElement.scrollTop;
		}
	} else if (document.getElementById) {
		// Mozilla Firefox and everything else
		mouseX = e.pageX;
		mouseY = e.pageY;
	}

	if (debug_element != '') {

		var my = document.getElementById('mouse_y');
		var mx = document.getElementById('mouse_x');

		var delement = document.getElementById(debug_element);

		pos = FindPos(delement);

		if (mx != null && my != null && delement != null) {
			my.innerHTML = mouseY - pos[0];
			mx.innerHTML = mouseX - pos[1];
		}

	}

	SetTooltipPosition();
}

function CaptureMousePosition(e) {


	var my = document.getElementById('capture_mouse_y_id');
	var mx = document.getElementById('capture_mouse_x_id');

	var element = document.getElementById(e);

	pos = FindPos(element);

	if (mx != null && my != null && element != null) {
		my.value = mouseY - pos[0];
		mx.value = mouseX - pos[1];
	}

}

function SetTooltipPosition() {

	if (document.getElementById) {
		var element = document.getElementById('tooltip');
		if (element != null) {

			if (document.all) {
				docWidth = document.body.scrollWidth;
				docHeight = document.body.scrollHeight;
			} else if (document.getElementById) {
				// Mozilla Firefox and everything else
				docWidth = document.documentElement.scrollWidth;
				docHeight = document.documentElement.scrollHeight;
			}

			adjustedX = mouseX;
			if (adjustedX > docWidth - element.scrollWidth - 8) {
				adjustedX = mouseX - element.scrollWidth - 8;
			}

			adjustedY = mouseY;
			if (adjustedY > docHeight - element.scrollHeight - 16) {
				adjustedY = mouseY - element.scrollHeight - 16;
			}

			elleft = "";
			element.style.left = elleft.concat(String(adjustedX + 8), 'px');
			eltop = "";
			element.style.top = eltop.concat(String(adjustedY + 16), 'px');
		}
	}

}

function SetTooltipPositionAbsolute(x, y) {

	if (document.getElementById) {
		var element = document.getElementById('tooltip');
		if (element != null) {

			elleft = "";
			element.style.left = elleft.concat(String(x), 'px');
			eltop = "";
			element.style.top = eltop.concat(String(y), 'px');

		}
	}

}

function ShowTooltipOverElement(element, text, x, y) {

	DisableTooltipMousePosition();

	ShowTooltip(text);

	var el = document.getElementById(element);
	var tooltip = document.getElementById('tooltip');

	pos = FindPos(el);

	adjustedX = x + pos[1];
	if (adjustedX > (el.scrollWidth + pos[1]) - (tooltip.scrollWidth)) {
		right = el.scrollWidth - x;
		adjustedX = (el.scrollWidth + pos[1]) - (tooltip.scrollWidth) - right;
	} 

	adjustedY = y + pos[0];
	if (adjustedY > (el.scrollHeight + pos[0]) - (tooltip.scrollHeight)) {
		top = el.scrollHeight - y;
		adjustedY = (el.scrollHeight + pos[0]) - (tooltip.scrollHeight) - top;
	}

	if ((adjustedX == pos[1]) && (adjustedY == pos[0])) {

		HideTooltip('');

	} else {

		SetTooltipPositionAbsolute(adjustedX, adjustedY);

		if (adjustedX != x + pos[1]) {
			if (adjustedY != y + pos[0]) {
				SetTooltipClass('bottomright');
			} else {
				SetTooltipClass('topright');
			}
		} else {
			if (adjustedY != y + pos[0]) {
				SetTooltipClass('bottomleft');
			} else {
				SetTooltipClass('topleft');
			}
		}

	}

}

function SetTooltipClass(ttclass) {

	if (document.getElementById) {
		var element = document.getElementById('tooltip');
		if (element != null) {
			element.className = ttclass;
		}
	}

}

function ShowTooltip(e) {

	if (document.getElementById) {
		var element = document.getElementById('tooltip');
		if (element != null) {
			element.innerHTML = e;
			element.style.visibility = 'visible';
			element.style.display = 'block';
		}
	}

}

function HideTooltip(e) {

	if (document.getElementById) {
		var element = document.getElementById('tooltip');
		if (element != null) {
			element.style.visibility = 'hidden';
			element.style.display = 'none';
			element.className = '';
		}
	}

}

function EnableTooltipMousePosition() {

	HideTooltip('');
	document.onmousemove = GetMousePosition;

}

function DisableTooltipMousePosition() {

	document.onmousemove = null;

}

/* ---------- INIT ---------- */

EnableTooltipMousePosition();

