    $(function init()
    {
        // copyright Drupal, GNU General Public License
        $('textarea.resizable:not(.textarea-processed)').each(function() {
            var textarea = $(this).addClass('textarea-processed'), staticOffset = null;

            // When wrapping the text area, work around an IE margin bug.  See:
            // http://jaspan.com/ie-inherited-margin-bug-form-elements-and-haslayout
            $(this).wrap('<div class="resizable-textarea"><span></span></div>')
                .parent().append($('<div class="grippie"></div>').mousedown(startDrag));

            var grippie = $('div.grippie', $(this).parent())[0];
            grippie.style.marginRight = (grippie.offsetWidth - $(this)[0].offsetWidth) +'px';

            function startDrag(e) {
                staticOffset = textarea.height() - e.pageY;
                textarea.css('opacity', 0.25);
                $(document).mousemove(performDrag).mouseup(endDrag);
                return false;
            }

            function performDrag(e) {
                textarea.height(Math.max(32, staticOffset + e.pageY) + 'px');
                return false;
            }

            function endDrag(e) {
                $(document).unbind("mousemove", performDrag).unbind("mouseup", endDrag);
                textarea.css('opacity', 1);
            }
        });
    });

