(function($) {
	var objects = new Array();
	var arrIndex = 0;
	var ContianerId = '';
	var opts;

	// plugin definition
	jQuery.fn.RotatePictures = function(options) {
		return this.each(function() {
			opts = $.extend({}, $.fn.RotatePictures.defaults, options);			
			ContianerId = '#' + $(this).attr('id');		
			$(ContianerId + ' ul li').each(function () {
				objects.push(this);
			});		
			$(ContianerId + ' ul').remove();
			
			var prev = $.fn.RotatePictures.DrawPrev();			
			var next = $.fn.RotatePictures.DrawNext();
			$.fn.RotatePictures.DrawButtons(ContianerId, prev, next);
	
			ShowImage();
			var interval = setInterval(ShowImage, opts.period);
			
			$(next).click(function() {
				ShowImage();
				clearInterval(interval);
				return false;
			});
			$(prev).click(function() {
				arrIndex = arrIndex-2;
				if(arrIndex < 0) arrIndex = objects.length-1;
				ShowImage();
				clearInterval(interval);
				return false;
			});	
			
		});
	};
	
	jQuery.fn.RotatePictures.defaults = {
		period: 5000,
		elementContainerClass: 'RandomImageDiv',
		elementContainerCss: '',
		prevHtml: '< prev',
		prevClass: '',
		nextHtml: 'next >',
		nextClass: '',
		showSeparator: 1
	};
	
	jQuery.fn.RotatePictures.DrawButtons = function(container, prev, next)
	{
		var div = $('<div></div>');
		$(div).addClass('RotatePictureButtons');
		$(div).append(prev);
		if(opts.ShowSeparator)
			$(div).append(' | ');
		$(div).append(next);
		$(container).after(div);
	}
	
	jQuery.fn.RotatePictures.DrawPrev = function()
	{
		return $('<a href="#" class="' + opts.prevClass + '">' + opts.prevHtml +'</a>');
	};
	
	jQuery.fn.RotatePictures.DrawNext = function()
	{
		return $('<a href="#" class="' + opts.nextClass + '">' + opts.nextHtml + '</a>');
	}	

	function ShowImage()
	{
		// var index = GetRandomIndex();
		var index = GetNextIndex();
		
		// Dom stuff
		var Container = $(ContianerId);
		var div = $('<div></div>');
		$(div).addClass(opts.elementContainerClass).append($(objects[index]).html());		
		if($(ContianerId + ' .' + opts.elementContainerClass).length)
		{
			$(ContianerId + ' .' + opts.elementContainerClass).fadeOut("slow", function callback() { $(ContianerId + ' .' + opts.elementContainerClass).remove(); $(Container).append(div).hide().fadeIn("slow"); });
		}
		else
		{
			$(Container).append(div).hide().fadeIn("slow");
		}		
		
	};		
	
	function GetNextIndex()
	{
		if(arrIndex >= objects.length)
			arrIndex = 0;
		return arrIndex++;
	};

	function GetRandomIndex()
	{
		var picturesLength = objects.length;		
		var random = Math.floor(Math.random() * picturesLength);
		return random;
	};
})(jQuery);
