var iframeCache = null;
var Tooltip = Class.create();
window.hasEffectLib = (typeof Effect != 'undefined');
Tooltip.prototype = {
  initialize : function(element, tooltip) {
    this.element = $(element);
    this.tooltip = tooltip;
    this.options = Object.extend({
      className: "tooltip",
      delta_y: 0,
      delta_x: 0,
      min_distance_x: 10,
      min_distance_y: 10,
      zindex: 100,
      iframe_image: '/img/spacer.gif',
      onMouseOver: this.showTooltip,
      onMouseOut: this.hideTooltip
    }, arguments[2] || {});

    this.tooltip = $(document.createElement("div"));
    this.tooltip.addClassName(this.options.className);
    this.tooltip.innerHTML = tooltip;
    document.body.appendChild(this.tooltip);
    this.tooltip.hide();

    if (!iframeCache) {
      var iframe = document.createElement("iframe");
      iframe.setAttribute("id", this.element.id + '_iefix');
      iframe.setAttribute("src", "/img/spacer.gif");
      iframe.setAttribute("frameBorder", "0");
      iframe.setAttribute("scrolling", "no");
      Element.setStyle(iframe, { position:'absolute',
                                       top: "0px",
                                       left: "0px",
                                       zindex:1,
                                       display: 'none'
                                     });
      iframeCache = iframe;
      document.body.appendChild(iframe);
    }

    Event.observe(this.element, "mouseover", this.options.onMouseOver.bindAsEventListener(this));
    Event.observe(this.element, "mouseout", this.options.onMouseOut.bindAsEventListener(this));
  },
  showTooltip : function(event) {
    this.moveTooltip(event);
    new Element.show(iframeCache);
    new Element.show(this.tooltip);
  },
  hideTooltip : function(event) {
    new Element.hide(this.tooltip);
    new Element.hide(iframeCache);
  },
  destroyTooltip : function() {
    Event.stopObserving(this.element, "mouseover", this.options.onMouseOver);
    Event.stopObserving(this.element, "mouseout", this.options.onMouseOut);
  },
  moveTooltip: function(event){
    Event.stop(event);
    var mouse_x = Event.pointerX(event);
    var mouse_y = Event.pointerY(event);
    var dimensions = Element.getDimensions(this.tooltip);
    var element_width = dimensions.width;
    var element_height = dimensions.height;
    var window_width = document.body.clientWidth || window.innerWidth;
    var window_height = document.body.clientHeight || window.innerHeight;
    if ((element_width + mouse_x) >= (window_width - this.options.min_distance_x)) {
      mouse_x = mouse_x - element_width;
      mouse_x = mouse_x - this.options.min_distance_x;
    } else {
      mouse_x = mouse_x + this.options.min_distance_x;
    }

    if ((element_height + mouse_y) >= (window_height - this.options.min_distance_y)){
      mouse_y = mouse_y - element_height;
      mouse_y = mouse_y - this.options.min_distance_y;
    } else {
      mouse_y = mouse_y + this.options.min_distance_y;
    }

    Element.setStyle(this.tooltip, { position:'absolute',
                                     top: mouse_y + this.options.delta_y + "px",
                                     left: mouse_x + this.options.delta_x + "px",
                                     zindex:this.options.zindex
                                   });
    // for ie bug http://support.microsoft.com/kb/177378
    if (iframeCache) {
      iframeCache.style.top = mouse_y + this.options.delta_y + "px";
      iframeCache.style.left = mouse_x + this.options.delta_x + "px";
      iframeCache.setAttribute("width", dimensions.width);
      iframeCache.setAttribute("height", dimensions.height);
    }
  }
}


