Popup = Class.create({
  initialize: function(id, large){
    this._createElement(id, large);
    
    this.overlay = $('overlay') || new Element('div', {id: 'overlay'}).hide();
    $(document.body).insert(this.overlay);
    
    this._update = this._update.bind(this);
    this.options = {};
  },
  
  show: function() {
    this.overlay.show();
    this.element.show();
    if (document.viewport.getScrollOffsets().top > parseFloat(this.element.getStyle('top'))) {
      this.element.setStyle({top: document.viewport.getScrollOffsets().top + 'px'})
    }
    Popup.current = this;
  },
  
  hide: function(){
    Popup.current = null;
    this.overlay.hide();
    this.element.hide();
    if (this.options.cancel) this.options.cancel();
    this.options = {};
  },
  
  setAjaxContent: function(url, parameters, options) {
    this.options = options;
    new Ajax.Request(url, Object.extend({onComplete: this._update}, parameters || {}));
  },
  
  setURLContent: function(url, height) {
    var iframe = new Element('iframe', {frameborder: 0, src: url, name: "modal_frame", id:  "modal_frame", 
                                        style: 'width:100%;height:' + height + 'px'});
    this.content.setStyle('height', height + 'px');
    this.content.update(iframe);
    this.options = {};
    this.show();
  },
  
  setContent: function(content, options) {
    this.content.update(content);
    this.options = options || {};
    if (content.show) {
      content.show();
    }
    this.show();
  },
  
  _update: function(response) {
    this.content.update(response.responseText);
    this.show();
  },
  
  _createElement: function(id, large) {
    this.element = new Element('div').addClassName(large ? 'popin-large' : 'popin');
    if (id)
      this.element.id = id;
      
    this.content = new Element('div').addClassName('content');
    var middle = new Element('div').addClassName('middle');
    
    middle.insert(new Element('a').addClassName('small-button button-close').observe('click', this.hide.bind(this)))
          .insert(this.content);
    
    this.element.insert(new Element('div').addClassName('top'))
                .insert(middle)
                .insert(new Element('div').addClassName('bottom'))
                .hide();
    $(document.body).insert(this.element);
  }
});
Popup.current = null;