;(function($) {

	var settings = {};

	$.fn.Slides = function(options) {
		var finals = {};
		$.fn.Slides.setup(finals, $.fn.Slides.defaults, options);
		var that = this;
		$.fn.Slides.init(this, function() {
			return that.each(function() {
				$(that).Slides.execute();
			});
		});
	};

	$.fn.Slides.defaults = {
		pause : 6000,
		fade : 1000
	};	

	$.fn.Slides.setup = function(finals, defaults, options) {
		settings = $.extend({}, finals || {}, defaults || {}, options || {});
	};		
	
	$.fn.Slides.init = function(target, callback) {		
		if (typeof settings.images === 'undefined')
			throw Error('Image array is not optional must be passed in the call $("#id").Slides({images : ["img1.jpg", "img2.jpg"]})');
		settings.main = $(target);
		var isInit = false;
		var initWrapper = function() {
			isInit = true;
			settings.toggle = settings.main.wrap('<span id="slideshowcontainer"></span>')
					.parent()
					.css({display : 'inline-block'});
			$.fn.Slides.preloadNextImage();
		};
		settings.main.load(function() {
			if (isInit)
				return;
			initWrapper();
			callback.call();
		});		
		if (settings.main[0].complete && !isInit) {
			initWrapper();
			callback.call();
		}
	};

	$.fn.Slides.preloadNextImage = function() {
		var nextImage = $.fn.Slides.getNextImage();
		var image = new Image();
		image.src = nextImage;
		settings.nextImage = image;
	};

	$.fn.Slides.getNextImage = function() {
		var nextImage = settings.images.shift();
		settings.images.push(nextImage);
		return nextImage;	
	};
	
	$.fn.Slides.execute = function() {
		var isToggle = false;
		setInterval(function() {
			if (isToggle) {
				isToggle = false;
			} else {
				settings.main.attr('src', settings.nextImage.src).css({display : 'block'})				
				isToggle = true;
			}
			$.fn.Slides.preloadNextImage();
		}, settings.pause);
	};

})(jQuery);