  function openWindow(url,id,w,h) {
    window.open(url,id,'width='+w+',height='+h+',toolbar=no,menubar=no,location=no,status=yes,directories=no,resizable=yes,scrollbars=yes');
  }
  
  var POS_UP_RIGHT   = "UP_RIGHT";
  var POS_UP_LEFT    = "UP_LEFT";
  var POS_DOWN_RIGHT = "DOWN_RIGHT";
  var POS_DOWN_LEFT  = "DOWN_LEFT";
    
  var DX = 10;
  var DY = 10;
  var TOOLTIP_DELAY = 500;
  
  var tooltipTimerId = null;
  var tooltipInfo = null;
  
  /**
   * tooltip info object
   ************************************/
  function floaterInfo(id,x,y,position) {
    this.id = id;
    this.x = x;
    this.y = y;
    this.visible = false;
    this.position = position;
  }
  

  function moveFloater(floaterElement,x,y,position) {
    var wSize = getWindowSize();
    var scroll = getWindowScroll();

    var w = floaterElement.offsetWidth;
    var h = floaterElement.offsetHeight;
    //
    var newLeft = x+DX;
    if (position) {
      if (position==POS_UP_LEFT || position==POS_DOWN_LEFT) newLeft = x-DX-w;
    }
    if (newLeft+w-scroll[0]>wSize[0]) newLeft = x-DX-w;
    if (newLeft<0) newLeft = x+DX;
    
    var newTop = y+DY;
    if (position) {
      if (position==POS_UP_LEFT || position==POS_UP_RIGHT) newTop = y-DY-h;
    }
    if (newTop+h-scroll[1]>wSize[1]) newTop = y-DY-h;
    if (newTop<0) newTop = y+DY;
    //
    floaterElement.style.left = newLeft+"px";
    floaterElement.style.top = newTop+"px";
  }
  
  function showFLater() {
    if (tooltipInfo!=null) {
      var floaterElement = document.getElementById(tooltipInfo.id);
      if (floaterElement) {
        floaterElement.style.visibility = "visible"; 
        moveFloater(floaterElement,tooltipInfo.x,tooltipInfo.y,tooltipInfo.position);
        tooltipInfo.visible = true;
      }
    }
    //
    tooltipTimerId = null;
  }

  function processFEnter(event, id, position) {
    if (!isEnabledEvents()) return true;
    var e = new MouseEvent(event);
    
    //
    if (tooltipTimerId==null) {
      if (position) tooltipInfo = new floaterInfo(id,e.x,e.y,position);
      else tooltipInfo = new floaterInfo(id,e.x,e.y,null);
      //
      tooltipTimerId = setTimeout('showFLater()',TOOLTIP_DELAY);
    }
    
    //
    else if (tooltipInfo!=null) {
      tooltipInfo.x = e.x;
      tooltipInfo.y = e.y;
      //
      if (tooltipInfo.visible) {
        var floaterElement = document.getElementById(tooltipInfo.id);
        if (floaterElement) {
          moveFloater(floaterElement,tooltipInfo.x,tooltipInfo.y,tooltipInfo.position);
        }  
      }
    }
  }

  function processFExit(event, id) {
    if (!isEnabledEvents()) return true;
    
    //
    if (tooltipTimerId!=null) {
      clearTimeout(tooltipTimerId);
      tooltipTimerId = null;
    }
    
    //
    var floaterElement = document.getElementById(id);
    if (floaterElement) floaterElement.style.visibility = "hidden";
  }

  function processFMove(event, id) {
    if (!isEnabledEvents()) return true;
    var e = new MouseEvent(event);
    //
    var floaterElement = document.getElementById(id);
    if (floaterElement) {
      if (tooltipInfo!=null) {
        tooltipInfo.x = e.x;
        tooltipInfo.y = e.y;
      }  
      moveFloater(floaterElement,e.x,e.y,tooltipInfo.position);
    }
  }
  
