var Dialog = {};
Dialog.Box = Class.create();
//Dialog.open_count = 0;
Object.extend(Dialog.Box.prototype, {
  initialize: function(id, url, options) {
    this.createOverlay();
    this.createDialog(id);
    
    this.dialog_box = $(id);
    this.dialog_box.show = this.show.bind(this);
    this.dialog_box.hide = this.hide.bind(this);
    this.overlay.onclick = this.hide.bind(this);

    var e_dims = Element.getDimensions(this.dialog_box);
    var b_dims = Element.getDimensions(this.overlay);
    
    this.dialog_box.style.position = "absolute";
    this.dialog_box.style.left = ((b_dims.width/2) - (e_dims.width/2)) + 'px';
    this.dialog_box.style.top = '12px';
    this.dialog_box.style.zIndex = this.overlay.style.zIndex + 1;
    
    if(url)
	    new Ajax.Updater(this.dialog_box, url, options);
    
    this.show();
    
  },

  createOverlay: function() {
    if($('dialog_overlay')) {
      this.overlay = $('dialog_overlay');
    } else {
      this.overlay = document.createElement('div');
      this.overlay.id = 'dialog_overlay';
      Object.extend(this.overlay.style, {
      	position: 'absolute',
      	top: 0,
      	left: 0,
      	zIndex: 90,
      	width: '100%',
      	height: '100%',
      	opacity: 0.3,
      	backgroundColor: '#000000',
      	display: 'none'
      });
      document.body.insertBefore(this.overlay, document.body.childNodes[0]);
    }
  },
  
  createDialog: function(id) {
    if($(id)) {
      this.dialog_box = $(id);
    } else {
      this.dialog_box = document.createElement('div');
      this.dialog_box.id = id;
      Object.extend(this.dialog_box.style, {
      	position: 'absolute',
      	display: 'none'
      });
      document.body.insertBefore(this.dialog_box, document.body.childNodes[0]);
      new Draggable(this.dialog_box);
    }
  },

  show: function() {
    if(!Dialog.open_count)
        new Effect.Appear(this.overlay, {duration: 0.1, from: 0.0, to: 0.3});
    this.dialog_box.style.display = '';
    Dialog.open_count++;
  },

  hide: function() {
 //   Dialog.open_count--;
 //   if(!Dialog.open_count)
        new Effect.Fade(this.overlay, {duration: 0.1});
    
    this.dialog_box.style.display = 'none';
  }
});

