/************************************************************************************************************
(C) www.dhtmlgoodies.com, June 2006

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************/


/* Custom variables */

/* Offset position of tooltip */
var x_offset_tooltip = 50;
var y_offset_tooltip = 0;

document.onmousemove = ajax_positionTooltip;

var pos_info;
/* Don't change anything below here */


var ajax_tooltipObj = false;
var ajax_tooltipObj_iframe = false;

var ajax_tooltip_MSIE = false;
if(navigator.userAgent.indexOf('MSIE')>=0)ajax_tooltip_MSIE=true;


function ajax_showTooltip(externalFile,inputObj, positioninfo)
{
	if (positioninfo)
		pos_info = positioninfo;
	if(!ajax_tooltipObj)	/* Tooltip div not created yet ? */
	{
		ajax_tooltipObj = document.createElement('DIV');
		ajax_tooltipObj.style.position = 'absolute';
		ajax_tooltipObj.id = 'ajax_tooltipObj';		
		document.body.appendChild(ajax_tooltipObj);

		
		var leftDiv = document.createElement('DIV');	/* Create arrow div */
		leftDiv.className='ajax_tooltip_arrow';
		leftDiv.id = 'ajax_tooltip_arrow';
		ajax_tooltipObj.appendChild(leftDiv);
		
		var contentDiv = document.createElement('DIV'); /* Create tooltip content div */
		contentDiv.className = 'ajax_tooltip_content';
		ajax_tooltipObj.appendChild(contentDiv);
		contentDiv.id = 'ajax_tooltip_content';
		
		if(ajax_tooltip_MSIE){	/* Create iframe object for MSIE in order to make the tooltip cover select boxes */
			ajax_tooltipObj_iframe = document.createElement('<IFRAME frameborder="0">');
			ajax_tooltipObj_iframe.style.position = 'absolute';
			ajax_tooltipObj_iframe.border='0';
			ajax_tooltipObj_iframe.frameborder=0;
			ajax_tooltipObj_iframe.style.backgroundColor='#FFF';
			ajax_tooltipObj_iframe.src = 'about:blank';
			contentDiv.appendChild(ajax_tooltipObj_iframe);
			ajax_tooltipObj_iframe.style.left = '0px';
			ajax_tooltipObj_iframe.style.top = '0px';
		}

			
	}
	// Find position of tooltip
	ajax_tooltipObj.style.display='block';
	ajax_loadContent('ajax_tooltip_content',externalFile);
	if(ajax_tooltip_MSIE){
		ajax_tooltipObj_iframe.style.width = ajax_tooltipObj.clientWidth + 'px';
		ajax_tooltipObj_iframe.style.height = ajax_tooltipObj.clientHeight + 'px';
	}

	ajax_positionTooltip(inputObj);
}

function ajax_positionTooltip(inputObj)
{
	
	if (pos_info && pos_info=="mouse")
	{
		var leftPos = tempX;// (ajaxTooltip_getLeftPos(inputObj) + inputObj.offsetWidth);
		// var topPos =  tempY;// ajaxTooltip_getTopPos(inputObj);
		if (document.contains && !window.opera )
				var topPos =  tempY;
		else 	var topPos = ajaxTooltip_getTopPos(inputObj);
		
		
	}
	else
	{
		var leftPos = (ajaxTooltip_getLeftPos(inputObj) + inputObj.offsetWidth);
		var topPos  = ajaxTooltip_getTopPos(inputObj);
	}
	
	var rightedge=ajax_tooltip_MSIE? document.body.clientWidth-leftPos : window.innerWidth-leftPos
	/*
	var bottomedge=ajax_tooltip_MSIE? document.body.clientHeight-topPos : window.innerHeight-topPos
	*/
	var windowwidth = ajax_tooltip_MSIE? document.body.clientWidth : window.innerWidth;
	var tooltipWidth = document.getElementById('ajax_tooltip_content').offsetWidth +  document.getElementById('ajax_tooltip_arrow').offsetWidth; 
	
	
	
	
	// Dropping this reposition for now because of flickering
	//var offset = tooltipWidth - rightedge; 
	//if(offset>0)leftPos = Math.max(0,leftPos - offset - 5);
	
	if (windowwidth < tooltipWidth+leftPos)
	{
			// Den schönen Pfeil wegmachen
			document.getElementById('ajax_tooltip_arrow').style.width = 0;
			ajax_tooltipObj.style.left = leftPos-tooltipWidth-50 + 'px';
	}
	else	ajax_tooltipObj.style.left = leftPos + 'px';
	ajax_tooltipObj.style.top = topPos + 'px';	
	/*
	if (!alerted) {
			alerted = 1;
			// alert (topPos + " "+ ajax_tooltipObj.style.top);
	}
	*/
}

var alerted = 0;
function ajax_hideTooltip()
{
	ajax_tooltipObj.style.display='none';
}


function ajaxTooltip_getTopPos(inputObj)
{		
  var returnValue = inputObj.offsetTop;
  while((inputObj = inputObj.offsetParent) != null){
  	if(inputObj.tagName!='HTML')returnValue += inputObj.offsetTop;
  }
  return returnValue;
}

function ajaxTooltip_getLeftPos(inputObj)
{
  var returnValue = inputObj.offsetLeft;
  while((inputObj = inputObj.offsetParent) != null){
  	if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
  }
  return returnValue;
}


// ######################################################## // 

var tempX = -300;
var tempY = -300;
document.onmousemove = getMouseXY;

function getMouseXY(ev) {
  var pos = new Coord(0,0);
  // if(window.event && window.event.clientX) {
  if (ajax_tooltip_MSIE) {  
    var isStrictMode = document.compatMode 
        && document.compatMode != 'BackCompat' ? true : false;
    var scrollX = isStrictMode ? 
        document.documentElement.scrollLeft : document.body.scrollLeft;
    var scrollY	= isStrictMode ? 
        document.documentElement.scrollTop : document.body.scrollTop;
    pos.x = window.event.clientX + scrollX;
    pos.y = window.event.clientY + scrollY -20;
    
  } 
  else if (ev.pageX)
  {
  	pos.x = ev.pageX+10;
    pos.y = ev.pageY-20;
  }
  tempX = pos.x;
  tempY = pos.y;
  
  return;
}

/**
 * Konstruktorfunktion des Objektes
 * Die Parameter der Funktion können weggelassen werden, 
 * nicht vorhanden Werte werden mit 0 initialisiert
 *
 * @param    x: x-Wert (numerischer Wert erwartet, isNaN(x) == false)
 *           y: y-Wert (numerischer Wert erwartet, isNaN(y) == false)
 * @methods  toString()
 *           equals( Coord aCoord )
 */

function Coord(/*in: Number*/ x, /*in: Number*/ y){
  this.x = (!x)?0:x;
  this.y = (!y)?0:y;
  
  this.toString = objToString;
  this.equals = equalsCoord;
}
 
/**
 * liefert eine Stringrepräsentation des Objektes Coord
 * einschießlich seiner Daten, 
 * ausschließlich seiner Methoden 
 * 
 * @return: String
 */ 
function objToString(){
  var ret = "{";
  for(p in this ){
    if (typeof this[p] == "function" || typeof this[p] == "object") 
      continue;
    if(ret.length > 1)
      ret += ",";
    ret += p + ":" + this[p];
  }
  return ret + "}";
}

/**
 * vergleicht 2 Coord-Objekte. Diese sind genau dann gleich,
 * wenn seine x- und y-Eigenschaften gleiche Werte enthalten.
 * 
 * @return: boolean (true, false)
 */ 
function equalsCoord(/*in: Coord*/ c){
  return (this.x == c.x && this.y == c.y);
}
