in partnership with mediatemple

var Periodical = new Class({

        initialize: function(fn, interval){
                this.fn = fn;
                this.interval = interval;
                this.id = 0;
                this.start();
        },

        start: function(){
                this.stop();
                this.start = $time();
                this.id = setInterval(this.interval);
        },

        stop: function(){
                this.delta = 0;
                clearInterval(this.id);
        },

        pause: function() {
                this.delta = this.start + this.interval - $time();
                clearInterval(this.id);
        },

        resume: function() {
                var self = this;
                this.id = setTimeout(function(){ self.start() }, this.delta);
        }

});