/* 1.0.4 */
(function($) { var textarea, staticOffset; var iLastMousePos = 0; var iMin = 32; var grip; $.fn.TextAreaResizer = function() { return this.each(function() { textarea = $(this).addClass('processed'), staticOffset = null; $(this).wrap('<div class="resizable-textarea"><span></span></div>') .parent().append($('<div class="grippie"></div>').bind("mousedown",{el: this} , startDrag)); var grippie = $('div.grippie', $(this).parent())[0]; grippie.style.marginRight = (grippie.offsetWidth - $(this)[0].offsetWidth) +'px'; }); }; function startDrag(e) { textarea = $(e.data.el); textarea.blur(); iLastMousePos = mousePosition(e).y; staticOffset = textarea.height() - iLastMousePos; textarea.css('opacity', 0.25); $(document).mousemove(performDrag).mouseup(endDrag); return false; } function performDrag(e) { var iThisMousePos = mousePosition(e).y; var iMousePos = staticOffset + iThisMousePos; if (iLastMousePos >= (iThisMousePos)) { iMousePos -= 5; } iLastMousePos = iThisMousePos; iMousePos = Math.max(iMin, iMousePos); textarea.height(iMousePos + 'px'); if (iMousePos < iMin) { endDrag(e); } return false; } function endDrag(e) { $(document).unbind('mousemove', performDrag).unbind('mouseup', endDrag); textarea.css('opacity', 1); textarea.focus(); textarea = null; staticOffset = null; iLastMousePos = 0; } function mousePosition(e) { return { x: e.clientX + document.documentElement.scrollLeft, y: e.clientY + document.documentElement.scrollTop }; }; })(jQuery);