/**
 * Javascript fading image script
 * Author: Christopher Wyllie <cgwyllie@gmail.com>
 */
function $(o) {
	return document.getElementById(o);
}

function setOpacity(t, o) {
	var s = $(t).style;
	s.opacity = (o / 100);
	s.MozOpacity = (o / 100);
	s.KhtmlOpacity = (o / 100);
	if (typeof $(t).currentStyle != "undefined" && !$(t).currentStyle.hasLayout)
		s.zoom = "1";
	s.filter = "alpha(opacity=" + o + ")";
}

function imageFader(o) {
	var self = this;
	var timer;
	
	self.FPS = 50;
	
	self.target = o.target;
	self.items = o.items || [];
	self.duration = o.duration || 0.7;
	self.pause =  o.pause * 1000 || 2000;
	
	self.currentItem = 0;
	self.currentOpacity = 0;
	self.currentStep = 0;
	self.frameDelay = (1 / self.FPS) * 1000;
	self.totalSteps = self.duration*1000 / self.FPS;
	self.pause = o.pause * 1000;
	
	self.imgs = [];
	self.fadeDirection = 'in';
	
	self.preloadImages = function () {
		for (i = 0; i < self.items.length; i++) {
			self.imgs[i] = new Image();
			self.imgs[i].src = self.items[i];
		}
	}
	
	self.loop = function () {
		self.preloadImages();
		setOpacity(self.target, self.currentOpacity);
		self.doFade();
	}
	
	self.doFade = function () {
		clearInterval(self.timer);
		if (self.currentOpacity == 0 || self.fadeDirection == 'in') {
			$(self.target).src = self.imgs[self.currentItem].src;
			self.timer = setInterval(self.fadeIn, self.frameDelay);
		}
		else if (self.currentOpacity == 100) {
			self.timer = setInterval(self.fadeOut, self.frameDelay);
		}
	}
	
	self.fadeIn = function () {
		if (self.currentStep <= self.totalSteps) {
			self.fadeDirection = 'in';
			self.currentOpacity = (self.currentStep / self.totalSteps) * 100;
			setOpacity(self.target, self.currentOpacity);
			++self.currentStep;
		}
		else {
			self.fadeDirection = 'out';
			self.currentStep = 0;
			clearInterval(self.timer);
			self.timer = setInterval(self.doFade, self.pause);
		}
	}
	
	self.fadeOut = function () {
		if (self.currentStep <= self.totalSteps) {
			self.fadeDirection = 'out';
			self.currentOpacity = 100 - ((self.currentStep / self.totalSteps) * 100);
			setOpacity(self.target, self.currentOpacity);
			++self.currentStep;
		}
		else {
			self.fadeDirection = 'out';
			self.currentStep = 0;
			clearInterval(self.timer);
			self.currentItem = (self.currentItem + 1) % self.items.length;
			self.doFade();
		}
	}
	
	self.stop = function () {
		clearInterval(self.timer);
	}
	
	self.run = function () {
		self.doFade();
	}
};