var TooltipManager = Class.create();
TooltipManager.prototype = {
  initialize: function(container_element) {
    var container_element = $(container_element);

    this.tooltip = $div();
    this.tooltip.addClassName("active-tooltip").hide();
    this.over = { self: false, thumb: false };
    container_element.appendChild(this.tooltip);

    var tooltips = container_element.getElementsBySelector(".gallery li");
    tooltips.invoke("observe", "mouseover", this._mouseoverThumb.bindAsEventListener(this));
    tooltips.invoke("observe", "mouseout", this._mouseoutThumb.bindAsEventListener(this));

    this.tooltip.observe("mouseover", this._mouseoverTooltip.bindAsEventListener(this));
    this.tooltip.observe("mouseout", this._mouseoutTooltip.bindAsEventListener(this));
    this.tooltip.observe("click", this._clickTooltip.bindAsEventListener(this));
  },
  _mouseoverThumb: function(event) {
    var element = Event.findElement(event, "li");
    var tooltip = element.down(".tooltip-container");
    var original = element.down(".captioned");

    this.over.thumb = true;

    Position.clone(original, this.tooltip, { offsetLeft: -30, offsetTop: -30, setWidth: false, setHeight: false });
    this.tooltip.update(tooltip.innerHTML);
    this.tooltip.show();
  },
  _mouseoutThumb: function() {
    this.over.thumb = false;
    if (!this.over.self) {
      this.tooltip.hide();
    }
  },
  _mouseoverTooltip: function() {
    this.over.self = true;
    this.tooltip.show();
  },
  _mouseoutTooltip: function() {
    this.over.self = false;
    if (!this.over.thumb) {
      this.tooltip.hide();
    }
  },
  _clickTooltip: function() {
    document.location.href = this.tooltip.down("a").href;
  }
}
