(function( $ ){

	$.fn.loadingQueue = function(options) {

		var settings = {
			callBackEvent : 'loadingQueueDone',
			images : []
		};

		var numberOfImages = 0;
		var loadedImages = 0;

		return this.each(function() {
			// If options exist, lets merge them
			// with our default settings
			if ( options ) { 
				$.extend( settings, options );
			}
			
			var $this = $(this);
			if (settings.images.length == 0) {
				var $images = $this.find('img');
				$images.each(function(index) {
					settings.images.push(this.src);
				});
			};
			loadImages($this);					

		});
		//Preload images
		function loadImages($instance) {

			//Set number of images which have to be preloaded
			numberOfImages = settings.images.length;

			if (numberOfImages > 0) {
				$(settings.images).each(function(index) {
					loadImage(this, $instance);
				});
			}else{
				$instance.trigger(settings.callBackEvent);
				return false;
			};
		};

		function loadImage(imagePath, $instance) {
			$('<img />')
			.attr('src', imagePath)
			.bind('load', function(){
				loadedImages += 1;
				//If all images are loaded
				if (loadedImages == numberOfImages) {
					$instance.trigger(settings.callBackEvent);
					return false;
				};
			});
		};
	};
})( jQuery );

