/*
 * TextLimit - jQuery plugin for counting and limiting characters for input and textarea fields
 * 
 * pass '-1' as speed if you don't want slow char deletion effect. (don't just put 0)
 * Example: jQuery("Textarea").textlimit('span.counter',256)
 *
 * $Version: 2007.10.24 +r1
 * Copyright (c) 2007 Yair Even-Or
 * vsync.design@gmail.com
 */
jQuery.fn.textlimit=function(counter_el, thelimit, speed) {
	var charDelSpeed = speed || 15;
	var toggleCharDel = speed != -1;
	var toggleTrim = true;
	
	var that = this[0];
	updateCounter();
	
	function dotrim(text) {
		text=text.replace(/ /g,"");
		text=text.replace(/\r/g,"");
		text=text.replace(/\n/g,"");
		return text
	}	    
	
	function countspaces(text) {
		var o1=text.split(/ /g).length;
		var o2=text.split(/\r/g).length;
		var o3=text.split(/\n/g).length;
		return (o1+o2+o3);
	}
	
	function updateCounter(){
		var content=dotrim(that.value);
		jQuery(counter_el).text(thelimit - content.length);
	};
	
	this.keypress (function(e){ 
			var content=dotrim(this.value);
			if( content.length >= thelimit && e.charCode != '0' ) e.preventDefault() 
		})
	.keyup (function(e){
		updateCounter();
		var content=dotrim(this.value);
		if( content.length >= thelimit && toggleTrim ){
			if(toggleCharDel){
				// first, trim the text a bit so the char trimming won't take forever
				that.value = that.value.substr(0,thelimit+countspaces(that.value));
				var init = setInterval
					( 
						function(){ 
							var content=dotrim(that.value);
							if( content.length <= thelimit){ init = clearInterval(init); updateCounter() }
							else{ that.value = that.value.substring(0,that.value.length-1); 
								  jQuery(counter_el).text('trimming...  '+(thelimit - that.value.length)); 
								 };
						} ,charDelSpeed 
					);
			}
			else this.value = that.value.substr(0,thelimit);
		}
	});
	
};
