	/**
	 * Methode welke controleert of een variable leeg is.
	 *
	 * De volgende waardes worden als leeg beschouwd.
	 * String:			'' & '0'.
	 * Number:			0.
	 * Boolean:			false.
	 * Array/Object:	Waneer er geen keys/values in zitten.
	 * Waneer een variable niet gezet is.
	 * Functies geven altijd false terug. Dus niet leeg.
	 * ---
	 * @param [mixed]	mixed	Variable waarvan bekeken moet worden of deze leeg is.
	**/
	function empty($mixed) {
		switch(typeof($mixed)) {
			case 'undefined': return true;
			case 'object':
				for (var $key in $mixed) {
					return false;
				}
				return true;
			case 'string': return ($mixed === '' || $mixed === '0');
			case 'number': return ($mixed === 0);
			case 'boolean': return !$mixed;
			case 'function': return false;
		}
	}

	/**
	 * Methode welke het Element via een unique Id ophaalt.
	 * ---
	 * @Param: String elementId  Naam van de ID welke opgehaald moet worden.
	 * @Param: String formName  Waneer er iets binnen een formulier opgehaald moet worden,
	 *         moeten we ook dit argument mee geven ivm (wat oudere) netscape versies.
	**/
	var getElement; /* Arguments: elementId, [formName] */
	if (document.getElementById) {
		getElement = function(elementId) {
			var myObject = document.getElementById(elementId);
			return myObject;
		}
	} else if (document.all) {
		getElement = function(elementId) {
			var myObject = document.all[elementId];
			return myObject;
		}
	} else if (document.layers) {
		getElement = function(elementId, formName) {
			if (formName != '') {
				myObject = document.forms[formName].elementId;
			} else {
				myObject = document.layers[elementId];
			}
			myObject.style = document.layers[elementId];
			return myObject;
		}
 	}

	document.getScrollTop = function() {
		if (document.documentElement && document.documentElement.scrollTop) {
			return parseInt(document.documentElement.scrollTop);
		} else if (document.body) {
			return parseInt(document.body.scrollTop);
		}
	}

	document.getScrollLeft = function() {
		if (document.documentElement && document.documentElement.scrollLeft) {
			return parseInt(document.documentElement.scrollLeft);
		} else if (document.body) {
			return parseInt(document.body.scrollLeft);
		}
	}

	document.getInnerHeight = function() {
		if (typeof(window.innerHeight) != 'undefined') {
			return parseInt(window.innerHeight);
		} else if (document.documentElement && document.documentElement.clientHeight) {
			return parseInt(document.documentElement.clientHeight);
		} else if (document.body) {
			return parseInt(document.body.clientHeight);
		}
	}

	document.getInnerWidth = function() {
		if (typeof(window.innerWidth) != 'undefined') {
			return parseInt(window.innerWidth);
		} else if (document.documentElement && document.documentElement.clientWidth) {
			return parseInt(document.documentElement.clientWidth);
		} else if (document.body) {
			return parseInt(document.body.clientWidth);
		}
	}

	/**
	 * Deze methode wordt gebruikt om de huidige positie van de muis te bepalen doormiddel van een event.
	 * ---
	 * @Param: Object	currentEvent		Het event object waar de positie van bepaald moet worden.
	 * ---
	 * @Author: www.quirksmode.org
	**/
	function getPos(currentEvent) {
		var position = new Object();
		position.posX = 0;
		position.posY = 0;

		if (currentEvent.pageX || currentEvent.pageY) {
			position.posX = currentEvent.pageX;
			position.posY = currentEvent.pageY;
		} else if (currentEvent.clientX || currentEvent.clientY) {
			position.posX = currentEvent.clientX + document.getScrollLeft();
			position.posY = currentEvent.clientY + document.getScrollTop();
		}
		return position;
	}

	/**
	 * Methode welke de juiste tooltip laat zien.
	 * ---
	 * @Param: Object	e				Het event object.
	 * @Param: String	$tooltipContent	De inhoud van de tooltip.
	 * @Param: String	$tooltipTitle	De title van de tooltip.
	 * @Param: Str/Int	$delay			De timeout/delay van het weergeven van de popup.
	 * ---
	 * @Uses: ieFixSelectbox.js
	**/
	var $tooltipSettings = new Object();
	$tooltipSettings.timeoutActive = false;
	$tooltipSettings.timeoutSession = null;
	$tooltipSettings.tooltipVisible = false;

	function findPos(obj) {
		var position = new Object();
		position.posX = 0;
		position.posY = 0;
		if (obj.offsetParent) {
			do {
				position.posX += obj.offsetLeft;
				position.posY += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		return position;
	}

	function tooltip($t, $e, $tooltipContent, $tooltipTitle, $delay) {
		if (!$e) { $e = window.event; }

		var $elmToolTip = getElement('tooltipLayout');
		$tooltipSettings.eventPosition = findPos($t);

		if ($elmToolTip) {
			var $elmTitle   = getElement('tooltipTitle');
			var $elmContent = getElement('tooltipContent');

			if (!$tooltipSettings.timeoutActive && $e.type == 'mouseover' || $e.type == 'mousemove') {
				if (!empty($tooltipTitle)) {
					$elmTitle.style.display = 'block';
					$elmTitle.style.visibility = 'visible';
					$elmTitle.innerHTML = decodeURIComponent($tooltipTitle);
				} else {
					$elmTitle.style.display = 'none';
					$elmTitle.style.visibility = 'hidden';
					$elmTitle.innerHTML = '';
				}

				$elmContent.innerHTML = decodeURIComponent($tooltipContent);

				if (!empty($delay) && !$tooltipSettings.timeoutActive && !$tooltipSettings.tooltipVisible) {
					$timeoutActive = true;
					if ($tooltipSettings.timeoutSession != null) { clearTimeout($tooltipSettings.timeoutSession); }
					$tooltipSettings.timeoutSession = null;

					$tooltipSettings.timeoutSession = setTimeout(function(event) {
						if ($tooltipSettings.timeoutSession == null) { return false; }
						showTooltip($elmToolTip, $tooltipSettings.eventPosition);
						if(typeof(ieTooltipFix) == 'function') {
							ieTooltipFix('mousemove', 'tooltipLayout');
						}
						clearTimeout($tooltipSettings.timeoutSession);
						$tooltipSettings.timeoutActive = false;
						$tooltipSettings.timeoutSession = null;
						$tooltipSettings.tooltipVisible = true;
					}, parseInt($delay));

				} else {
					showTooltip($elmToolTip, $tooltipSettings.eventPosition);
					if(typeof(ieTooltipFix) == 'function') {
						ieTooltipFix($e.type, 'tooltipLayout');
					}
					$tooltipSettings.tooltipVisible = true;
				}
			} else if ($e.type == 'mouseout') {
				clearTimeout($tooltipSettings.timeoutSession);
				$tooltipSettings.timeoutActive = false;
				$tooltipSettings.timeoutSession = null;
				$tooltipSettings.tooltipVisible = false;

				$elmToolTip.style.display = 'none';
				$elmContent.innerHTML = '';
				$elmTitle.innerHTML   = '';
				if(typeof(ieTooltipFix) == 'function') {
					ieTooltipFix($e.type, 'tooltipLayout');
				}
			}
		}
		return false;
	}

	function showTooltip($elmToolTip, $eventPosition) {
		$elmToolTip.style.top = $eventPosition.posY + 15 + 'px';
		$elmToolTip.style.left = $eventPosition.posX + 30 + 'px';
		$elmToolTip.style.display = 'block';
		
		

		var offsetRight = (parseInt($elmToolTip.offsetWidth) + parseInt($elmToolTip.style.left)) - (document.getScrollLeft());
		if (offsetRight > (document.getInnerWidth() - 25)) {
			$elmToolTip.style.left = $eventPosition.posX - parseInt($elmToolTip.offsetWidth) + 'px';
		}

		var offsetBottom = (parseInt($elmToolTip.offsetHeight) + parseInt($elmToolTip.style.top)) - (document.getScrollTop());
		if (offsetBottom > (document.getInnerHeight() - 25)) {
			$elmToolTip.style.top = parseInt(((screen.availHeight - $elmToolTip.offsetHeight) / 2) + document.getScrollTop()) + 'px';
			/*$eventPosition.posY - parseInt($elmToolTip.offsetHeight) - 15 + 'px';*/
		}

		return false;
	}