$(function() {
	var chocolatmedia = window.chocolatmedia = typeof window.chocolatmedia !== 'undefined' ? window.chocolatmedia : {};
	
	/**
	 * Fonction loadImages(images, options)
	 * 
	 * Précharge une liste d'images.
	 *
	 * @param  images  Un array d'url d'images à précharger.
	 * @options  {
	 * 	start		Une fonction appelée au début du préchargement de la liste
	 * 	startLoad	Une fonction appelée au début du préchargement de chaque image de la liste
	 * 	finishLoad	Une fonction appelée à la fin du préchargement de chaque image de la liste
	 * 	finishLoad	Une fonction appelée à la fin du préchargement de la liste
	 * }
	 * 
	 */
	chocolatmedia.loadImages = function(images, options) {
		var loaded = 0;
		var defaults = {
			start:		function(images) {},
			finish:		function(images) {},
			startLoad:	function(elem, index) {},
			finishLoad:	function(elem, index) {}
		};
		
		var options = $.extend(defaults, options);
		
		typeof options.start === 'function' ? options.start.call(this, images): false;
		
		$.each(images, function(index) {
			var $image, url = this; 
			
			typeof options.startLoad === 'function' ? options.startLoad.call(this, index): false;
			//options.startLoad(index, url.toString());
			
			$image = $(new Image());
			
			$image.error(function() {
				typeof options.errorLoad === 'function' ? options.errorLoad.call(this, index): false;
				if (++loaded >= images.length) {
					typeof options.finish === 'function' ? options.finish.call(this, images): false;
				}
			}).load(function() {
				typeof options.finishLoad === 'function' ? options.finishLoad.call(this, index): false;
				//options.finishLoad(index, url.toString());
				if (++loaded >= images.length) {
					typeof options.finish === 'function' ? options.finish.call(this, images): false;
				}
			});
			
			$image.attr('src', this);
		});
	};
});
