﻿// ---------------------------------- "tooltip"  ----------------------------------------
function getTopPos(inputObj)
{		
  var returnValue = inputObj.offsetTop;
  if( inputObj.scrollTop ) returnValue -= inputObj.scrollTop;
  while((inputObj = inputObj.offsetParent) != null)
  {
  	if(inputObj.tagName!='HTML')
  	{
  	    returnValue += inputObj.offsetTop;
  	    if( inputObj.scrollTop ) returnValue -= inputObj.scrollTop;
  	}
  }
  return returnValue;
}

function getLeftPos(inputObj)
{
  var returnValue = inputObj.offsetLeft;
  while((inputObj = inputObj.offsetParent) != null)
  {
  	if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
  }
  return returnValue;
}

var enableTooltip=false;
var tooltipObj = false;
var generalMargin = 25;

/* Visar en "tooltip", dvs ett litet popupfönster precis vid muspekaren. Används lämpligen med
	onmouseover och onmouseout på objekt */
function tooltip( text, width, objID )
{
	if(!tooltipObj)	/* Popup div not created yet ? */
	{
		tooltipObj = document.createElement('DIV');
		tooltipObj.style.position = 'absolute';
		tooltipObj.className = 'noprint';
		tooltipObj.id = 'tooltipObj';
		document.body.appendChild(tooltipObj);	
	}

    tooltipObj.innerHTML = text;

    tooltipObj.style.width= width+'px';
	tooltipObj.style.display='block';
	tooltipObj.style.zIndex = 25000;
	enableTooltip = true;

	//positionTooltip(objID);
	
	positionPopup( document.getElementById(objID), tooltipObj, width );
	
}

/* Positionerar "tooltip":en. */
function positionTooltip(objID)
{
    var parentDiv = document.getElementById(objID);
    
    var leftPos = getLeftPos(parentDiv);
    var topPos = (getTopPos(parentDiv));
	
    var tooltipWidth = document.getElementById('tooltipObj').offsetWidth;
    var divNegLeft = 10;
    var divNegTop = -25;
    var scrollLeft = document.documentElement.scrollLeft;
	
    tooltipObj.style.left = (leftPos - divNegLeft) + 'px';
    tooltipObj.style.top = (topPos - divNegTop) + 'px';

    // För att undvika att popupfönstret hamnar utanför webbläsarfönstret
    // positionerar vi om det om det är för nära. Just här bryr vi oss bara om det
    // hamnar utanför i sidled
	
    var windowWidth = window.innerWidth != null ? window.innerWidth :
                        document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth :
                        document.body != null ? document.clientWidth : null;
    var scrollBarMargin = 35;
    if( ((leftPos - scrollLeft) + (tooltipWidth - divNegLeft)) > (windowWidth - scrollBarMargin) )
        tooltipObj.style.left = (windowWidth + scrollLeft - tooltipWidth - scrollBarMargin) + 'px';
    if( scrollLeft > (leftPos - divNegLeft) )
        tooltipObj.style.left = (scrollLeft + 5) +'px';
}

function hideTooltip()
{
    if( tooltipObj )
    {
	    tooltipObj.style.display='none';
	    tooltipObj.parentNode.removeChild(tooltipObj);
	    tooltipObj = false;
	}
}



function get_pos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return{'x':curleft,'y':curtop};
}

function positionPopup( rel_elm, elm, popupWidth )
{
    var pos=get_pos(rel_elm);
    var h=rel_elm.offsetHeight;
    var w=rel_elm.offsetWidth;

    var scrollTop = document.documentElement && document.documentElement.scrollTop ?
        document.documentElement.scrollTop : document.body.scrollTop;
    var scrollLeft = document.documentElement && document.documentElement.scrollLeft ?
        document.documentElement.scrollLeft : document.body.scrollLeft; 
    var clientWidth = document.compatMode && document.compatMode != 'BackCompat' ?
        document.documentElement.clientWidth : document.body.clientWidth;
    var clientHeight = document.compatMode && document.compatMode != 'BackCompat' ?
        document.documentElement.clientHeight : document.body.clientHeight;	
    var scrollBarMargin = 35;

    // Var finns det mest plats?
    var dLeft = pos.x - scrollLeft;
    var dRight = clientWidth - scrollBarMargin - dLeft - w;
    var dTop = pos.y - scrollTop;
    var dBottom = clientHeight - scrollBarMargin - dTop - h;
    
    if( dLeft > dRight )
    { // Mer plats till vänster
        elm.style.left = dLeft - generalMargin - popupWidth + scrollLeft + 'px';
    }
    else
    { // Mer plats till höger
        elm.style.left = dLeft + w + generalMargin + scrollLeft + 'px';
    }

    // Höjd [här förutsätts att innehållet i popupen redan är given]
    var tooltipHeight = elm.offsetHeight;
    
    var dTop = pos.y - scrollTop;
    var dBottom = clientHeight - scrollBarMargin - dTop - h;
    
    if( tooltipHeight > dTop && tooltipHeight > dBottom )
    {
        // Tooltip:en får inte plats varken över eller nedanför
        if( tooltipHeight > clientHeight ) // Får inte plats i fönstret
            elm.style.top = 1 + scrollTop + 'px';
        else // Får plats i fönstret
            elm.style.top = scrollTop + (clientHeight-tooltipHeight)/2 + 'px';
    }
    else
    {
        if( dTop > dBottom && tooltipHeight < dTop && (tooltipHeight+generalMargin) > dBottom )
        { // Mer plats ovanför OCH tooltip:en får plats ovanför OCH tooltip:en får inte plats nedanför
            elm.style.top = Math.max(dTop - generalMargin - tooltipHeight + scrollTop, scrollTop + generalMargin ) + 'px';
        }
        else
        { // Mer plats nedanför eller så får ändå inte tooltip:en plats ovanför
            elm.style.top = Math.max(dTop + h/2 + generalMargin + scrollTop, scrollTop + generalMargin) + 'px';
        }
    }
}