var round1 = makeRoundFunction(1);var round4 = makeRoundFunction(4);var beats = new beatsConstructor(10);$(function(){    var bpmText = $('#bpm');    var quarter = $('#quarter');    var half = $('#half');    var one = $('#one');    var two = $('#two');    var four = $('#four');    $(document).keydown(function(event){        bpmText.css('background', "#ffff66");        beats.add(new Date().getTime());        var period = beats.getPeriod();        if (period == 0) return;        bpmText.html(round1(60.0 / period));        quarter.html(round4(period / 4.0));        half.html(round4(period / 2.0));        one.html(round4(period));        two.html(round4(period * 2));        four.html(round4(period * 4));    }).keyup(function(event){        bpmText.css('background', "#ffffff")    });    });function makeRoundFunction(places){    var multiplier = 1;    for (var i = 0; i < places; i++) {        multiplier *= 10;    }    return function(number){        return Math.round(number * multiplier) / multiplier    };}function beatsConstructor(maxBeats){   this.lastTime = new Date().getTime();   this.maxBeats = maxBeats;   this.array = new Array();   this.add = function(t){      if ((t - this.lastTime) > 3000) this.array = new Array();      this.lastTime = t;      this.array.push(t);      if (this.array.length >= this.maxBeats) this.array.shift();   }   this.getPeriod = function(){      if (this.array.length < 2) return 0;      return (-0.0 + this.array[this.array.length-1] - this.array[0]) / (this.array.length -1) / 1000;   }   }