(function($)
{
	$.fn.slideshow = function(options)
	{
		//Oh.
		var currentPosition = 0;
		var slides = this.children('.slide');
		var wrapper = $('<div class="slideContainer" />').insertBefore(slides);
		slides.append(wrapper);
		var numberOfSlides = slides.length;
		var slideWidth = this.width()-40;

		// manageControls: Hides and Shows controls depending on currentPosition
		var slideshow = {
			manageControls: function (position)
			{
				// Hide left arrow if position is first slide
				if(position==0)
					$('#leftControl').hide();
				else
					$('#leftControl').show();
		
				// Hide right arrow if position is last slide
				if(position == numberOfSlides-1)
					$('#rightControl').hide();
				else
					$('#rightControl').show();
			}
		};

		//Settings.
		var settings = {
			timeout: 5000
		};

		if(options)
			$.extend(settings, options);
	
		// Remove scrollbar in JS
		this.css('overflow', 'hidden');
	
		// Wrap all .slides with #slideInner div
		slides.wrapAll('<div id="slideInner"></div>').css({
			'float' : 'left',
			'width' : slideWidth
		});
	
		// Set #slideInner width equal to total width of all slides
		$('#slideInner').css('width', slideWidth * numberOfSlides);
	
		// Insert controls in the DOM
		wrapper.prepend('<span class="control" id="leftControl"></span>').append('<span class="control" id="rightControl"></span>');
	
		// Hide left arrow control on first load
		slideshow.manageControls(currentPosition);
	
		// Create event listeners for .controls clicks
		$('.control').bind('click', function()
		{
			// Determine new position
			currentPosition = ($(this).attr('id') == 'rightControl') ? currentPosition+1 : currentPosition-1;
	
			// Hide / show controls
			slideshow.manageControls(currentPosition);
			// Move slideInner using margin-left
			$('#slideInner').animate({
				'marginLeft' : slideWidth*(-currentPosition)
			});
		});
	};
})(jQuery);
