home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 January / PCWorld_2003-01_cd.bin / Software / TemaCD / proxomitron / prx4-4fcz.exe / html / jstooltip.js < prev    next >
Text File  |  2002-06-17  |  5KB  |  125 lines

  1. /** jsToolTip
  2.   *
  3.   * $Id: jstooltip.js,v 1.17 2001/12/07 22:55:07 rainwater Exp $
  4.   *
  5.   * Copyright (c) 2001 Robert Rainwater
  6.   * Distributed Under the Terms of the GNU Lesser General Public License
  7.   */
  8.  
  9. _ie = document.getElementById&&document.all;
  10. _mz = document.getElementById&&!_ie;
  11.  
  12. var mrX;
  13. var xfirst;
  14. var yfirst;
  15. var mrY;
  16.  
  17. jsToolTipHandler = {
  18.     mousemove : function(e){
  19.         jsToolTip.x = e.clientX;
  20.         jsToolTip.y = e.clientY;
  21.     },
  22.     mouseover : function(e){
  23.         var fromEl = jsToolTip.getNode(e.relatedTarget||e.fromElement);
  24.         var toEl = jsToolTip.getNode(e.target||e.toElement);
  25.         if (!fromEl||!toEl) return;
  26.         if (toEl.getAttribute("tooltip") && toEl!=fromEl) jsToolTip.showToolTip(toEl);
  27.     },
  28.     mouseout : function(e){
  29.         var fromEl = jsToolTip.getNode(e.target||e.fromElement);
  30.         var toEl = jsToolTip.getNode(e.relatedTarget||e.toElement);
  31.         if (!fromEl||!toEl) return;
  32.         if (fromEl.getAttribute("tooltip") && toEl!=fromEl) jsToolTip.hideToolTip(fromEl);
  33.     }
  34. }
  35.  
  36. jsToolTip = {
  37.     getNode: function(obj) {
  38.         if (!obj||_ie) return obj;
  39.         while (obj.nodeType!=1) obj=obj.parentNode;
  40.         return obj;
  41.     },
  42.     showToolTip : function(src) {
  43.         if (src._timeoutshow) return;
  44.         if (src._timeoutfade) { window.clearTimeout(src._timeoutfade); src._timeoutfade=null; }
  45.         if (!src._tip) { src._tip = document.createElement("DIV"); document.body.appendChild(src._tip); }
  46.         src._cfg = jsToolTipConfig.all[src.getAttribute("tooltip").match(/\|.*\|/)||"|DefaultConfig|"];
  47.         src._tip.className = src._cfg.className;
  48.         src._tip.innerHTML = src.getAttribute("tooltip").replace(/\|.*\|/,'');
  49.         jsToolTip._setOpacity(src._tip,0);
  50.         var offsetX = window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft;
  51.         var offsetY = window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop;
  52.         if (jsToolTip.x>document.documentElement.offsetWidth - src._tip.offsetWidth)
  53.             src._tip.style.left = document.documentElement.offsetWidth - src._tip.offsetWidth + offsetX + "px";
  54.         else src._tip.style.left = jsToolTip.x + 12 + offsetX + "px";
  55.         src._tip.style.top = jsToolTip.y + 15 + offsetY + "px";
  56.         src._tip.style.visibility = "hidden";
  57.         xfirst=jsToolTip.x;
  58.         yfirst=jsToolTip.y;
  59.         timer = window.setTimeout(function () { jsToolTip._showToolTip(src,1) }, src._cfg.showTimeout);
  60.     },
  61.     _showToolTip : function(src,c) {
  62.         mrX=Math.abs(xfirst-jsToolTip.x);
  63.         mrY=Math.abs(yfirst-jsToolTip.y);
  64.         if((mrX<src._cfg.TipArea)&&(mrY<src._cfg.TipArea)){
  65.         src._tip.style.visibility = "visible";
  66.         if (c<=src._cfg.showSteps) {
  67.             jsToolTip._setOpacity(src._tip,Math.ceil(src._cfg.opacity/src._cfg.showSteps)*c);
  68.             src._timeoutshow = window.setTimeout(function () { jsToolTip._showToolTip(src,c+1) }, src._cfg.inTimeout);
  69.             return;
  70.         }
  71.         src._timeoutshow = null;
  72.         }
  73.     },
  74.     hideToolTip : function(src) {
  75.         mrX=Math.abs(xfirst-jsToolTip.x);
  76.         mrY=Math.abs(yfirst-jsToolTip.y);
  77.         if((mrX>src._cfg.TipArea)&&(mrY>src._cfg.TipArea)){
  78.         src._timeoutfade = window.setTimeout(function () { jsToolTip._hideToolTip(src,1) }, src._cfg.hideTimeout);
  79.         } else {
  80.         TimerID = window.setTimeout(function () { jsToolTip.hideToolTip(src) }, 100);
  81.         }
  82.     },
  83.     _hideToolTip : function(s,c) {
  84.         if (s._tip) {
  85.             if (c<=s._cfg.fadeSteps) {
  86.                 jsToolTip._setOpacity(s._tip,s._cfg.opacity-(Math.floor(s._cfg.opacity/s._cfg.fadeSteps*c)));
  87.                 s._timeoutfade = window.setTimeout(function () { jsToolTip._hideToolTip(s,c+1) }, s._cfg.fadeTimeout);
  88.                 return;
  89.             }
  90.             s._tip.style.visibility = "hidden";
  91.             s._timeoutfade = null;
  92.         }
  93.     },
  94.     _setOpacity : function(s,o) {
  95.         if (_ie) s.style.filter = "alpha(opacity="+o+")";
  96.         else s.style.MozOpacity = o/100;
  97.     }
  98. }
  99.  
  100. function jsToolTipConfig() {
  101.     this.id            = arguments[0];
  102.     this.hideTimeout= arguments[1]||100;
  103.     this.fadeTimeout= arguments[2]||10;
  104.     this.showTimeout= arguments[3]||10;
  105.     this.inTimeout  = arguments[4]||10;
  106.     this.fadeSteps    = arguments[5]||10;
  107.     this.showSteps    = arguments[6]||15;
  108.     this.opacity    = arguments[7]||90;
  109.     this.className    = arguments[8]||"jstooltip";
  110.     this.TipArea    = arguments[9]||30;
  111.     jsToolTipConfig.all["|"+this.id+"|"] = this;
  112. }
  113. jsToolTipConfig.all = [];
  114. _jsToolTipDefaultConfig = new jsToolTipConfig("DefaultConfig");
  115.  
  116. if (_ie) {
  117.     document.attachEvent("onmousemove",jsToolTipHandler.mousemove);
  118.     document.attachEvent("onmouseover",jsToolTipHandler.mouseover);
  119.     document.attachEvent("onmouseout",jsToolTipHandler.mouseout);
  120. }
  121. else if (_mz) {
  122.     document.addEventListener("mousemove",jsToolTipHandler.mousemove,false);
  123.     document.addEventListener("mouseover",jsToolTipHandler.mouseover,false);
  124.     document.addEventListener("mouseout",jsToolTipHandler.mouseout,false);
  125. }