/**
 * tooltip.js version 1.0.0
 * Affichage de tooltip
 */
 
var Tooltip = Class.create();
Tooltip.prototype = {
	initialize : function(id, _contentId)
	{
		this.followMouse = true;
		this.fixed = false;
		this.offX = 8;
		this.offY = 12;
		this.tipID = id;
		this.ready = false;
		this.tip = null;
		this.tipContentId = _contentId;
		this.mouseMoveFunction = null;

		if(document.createElement&&document.body&&typeof document.body.appendChild!="undefined")
		{
			if(!$(this.tipID))
			{
				var el=document.createElement("DIV");
				el.id=this.tipID;
				document.body.appendChild(el);
			}
			this.ready=true;
		}
	},
	show:function(e,msg,x,y)
	{
		this.tip=$(this.tipID);
		if(this.followMouse && !this.fixed)
		{
			this.mouseMoveFunction = this.trackMouse.bindAsEventListener(this);
			document.onmousemove = this.mouseMoveFunction;
		}
		this.writeTip("");
		this.writeTip(msg);
		viewport.getAll();

		if (this.fixed == true)
			this.positionFixedTip(x,y);
		else
			this.positionTip(e,this);
		$(this.tipID).style.visibility = 'visible';
	},
	writeTip:function(msg)
	{
		if (this.tipContentId!=null)
		{
			$(this.tipContentId).innerHTML=msg;
		}
		else
		{
			if(this.tip&&typeof this.tip.innerHTML!="undefined")
				this.tip.innerHTML=msg;
		}
	},
	positionTip:function(e)
	{
		if(this.tip&&this.tip.style)
		{
			var x=e.pageX?e.pageX:e.clientX+viewport.scrollX;
			var y=e.pageY?e.pageY:e.clientY+viewport.scrollY;
			if(x+this.tip.offsetWidth+this.offX>viewport.width+viewport.scrollX)
			{
				x=x-this.tip.offsetWidth-this.offX;
				if(x<0)
					x=0;
			}
			else
				x=x+this.offX;
			if(y+this.tip.offsetHeight+this.offY>viewport.height+viewport.scrollY)
			{
				y=y-this.tip.offsetHeight-this.offY;
				if(y<viewport.scrollY)
					y=viewport.height+viewport.scrollY-tooltiptip.offsetHeight;
			}
			else
				y=y+this.offY;

			this.tip.style.left=x+"px";
			this.tip.style.top=y+"px";
		}
	},
	positionFixedTip:function(x,y)
	{
		if(this.tip&&this.tip.style)
		{
			this.tip.style.left=x+"px";
			this.tip.style.top=y+"px";
		}
	},
	hide:function()
	{
		$(this.tipID).style.visibility = 'hidden';
		if(this.followMouse && !this.fixed)
			Event.stopObserving(document, 'mousemove', this.mouseMoveFunction, true);
		this.tip=null;
	},
	trackMouse:function(e)
	{
		this.positionTip(e);
	}
}
var viewport = {
  getWinWidth: function () {
    this.width = 0;
    if (window.innerWidth) this.width = window.innerWidth - 18;
    else if (document.documentElement && document.documentElement.clientWidth)
  		this.width = document.documentElement.clientWidth;
    else if (document.body && document.body.clientWidth)
  		this.width = document.body.clientWidth;
  },

  getWinHeight: function () {
    this.height = 0;
    if (window.innerHeight) this.height = window.innerHeight - 18;
  	else if (document.documentElement && document.documentElement.clientHeight)
  		this.height = document.documentElement.clientHeight;
  	else if (document.body && document.body.clientHeight)
  		this.height = document.body.clientHeight;
  },

  getScrollX: function () {
    this.scrollX = 0;
  	if (typeof window.pageXOffset == "number") this.scrollX = window.pageXOffset;
  	else if (document.documentElement && document.documentElement.scrollLeft)
  		this.scrollX = document.documentElement.scrollLeft;
  	else if (document.body && document.body.scrollLeft)
  		this.scrollX = document.body.scrollLeft;
  	else if (window.scrollX) this.scrollX = window.scrollX;
  },

  getScrollY: function () {
    this.scrollY = 0;
    if (typeof window.pageYOffset == "number") this.scrollY = window.pageYOffset;
    else if (document.documentElement && document.documentElement.scrollTop)
  		this.scrollY = document.documentElement.scrollTop;
  	else if (document.body && document.body.scrollTop)
  		this.scrollY = document.body.scrollTop;
  	else if (window.scrollY) this.scrollY = window.scrollY;
  },

  getAll: function () {
    this.getWinWidth(); this.getWinHeight();
    this.getScrollX();  this.getScrollY();
  }

}


/*** gestion d'affichage des tooltips ***/

createHvsTooltip = function (_id,_title,_width)
{
	var tooltip = new Tooltip(_id,_id+'_main');
        Element.setStyle(_id,{visibility:'hidden',position:'absolute',width:_width+'px'});
        
	var content =  document.createElement("div");
	content.id = _id+'_content';
	$(_id).appendChild(content);
        
	var detail =  document.createElement("div");
	detail.id=_id + '_detail';
	content.appendChild(detail);
        Element.setStyle(detail.id,{width:_width+'px'});
        $(detail.id).addClassName('dialog');
        
	var tooltip_top =  document.createElement("div");
	tooltip_top.id=_id + '_top';
	detail.appendChild(tooltip_top);
        $(tooltip_top.id).addClassName('window_top');
	$(tooltip_top.id).addClassName('harvest_header');
        
	var tooltip_title =  document.createElement("div");
	tooltip_title.id=_id + '_title';
	tooltip_title.innerHTML=_title;
	tooltip_top.appendChild(tooltip_title);
        $(tooltip_title.id).addClassName('harvest_title');
        
	var main =  document.createElement("div");
	main.id=_id + '_main';
	detail.appendChild(main);
        $(main.id).addClassName('harvest_content');
        $(main.id).addClassName('tooltip_content');
	return tooltip;
}

showTooltip = function(evt, tooltipobj, msg,_width,_title,_x,_y)
{
	if ( typeof tooltipobj == "undefined" || !tooltipobj.ready ) return;
        if (_width!=null)
        {
          Element.setStyle(tooltipobj.tipID,{width:_width+'px'});
          Element.setStyle(tooltipobj.tipID+'_detail',{width:_width+'px'});
        }
        if (_title!=null)
        {
          $(tooltipobj.tipID+'_title').innerHTML=_title;
        }
        tooltipobj.offX=_x!=null?_x:8;
        tooltipobj.offY=_y!=null?_y:12;
        
        tooltipobj.show(evt, msg);
}

hideTooltip = function(evt, tooltipobj)
{
	if ( typeof tooltipobj == "undefined" || !tooltipobj.ready ) return;
	tooltipobj.hide();
}
