(function ($) {

    var busy = new Array();
    var endNumber = new Array();
    var activeUser = ""
    $.fn.countTo = function (options) {

        if (busy[this.attr("id")] == null) {
            busy[this.attr("id")] = false;
        }



        //options
        $.extend($.fn.countTo.defaults, options);

        //variables
        var countToNumber = $.fn.countTo.defaults.countTo;
        var user = $.fn.countTo.defaults.u;

        if (activeUser != user) {
            activeUser = user;
            endNumber = new Array();
            busy = new Array();
        }


        if (endNumber[this.attr("id")] == null) {
            var numberNow = this.text();
        } else {
            var numberNow = endNumber[this.attr("id")];
        }
        var time = $.fn.countTo.defaults.time;

        //calculate how many numbers we need to add or to substract
        var amount = parseInt(countToNumber) - parseInt(numberNow);



        endNumber[this.attr("id")] = countToNumber;
        var stepNumber = "-1"
        if (parseFloat(amount) < 0) {
            //We need to count down
            stepNumber = "1";
            //Make number plus
            amount = Math.abs(amount);
        }


        //if amount is 0 we dont need to do anything
        if (amount == 0) {
            return
        }

        stepTime = time / amount;
        queueManager(this, stepNumber, stepTime, amount);
    }

    function queueManager(div, stepNumber, stepTime, step) {
        if (busy[div.attr("id")] == false) {
            busy[div.attr("id")] = true;
            setTimeout(function () {
                counter(div, stepNumber, stepTime, step);
            }, 200);
        } else {
            setTimeout(function () {
                queueManager(div, stepNumber, stepTime, step);
            }, 1000);
        }
    }

    function counter(div, stepNumber, stepTime, step) {

        var number = parseFloat(div.text()) - parseFloat(stepNumber);

        div.text(number);

        step = step - 1;
        // To next step
        if (step > 0) {
            setTimeout(function () {
                counter(div, stepNumber, stepTime, step);
            }, stepTime);
        } else {
            busy[div.attr("id")] = false;
        }
    }





    $.fn.countTo.defaults = {
        countTo: 100,
        time: 1000
    };

})(jQuery);
