function homepageAnimation(v1, v2)
{
	this.container = false;
	this.tween = false;
	this.interval = false;
	this.timeout = false;
	this.lastSlide = 0;
	this.slides = new Array();
	this.playing = false;
	this.banner = false;

	this.init = function(containerId, controlsId)
	{
		if(!containerId)
			return;

		var container = document.getElementById(containerId);
		if(!container)
			return;
			
		this.container = container;

		var elements = [];
		for(var i = 0; i < container.childNodes.length; i++)
		{
			if(container.childNodes[i].nodeType == 1 && container.childNodes[i].nodeName.toLowerCase() != 'script')
			{
				if(container.childNodes[i].className == "slide")
					elements.push(container.childNodes[i]);
				if(container.childNodes[i].className == "banner")
					this.banner = container.childNodes[i];
			}
		}
		
		if(elements.length <= 1)
			return;
		
		var controls = [];
		if(controlsId)
		{
			var parent = document.getElementById(controlsId);
			if(parent)
			{
				for(var i = 0; i < parent.childNodes.length; i++)
				{
					if(parent.childNodes[i].nodeType == 1 && parent.childNodes[i].nodeName.toLowerCase() != 'script')
					{
						controls.push(parent.childNodes[i].getElementsByTagName("A")[0]);
					}
				}
			}
		}

		if(controls.length == elements.length)
		{
			for(var i = 0; i < elements.length; i++)		
				this.addSlide(elements[i], controls[i], elements[i]);
		}
		else
		{
			for(var i = 0; i < elements.length; i++)		
				this.addSlide(elements[i], controls[i], null);
		}

		this.set(0);
	}
	
	this.start = function()
	{
		var self = this;
		
		var t = new Tween(this.banner.style, "width", Tween.none, 0, 980, 2, 'px');
		t.start();
		
		setTimeout(function() {
			var t2 = new Tween(self.banner.firstChild.firstChild.style, "width", Tween.none, 0, 980, 2, 'px');
			t2.start();
		}, 2000);

		setTimeout(function() {
			var t = new Tween(self.banner.firstChild.firstChild.style, "left", Tween.none, 0, 980, 2, 'px');
			var t2 = new Tween(self.banner.firstChild.firstChild.firstChild.style, "left", Tween.none, 0, -980, 2, 'px');
			t.start();
			t2.start();
		}, 6000);
		
		setTimeout(function() {
			var t = new Tween(self.banner.style, "left", Tween.none, 0, 980, 2, 'px');
			var t2 = new Tween(self.banner.firstChild.style, "left", Tween.none, 0, -980, 2, 'px');
			t.start();
			t2.start();
		}, 6600);
		
		setTimeout(function() {
			self.play();
			self.container.className = "";
		}, 8600);
	}
	
	this.addSlide = function(element, control)
	{
		var self = this;
		element.style.zIndex = 1000 - this.slides.length;
		element.onmouseover = function() { self.pause(); };
		element.onmouseout = function() { self.unpause(); };
		if(control)
		{
			control.i = this.slides.length;
			control.onclick = function() { self.set(this.i); return false; };
		}
		this.slides.push({ element: element, control: control });
	}
	
	this.set = function(slide)
	{
		this.pause();
		
		if(this.tween)
			this.tween.stop();
		
		this.slides[0].element.style.zIndex = 1000;

		for(var i = 0; i < this.slides.length; i++)
		{
			this.slides[i].element.style.visibility = (i == slide) ? "visible" : "hidden";
			if(this.slides[i].control)
				this.slides[i].control.className = (i == slide) ? "on" : "off";
		}

		this.clearOpacity(this.slides[slide].element);
		
		this.lastSlide = slide;
	}

	this.nextSlide = function()
	{
		var self = this;

		if(this.slides[this.lastSlide].control)
			this.slides[this.lastSlide].control.className = "off";
	
		var finalSlide = this.lastSlide == (this.slides.length-1);
		if(finalSlide)
			this.slides[0].element.style.zIndex = 1000 - this.slides.length;

		this.tween = new OpacityTween(this.slides[this.lastSlide].element, Tween.regularEaseOut, 100, 0, 1);
		this.tween.start();
		
		var obj = this.slides[this.lastSlide].element;
		
		if(finalSlide)
		{
			this.lastSlide = 0;
			this.tween.onMotionFinished = function()
			{
				obj.style.visibility = "hidden";
				self.slides[0].element.style.zIndex = 1000;
				self.clearOpacity(obj);
			}
		}
		else
		{
			this.lastSlide++;
			this.tween.onMotionFinished = function()
			{
				obj.style.visibility = "hidden";
				self.clearOpacity(obj);
			}
		}

		this.slides[this.lastSlide].element.style.visibility = "visible";
		if(this.slides[this.lastSlide].control)
		{
			this.slides[this.lastSlide].control.className = "on";

				var left = hs.getPosition() * -1;
				var right = 4 * 215 + left;
				var pos = this.lastSlide * 215;
				if(pos >= right)
					hs.scrollToOffset(pos - 3 * 215, 1);
				if(pos < left)
					hs.scrollToOffset(pos, 1);
		}
	}
	
	this.clearOpacity = function(o)
	{
		if(typeof isOldInternetExplorer !== "undefined" && isOldInternetExplorer)
			o.style.filter = "";
		else
		{
			o.style.opacity = "";
			o.style.MozOpacity = "";
			o.style.KhtmlOpacity = "";
		}
	}
	
	this.play = function(quick)
	{
		if(!this.interval && !this.timeout)
		{
			var self = this;
			if(quick)
			{
				this.timeout = setTimeout(function() {
					self.nextSlide();
	
					self.timeout = false;
					if(self.interval)
						clearInterval(self.interval);
	
					self.interval = setInterval(function() { self.nextSlide() }, 8000);
				}, 2500);
			}
			else
			{
				this.interval = setInterval(function() { self.nextSlide() }, 8000);
			}
		}
		this.playing = true;
	}

	this.pause = function()
	{
		if(this.interval)
		{
			clearInterval(this.interval);
			this.interval = false;
		}
		if(this.timeout)
		{
			clearTimeout(this.timeout);
			this.timeout = false;
		}
	}
	
	this.unpause = function()
	{
		if(this.playing)
			this.play(true);
	}
	
	this.stop = function()
	{
		this.pause();
		this.playing = false;
	}
	
	this.init(v1, v2);
}
