jQuery.fn.apTextCounter=function(config){function __checkCount(el,e,__c){var count=__c.maxCharacters-$(el).val().length;var countDisplay=(__c.direction!=="down")?(__c.maxCharacters-count):count;if(count<=0){var k=e.which;if((k>47&&k<91)||(k>95&&k<112)||(k>184&&k<250)||k==13||k==32){e.preventDefault();e.stopPropagation();if(__c.onMaxCharactersReached!==null){if(__c.scope!==null){__c.onMaxCharactersReached.call(__c.scope,{count:countDisplay,config:__c});}else
{__c.onMaxCharactersReached({count:countDisplay,config:__c});}}return countDisplay;}}if(__c.onCharacterCountChecked!==null){if(__c.scope!==null){__c.onCharacterCountChecked.call(__c.scope,{count:countDisplay,config:__c});}else
{__c.onCharacterCountChecked({count:countDisplay,config:__c});}}return countDisplay;}function __updateTracker(el,count,__c){var msg=__c.trackerTemplate.replace(/%s/i,count);$(__c.tracker).html(msg);if(__c.onTrackerUpdated!==null){if(__c.scope!==null){__c.onTrackerUpdated.call(__c.scope,{count:count,config:__c});}else
{__c.onTrackerUpdated({count:count,config:__c});}}}return this.each(function(){var __this=this;this.__c=jQuery.extend({maxCharacters:100,direction:"down",tracker:"#tracker",trackerTemplate:"%s",scope:null,onCharacterCountChecked:null,onMaxCharactersReached:null,onTrackerUpdated:null},config);__checkCount(this,null,this.__c);__updateTracker(this,(this.__c.direction==="down")?this.__c.maxCharacters:0,this.__c);$(this).keyup(function(e){var count=__checkCount(__this,e,__this.__c);__updateTracker(__this,count,__this.__c);});$(this).keydown(function(e){var count=__checkCount(__this,e,__this.__c);__updateTracker(__this,count,__this.__c);});});};