/*
 *      Character Count Plugin - jQuery plugin
 *      Dynamic character count for text areas and input fields
 *     written by Alen Grakalic     
 *     http://cssglobe.com/post/7161/jquery-plugin-simplest-twitterlike-dynamic-character-count-for-textareas
 *
 *     Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *     Dual licensed under the MIT (MIT-LICENSE.txt)
 *     and GPL (GPL-LICENSE.txt) licenses.
 *
 *     Built for jQuery library
 *     http://jquery.com
 *
 */
 
(function($) {

     $.fn.charCount = function(options){
       
          // default configuration properties
          var defaults = {     
               allowed: 140,          
               warning: 25,
               css: 'counter',
               createCounterElement: true,
               counterElement: 'span',
               cssWarning: 'warning',
               cssExceeded: 'exceeded',
               counterText: '',
               block: false
          }; 
               
          var options = $.extend(defaults, options); 
          
          function calculate(obj){
               var count = $(obj).val().length;
               var available = options.allowed - count;
               if(available <= options.warning && available >= 0){
                    $(obj).next().addClass(options.cssWarning);
               } else {
                    $(obj).next().removeClass(options.cssWarning);
               }
               if(available < 0){
                    $(obj).next().addClass(options.cssExceeded);
                    if (options.block == true){
                        $(obj).val($(obj).val().substr(0, options.allowed));
                    }
               } else {
                    $(obj).next().removeClass(options.cssExceeded);
               }
               if (options.createCounterElement){
               $(obj).next().html(options.counterText + available);
              }
              else{
                  $(options.counterElement).html(available);
              }
          };
                    
          this.each(function() {
              if (options.createCounterElement){
               $(this).after('<'+ options.counterElement +' class="' + options.css + '">'+ options.counterText +'</'+ options.counterElement +'>');
               }
               calculate(this);
               $(this).keyup(function(){calculate(this)});
               $(this).change(function(){calculate(this)});
               $(this).live('input paste', function(){calculate(this)});
          });
       
     };

})(jQuery);

