/*
** Adds automatic resizing and resize handle below
** all textareas with "resizable" class.
*/

function TextAreaResizer(elt) {
	this.textarea = elt;
	this.create();
}

TextAreaResizer.prototype = {
	create : function() {
		// Create handle and insert just after textarea
		this.handle = document.createElement("DIV");
		this.handle.className = "textarea-resizer";
		this.handle.title = I18N.glp('ui.textarea-resizer.title');
		// Modify handle size to match size of textarea
		var textAreaWidth = $(this.textarea).getDimensions().width;
		if (textAreaWidth > 0 ) {
		  this.handle.style.width = (textAreaWidth - 2) + "px";
		}
		// insert handle
		this.textarea.parentNode.insertBefore(this.handle, this.textarea.nextSibling);

		// Add custom style to text area
		$(this.textarea).addClassName("textarea-resized");
	
		this.dragStartHdlr = function(evt){this.dragStart(evt);}.bind(this);
		this.dragMoveHdlr = function(evt){this.dragMove(evt);}.bind(this);
		this.dragStopHdlr = function(evt){this.dragStop(evt);}.bind(this);
		this.autoResizeHdlr = function(evt){this.autoResize(evt);}.bind(this); 
		
		Event.observe(this.handle, 'mousedown', this.dragStartHdlr);
		Event.observe(this.textarea, 'keyup', this.autoResizeHdlr);
	},
	
	dragStart : function(evt) {
		this.hasBeenResized = true;
		this.dragStartY = Event.pointerY(evt);
		this.dragStartH = $(this.textarea).getDimensions().height;

		Event.observe(document, 'mousemove', this.dragMoveHdlr);
		Event.observe(document, 'mouseup', this.dragStopHdlr);
	},
	
	dragMove : function(evt) {
		var newHeight = this.dragStartH + Event.pointerY(evt) - this.dragStartY ;
		if (newHeight > 15) {
			this.textarea.style.height = newHeight + "px";
		}
	},
	
	dragStop : function(evt) {
		Event.stopObserving(document, "mousemove", this.dragMoveHdlr);
		Event.stopObserving(document, "mouseup", this.dragStopHdlr);
	},
	
	autoResize : function(evt) {
		if (this.hasBeenResized) {
			return;
		};
		var ta = this.textarea;
		var lines = ta.value.split('\n');
		var rows = 1;
		for (i = 0; i < lines.length; i++) {
			if (lines[i].length >= ta.cols) { 
				rows += Math.floor(lines[i].length / ta.cols);
			}
		}
		rows += lines.length;
		if (rows > ta.rows && rows < 20) {
			ta.rows = rows;
		}
	}
};

function initTextAreaResizer() {
	if ( document.TextAreaResizerDone ) { return; }
	document.TextAreaResizerDone = true;
	
	$A(document.getElementsByTagName("TEXTAREA")).each(function(textarea) {
		if (textarea.className.indexOf("resizable") != -1) {
			var taResizer = new TextAreaResizer(textarea);
			taResizer.autoResize();
		}
	});
}
