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.persistent_show = this.persistent_show.bind(this);
    this.dialog_box.hide = this.hide.bind(this);

    this.parent_element = this.dialog_box.parentNode;

    this.dialog_box.style.position = "absolute";

    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';

     	var top = this.getScrollTop() + ((this.winHeight() - (e_dims.height/2))/2) ;
	if(top>350)
		top = "180";

      this.dialog_box.style.top = top + 'px';
      this.dialog_box.style.zIndex = this.overlay.style.zIndex + 10;

        },
        destroyOverlay: function()
        {
            document.body.removeChild(this.overlay);
        },
        overlayExists: function()
        {
            if(this.overlay == null)
                return false;
            else
                return true;
        },
    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: 'fixed',
        	top: 0,
        	left: 0,
        	zIndex: 1000,
        	width: '100%',
        	backgroundColor: '#ffffff',
        	display: 'none'
        });
        document.body.insertBefore(this.overlay, document.body.childNodes[0]);
      }
    },

    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() {
     // this.overlay.style.height = this.bodyHeight()+'px';

     this.overlay.style.height = '100%';

      this.moveDialogBox('out');

      //this.overlay.onclick = this.hide.bind(this);

      //this.selectBoxes('hide');
      new Effect.Appear(this.overlay, {duration: 0.1, from: 0.0, to: 0.0});
      this.dialog_box.style.display = '';

      var e_dims = Element.getDimensions(this.dialog_box);

      var x = Math.round(document.viewport.getScrollOffsets().left +
                    ((document.documentElement.clientWidth - this.dialog_box.getWidth()))/2);
      var y = 0;
          y = Math.round(document.viewport.getScrollOffsets().top +
                    ((document.documentElement.clientHeight - this.dialog_box.getHeight()))/2);
      //alert(document.documentElement.clientHeight);
      var y2 = document.documentElement.clientHeight - (document.documentElement.clientHeight / 2) - (this.dialog_box.getHeight() / 2);//document.viewport.getScrollOffsets().top;
    //alert(y2);
      if(y > document.documentElement.clientHeight)
          y = y - y;//Math.round(document.viewport.getScrollOffsets().top +
                    //((document.documentElement.clientHeight - this.dialog_box.getHeight()))/2));
      this.dialog_box.style.left = x + 'px';
      if(!ie6){
        this.dialog_box.style.top = y2 + 'px';
      }
    },

    getScrollTop: function() {
    	return (window.pageYOffset)?window.pageYOffset:(document.documentElement && document.documentElement.scrollTop)?document.documentElement.scrollTop:document.body.scrollTop;
    },

    persistent_show: function() {
      this.overlay.style.height = this.bodyHeight()+'px';
      this.moveDialogBox('out');

      this.selectBoxes('hide');
      new Effect.Appear(this.overlay, {duration: 0.1, from: 0.0, to: 0.3});

      this.dialog_box.style.display = '';
    	this.dialog_box.style.left = '0px';
      var e_dims = Element.getDimensions(this.dialog_box);
    	this.dialog_box.style.left = ((this.winWidth()/2) - (e_dims.width)/2) + 'px';

    },

    hide: function() {
      this.selectBoxes('show');
      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)})
            },

                bodyWidth: function() {return document.body.offsetWidth || window.innerWidth || document.documentElement.clientWidth || 0;},
                bodyHeight: function() {return document.body.offsetHeight || window.innerHeight || document.documentElement.clientHeight || 0;},

            winWidth: function() {
		 var viewportwidth;

		 // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight

		 if (typeof window.innerWidth != 'undefined')
		 {
		      viewportwidth = window.innerWidth;
		 }

		// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)

		 else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0)
		 {
		       viewportwidth = document.documentElement.clientWidth;
		 }

		 // older versions of IE

		 else
		 {
		       viewportwidth = document.getElementsByTagName('body')[0].clientWidth
		 }
		 return viewportwidth;

            },
            winHeight: function() {
		 var viewportheight;

		 // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight

		 if (typeof window.innerHeight != 'undefined')
		 {
		      viewportheight = window.innerHeight
		 }

		// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)

		 else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientHeight != 'undefined' && document.documentElement.clientHeight != 0)
		 {
		       viewportheight = document.documentElement.clientHeight;
		 }

		 // older versions of IE

		 else
		 {
		       viewportheight = document.getElementsByTagName('body')[0].clientHeight;
		 }
		 return viewportheight;

            }

        });
