function Counter(){ // version: 0.1.0 var targetArr = null; var intervalId = null; var interval = null; this.init(); } Counter.prototype.init = function(){ this.targetArr = new Array(); this.interval = 1000; // one second } Counter.prototype.tick = function(){ for(var i in this.targetArr){ this.targetArr[i].currentValue = this.targetArr[i].currentValue + this.targetArr[i].valuePerIncrement; try{ var targetElm = document.getElementById(this.targetArr[i].containerId); targetElm.innerHTML = this.numberFormat(Math.ceil(this.targetArr[i].currentValue), this.targetArr[i].numDecimal, '.', ','); } catch(e){ // something went wrong } } } Counter.prototype.start = function(){ // does not work in IE, do not use try{ for (var i in window) { if(window[i] == this){ this.intervalId = setInterval(i+'.tick()', this.interval); } } } catch(e){ // something went wrong } } Counter.prototype.stop = function(){ clearInterval(this.intervalId); } Counter.prototype.setInterval = function(interval){ this.interval = interval; } Counter.prototype.setIntervalId = function(intervalId){ this.intervalId = intervalId; } Counter.prototype.add = function(startValue, valuePerIncrement, containerId, numDecimal){ var newTarget = new Object(); newTarget.currentValue = startValue; newTarget.valuePerIncrement = valuePerIncrement; newTarget.numDecimal = (numDecimal)?numDecimal:0; newTarget.containerId = containerId; this.targetArr.push(newTarget); } Counter.prototype.remove = function(containerId){ var tempArr = new Array(); for(var i in this.targetArr){ if(this.targetArr[i].containerId != containerId){ tempArr.push(this.targetArr[i]); } } this.targetArr = tempArr; } Counter.prototype.numberFormat = function(number, decimals, point, separator){ point = point ? point : '.'; number = number.toString().split('.'); if(separator){ var tmp_number = new Array(); var negative = false; if(number[0] < 0){ negative = true; number[0] = number[0].substring(1); // strip the - sign } for(var i = number[0].length, j = 0; i > 0; i -= 3){ var pos = i > 0 ? i - 3 : i; tmp_number[j++] = number[0].substring(i, pos); } number[0] = tmp_number.reverse().join(separator); if(negative){ number[0] = '-' + number[0]; } } if(decimals){ number[1] = number[1] ? number[1] : '0'; var size = decimals - number[1].toString().length; if(size < 0){ number[1] = number[1].substring(0, decimals); } else{ for(var i = 0; i < size; i++) number[1] += '0'; } } return(number.join(point)); } Counter.prototype.getElementsByClassName = function (className, tag, elm){ /* Developed by Robert Nyman, http://www.robertnyman.com Code/licensing: http://code.google.com/p/getelementsbyclassname/ */ if (document.getElementsByClassName) { getElementsByClassName = function (className, tag, elm) { elm = elm || document; var elements = elm.getElementsByClassName(className), nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null, returnElements = [], current; for(var i=0, il=elements.length; i