﻿//++++++++++++++++++++++++++++++++++++
// YUI textarea
// 4-12-2008 - Edwart Visser
// maximum amount of character in textarea
//
// HOW TO USE:
// write textarea as follows <textarea class="max" rel="20"></textarea>
// class "max" is needed
// rel defines the maximum amount of characters
//
// REQUIRES: yahoo-dom-event.js
//++++++++++++++++++++++++++++++++++++
// Minor tweaks for visual requirements AL 19/03/2009
//++++++++++++++++++++++++++++++++++++
var Dom = YAHOO.util.Dom;
var TextEvent = YAHOO.util.Event;

YAHOO.namespace("lutsr");

YAHOO.lutsr.maxTextarea = {
	init : function() {
		// get all textarea's and extend them
		var textareaEls = Dom.getElementsByClassName("max");
		if(textareaEls.length > 0) {
			for(var i=0; i < textareaEls.length; i++) {
				this.extend(textareaEls[i]);
			}
		}
	},
	extend : function(el) {
		el.maxChars = el.getAttribute("rel");
		// add display of amount of characters in textarea
		var statusDisplay = document.createElement("span");
		statusDisplay.className = "display";
		el.statusDisplayEl = statusDisplay;
		
		// set status text
		var statusText = "" + el.maxChars + " to spare. Your words are powerful. Use them wisely.";
		statusDisplay.innerHTML = statusText;
		el.parentNode.insertBefore(statusDisplay,el);

		// add onchange event
		TextEvent.addListener(el,"keyup",this.changeStatusMessage,el);
	},
	changeStatusMessage : function(e,el) {
		var curLength = el.value.length;
		var leftLength = el.maxChars - curLength;
		if(leftLength >= 0) {
			// no problem
			if(Dom.hasClass(el.statusDisplayEl,"error")){
				Dom.removeClass(el.statusDisplayEl,"error")
			}
			var statusText = "" + leftLength + " to spare. Your words are powerful. Use them wisely.";
			el.statusDisplayEl.innerHTML = statusText;
		} else {
			// string length too long
			var overshoot = curLength - el.maxChars;
			if(!Dom.hasClass(el.statusDisplayEl,"error")){
				Dom.addClass(el.statusDisplayEl,"error")
			}
			var statusText = "" + overshoot + " too many. Don't be so naughty!";
			el.statusDisplayEl.innerHTML = statusText;
		}
	}
}

initPage = function() {    
	YAHOO.lutsr.maxTextarea.init();
}

TextEvent.on(window,"load",initPage);