var agt=navigator.userAgent.toLowerCase();
var is_ie=(agt.indexOf("msie")!=-1);

var currentTooltipLink = "";
var currentTooltipText = "";
var tooltipSize = "";
var SHADOW_OFFSET = 1;
var DEFAULT_SIZE = 200;
var SHADOW_DELTA_SIZE = 35;

function showTooltip(text, el, size){
	var tooltipBox = document.getElementById("tooltipBox");
	var tooltipText = document.getElementById("tooltipText");
	var tooltipShadow = document.getElementById("tooltipShadow");
	
	//in case of another tooltip selected before previous closed, reinit the tooltip components
	tooltipBox.style.display = "none";
	tooltipText.innerHTML = "";	
	tooltipShadow.style.display = "none";
	if (currentTooltipLink != ""){currentTooltipLink.className = "tooltip";}
	
	tooltipBox.style.display = "block";
	currentTooltipText = text;
	tooltipText.innerHTML = currentTooltipText;
	//there is no specific element in the resize event, use whats currently selected
	if (el){currentTooltipLink = el;}
	currentTooltipLink.className = "tooltipOn";
	
	tooltipSize = (size) ? size : "";
	
	if (tooltipSize){
		tooltipBox.style.width = size + "px";
		tooltipShadow.style.width = (is_ie) ? size + (SHADOW_DELTA_SIZE-2) + "px" : size + SHADOW_DELTA_SIZE + "px";
	}
	else{
		tooltipBox.style.width = DEFAULT_SIZE + "px";
		tooltipShadow.style.width = (is_ie) ? DEFAULT_SIZE + (SHADOW_DELTA_SIZE-2) + "px" : DEFAULT_SIZE + SHADOW_DELTA_SIZE + "px";
	}
	
	tooltipShadow.style.display = "block";
	tooltipShadow.style.height = (is_ie) ? (tooltipBox.offsetHeight - 4) + "px" : (tooltipBox.offsetHeight - 2) + "px";
	
	var parentX = findPosX(currentTooltipLink);
	var parentY = findPosY(currentTooltipLink);
	var TOOLTIP_HEIGHT = currentTooltipLink.offsetHeight;
	var IE_OFFSET = (is_ie) ? 10 : 0;
	switch (true){
		case ((parentY - getScroll().y) > (getDimensions().height - tooltipBox.offsetHeight)) && (parentX <= (getDimensions().width - tooltipBox.offsetWidth)):
			tooltipBox.style.left = parentX + IE_OFFSET + "px";
			tooltipBox.style.top = (parentY - tooltipBox.offsetHeight) + "px";
			tooltipShadow.style.left = parentX + IE_OFFSET + SHADOW_OFFSET + "px";
			tooltipShadow.style.top = (parentY - tooltipBox.offsetHeight) + SHADOW_OFFSET + "px";
			break;
		case (parentX > (getDimensions().width - tooltipBox.offsetWidth)) && ((parentY - getScroll().y) <= (getDimensions().height - tooltipBox.offsetHeight)):
			tooltipBox.style.left = ((parentX + IE_OFFSET - tooltipBox.offsetWidth) + currentTooltipLink.offsetWidth + "px");
			tooltipBox.style.top = parentY + TOOLTIP_HEIGHT + "px";
			tooltipShadow.style.left = ((parentX + IE_OFFSET - 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)):
			tooltipBox.style.left = ((parentX + IE_OFFSET - tooltipBox.offsetWidth) + currentTooltipLink.offsetWidth + "px");
			tooltipBox.style.top = (parentY - tooltipBox.offsetHeight) + "px";
			tooltipShadow.style.left = ((parentX + IE_OFFSET - tooltipBox.offsetWidth) + currentTooltipLink.offsetWidth + SHADOW_OFFSET + "px");
			tooltipShadow.style.top = (parentY - tooltipBox.offsetHeight) + SHADOW_OFFSET + "px";
			break;
		default:
			tooltipBox.style.left = parentX + IE_OFFSET + "px";
			tooltipBox.style.top = parentY + TOOLTIP_HEIGHT + "px";
			tooltipShadow.style.left = parentX + IE_OFFSET + SHADOW_OFFSET + "px";
			tooltipShadow.style.top = parentY + SHADOW_OFFSET + TOOLTIP_HEIGHT + "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 findPosX(obj){
	var 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 findPosY(obj){
	var 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 != ""){
		showTooltip(currentTooltipText, '', tooltipSize);
	}
}