(function(jQuery){jQuery.fn.charCounter=function(max,settings){max=max||100;settings=jQuery.extend({container:"<span></span>",classname:"charcounter",format:"(%1&nbsp;characters&nbsp;remaining)",pulse:true,delay:0},settings);var p,timeout;function count(el,container){el=jQuery(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(){jQuery(this).animate({opacity:1.0},100);});if(again){p=window.setTimeout(function(){pulse(el)},200);};};return this.each(function(){var container;if(!settings.container.match(/^<.+>$/)){container=jQuery(settings.container);}else{jQuery(this).next("."+settings.classname).remove();container=jQuery(settings.container).insertAfter(this).addClass(settings.classname);}
jQuery(this).unbind(".charCounter").bind("keydown.charCounter",function(){count(this,container);}).bind("keypress.charCounter",function(){count(this,container);}).bind("keyup.charCounter",function(){count(this,container);}).bind("focus.charCounter",function(){count(this,container);}).bind("mouseover.charCounter",function(){count(this,container);}).bind("mouseout.charCounter",function(){count(this,container);}).bind("paste.charCounter",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);
