function xstooltip_findPosX(obj){
  try{
	  var curleft = 0;
	  if (obj.offsetParent) 
	  {
		while (obj.offsetParent) 
			{
				curleft += obj.offsetLeft
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}
	catch(e){alert("xstooltip_findPosX: ERROR\n"+e.message);}	
}

function xstooltip_findPosY(obj){
	try{
		var curtop = 0;
		if (obj.offsetParent) 
		{
			while (obj.offsetParent) 
			{
				curtop += obj.offsetTop
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
		return curtop;
	}
	catch(e){alert("xstooltip_findPosY: ERROR\n"+e.message);}
}

function xstooltip_show(tooltipId, parentId, posX, posY){

	try{
		it = document.getElementById(tooltipId);
			
		if ((it.style.top == '' || it.style.top == 0) 
			&& (it.style.left == '' || it.style.left == 0))
		{
			// need to fixate default size (MSIE problem)
			it.style.width = it.offsetWidth + 'px';
			it.style.height = it.offsetHeight + 'px';
			
			img = document.getElementById(parentId); 
		
			// if tooltip is too wide, shift left to be within parent 
			if (posX + it.offsetWidth > img.offsetWidth) posX = img.offsetWidth - it.offsetWidth;
			if (posX < 0 ) posX = 0; 
			
			x = xstooltip_findPosX(img);// + posX;
			y = xstooltip_findPosY(img);// + posY;
			
			it.style.top = y + 'px';
			it.style.left = x + 'px';
		}
		
		it.style.visibility = 'visible';
	}
	catch(e){alert("xstooltip_show: ERROR\n"+e.message);}
}

function xstooltip_hide(id){
	try{
		it = document.getElementById(id); 
		it.style.visibility = 'hidden'; 
	}
	catch(e){alert("xstooltip_hide: ERROR\n"+e.message);}
}