/** * * Copyright (c) 2007 Tom Deater (http://www.tomdeater.com) * Licensed under the MIT License: * http://www.opensource.org/licenses/mit-license.php *  */ (function($) {	/**	 * attaches a character counter to each textarea element in the jQuery object	 * usage: $("#myTextArea").charCounter(max, settings);	 */		$.fn.charCounter = function (max, settings) {		max = max || 100;		settings = $.extend({			container: "<span></span>",			classname: "charcounter",			format: "(%1 characters remaining)",			pulse: true,			delay: 0		}, settings);		var p, timeout;				function count(el, container) {			el = $(el);			if (el.val().length > max) {			    el.val(el.val().substring(0, max));			    if (settings.pulse && !p) {			    	pulse(container, true);			    };			};			if (settings.delay > 0) {				if (timeout) {					window.clearTimeout(timeout);				}				timeout = window.setTimeout(function () {					container.html(settings.format.replace(/%1/, (max - el.val().length)));				}, settings.delay);			} else {				container.html(settings.format.replace(/%1/, (max - el.val().length)));			}		};				function pulse(el, again) {			if (p) {				window.clearTimeout(p);				p = null;			};			el.animate({ opacity: 0.1 }, 100, function () {				$(this).animate({ opacity: 1.0 }, 100);			});			if (again) {				p = window.setTimeout(function () { pulse(el) }, 200);			};		};				return this.each(function () {			var container = (!settings.container.match(/^<.+>$/)) 				? $(settings.container) 				: $(settings.container)					.insertAfter(this)					.addClass(settings.classname);			$(this)				.bind("keydown", function () { count(this, container); })				.bind("keypress", function () { count(this, container); })				.bind("keyup", function () { count(this, container); })				.bind("focus", function () { count(this, container); })				.bind("mouseover", function () { count(this, container); })				.bind("mouseout", function () { count(this, container); })				.bind("paste", function () { 					var me = this;					setTimeout(function () { count(me, container); }, 10);				});			if (this.addEventListener) {				this.addEventListener('input', function () { count(this, container); }, false);			};			count(this, container);		});	};})(jQuery);
