var currentTooltipLink = "";
var currentTooltipText = "";
var SHADOW_OFFSET = 1;

function showTooltip(text, el){
	var tooltipBox = document.getElementById("tooltipBox");
	var tooltipShadow = document.getElementById("tooltipShadow");
	if (text){
		var tooltipText = document.getElementById("tooltipText");
		tooltipText.innerHTML = "";
	}
	//in case of another tooltip selected before previous closed, reinit the tooltip components
	tooltipBox.style.display = "none";	
	tooltipShadow.style.display = "none";
	if (currentTooltipLink != ""){currentTooltipLink.className = "tooltip";}
	
	tooltipBox.style.display = "block";
	if (text){
		currentTooltipText = text;
		tooltipText.innerHTML = currentTooltipText;
	}
	tooltipShadow.style.display = "block";
	tooltipShadow.style.height = (tooltipBox.offsetHeight - 2) + "px";
	//there is no specific element in the resize event, use whats currently selected
	if (el){currentTooltipLink = el;}
	currentTooltipLink.className = "tooltipOn";
	
	var parentX = findTooltipPosX(currentTooltipLink);
	var parentY = findTooltipPosY(currentTooltipLink);
	var TOOLTIP_HEIGHT = currentTooltipLink.offsetHeight;
	
	switch (true){
		//case ((parentY - getScroll().y) > (getDimensions().height - tooltipBox.offsetHeight)) && (parentX <= (getDimensions().width - tooltipBox.offsetWidth)):
		case ((parentY) > (getDimensions().height - tooltipBox.offsetHeight)) && (parentX <= (getDimensions().width - tooltipBox.offsetWidth)):
			tooltipBox.style.left = parentX + "px";
			tooltipBox.style.top = (parentY - tooltipBox.offsetHeight) + "px";
			tooltipShadow.style.left = parentX + SHADOW_OFFSET + "px";
			tooltipShadow.style.top = (parentY - tooltipBox.offsetHeight) + SHADOW_OFFSET + "px";
			//IE bug - if currentTooltipLink.offsetLeft == 0 the TOOLTIP_HEIGHT needed to be added to position correctly
			if (is_ie && (currentTooltipLink.offsetLeft == 0)){
				tooltipBox.style.top = (parentY - tooltipBox.offsetHeight) + TOOLTIP_HEIGHT + "px";
				tooltipShadow.style.top = (parentY - tooltipBox.offsetHeight) + TOOLTIP_HEIGHT + SHADOW_OFFSET + "px";
			}
			break;
		//case (parentX > (getDimensions().width - tooltipBox.offsetWidth)) && ((parentY - getScroll().y) <= (getDimensions().height - tooltipBox.offsetHeight)):
		case (parentX > (getDimensions().width - tooltipBox.offsetWidth)) && ((parentY) <= (getDimensions().height - tooltipBox.offsetHeight)):
			tooltipBox.style.left = ((parentX - tooltipBox.offsetWidth) + currentTooltipLink.offsetWidth + "px");
			tooltipBox.style.top = parentY + TOOLTIP_HEIGHT + "px";
			tooltipShadow.style.left = ((parentX - tooltipBox.offsetWidth) + currentTooltipLink.offsetWidth + SHADOW_OFFSET + "px");
			tooltipShadow.style.top = parentY + TOOLTIP_HEIGHT + SHADOW_OFFSET + "px";
			break;
		//case (parentX > (getDimensions().width - tooltipBox.offsetWidth)) && ((parentY - getScroll().y) > (getDimensions().height - tooltipBox.offsetHeight)):
		case (parentX > (getDimensions().width - tooltipBox.offsetWidth)) && ((parentY) > (getDimensions().height - tooltipBox.offsetHeight)):
			tooltipBox.style.left = ((parentX - tooltipBox.offsetWidth) + currentTooltipLink.offsetWidth + "px");
			tooltipBox.style.top = (parentY - tooltipBox.offsetHeight) + "px";
			tooltipShadow.style.left = ((parentX - tooltipBox.offsetWidth) + currentTooltipLink.offsetWidth + SHADOW_OFFSET + "px");
			tooltipShadow.style.top = (parentY - tooltipBox.offsetHeight) + SHADOW_OFFSET + "px";
			break;
		default:
			tooltipBox.style.left = parentX + "px";
			tooltipBox.style.top = parentY + TOOLTIP_HEIGHT + "px";
			tooltipShadow.style.left = parentX + SHADOW_OFFSET + "px";
			tooltipShadow.style.top = parentY + SHADOW_OFFSET + TOOLTIP_HEIGHT + "px";
			//IE bug - if currentTooltipLink.offsetLeft == 0 the TOOLTIP_HEIGHT needed to be added (again in this case) to position correctly
			if (is_ie && (currentTooltipLink.offsetLeft == 0)){
				tooltipBox.style.top = parentY + (TOOLTIP_HEIGHT * 2) + "px";
				tooltipShadow.style.top = parentY + SHADOW_OFFSET + (TOOLTIP_HEIGHT * 2) + "px";
			}
	}
}

function hideTooltip(el){
	var tooltipBox = document.getElementById("tooltipBox");
	var tooltipShadow = document.getElementById("tooltipShadow");
	tooltipBox.style.display = "none";
	tooltipShadow.style.display = "none";
	currentTooltipLink.className = "tooltip";
	currentTooltipLink = "";
}

function findTooltipPosX(obj){
	myobj = obj;
	var posleft = 0;
	if (myobj.offsetParent){
		while (myobj.offsetParent){
			posleft += myobj.offsetLeft;
			myobj = myobj.offsetParent;
		}
	}
	else if (myobj.x){posleft += myobj.x;}
	return posleft;
}

function findTooltipPosY(obj){
	myobj = obj
	var postop = 0;
	if (myobj.offsetParent){
		while (myobj.offsetParent){
			postop += myobj.offsetTop;
			myobj = myobj.offsetParent;
		}
	}
	else if (myobj.y) postop += myobj.y;
	return postop;
}

function getDimensions(){
	var dimObj = new Object();
	if(typeof( window.innerWidth ) == 'number'){//Non-IE
		dimObj.width = window.innerWidth;
		dimObj.height = window.innerHeight;
	} 
	else if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight)){//IE 6+ in 'standards compliant mode
		dimObj.width = document.documentElement.clientWidth;
		dimObj.height = document.documentElement.clientHeight;
	}
	else if(document.body && ( document.body.clientWidth || document.body.clientHeight)){//IE 4 compatible
		dimObj.width = document.body.clientWidth;
		dimObj.height = document.body.clientHeight;
	}
	return dimObj;
}

//function getScroll(){
//	var scrollObj = new Object();
//	if (self.pageYOffset){ // all except Explorer
//		scrollObj.x = self.pageXOffset;
//		scrollObj.y = self.pageYOffset;
//	}
//	else if (document.documentElement && document.documentElement.scrollTop){// Explorer 6 Strict
//		scrollObj.x = document.documentElement.scrollLeft;
//		scrollObj.y = document.documentElement.scrollTop;
//	}
//	else if (document.body){ // all other Explorers
//		scrollObj.x = document.body.scrollLeft;
//		scrollObj.y = document.body.scrollTop;
//	}
//	return scrollObj;
//}

window.onresize = function(){
	if (currentTooltipLink != ""){
		if (currentTooltipText == ""){showTooltip();}
		else{showTooltip(currentTooltipText);}
	}
}