// Version 09.09.11

function SlideSet(pix)
{
	var i, div, img;
	
	if(typeof(pix)!='object' || isNaN(pix.length))
	{
		alert('You must pass SlideSet an array.\n\nnew SlideSet\n([\n\t{\n\t\timage: \'/images/img1.png\'\n\t},\n\t{\n\t\timage: \'/images/img2.png\',\n\t\tonclick: function()\n\t\t{\n\t\t\talert(\'Clicked!\');\n\t\t}\n\t}\t\n]);');
		return false;
	}
	
	this.pix=pix;
	this.interval=false;
	
	this.left_button=document.createElement('div');
	this.left_button.className='SlideSet_left_button iepngfix';
	this.left_button.onclick=function()
	{
		this.slide_by(-1);
		return false;
	}.bind(this);
	
	this.slider=document.createElement('div');
	this.slider.className='SlideSet_slider';
	
	this.slide_container=document.createElement('div');
	this.slide_container.className='SlideSet_slide_container';
	
	for(i=0; i<this.pix.length; i++)
	{
		div=document.createElement('div');
		div.className='SlideSet_slide';
		img=document.createElement('img');
		img.src=this.pix[i].image;
		div.appendChild(img);
		
		if(!!this.pix[i].onclick)
		{
			div.onclick=this.pix[i].onclick;
			div.style.cursor='pointer';
		}
		
		this.pix[i].div=this.slide_container.appendChild(div);
	}
	
	this.right_button=document.createElement('div');
	this.right_button.className='SlideSet_right_button iepngfix';
	this.right_button.onclick=function()
	{
		this.slide_by(1);
		return false;
	}.bind(this);
	
	this.slider.appendChild(this.slide_container);
	
	return this;
}

SlideSet.prototype.write=function(container_id)
{
	var container;
	
	container=document.getElementById(container_id);
	if(!container)
	{
		alert('The container div with the id "'+ container_id +'" was not found.');
		return false;
	}
	
	container.appendChild(this.left_button);
	container.appendChild(this.slider);
	container.appendChild(this.right_button);
	this.slider.scrollLeft=0;
	
	return this;
}

SlideSet.prototype.slide_by=function(steps)
{
	var index, position, target, next_target, scroll_amount;
	
	//this.position=(this.pix.length - (Math.abs((this.position+steps)-this.pix.length)%this.pix.length)) % this.pix.length;
	next_target=this.pix[1].div;
	position=0;
	if(steps < 0)
	{
		next_target=this.pix[0].div;
		this.rearrange_pix(-1);
		this.slider.scrollLeft=next_target.offsetLeft;
		next_target=this.pix[0].div;
		position=1;
	}
	
	index=(this.pix.length - (Math.abs((position+steps)-this.pix.length)%this.pix.length)) % this.pix.length;
	target=this.pix[index].div;
	
	scroll_amount=parseInt((target.offsetLeft-this.slider.scrollLeft)/18);
	if(index > this.pix.length / 2)
		scroll_amount=-parseInt((this.pix[this.pix.length-index].div.offsetLeft-this.slider.scrollLeft)/18);
	
	if(scroll_amount != 0)
	{
		if(this.interval!==false)
			clearInterval(this.interval);
		this.interval=setInterval(function()
		{
			var pic;
			
			this.slider.scrollLeft += scroll_amount;
			
			if((this.slider.scrollLeft >= next_target.offsetLeft && scroll_amount > 0) || (this.slider.scrollLeft <= next_target.offsetLeft && scroll_amount < 0))
			{
				if(steps < 0)
				{
					this.rearrange_pix(-1);
					this.slider.scrollLeft=next_target.offsetLeft;
					next_target=this.pix[0].div;
				}
				else
				{
					this.rearrange_pix(1);
					this.slider.scrollLeft=next_target.offsetLeft;
					next_target=this.pix[1].div;
				}
			}
			
			if((this.slider.scrollLeft >= target.offsetLeft && scroll_amount > 0) || (this.slider.scrollLeft <= target.offsetLeft && scroll_amount < 0))
			{
				if(steps < 0)
					this.rearrange_pix(1);
				this.slider.scrollLeft = target.offsetLeft;
				clearInterval(this.interval);
				this.interval=false;
			}
		}.bind(this), 10);
	}
}

SlideSet.prototype.rearrange_pix=function(steps)
{
	while(steps != 0)
	{
		if(steps < 0)
		{
			pic=this.pix.splice(this.pix.length-1, 1)[0];
			this.pix.splice(0, 0, pic);
			this.slide_container.removeChild(pic.div);
			this.slide_container.insertBefore(pic.div, this.slide_container.childNodes[0]);
		}
		else
		{
			pic=this.pix.splice(0, 1)[0];
			this.pix.splice(this.pix.length, 0, pic);
			this.slide_container.removeChild(pic.div);
			this.slide_container.appendChild(pic.div);
		}
		
		steps=steps-(Math.abs(steps)/steps);
	}
}

