/**
 * jQuery plugin to preload an array of images for a slideshow.
 *
 */ 
(function($) {
$.fn.preloadSlides = function(o) {
    o = $.extend({        
		images: [],					// array of images to be preloaded				
		imageLoadCallback: null,	// callback when each image loads
		callback: null,				// callback once all images are loaded
		controls: true				// slideshow controls	
	}, o || {});
	
	return this.each(function() {
		
		var images = o.images;
		var imagesLoaded = 0;
		var totalImages = images.length;
		var callback = o.callback;
		var imageLoadCallback = o.imageLoadCallback;
		
		preloadImages(images);		
		
		function preloadImages(images) {
			if(totalImages > 2){
				preloadImage(0);
			}else{
				onAllImagesPreloaded();
			}
		}	
		
		function preloadImage(i){
			//console.info('preloadImage(' + i + ')');
			var image = document.createElement('img');
			image.id = i;
			image.onload = function(){
				onImageLoaded(this);
			}
			image.src = $(images[i]).find("img").andSelf().attr("src");
		}	
		
		function onImageLoaded(image){
			//alert(image.src + " loaded");
			imagesLoaded++;
			
			var currentSlide = images[Number(image.id)];
			$("#slideshow ul").append(currentSlide);
			
			// currentSlide passed in
			imageLoadCallback(currentSlide);
			
			if(imagesLoaded == totalImages) {
				onAllImagesPreloaded();
			}else{
				preloadImage(Number(image.id) + 1);
			}	
		}	
		
		function onAllImagesPreloaded(){			
			callback();
			//console.info(callback);
		}    
	});
};
})(jQuery);
