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

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

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

		var elements = [];
		for(var i = 0; i < container.childNodes.length; i++)
		{
			if(container.childNodes[i].nodeType == 1 && container.childNodes[i].nodeName.toLowerCase() != 'script')
				elements.push(container.childNodes[i]);
		}
		
		if(elements.length <= 1)
		{
			elements[0].style.visibility = "visible";
			document.getElementById("gallery-controls").style.display = "none";
			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.play();
	}
	
	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.stop();
		
		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.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 = 8 * 74 + left;
				var pos = this.lastSlide * 74;
				if(pos >= right)
					hs.scrollToOffset(pos - 7 * 74, 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()
	{
		if(!this.interval)
		{
			var self = this;
			this.interval = setInterval(function() { self.nextSlide() }, 6000);
		}
		this.playing = true;
	}

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