/** jsToolTip
  *
  * $Id: jstooltip.js,v 1.17 2001/12/07 22:55:07 rainwater Exp $
  *
  * Copyright (c) 2001 Robert Rainwater
  * Distributed Under the Terms of the GNU Lesser General Public License

  ***********************************************************
  
  *
  * I make some changes in this source for adding RTL support and Caption
  * This changes optimized for this site and may cause some errors in your
  * site!!!
  *
  * Ali Amirnezhad
  * ali@webilix.com
*/

_ie = document.getElementById&&document.all;
_mz = document.getElementById&&!_ie;

jsToolTipHandler = {
  mousemove : function(e){
	jsToolTip.x = e.clientX;
	jsToolTip.y = e.clientY;
  },
  mouseover : function(e){
	var fromEl = jsToolTip.getNode(e.relatedTarget||e.fromElement);
	var toEl = jsToolTip.getNode(e.target||e.toElement);
	if (!fromEl||!toEl) return;
	if (toEl.getAttribute("tooltip") && toEl!=fromEl) jsToolTip.showToolTip(toEl);
  },
  mouseout : function(e){
	var fromEl = jsToolTip.getNode(e.target||e.fromElement);
	var toEl = jsToolTip.getNode(e.relatedTarget||e.toElement);
	if (!fromEl||!toEl) return;
	if (fromEl.getAttribute("tooltip") && toEl!=fromEl) jsToolTip.hideToolTip(fromEl);
  }
}

jsToolTip = {
  getNode: function(obj) {
	if (!obj||_ie) return obj;
	while (obj.nodeType!=1) obj=obj.parentNode;
	return obj;
  },
  showToolTip : function(src) {
	if (src._timeoutshow) return;
	if (src._timeoutfade) { window.clearTimeout(src._timeoutfade); src._timeoutfade=null; }
	if (!src._tip) { src._tip = document.createElement("DIV"); document.body.appendChild(src._tip); }
	src._cfg = jsToolTipConfig.all[src.getAttribute("tooltip").match(/\|.*\|/)||"|DefaultConfig|"];
	src._tip.className = src._cfg.className;
    if (src.getAttribute("caption")) {
	  src._tip.innerHTML = "<div class=\"TOOLTIP_CAPTION\">" + src.getAttribute("caption").replace(/\|.*\|/,'') + "</div><div style=\"padding: 5px;\">" + src.getAttribute("tooltip").replace(/\|.*\|/,'') + "</div>";
    } else {
	  src._tip.innerHTML = "<div style=\"padding: 5px;\">" + src.getAttribute("tooltip").replace(/\|.*\|/,'') + "</div>";
    }
	jsToolTip._setOpacity(src._tip,0);
	var offsetX = window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft;
	var offsetY = window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop;
	showLeft = jsToolTip.x - (src._tip.offsetWidth / 2) + offsetX;
	if ((showLeft + src._tip.offsetWidth + 30) > screen.width) { showLeft = screen.width - src._tip.offsetWidth - 30; }
	if (showLeft < 10) { showLeft = 10; }
	src._tip.style.left = showLeft  + "px";
	src._tip.style.top = jsToolTip.y + 15 + offsetY + "px";
	src._tip.style.visibility = "visible";
	src._timeoutshow = window.setTimeout(function () { jsToolTip._showToolTip(src,1) }, src._cfg.showTimeout);
    src._timeoutfade = window.setTimeout(function () { jsToolTip._hideToolTip(src,1) }, 5000);
  },
  _showToolTip : function(src,c) {
	if (c<=src._cfg.showSteps) {
	  jsToolTip._setOpacity(src._tip,Math.ceil(src._cfg.opacity/src._cfg.showSteps)*c);
	  src._timeoutshow = window.setTimeout(function () { jsToolTip._showToolTip(src,c+1) }, src._cfg.inTimeout);
	  return;
	}
	src._timeoutshow = null;
  },
  hideToolTip : function(src) {
	src._timeoutfade = window.setTimeout(function () { jsToolTip._hideToolTip(src,1) }, src._cfg.hideTimeout);
  },
  _hideToolTip : function(s,c) {
	if (s._tip) {
	  if (c<=s._cfg.fadeSteps) {
		jsToolTip._setOpacity(s._tip,s._cfg.opacity-(Math.floor(s._cfg.opacity/s._cfg.fadeSteps*c)));
		s._timeoutfade = window.setTimeout(function () { jsToolTip._hideToolTip(s,c+1) }, s._cfg.fadeTimeout);
		return;
	  }
	  s._tip.style.visibility = "hidden";
	  s._timeoutfade = null;
	}
  },
  _setOpacity : function(s,o) {
	if (_ie) s.style.filter = "alpha(opacity="+o+")";
	else s.style.MozOpacity = o/100;
  }
}

function jsToolTipConfig() {
  this.id		   = arguments[0];
  this.hideTimeout = arguments[1]||0;
  this.fadeTimeout = arguments[2]||0;
  this.showTimeout = arguments[3]||0;
  this.inTimeout   = arguments[4]||0;
  this.fadeSteps   = arguments[5]||1;
  this.showSteps   = arguments[6]||1;
  this.opacity	   = arguments[7]||100;
  this.className   = arguments[8]||"TOOLTIP";
  jsToolTipConfig.all["|"+this.id+"|"] = this;
}
jsToolTipConfig.all = [];
_jsToolTipDefaultConfig = new jsToolTipConfig("DefaultConfig");

if (_ie) {
  document.attachEvent("onmousemove", jsToolTipHandler.mousemove);
  document.attachEvent("onmouseover", jsToolTipHandler.mouseover);
  document.attachEvent("onmouseout", jsToolTipHandler.mouseout);
} else if (_mz) {
  document.addEventListener("mousemove", jsToolTipHandler.mousemove, false);
  document.addEventListener("mouseover", jsToolTipHandler.mouseover, false);
  document.addEventListener("mouseout", jsToolTipHandler.mouseout, false);
}
