// JavaScript Document
function AnimationController(animable, frames, frameWidth, interval, forward) {
	this.frames = frames;
	this.interval = interval;
	this.frameWidth = frameWidth;
	this.animable = animable;
	this.currentFrame = 0;
	this.intervalEvent = undefined;
	this.forward = forward;
	var self;

	this.start = function() {
	   self = this;
	   if (self.intervalEvent != undefined) {
	   		self.stop();
	   		self = this;
	   	}

       self.intervalEvent = setInterval(run, interval);
	}

	function run() {
		if (self.forward) {
			if (self.currentFrame < self.frames-1) {
				self.nextFrame();
			}
			else {
				self.stop();
			}
		}
		else {
			if (self.currentFrame > 0) {
				self.prevFrame();
			}
			else {
				self.stop();
			}

		}
	}

	this.stop = function() {
       clearInterval(self.intervalEvent);
       self.intervalEvent = undefined;
       self = undefined;
	}

	this.nextFrame = function() {
		self.currentFrame++;
		self.animable.style.backgroundPosition =
			"-" + self.frameWidth * self.currentFrame + "px 0px";
	}

	this.prevFrame = function() {
		self.currentFrame--;
		self.animable.style.backgroundPosition =
			"-" + self.frameWidth * self.currentFrame + "px 0px";
	}
}

function startAnimation(evt, frames, frameWidth, interval) {
	evt = (evt) ? evt : ((window.event) ? window.event : "");
	tgt = (evt.target)? evt.target : evt.srcElement;

	if (!tgt.animationController)
		tgt.animationController = new AnimationController(tgt, frames, frameWidth, interval);

	tgt.animationController.forward = true;
	tgt.animationController.start();
}

function stopAnimation(evt, frames, frameWidth, interval) {
	evt = (evt) ? evt : ((window.event) ? window.event : "");
	tgt = (evt.target)? evt.target : evt.srcElement;

	if (!tgt.animationController)
		tgt.animationController = new AnimationController(tgt, frames, frameWidth, interval);

	tgt.animationController.forward = false;
	tgt.animationController.start();
}