;(function($) {
	$.efTextCounter = {
		defaults: {
			maxChars: 500,
			formatStr: "{1}/{2}",
			container: ""
		}
	};
	
	$.fn.extend({
		counter : function(settings) {
			var settings = $.extend({}, $.efTextCounter.defaults, settings);
			
			return this.data('counterSettings', settings)
					.keyup(updateCounter)
					.each(_initCounter);
		}
	});
	
	function updateCounter(ev) {
		var s = $(this).data('counterSettings');
		var value = $(this).attr("value");
		var valueLength = value.length;
		var charsLeft = s.maxChars - valueLength;
		if(charsLeft <= 0) {
			var newVal = value.substring(0, s.maxChars);
			$(this).attr("value", newVal);
			charsLeft = String(0);
		}
		$(".counterLeftChars").html(charsLeft);
	}
	
	function _initCounter(ev) {
		var s = $(this).data('counterSettings');
		var counterStr = s.formatStr.replace(/\{1\}/gi, "<span class='counterLeftChars'>"+s.maxChars+"</span>");
		var counterStr = counterStr.replace(/\{2\}/gi, "<span class='counterMaxChars'>"+s.maxChars+"</span>");
		if($.trim(s.container) != "") {
			$(s.container).html(counterStr);
		} else {
			$(this).after(counterStr);
		}
	}
})(jQuery);
