/************************************************************************************************************
Ajax tooltip
Copyright (C) 2006  DTHMLGoodies.com, Alf Magne Kalleland

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Dhtmlgoodies.com., hereby disclaims all copyright interest in this script
written by Alf Magne Kalleland.

Alf Magne Kalleland, 2006
Owner of DHTMLgoodies.com
	
************************************************************************************************************/	




/* Custom variables */

/* Offset position of tooltip */
var x_offset_tooltip = 5;
var y_offset_tooltip = 0;

/* Don't change anything below here */

var ajax_scroll_flag = false;
var ajax_scroll_nowScrollX=0;
var ajax_scroll_nowScrollY=0;
var ajax_scroll_width=0;
var ajax_scroll_height=0;
var ajax_scroll_saveX=0;
var ajax_scroll_saveY=0;
var ajax_scroll_eventX=0;
var ajax_scroll_eventY=0;
var ajax_scroll_eventXabs = 0;
var ajax_scroll_eventYabs = 0;
var ajax_scroll_minX=0;
var ajax_scroll_minY=0;
var ajax_scroll_maxX=0;
var ajax_scroll_maxY=0;
var ajax_zoomtip_flg=false;
var ajax_scroll_border=0;

var ajax_tooltipObj = false;
var ajax_tooltipObj_iframe = false;

var ajax_tooltip_MSIE = false;
var ajax_tooltip_zoom_per = 1.0;
var ajax_browser_ie = false;
var ajax_browser_gecko = false;


if(navigator.userAgent.indexOf('MSIE')>=0)ajax_tooltip_MSIE=true;


function ajax_showZoomtip(externalFile,inputObj, commentId, cnvPath, width, height, orgwidth, orgheight, border)
{
    if( externalFile == null || externalFile == '' )
    {
        return;
    }
	if( ajax_isShowTooltip() )
	{
    	ajax_zoomtip_flg = false;
		ajax_hideTooltip()
		return;
	}
	ajax_scroll_border=border;
	ajax_zoomtip_flg = true;
	var pos = ajax_showZoomtip_get_pos( inputObj );
	ajax_scroll_minX = Math.floor(pos.x) + border;
	ajax_scroll_minY = Math.floor(pos.y) + border;
	ajax_scroll_maxX = ajax_scroll_minX + width;
	ajax_scroll_maxY = ajax_scroll_minY + height;
	ajax_tooltip_set_convert_path( '../', cnvPath );

    ajaxTooltip_setZoomScrollPos();
	ajax_tooltip_zoom_per = parseFloat(orgwidth) / parseFloat(width);
	ajax_showTooltip(externalFile,inputObj, commentId);
    ajaxTooltip_setZoomPos();
}

function ajax_showZoomtip_get_pos( inputObj )
{
	var target = inputObj;
	var pos = new function(){ this.x = 0; this.y = 0; }
	while( target )
	{
		pos.x += target.offsetLeft; 
		pos.y += target.offsetTop; 
		target = target.offsetParent;
		if ( target != null && ajax_browser_ie)
		{
			var style1 = getElementStyle(target,"borderLeftWidth","border-left-width");
			var style2 = getElementStyle(target,"borderTopWidth","border-top-width");
			if( style1 != null )
			{
				pos.x += (parseInt(style1) || 0);
			}
			if( style2 != null )
			{
				pos.y += (parseInt(style2) || 0);
			}
		}
	}
	
	if (ajax_browser_gecko)
	{
		var bd = document.getElementsByTagName("BODY")[0];
		var style3 = getElementStyle(bd,"borderLeftWidth","border-left-width");
		var style4 = getElementStyle(bd,"borderTopWidth","border-top-width");

		if( style3 != null )
		{
			pos.x += 2*(parseInt(style3) || 0);
		}
		if( style4 != null )
		{
			pos.y += 2*(parseInt(style4) || 0);
		}
	}
	return pos;
}

function getElementStyle(elemID, IEStyleProp, CSSStyleProp)
{
	var elem;
	if(typeof(elemID) == "string")
	{
		elem = document.getElementById(elemID);
	}
	else
	{
		elem = elemID;
	}
	if(elem.currentStyle)
	{
		return elem.currentStyle[IEStyleProp];
	}
	else if(window.getComputedStyle)
	{
		var compStyle = window.getComputedStyle(elem, "");
		return compStyle.getPropertyValue(CSSStyleProp);
	}
	return "";
}



function ajax_showTooltip(externalFile,inputObj, commentId)
{
    if( externalFile == null || externalFile == '' )
    {
        return;
    }
	if(!ajax_tooltipObj)
	{
		ajax_tooltipObj = document.createElement('DIV');
		ajax_tooltipObj.style.position = 'absolute';
		ajax_tooltipObj.id = 'ajax_tooltipObj';		
		document.body.appendChild(ajax_tooltipObj);

		
		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';
		}
	}
//	ajax_hideTooltip();

	ajax_loadContent('ajax_tooltip_content',ajax_tooltipObj,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);

	// Find position of tooltip
	ajax_tooltipObj.style.display='block';

}

function ajax_positionTooltip(inputObj)
{
	var leftPos = (ajaxTooltip_getLeftPos(inputObj) + inputObj.offsetWidth);
	var topPos = ajaxTooltip_getTopPos(inputObj);
//	var leftPos = event.x + 10;
//	var topPos = event.y + 10;
	
	
	var rightedge=ajax_tooltip_MSIE? document.body.clientWidth : window.innerWidth;
	var bottomedge=ajax_tooltip_MSIE? document.body.clientHeight : window.innerHeight;

	var scrollleft = ajax_tooltip_MSIE? document.body.scrollLeft : window.scrollLeft;
	var scrolltop = ajax_tooltip_MSIE? document.body.scrollTop : window.scrollTop;

    if (ajax_tooltip_MSIE && typeof document.documentElement.clientWidth != "undefined")
    {
        scrolltop = document.documentElement.scrollTop;
        scrollleft = document.documentElement.scrollLeft;
        rightedge = document.documentElement.clientWidth;
        bottomedge = document.documentElement.clientHeight;
    }

//	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 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( leftPos + 500 > rightedge ){
		leftPos = scrollleft + (rightedge - 500);
	}
	if( topPos + 500 > bottomedge ){
		topPos = scrolltop + (bottomedge - 500);
	}
	
	ajax_tooltipObj.style.left = leftPos + 'px';
	ajax_tooltipObj.style.top = topPos + 'px';	

}


function ajax_hideTooltip()
{
	if(ajax_tooltipObj){
		ajax_tooltipObj.style.display='none';
	}
}

function ajax_visibleTooltip()
{
	if(ajax_tooltipObj)
	{
	    if( ajax_tooltipObj.style.display == 'none' )
	    {
		    ajax_tooltipObj.style.display='block';
		}
	}
}

function ajax_isShowTooltip()
{
	if(ajax_tooltipObj)
	{
		if( ajax_tooltipObj.style.display !='none' )
		{
			return(true);
		}
	}
	return(false);
}

function ajaxTooltip_getTopPos(inputObj)
{		
//  var returnValue = inputObj.offsetTop;
  var returnValue = inputObj.offsetTop + (inputObj.offsetHeight / 2);

  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;
}


window.onload = function ()
{
	init();
}



function ajaxTooltip_msUp()
{
	if( !ajax_zoomtip_flg )
	{
		ajax_hideTooltip();
	}
}

function ajaxTooltip_msdown(evt)
{
	ajaxTooltip_getscroll(evt);
}

function ajaxTooltip_msmove(evt){
   	if( !ajax_zoomtip_flg )
   	{
   	    return;
   	}
	ajaxTooltip_getscroll(evt);
	if( ajax_scroll_eventXabs < ajax_scroll_minX ||
		ajax_scroll_eventYabs < ajax_scroll_minY ||
		ajax_scroll_eventXabs > ajax_scroll_maxX ||
		ajax_scroll_eventYabs > ajax_scroll_maxY )
	{
        if( ajax_isShowTooltip() )
        {
            ajax_hideTooltip()
        }
        return;
    }
    if( !ajax_isShowTooltip() )
    {
        ajax_visibleTooltip();
    }
    ajaxTooltip_setZoomScrollPos();
    ajaxTooltip_setZoomPos();
}

function ajaxTooltip_setZoomScrollPos()
{
	var left = ajax_scroll_eventXabs - ajax_scroll_minX - 20;
	var top = ajax_scroll_eventYabs - ajax_scroll_minY - 40;
	x = left * ajax_tooltip_zoom_per;
	y = top * ajax_tooltip_zoom_per;
	ajax_tooltip_set_scrollpos(x, y);
}

function ajaxTooltip_setZoomPos()
{
	ajax_tooltipObj.style.left = ajax_scroll_eventXabs + 2 + 'px';
	ajax_tooltipObj.style.top = ajax_scroll_eventYabs - 40 + 'px';	
	ajax_tooltip_scrollpos();
}

function init(){
	document.body.onmouseup = ajaxTooltip_msUp;
	document.body.onmousemove = ajaxTooltip_msmove;
	document.body.onmousedown = ajaxTooltip_msdown;
}

function ajaxTooltip_getscroll(evt)
{
	if(document.all)
	{ // IE4, IE5, IE6
		ajax_scroll_nowScrollX = document.body.scrollLeft || document.documentElement.scrollLeft;
		ajax_scroll_nowScrollY = document.body.scrollTop || document.documentElement.scrollTop;
		ajax_scroll_eventX = event.clientX;
		ajax_scroll_eventY = event.clientY;
		ajax_scroll_width = document.body.scrollWidth;
		ajax_scroll_height = document.body.scrollHeight;
		ajax_browser_ie = true;
	}else if(document.layers ||
		(navigator.userAgent.indexOf("Opera") != -1 ||
		window.opera))
	{ // NN4, Opera6
		ajax_scroll_nowScrollX = window.pageXOffset;
		ajax_scroll_nowScrollY = window.pageYOffset;
		ajax_scroll_eventX = evt.x;
		ajax_scroll_eventY = evt.y;
		ajax_scroll_width = document.body.scrollWidth;
		ajax_scroll_height = document.body.scrollHeight;
	}else if(navigator.userAgent.indexOf("Gecko") != -1)
	{ // NS6, Mozilla
		ajax_scroll_nowScrollX = window.scrollX;
		ajax_scroll_nowScrollY = window.scrollY;
		ajax_scroll_eventX = evt.clientX;
		ajax_scroll_eventY = evt.clientY;
		ajax_scroll_width = document.body.scrollWidth;
		ajax_scroll_height = document.body.scrollHeight;
		ajax_browser_gecko = true;
	}else
	{
		ajax_scroll_nowScrollX = ajax_scroll_nowScrollY = 0;
		ajax_scroll_eventX = 0;
		ajax_scroll_eventY = 0;
	}
	ajax_scroll_eventXabs = ajax_scroll_eventX + ajax_scroll_nowScrollX;
	ajax_scroll_eventYabs = ajax_scroll_eventY + ajax_scroll_nowScrollY;
}
