(function ($) {
    var setDataSwitch = {
        dragStart: "start.draggable",
        drag: "drag.draggable",
        dragStop: "stop.draggable",
        maxHeight: "maxHeight.resizable",
        minHeight: "minHeight.resizable",
        maxWidth: "maxWidth.resizable",
        minWidth: "minWidth.resizable",
        resizeStart: "start.resizable",
        resize: "drag.resizable",
        resizeStop: "stop.resizable"
    }
   , uiDialogClasses = 'ui-dialog ' + 'ui-widget ' + 'ui-widget-content ' + 'ui-corner-all ';
    $.widget("ui.dialog", {
        _init: function () {
            this.originalTitle = this.element.attr('title'); var self = this,
         options = this.options,
         title = options.title || this.originalTitle || '&nbsp;',
         titleId = $.ui.dialog.getTitleId(this.element),
         uiDialog = (this.uiDialog = $('<div/>')).appendTo(document.body).hide().addClass(uiDialogClasses + options.dialogClass).css({
             position: 'absolute',
             overflow: 'hidden',
             zIndex: options.zIndex
         }
         ).attr('tabIndex',
         -1).css('outline',
         0).keydown(function (event) {
             (options.closeOnEscape && event.keyCode && event.keyCode == $.ui.keyCode.ESCAPE && self.close(event));
         }
         ).attr({
             role: 'dialog',
             'aria-labelledby': titleId
         }
         ).mousedown(function (event) {
             self.moveToTop(false,
            event);
         }
         ), uiDialogContent = this.element.show().removeAttr('title').addClass('ui-dialog-content ' + 'ui-widget-content').appendTo(uiDialog), uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>')).addClass('ui-dialog-titlebar ' + 'ui-widget-header ' + 'ui-corner-all ' + 'ui-helper-clearfix').prependTo(uiDialog), uiDialogTitlebarClose = $('<a href="#"/>').addClass('ui-dialog-titlebar-close ' + 'ui-corner-all').attr('role', 'button').hover(function () {
             uiDialogTitlebarClose.addClass('ui-state-hover');
         }
         , function () {
             uiDialogTitlebarClose.removeClass('ui-state-hover');
         }
         ).focus(function () {
             uiDialogTitlebarClose.addClass('ui-state-focus');
         }
         ).blur(function () {
             uiDialogTitlebarClose.removeClass('ui-state-focus');
         }
         ).mousedown(function (ev) {
             ev.stopPropagation();
         }
         ).click(function (event) {
             self.close(event); return false;
         }
         ).appendTo(uiDialogTitlebar), uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>')).addClass('ui-icon ' + 'ui-icon-closethick').text(options.closeText).appendTo(uiDialogTitlebarClose), uiDialogTitle = $('<span/>').addClass('ui-dialog-title').attr('id', titleId).html(title).prependTo(uiDialogTitlebar); uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); (options.draggable && $.fn.draggable && this._makeDraggable()); (options.resizable && $.fn.resizable && this._makeResizable()); this._createButtons(options.buttons); this._isOpen = false; (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe()); (options.autoOpen && this.open());
        }
      , destroy: function () {
          (this.overlay && this.overlay.destroy()); this.uiDialog.hide(); this.element.unbind('.dialog').removeData('dialog').removeClass('ui-dialog-content ui-widget-content').hide().appendTo('body'); this.uiDialog.remove(); (this.originalTitle && this.element.attr('title',
         this.originalTitle));
      }
      , close: function (event) {
          var self = this; if (false === self._trigger('beforeclose',
         event)) {
              return;
          }
          (self.overlay && self.overlay.destroy()); self.uiDialog.unbind('keypress.ui-dialog'); (self.options.hide ? self.uiDialog.hide(self.options.hide,
         function () {
             self._trigger('close',
            event);
         }
         ) : self.uiDialog.hide() && self._trigger('close',
         event)); $.ui.dialog.overlay.resize(); self._isOpen = false; if (self.options.modal) {
              var maxZ = 0; $('.ui-dialog').each(function () {
                  if (this != self.uiDialog[0]) {
                      maxZ = Math.max(maxZ,
                  $(this).css('z-index'));
                  }
              }
            ); $.ui.dialog.maxZ = maxZ;
          }
      }
      , isOpen: function () {
          return this._isOpen;
      }
      , moveToTop: function (force, event) {
          if ((this.options.modal && !force) || (!this.options.stack && !this.options.modal)) {
              return this._trigger('focus',
            event);
          }
          if (this.options.zIndex > $.ui.dialog.maxZ) {
              $.ui.dialog.maxZ = this.options.zIndex;
          }
          (this.overlay && this.overlay.$el.css('z-index',
         $.ui.dialog.overlay.maxZ = ++$.ui.dialog.maxZ)); var saveScroll = {
             scrollTop: this.element.attr('scrollTop'),
             scrollLeft: this.element.attr('scrollLeft')
         }; this.uiDialog.css('z-index',
         ++$.ui.dialog.maxZ); this.element.attr(saveScroll); this._trigger('focus',
         event);
      }
      , open: function () {
          if (this._isOpen) {
              return;
          }
          var options = this.options,
         uiDialog = this.uiDialog; this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null; (uiDialog.next().length && uiDialog.appendTo('body')); this._size(); this._position(options.position); uiDialog.show(options.show); this.moveToTop(true); (options.modal && uiDialog.bind('keypress.ui-dialog',
         function (event) {
             if (event.keyCode != $.ui.keyCode.TAB) {
                 return;
             }
             var tabbables = $(':tabbable',
            this),
            first = tabbables.filter(':first')[0],
            last = tabbables.filter(':last')[0]; if (event.target == last && !event.shiftKey) {
                 setTimeout(function () {
                     first.focus();
                 }
               , 1);
             }
             else if (event.target == first && event.shiftKey) {
                 setTimeout(function () {
                     last.focus();
                 }
               , 1);
             }
         }
         )); $([]).add(uiDialog.find('.ui-dialog-content :tabbable:first')).add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first')).add(uiDialog).filter(':first').focus(); this._trigger('open'); this._isOpen = true;
      }
      , _createButtons: function (buttons) {
          var self = this,
         hasButtons = false,
         uiDialogButtonPane = $('<div></div>').addClass('ui-dialog-buttonpane ' + 'ui-widget-content ' + 'ui-helper-clearfix'); this.uiDialog.find('.ui-dialog-buttonpane').remove(); (typeof buttons == 'object' && buttons !== null && $.each(buttons,
         function () {
             return !(hasButtons = true);
         }
         )); if (hasButtons) {
              $.each(buttons, function (name, fn) {
                  $('<button type="button"></button>').addClass('ui-state-default ' + 'ui-corner-all').text(name).click(function () {
                      fn.apply(self.element[0],
                  arguments);
                  }
               ).hover(function () {
                   $(this).addClass('ui-state-hover');
               }
               , function () {
                   $(this).removeClass('ui-state-hover');
               }
               ).focus(function () {
                   $(this).addClass('ui-state-focus');
               }
               ).blur(function () {
                   $(this).removeClass('ui-state-focus');
               }
               ).appendTo(uiDialogButtonPane);
              }
            ); uiDialogButtonPane.appendTo(this.uiDialog);
          }
      }
      , _makeDraggable: function () {
          var self = this,
         options = this.options,
         heightBeforeDrag; this.uiDialog.draggable({
             cancel: '.ui-dialog-content',
             handle: '.ui-dialog-titlebar',
             containment: 'document',
             start: function () {
                 heightBeforeDrag = options.height; $(this).height($(this).height()).addClass("ui-dialog-dragging"); (options.dragStart && options.dragStart.apply(self.element[0],
               arguments));
             }
            , drag: function () {
                (options.drag && options.drag.apply(self.element[0],
               arguments));
            }
            , stop: function () {
                $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); (options.dragStop && options.dragStop.apply(self.element[0],
               arguments)); $.ui.dialog.overlay.resize();
            }
         }
         );
      }
      , _makeResizable: function (handles) {
          handles = (handles === undefined ? this.options.resizable : handles); var self = this,
         options = this.options,
         resizeHandles = typeof handles == 'string' ? handles : 'n,e,s,w,se,sw,ne,nw'; this.uiDialog.resizable({
             cancel: '.ui-dialog-content',
             alsoResize: this.element,
             maxWidth: options.maxWidth,
             maxHeight: options.maxHeight,
             minWidth: options.minWidth,
             minHeight: options.minHeight,
             start: function () {
                 $(this).addClass("ui-dialog-resizing"); (options.resizeStart && options.resizeStart.apply(self.element[0],
               arguments));
             }
            , resize: function () {
                (options.resize && options.resize.apply(self.element[0],
               arguments));
            }
            , handles: resizeHandles, stop: function () {
                $(this).removeClass("ui-dialog-resizing"); options.height = $(this).height(); options.width = $(this).width(); (options.resizeStop && options.resizeStop.apply(self.element[0],
               arguments)); $.ui.dialog.overlay.resize();
            }
         }
         ).find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
      }
      , _position: function (pos) {
          var wnd = $(window),
         doc = $(document),
         pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), minTop = pTop; if ($.inArray(pos, ['center', 'top', 'right', 'bottom', 'left']) >= 0) {
              pos = [pos == 'right' || pos == 'left' ? pos : 'center',
            pos == 'top' || pos == 'bottom' ? pos : 'middle'];
          }
          if (pos.constructor != Array) {
              pos = ['center',
            'middle'];
          }
          if (pos[0].constructor == Number) {
              pLeft += pos[0];
          }
          else {
              switch (pos[0]) {
                  case 'left': pLeft += 0; break; case 'right': pLeft += wnd.width() - this.uiDialog.outerWidth(); break; default: case 'center': pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2;
              }
          } if (pos[1].constructor == Number) { pTop += pos[1]; } else { switch (pos[1]) { case 'top': pTop += 0; break; case 'bottom': pTop += wnd.height() - this.uiDialog.outerHeight(); break; default: case 'middle': pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2; } } pTop = Math.max(pTop, minTop); this.uiDialog.css({ top: pTop, left: pLeft });
      }, _setData: function (key, value) { (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); switch (key) { case "buttons": this._createButtons(value); break; case "closeText": this.uiDialogTitlebarCloseText.text(value); break; case "dialogClass": this.uiDialog.removeClass(this.options.dialogClass).addClass(uiDialogClasses + value); break; case "draggable": (value ? this._makeDraggable() : this.uiDialog.draggable('destroy')); break; case "height": this.uiDialog.height(value); break; case "position": this._position(value); break; case "resizable": var uiDialog = this.uiDialog, isResizable = this.uiDialog.is(':data(resizable)'); (isResizable && !value && uiDialog.resizable('destroy')); (isResizable && typeof value == 'string' && uiDialog.resizable('option', 'handles', value)); (isResizable || this._makeResizable(value)); break; case "title": $(".ui-dialog-title", this.uiDialogTitlebar).html(value || ' '); break; case "width": this.uiDialog.width(value); break; } $.widget.prototype._setData.apply(this, arguments); }, _size: function () { var options = this.options; this.element.css({ height: 0, minHeight: 0, width: 'auto' }); var nonContentHeight = this.uiDialog.css({ height: 'auto', width: options.width }).height(); this.element.css({ minHeight: Math.max(options.minHeight - nonContentHeight, 0), height: options.height == 'auto' ? 'auto' : Math.max(options.height - nonContentHeight, 0) }); }
    });
    $.extend($.ui.dialog,
               {
                   version: "1.7.2",
                   defaults: {
                       autoOpen: true,
                       bgiframe: false,
                       buttons: {
                   }
                     ,
                   closeOnEscape: true,
                   closeText: 'close',
                   dialogClass: '',
                   draggable: true,
                   hide: null,
                   height: 'auto',
                   maxHeight: false,
                   maxWidth: false,
                   minHeight: 150,
                   minWidth: 150,
                   modal: false,
                   position: 'center',
                   resizable: true,
                   show: null,
                   stack: true,
                   title: '',
                   width: 300,
                   zIndex: 1000
               }
                  , getter: 'isOpen', uuid: 0, maxZ: 0, getTitleId: function ($el) {
                      return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid);
                  }
                  , overlay: function (dialog) {
                      this.$el = $.ui.dialog.overlay.create(dialog);
                  }
           }
               );
    $.extend($.ui.dialog.overlay,
               {
                   instances: [],
                   maxZ: 0,
                   events: $.map('focus,keydown,keypress'.split(','),
                  function (event) {
                      return event + '.dialog-overlay';
                  }
                  ).join(' '),
                   create: function (dialog) {
                       if (this.instances.length === 0) {
                           setTimeout(function () {
                               if ($.ui.dialog.overlay.instances.length) {
                                   $(document).bind($.ui.dialog.overlay.events,
                              function (event) {
                                  var dialogZ = $(event.target).parents('.ui-dialog').css('zIndex') || 0; return (dialogZ > $.ui.dialog.overlay.maxZ);
                              }
                              );
                               }
                           }
                        ,
                        1); $(document).bind('keydown.dialog-overlay',
                        function (event) {
                            (dialog.options.closeOnEscape && event.keyCode
                            && event.keyCode == $.ui.keyCode.ESCAPE
                            && dialog.close(event));
                        }
                        ); $(window).bind('resize.dialog-overlay',
                        $.ui.dialog.overlay.resize);
                       }
                       var $el = $('<div></div>').appendTo(document.body).addClass('ui-widget-overlay').css({
                           width: this.width(),
                           height: this.height()
                       }
                     ); (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe()); this.instances.push($el); return $el;
                   }
                  , destroy: function ($el) {
                      this.instances.splice($.inArray(this.instances,
                     $el),
                     1); if (this.instances.length === 0) {
                          $([document,
                        window]).unbind('.dialog-overlay');
                      }
                      $el.remove(); var maxZ = 0; $.each(this.instances,
                     function () {
                         maxZ = Math.max(maxZ,
                        this.css('z-index'));
                     }
                     ); this.maxZ = maxZ;
                  }
                  , height: function () {
                      if ($.browser.msie && $.browser.version < 7) {
                          var scrollHeight = Math.max(document.documentElement.scrollHeight,
                        document.body.scrollHeight); var offsetHeight = Math.max(document.documentElement.offsetHeight,
                        document.body.offsetHeight); if (scrollHeight < offsetHeight) {
                              return $(window).height() + 'px';
                          }
                          else {
                              return scrollHeight + 'px';
                          }
                      }
                      else {
                          return $(document).height() + 'px';
                      }
                  }
                  , width: function () {
                      if ($.browser.msie && $.browser.version < 7) {
                          var scrollWidth = Math.max(document.documentElement.scrollWidth,
                        document.body.scrollWidth); var offsetWidth = Math.max(document.documentElement.offsetWidth,
                        document.body.offsetWidth); if (scrollWidth < offsetWidth) {
                              return $(window).width() + 'px';
                          }
                          else {
                              return scrollWidth + 'px';
                          }
                      }
                      else {
                          return $(document).width() + 'px';
                      }
                  }
                  , resize: function () {
                      var $overlays = $([]); $.each($.ui.dialog.overlay.instances,
                     function () {
                         $overlays = $overlays.add(this);
                     }
                     ); $overlays.css({
                         width: 0,
                         height: 0
                     }
                     ).css({
                         width: $.ui.dialog.overlay.width(),
                         height: $.ui.dialog.overlay.height()
                     }
                     );
                  }
               }
               );
    $.extend($.ui.dialog.overlay.prototype,
               {
                   destroy: function () {
                       $.ui.dialog.overlay.destroy(this.$el);
                   }
               }
               );
}
            )(jQuery); 
