/** This is a jQuery plugin to support resizing text areas. Originally based off text area resizer by Ryan O'Dell : http://plugins.jquery.com/misc/textarea.js @module $.fn.DivResizer **/ var div, endDrag, grip, lastMousePos, min, mousePosition, originalDivHeight, originalPos, performDrag, startDrag, wrappedEndDrag, wrappedPerformDrag; div = void 0; originalPos = void 0; originalDivHeight = void 0; lastMousePos = 0; min = 230; grip = void 0; wrappedEndDrag = void 0; wrappedPerformDrag = void 0; startDrag = function(e, opts) { div = $(e.data.el); div.addClass('clear-transitions'); div.blur(); lastMousePos = mousePosition(e).y; originalPos = lastMousePos; originalDivHeight = div.height(); wrappedPerformDrag = (function() { return function(e) { return performDrag(e, opts); }; })(); wrappedEndDrag = (function() { return function(e) { return endDrag(e, opts); }; })(); $(document).mousemove(wrappedPerformDrag).mouseup(wrappedEndDrag); return false; }; performDrag = function(e, opts) { $(div).trigger("div-resizing"); var size, sizePx, thisMousePos; thisMousePos = mousePosition(e).y; size = originalDivHeight + (originalPos - thisMousePos); lastMousePos = thisMousePos; var maxHeight = $(window).height(); if (opts.maxHeight) { maxHeight = opts.maxHeight(maxHeight); } size = Math.min(size, maxHeight); size = Math.max(min, size); sizePx = size + "px"; if (typeof opts.onDrag === "function") { opts.onDrag(sizePx); } div.height(sizePx); if (size < min) { endDrag(e, opts); } return false; }; endDrag = function(e, opts) { $(document).unbind("mousemove", wrappedPerformDrag).unbind("mouseup", wrappedEndDrag); div.removeClass('clear-transitions'); div.focus(); if (typeof opts.resize === "function") { opts.resize(); } $(div).trigger("div-resized"); div = null; }; mousePosition = function(e) { return { x: e.clientX + document.documentElement.scrollLeft, y: e.clientY + document.documentElement.scrollTop }; }; $.fn.DivResizer = function(opts) { return this.each(function() { var grippie, start, staticOffset; div = $(this); if (div.hasClass("processed")) return; div.addClass("processed"); staticOffset = null; start = function() { return function(e) { return startDrag(e, opts); }; }; grippie = div.prepend("<div class='grippie'></div>").find('.grippie').bind("mousedown", { el: this }, start()); }); };