text: ﻿/*!
  * 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);