(function($){
	$.fn.preloadImages = function(options){
		var defaults = {
			'each': null,
			'all': null
		};
		var options = $.extend(defaults,options);
		var urls = [];
		var loaded = 0;
		this.each(function(){
			urls.push($(this).attr('src'));
		});
		
		load();
		
		function load()
		{
			if (urls&&urls.length&&urls[loaded])
			{
				var img = new Image();
				$(img).bind('error load onreadystatechange', complete);
				img.src = urls[loaded];
			} else complete();
		}
		
		function complete()
		{
			if (urls&&urls.length&&++loaded<urls.length){
				if (options.each instanceof Function) { options.each.call(this); }
				load();
			}
			else if (options.all instanceof Function) { options.all.call(this); }
		}
	};
})(jQuery);
