/*
**  TextAreaResizer script by Jason Johnston (jj@lojjic.net)
**  Created August 2003.  Use freely, but give me credit.
**
**  This script adds a handle below textareas that the user
**  can drag with the mouse to resize the textarea.
**
**  Edited by John Ha 2005
**  Now self contained, with slimmer cross-browser event
**  handling, and slightly simplified.
**  Updated: textareas with title "true" will be ignored
**  Eg. tinyMCE hidden textareas
*/

function TextAreaResizer(elt) {
	this.element = elt;
	this.create();
}
TextAreaResizer.prototype = {
	create : function() {
		var elt = this.element;
		if (elt.title != 'true') {
			var thisRef = this;
			
			var h = this.handle = document.createElement("hr");
			h.className = 'handle-normal';
			h.title = 'Drag to resize text box';
			addEvent(h, 'mousedown', function(evt){ thisRef.dragStart(evt); }, false);
			addEvent(h, 'mouseover', function(evt){ h.className = 'handle-highlight'; }, false);
			addEvent(h, 'mouseout', function(evt){ h.className = 'handle-normal'; }, false);
			elt.parentNode.insertBefore(h, elt.nextSibling);
		}
	},
	
	dragStart : function(evt) {
		var thisRef = this;
		this.dragStartY = evt.clientY + 8;
//		this.dragStartH = parseFloat(document.defaultView.getComputedStyle(this.element, null).getPropertyValue("height"));
		this.dragStartH = this.element.offsetHeight;
		addEvent(document, 'mousemove', this.dragMoveHdlr = function(evt){ thisRef.dragMove(evt); }, false);
		addEvent(document, 'mouseup', this.dragStopHdlr = function(evt){ thisRef.dragStop(evt); }, false);
	},
	
	dragMove : function(evt) {
		this.element.style.height = this.dragStartH + evt.clientY - this.dragStartY + "px";
	},
	
	dragStop : function(evt) {
		removeEvent(document, 'mousemove', this.dragMoveHdlr, false);
		removeEvent(document, 'mouseup', this.dragStopHdlr, false);
	},
	
	destroy : function() {
		var elt = this.element;
		elt.parentNode.removeChild(this.handle);
		elt.style.height = '';
	}
};
if (typeof addEvent != 'function') {
	function addEvent(obj, evType, fn, useCapture) {
		if (obj.addEventListener) {
			obj.addEventListener(evType, fn, useCapture);
			return true;
		} else if (obj.attachEvent) {
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		} else {
			alert('Handler could not be attached');
		}
	} 
}
if (typeof removeEvent != 'function') {
	function removeEvent(obj, evType, fn, useCapture){
		if (obj.removeEventListener){
			obj.removeEventListener(evType, fn, useCapture);
			return true;
		} else if (obj.detachEvent){
			var r = obj.detachEvent('on' + evType, fn);
			return r;
		} else {
			alert('Handler could not be removed');
		}
	} 
}
addEvent(window, 'load', function() {
	var textareas = document.getElementsByTagName('textarea');
	for (i = 0; i < textareas.length; i++) {
		new TextAreaResizer(textareas[i]);
	}
	// Re-init dom-tooltips (if available), so tooltips are shown for handles
	typeof tooltip != 'undefined' ? tooltip.init(new Array('hr')) : 0;
}, false);

