slicedGalleryControl=function(l_sSelf,elem_id,text_elem_id)
{
	if(arguments.length<2)
	{
		throw new Error("Incorrect number of minimum parameters supplied when creating a Sliced Gallery Control.");
	}

	if($(elem_id)==undefined)
	{
		throw new Error("Could not find anything with id="+elem_id+" when creating a Sliced Gallery Control.");
	}

	this.target_elem=elem_id;
	this.target=$("#"+elem_id);
	this.self=l_sSelf;
	this.transitioning=false;
	this.pauseButtonPause=false;
	this.mouseOverPause=false;
	this.current=0;
	this.minWidth=90;
	this.minOpacity=0.5;
	this.maxWidth=300;
	this.steps=15;
	this.stepAmount=(this.maxWidth-this.minWidth)/this.steps;
	this.timeBetweenTransitions=3000;
	this.timeBetweenSteps=40;
	this.lastImageMousedOver=-1;

	var me = this;

	this.init=function()
	{
		$(".slicedImageWrapper",me.target).each(function (i) {
			this.style.width=i==me.current ? me.maxWidth : me.minWidth+'px';
			me.setOpacity(this,i==me.current ? 1 : me.minOpacity);
			var left = i==me.current ? "0px" : (0-(me.maxWidth-me.minWidth)/2) + "px";
			$("img:first",this).css("left",left).bind("mouseover",{i: i},me.userMouseOverSlice);
		});
		$(".sliceWrapper",me.target).bind("mouseover",me.mouseOnGallery).bind("mouseout",me.mouseOffGallery);
	};


	this.setOpacity=function(node,opacity)
	{
		if(node!=undefined && opacity!=undefined)
		{
			node.style.opacity=opacity;
			node.style.MozOpacity=opacity;
			node.style.KhtmlOpacity=opacity;
			node.style.filter="alpha(opacity="+opacity*100+")";
		}
	};


	this.userMouseOverSlice=function(event)
	{
		me.lastImageMousedOver=event.data.i;
		me.mouseOverSlice(event.data.i);
	};


	this.mouseOnGallery=function()
	{
		this.mouseOverPause=true;
	};


	this.mouseOffGallery=function()
	{
		this.mouseOverPause=false;
		this.lastImageMousedOver=-1;
	};


	this.mouseOverSlice=function(thisImageIndex)
	{
		if(me.transitioning==false && thisImageIndex!=me.current)
		{
			me.transitioning=true;
			me.toggleSlice(me.current,thisImageIndex);
		}
	};


	this.toggleSlice=function(reduce,grow)
	{
		var reducing=me.reduceSlice(reduce);
		var growing=me.growSlice(grow);

		if(reducing || growing)
		{
			window.setTimeout(me.self+'.toggleSlice('+reduce+','+grow+')',this.timeBetweenSteps);
		}
		else
		{
			me.current=grow;
			me.showLinkInfo();
			me.transitioning=false;
			if(me.mouseOverPause && me.lastImageMousedOver!=-1 && me.lastImageMousedOver!=me.current)
			{
				me.showNextImage();
			}
		}
	};


	this.showLinkInfo=function() {
		$("#" + text_elem_id + " > a").hide()
		$("#" + text_elem_id + " > a").eq(me.current).show()
	};


	this.reduceSlice=function(sliceIndex)
	{
		var divWrappers=$('#'+me.target_elem+' .slicedImageWrapper');
		var divWrapper=divWrappers[sliceIndex];
		var nWidth=parseInt($(divWrapper).css("width"),10);

		if(nWidth>me.minWidth)
		{
			$(divWrapper).css("width",nWidth-me.stepAmount+'px');

			var stepCount=(me.maxWidth-parseInt($(divWrapper).css("width"),10))/me.stepAmount;
			var stepOpacity=((1-me.minOpacity)/me.steps)*stepCount;
			me.setOpacity(divWrapper,1-stepOpacity);

			var left = parseInt($("img:first",$(divWrapper)).css("left"),10)-(me.stepAmount/2)+'px';
			$("img:first",$(divWrapper)).css("left",left);
			return true;
		}
		else
		{
			$(divWrapper).css("width",me.minWidth+'px').removeClass('selected');
			me.setOpacity(divWrapper,me.minOpacity);
			$("img:first",$(divWrapper)).css("left",(0-(me.maxWidth-me.minWidth)/2)+'px');
			return false;
		}
	};


	this.growSlice=function(sliceIndex)
	{
		var divWrappers=$('#'+this.target_elem+' .slicedImageWrapper');
		var divWrapper=divWrappers[sliceIndex];
		var nWidth=parseInt($(divWrapper).css("width"),10);
		if(nWidth<me.maxWidth)
		{
			$(divWrapper).css("width",nWidth+me.stepAmount+'px');

			var stepCount=(parseInt($(divWrapper).css("width"),10)-me.minWidth)/me.stepAmount;
			var stepOpacity=((1-me.minOpacity)/me.steps)*stepCount;
			me.setOpacity(divWrapper,me.minOpacity+stepOpacity);

			var left = parseInt($("img:first",$(divWrapper)).css("left"),10)+(me.stepAmount/2)+'px';
			$("img:first",$(divWrapper)).css("left",left);
			return true;
		}
		else
		{
			$("img:first",$(divWrapper)).css("width",me.maxWidth+'px').addClass('selected');
			me.setOpacity(divWrapper,1);
			$("img:first",$(divWrapper)).css("left","0px");
			return false;
		}
	};


	this.masterTimer=function()
	{
		if(me.transitioning==false)
		{
			if((me.mouseOverPause && me.lastImageMousedOver!=-1)||(me.pauseButtonPause==false && me.mouseOverPause==false))
			{
				me.showNextImage();
			}
		}
		window.setTimeout(me.masterTimer,me.timeBetweenTransitions);
	};


	this.showNextImage=function()
	{
		var next=me.current+1;
		if(me.lastImageMousedOver!=-1) {
			next=me.lastImageMousedOver;
		}
//		me.mouseOverSlice((next)%me.slicedData.length);
		me.mouseOverSlice((next) % $("#" + elem_id + " .slicedImageWrapper").size());
	};

	this.init();
	window.setTimeout(me.masterTimer,me.timeBetweenTransitions);

};