http://gambit.ph
/*!
* jquery.counterup.js 1.0
*
* Copyright 2013, Benjamin Intal http://gambit.ph @bfintal
* Released under the GPL v2 License
*
* Date: Nov 26, 2013
*/
(function( $ ){
 "use strict";

 $.fn.counterUp = function( options ) {

   // Defaults
   var settings = $.extend({
       'time': 400,
       'delay': 10
   }, options);

   return this.each(function(){

       // Store the object
       var $this = $(this);
       var $settings = settings;

       var counterUpper = function() {
           var nums = [];
           var divisions = $settings.time / $settings.delay;
           var num = $this.text();
           var isComma = /[0-9]+,[0-9]+/.test(num);
           num = num.replace(/,/g, '');
           var isInt = /^[0-9]+$/.test(num);
           var isFloat = /^[0-9]+\.[0-9]+$/.test(num);
           var decimalPlaces = isFloat ? (num.split('.')[1] || []).length : 0;

           // Generate list of incremental numbers to display
           for (var i = divisions; i >= 1; i--) {

               // Preserve as int if input was int
               var newNum = parseInt(num / divisions * i);

               // Preserve float if input was float
               if (isFloat) {
                   newNum = parseFloat(num / divisions * i).toFixed(decimalPlaces);
               }

               // Preserve commas if input had commas
               if (isComma) {
                   while (/(\d+)(\d{3})/.test(newNum.toString())) {
                       newNum = newNum.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
                   }
               }

               nums.unshift(newNum);
           }

           $this.data('counterup-nums', nums);
           $this.text('0');

           // Updates the number until we're done
           var f = function() {
               $this.text($this.data('counterup-nums').shift());
               if ($this.data('counterup-nums').length) {
                   setTimeout($this.data('counterup-func'), $settings.delay);
               } else {
                   delete $this.data('counterup-nums');
                   $this.data('counterup-nums', null);
                   $this.data('counterup-func', null);
               }
           };
           $this.data('counterup-func', f);

           // Start the count up
           setTimeout($this.data('counterup-func'), $settings.delay);
       };

       // Perform counts when the element gets into view
       $this.waypoint(counterUpper, { offset: '100%', triggerOnce: true });
   });

 };

})( jQuery );