var ExtendedPopup = Class.create({
  initialize: function(popup_layer, popup_link) {
    this.popup_layer = $(popup_layer);
    this.popup_link = $(popup_link);
    
    this.focusing = false;
    
    Event.observe(this.popup_layer, 'mouseover', this.mouseover.bindAsEventListener(this));
    Event.observe(this.popup_layer, 'mouseout', this.mouseout.bindAsEventListener(this));
    Event.observe(document, 'click', this.click.bindAsEventListener(this));
  },
  
  mouseover: function(event) {
    this.focusing = true;
  },
  
  mouseout: function(event) {
    this.focusing = false;
  },
  
  click: function(event) {
    if (!(event.element() === this.popup_link || event.element().descendantOf(this.popup_link)) && this.popup_layer.visible() && !this.focusing) this.popup_layer.hide();
  }
});

var extendedPopup = {};
