/* Released: 2010-04-01 15:32:58 */

/* Released: 2010-01-22 14:35:38 */

(function ($) {
  var ns = $.dialogbox = $.dialogbox || {};

  var getViewportSize = function() {
      var getMax = function(){
          var i = arguments.length;
          var max = arguments[--i];
          while (i--) {
              var a = arguments[i];
              if (a > max) max = a;
          }
          return max;
      };

      return [
          getMax($(document).width(), $(window).width()),
          getMax($(document).height(), $(window).height())
      ];
  };

  var getOverlayElement = function() {
      return $('body > .dialog-overlay')[0] || (function(){
          var overlay = $('<div class="dialog-overlay"></div>').css({
              'opacity' : 0.5
          })[0];
          $('body').prepend(overlay);
          return overlay;
      })();
  };

  var getElements = function() {
      return {
          overlay : getOverlayElement(),
          dialog : $('body > .gwt-DialogBox')[0]
      };
  };

  $.extend(ns, {

      showOverlay : function(callback) {
          var overlay = getOverlayElement();
          ns.resizeOverlay();
          $(overlay).fadeIn(500, callback);
      },

      resizeOverlay : function() {
          var overlay = getOverlayElement();
          var els = getElements();
          var size = getViewportSize();
          $(overlay).width(size[0]).height(size[1]);
      },

      closeOverlay : function() {
          var overlay = getOverlayElement();
          $(overlay).fadeOut();
      },
      
	  resizeAndCenterDialog : function() {
		$(window).resize(function() { $.dialogbox.resizeOverlay(); $.dialogbox.centerDialog(); });
		$(window).scroll(function() { $.dialogbox.centerDialog(); });
	  },
	  
      initDialog : function(closeHook) {
    	  
    	  $.dialogbox.closeHook = closeHook;
    	  
          var els = getElements();
          if (!els.overlay || !els.dialog) return;

          $(els.dialog).find('.dialogbox-closebutton').click(function(){
             $.dialogbox.closeDialog();
             //$.dialogbox.closeHook();
          });

          $(window).resize(function() {
             $.dialogbox.resizeOverlay();
             $.dialogbox.centerDialog();
          });
          
          $(window).scroll(function() {
             $.dialogbox.centerDialog();
          });
      },

      openDialog : function() {
          var els = getElements();
          if (!els.overlay || !els.dialog) return;

          ns.showOverlay(function(){
              $(els.dialog).show();
              $.dialogbox.centerDialog();
          });
      },
      
      centerDialog : function() {
          var els = getElements();
          if (!els.overlay || !els.dialog) return;
          var dsize = [$(els.dialog).width(), $(els.dialog).height()];
          var left = ($(window).width()  / 2) - (dsize[0] / 2);
          var top  = ($(window).height() / 2) - (dsize[1] / 2) + $(window).scrollTop();
          $(els.dialog).css({'left':left, 'top':top});
          //$(els.dialog).stop().animate({'left':left, 'top':top}, 150);
      },

      closeDialog : function() {
          var els = getElements();
          if (!els.overlay || !els.dialog) return;
          $(els.dialog).hide();
          ns.closeOverlay();
      }
  });

  $.fn.extend({
      dialogbox : function() {
	  
          var els = getElements();
          if (!els.overlay || !els.dialog) return;

          $(els.dialog).find('.dialogbox-closebutton').click(function(){
             $.dialogbox.closeDialog();
          });

          if ($(els.dialog).hasClass('init-open')) $.dialogbox.openDialog();

          $(window).resize(function() {
             $.dialogbox.resizeOverlay();
             $.dialogbox.centerDialog();
          });
          
          $(window).scroll(function() {
             $.dialogbox.centerDialog();
          });

          return this;
      }
  });

})(jQuery);
