// JavaScript Document
/*
---

name: Loop

description: Runs a class method on a periodical

license: MIT-style license.

authors: Ryan Florence <http://ryanflorence.com>

docs: http://moodocs.net/rpflo/mootools-rpflo/Loop

requires:
- Core/Class

provides: [Loop]

...
*/

var Loop = new Class({

loopCount: 0,
isLooping: false,
loopMethod: function(){},

setLoop: function(fn, delay){
wasLooping = this.isLooping;
if (wasLooping) this.stopLoop();
this.loopMethod = fn;
this.loopDelay = delay || 3000;
if (wasLooping) this.startLoop();
return this;
},

stopLoop: function(){
this.isLooping = false;
clearInterval(this.periodical);
return this;
},

startLoop: function(delay, now){
if (!this.isLooping){
this.isLooping = true;
if (now) this.looper();
this.periodical = this.looper.periodical(delay || this.loopDelay, this);
};
return this;
},

resetLoop: function(){
this.loopCount = 0;
return this;
},

looper: function(){
this.loopCount++;
this.loopMethod(this.loopCount);
return this;
}

});
