text: (function($)
  {
      /**
       * http://github.com/jaz303/jquery-grab-bag/tree/master/javascripts/jquery.autogrow-textarea.js
       */
      $.fn.autogrow = function(options)
      {
          return this.filter('textarea').each(function()
          {
              var self                                = this;
              var $self                               = $(self);
              var minHeight                           = $self.height();
              var noFlickerPad                        = $self.hasClass('autogrow-short') ? 0 : parseInt($self.css('lineHeight'));
  
              var shadow = $('<div></div>').css({
                  position:   'absolute',
                  top:        -10000,
                  left:       -10000,
                  width:      $self.width(),
                  fontSize:   $self.css('fontSize'),
                  fontFamily: $self.css('fontFamily'),
                  fontWeight: $self.css('fontWeight'),
                  lineHeight: $self.css('lineHeight'),
                  resize:     'none'
              }).appendTo(document.body);
  
              var update = function()
              {
                  var times = function(string, number)
                  {
                      for (var i=0, r=''; i<number; i++) r += string;
                      return r;
                  };
  
                  var val = self.value.replace(/</g, '&lt;')
                                      .replace(/>/g, '&gt;')
                                      .replace(/&/g, '&amp;')
                                      .replace(/\n$/, '<br/>&nbsp;')
                                      .replace(/\n/g, '<br/>')
                                      .replace(/ {2,}/g, function(space){ return times('&nbsp;', space.length - 1) + ' ' });
  
                  shadow.css('width', $self.width());
                  shadow.html(val);
                  $self.css('height', Math.max(shadow.height() + noFlickerPad, minHeight));
              }
  
              $self.change(update).keyup(update).keydown(update);
              $(window).resize(update);
  
              update();
          });
      };
  })(jQuery);