(function(A){A.fn.charCounter=function(B,C){B=B||100;C=A.extend({container:"<span></span>",classname:"charcounter",format:"(%1 characters remaining)",pulse:true,delay:0},C);var G,F;function E(I,H){I=A(I);if(I.val().length>B){I.val(I.val().substring(0,B));if(C.pulse&&!G){D(H,true)}}if(C.delay>0){if(F){window.clearTimeout(F)}F=window.setTimeout(function(){H.html(C.format.replace(/%1/,(B-I.val().length)))},C.delay)}else{H.html(C.format.replace(/%1/,(B-I.val().length)))}}function D(H,I){if(G){window.clearTimeout(G);G=null}H.animate({opacity:0.1},100,function(){A(this).animate({opacity:1},100)});if(I){G=window.setTimeout(function(){D(H)},200)}}return this.each(function(){var H=(!C.container.match(/^<.+>$/))?A(C.container):A(C.container).insertAfter(this).addClass(C.classname);A(this).bind("keydown",function(){E(this,H)}).bind("keypress",function(){E(this,H)}).bind("keyup",function(){E(this,H)}).bind("focus",function(){E(this,H)}).bind("mouseover",function(){E(this,H)}).bind("mouseout",function(){E(this,H)}).bind("paste",function(){var I=this;setTimeout(function(){E(I,H)},10)});if(this.addEventListener){this.addEventListener("input",function(){E(this,H)},false)}E(this,H)})}})(jQuery);