// Klasse die eine übergebene Funktion im Abstand einer gewünschten Verzögerung ausführt

(function($) {

    $.jkLoop = function(loopFunction, delay) {
	// To avoid confusion about "this" issues
	var base = this;

	base.isLooping = false;
	base.loopFunction = loopFunction;
	base.loopDelay = delay;

	// Setzt die loopFunction auf die gewünschte Funktion
	base.setLoop = function(loopFunction, delay) {
	    base.loopDelay = (delay) ? delay : this.loopDelay;
	    if(base.isLooping) base.stopLoop();
	    base.loopFunction = loopFunction;
	    return base;
	}
	
	// Startet die periodische Ausführung der Funktion 
	base.startLoop = function(delay) {
	    base.stopLoop();
	    base.isLooping = true;
	    base.loopDelay = (delay) ? delay : base.loopDelay;
	    base.periodical = setInterval(base.loopFunction, base.loopDelay);
	    return base;
	}

	// Stoppt die periodische Ausführung der Funktion
	base.stopLoop = function() {
	    base.isLooping = false;
	    clearInterval(base.periodical);
	    return base;
	}

	// Liefert den Status der periodischen Ausführung zurück (play, stop)
	base.getState = function() {
	    return(base.isLooping) ? "play" : "stop";
	}

	// Liefert die Funktion die periodisch ausgeführt wird
	base.getLoopFunction = function() {
	    return base.loopFunction;
	}
	
    } // end jkLoop

})(jQuery);
