var Dialog = {};
Dialog.Box = Class.create();
Object.extend(Dialog.Box.prototype, {
  initialize: function(id) {
    this.createOverlay()

    this.dialog_box = $(id)
    this.dialog_box.show = this.show.bind(this)
    this.dialog_box.hide = this.hide.bind(this)
    this.dialog_box.forceReload = this.forceReload.bind(this)

    this.parent_element = this.dialog_box.parentNode
	this.state = ''
	this.reloadOnExit = false

    var e_dims = Element.getDimensions(this.dialog_box)
    var b_dims = Element.getDimensions(this.overlay)
	this.dialog_box.style.left = ((b_dims.width/2) - (e_dims.width/2)) + 'px'
	this.hide()
  },

  createOverlay: function() {
    if($('dialogOverlay')) {
      this.overlay = $('dialogOverlay')
    } else {
      this.overlay = document.createElement('div')
      this.overlay.id = 'dialogOverlay'
      Object.extend(this.overlay.style, {
      	display: 'none'
      })
      document.body.insertBefore(this.overlay, document.body.childNodes[0])
    }
  },

  forceReload: function() {
    this.reloadOnExit = true
    $('dialogCancel').down().innerHTML = 'zamknij'
  },

  moveDialogBox: function(where) {
    Element.remove(this.dialog_box)
    if(where == 'back')
      this.dialog_box = this.parent_element.appendChild(this.dialog_box)
    else
      this.dialog_box = this.overlay.parentNode.insertBefore(this.dialog_box, this.overlay)
  },

  show: function(title, uri, params) {
    if (params == 'undefined')
      params = {}
    this.overlay.style.height = $(document.body).getHeight() + 'px'
    this.moveDialogBox('out')
    this.overlay.onclick = this.hide.bind(this)
    this.selectBoxes('hide')
    if (this.state == 'hidden')
      new Effect.Appear(this.overlay, {duration: 0.1, from: 0.0, to: 0.9})
    this.state = 'visible'
	$('dialogTitle').innerHTML = title
    this.dialog_box.style.display = ''
    contentBox = $('dialogContent')
    contentBox.startWaiting('throbber')
    new Ajax.Updater(contentBox, uri, {
      onComplete: function() {contentBox.stopWaiting()},
      parameters: params,
      evalScripts: true
    })
  },

  hide: function() {
    if (this.reloadOnExit)
      window.location.reload()
	else
	{
      this.selectBoxes('show')
      this.state = 'hidden'
      new Effect.Fade(this.overlay, {duration: 0.1})
      this.dialog_box.style.display = 'none'
      this.moveDialogBox('back')
      $A(this.dialog_box.getElementsByTagName('input')).each(function(e){if(e.type!='submit')e.value=''})
    }
  },

  selectBoxes: function(what) {
    $A(document.getElementsByTagName('select')).each(function(select) {
      Element[what](select)
    })

    if(what == 'hide')
      $A(this.dialog_box.getElementsByTagName('select')).each(function(select){Element.show(select)})
  }
});