/*
 * jQuery Interpolate Plugin
 * Copyright (c) 2011 Discount Metrics Corp.
 */
(function($) {
    function _format_number(n) {
        n += "";
        x = n.split(".");

        x1 = x[0];
        x2 = (x.length > 1 ? "." + x[1] : "");

        var regex = /(\d+)(\d{3})/;

        while (regex.test(x1)) {
            x1 = x1.replace(regex, "$1" + "," + "$2");
        }

        return x1 + x2;
    }

    function _update(element, options) {
        var data = options["data"];
        var now = (new Date()).getTime();

        for (var i = 0; i < data.length; i++) {
            if (now < data[i][0]) { break; }
        }

        if (i == 0) {
            setTimeout(function() { _update(element, options); }, 1000);
        } else if (i == data.length) {
            $(element).html(data[i-1][1]);
        }

        if (i == 0) {
            setTimeout(function() { _update(element, options); }, 1000);
        } else if (i == data.length) {
            $(element).html(data[i-1][1]);
        } else {
            var timestamp = data[i-1][0];
            var bytestamp = data[i-1][1];

            var rate = (now-timestamp) / (data[i][0]-timestamp);
            var delta = rate * (data[i][1]-bytestamp);

            $(element).html(_format_number(Math.round(delta + bytestamp)));
            setTimeout(function() { _update(element, options); }, 1000);
        }

        return this;
    }

    $.fn.interpolate = function(options) {
        return _update(this, options);
    };
})(jQuery);


