docs: function(trigger, bodyContents, settings) {
  
              this.$trigger = $(trigger);
  
              this.setSettings(settings, Garnish.HUD.defaults);
              this.on('show', this.settings.onShow);
              this.on('hide', this.settings.onHide);
              this.on('submit', this.settings.onSubmit);
  
              if (typeof Garnish.HUD.activeHUDs === 'undefined') {
                  Garnish.HUD.activeHUDs = {};
              }
  
              this.$shade = $('<div/>', {'class': this.settings.shadeClass});
              this.$hud = $('<div/>', {'class': this.settings.hudClass}).data('hud', this);
              this.$tip = $('<div/>', {'class': this.settings.tipClass}).appendTo(this.$hud);
              this.$body = $('<form/>', {'class': this.settings.bodyClass}).appendTo(this.$hud);
              this.$mainContainer = $('<div/>', {'class': this.settings.mainContainerClass}).appendTo(this.$body);
              this.$main = $('<div/>', {'class': this.settings.mainClass}).appendTo(this.$mainContainer);
  
              this.updateBody(bodyContents);
  
              // See if the trigger is fixed
              var $parent = this.$trigger;
  
              do {
                  if ($parent.css('position') === 'fixed') {
                      this.$fixedTriggerParent = $parent;
                      break;
                  }
  
                  $parent = $parent.offsetParent();
              }
              while ($parent.length && $parent.prop('nodeName') !== 'HTML');
  
              if (this.$fixedTriggerParent) {
                  this.$hud.css('position', 'fixed');
              }
              else {
                  this.$hud.css('position', 'absolute');
              }
  
              // Hide the HUD until it gets positioned
  			var windowWidth = Garnish.$win.width();
  
  			this.$hud.css({
                  left: '-' + windowWidth + 'px',
  			});
  
              this.show();
  
              this.addListener(this.$body, 'submit', '_handleSubmit');
              this.addListener(this.$shade, 'tap', 'hide');
  
              if (this.settings.closeBtn) {
                  this.addListener(this.settings.closeBtn, 'activate', 'hide');
              }
  
              this.addListener(Garnish.$win, 'resize', 'updateSizeAndPosition');
              this.addListener(this.$main, 'resize', 'updateSizeAndPosition');
              if (!this.$fixedTriggerParent && Garnish.$scrollContainer[0] !== Garnish.$win[0]) {
                  this.addListener(Garnish.$scrollContainer, 'scroll', 'updateSizeAndPosition');
              }
          }