(function(){
    var time = new Date().getTime();
    var timeQueueLen = 20;
    var timeQueue = Array(timeQueueLen+1).join(0).split('');
    var result=0;
    var name='________test';

    _each= function(obj, iterator) {
       for (var i = 0, length = obj.length; i < length; i++)
        iterator(obj[i]);
     }
    each = function(obj, iterator) {
       var index = 0;
           _each(obj, function(value) {
              iterator(value, index++);
           });
        return this;
    }
    
    inject= function(obj, memo, iterator) {
        each(obj, function(value, index) {
          memo = iterator(memo, value, index);
        });
        return memo;
    }
    
    output= function(name, v) {
        var obj = document.getElementById(name) || prepend(name);
        obj.innerHTML=v;
    }

    prepend=function(name){
        var obj=document.createElement('div');
        obj.setAttribute('id', name);
        var ostyle = obj.style;

        ostyle.position = 'fixed';
        ostyle.top = '20px';
        ostyle.right = '20px';
        ostyle.backgroundColor = '#fff';
        ostyle.border = 'solid 1px #ccc';
        ostyle.width = '40px';
        ostyle.textAlign = 'right';
        ostyle.color = 'rgb(' + Math.min(255, result * 10) + ',0,0)';
        document.body.appendChild(obj);
        return obj;
    }

    setInterval(function() {
    	var beforeTime = time;
    	time = new Date().getTime();
    	timeQueue.push(Math.max(0, time - beforeTime - 40));
    	timeQueue.shift();
    	result = Math.floor(inject(timeQueue, 0, function(memo, e) { return memo + e-0 }) / timeQueueLen);
    	output(name, result);
    }, 40);

})();

