function Dialogs () {
	window.dialogs = this;
	this.resize_set = false;
  this.elements = [];
	this.overlay = null;
	
  this.create = function (html, closer, locker, mover) {
  	if (this.overlay == null) {
      this.overlay = $("<div id='dialog_overlay'></div>");
    }
    this.overlay.prependTo('body').css({
          backgroundColor: '#000000',
          opacity: 0,
          width: documentWidth(),
          height: documentHeight(),
          position: 'absolute',
          zIndex: 1000
        }).bind('click', this, this.closeAll).animate({opacity: .5}, 1150);
    
    var l = this.elements.length;
    this.elements[l] = $(html).prependTo('body');
		this.elements[l].css({
				opacity: 0,
				position: 'absolute',
				zIndex: 1001,
				marginTop: ((viewportHeight()/2) - (this.elements[l].height()/2)),
				marginLeft: ((viewportWidth()/2) - (this.elements[l].width()/2)),
		}).animate({opacity: 1}, 1150);
    this.elements[l].find(closer).bind('click', {dialogs: this, elm: this.elements[l]}, this.close);
    
    if (!this.resize_set) {
      this.resize_set = true;
      $(window).bind('resize', this, this.resize);
    }
    this.elements[l].data('floater', new Floater(this.elements[l], null, null, locker, mover));
    $(window).trigger('resize');
    this.resize({data: this});
  }
  
  this.closeAll = function (event) {
    for (var i = 0; i < event.data.elements.length; i++) {
      event.data.elements[i].animate({opacity: 0}, 750, null, function(){
				$(this).remove();
			});
    }
    event.data.overlay.animate({opacity: 0}, 750, null, function(){$(this).remove();});
  }
  
  this.close = function (event) {
  	event.preventDefault();
    for (var i = 0; i < event.data.dialogs.elements.length; i++) {
      if (event.data.dialogs.elements[i] === event.data.elm) {
        event.data.dialogs.elements[i].animate({opacity: 0}, 750, null, function(){$(this).remove();});
        event.data.dialogs.elements.splice(i, 1);
      }
    } 
    event.data.dialogs.overlay.animate({opacity: 0}, 750, null, function(){$(this).remove();});
  }
  
  this.resize = function (event) {
    for (var i = 0; i < event.data.elements.length; i++) {
			event.data.elements[i].css({
					marginTop: ((viewportHeight()/2) - (event.data.elements[i].height()/2)),
					marginLeft: ((viewportWidth()/2) - (event.data.elements[i].width()/2)),
			});
		}
    event.data.overlay.css({width: 0,height: 0}).css({width: documentWidth(),height: documentHeight()});
  }
}

new Dialogs();
