/**
 * Ici sont gérées deux choses :<br/>
 * <ul>
 * 	<li>Dès lors qu'un appel Ajax est en cours, le curseur de la souris est modifié pour apporter une indication visuelle à l'utilisateur.</li>
 * 	<li>Dès lors qu'une image est en cours de chargement, un spinner est positionné le temps du chargement pour indiquer si l'image se charge ou bien si le chargement est achevé.<br/>
 * 	Pour cela l'image doit avoir l'attribut data-bov3-spinner='true'
 * 	</li>
 * </ul>
 * @class
 * @static
 * @name spinner
 * @version 1.0
 */
(function($){
	try {
		/* Gestion des images */
		var cl_spin = 'bov3_spinner_loading';
		function spin_err() {
			$(this).data("loaded_in_error", true);
		}
		function spin_off() {
			var img = $(this);
			img.data("loaded", true);
			img
				.removeClass(cl_spin)
				.attr('alt', img.attr('altold'));
			img.attr('title', img.attr('titleold'));
			img.removeAttr('altold');
			if (img.data("loaded_in_error")) {
				var old = img.attr('titleold');
				if (typeof(old)!='undefined' && old!=null) img.attr('title', 'Error, ' + img.attr('titleold'));
				else img.attr('title', 'Error');
			}
		}

		function spin_on() {
			var img = $(this);
			if( !img.data("loaded") ) {
				img
					.addClass(cl_spin)
					.attr('altold', img.attr('alt'));
				img.attr('titleold', img.attr('title'));
				img.removeAttr('alt');
			}
		}

		$(window).load(function(){
			$("img[data-bov3-spinner='true']").each(spin_off);
		});

		$(function() {
			$("img[data-bov3-spinner='true']")
				.bind("error", spin_err)
				.bind("load error", spin_off)
				.each(spin_on);
		});
		/* fin Gestion des images */

		/* Gestion des appels ajax */
		function spinner_start() {
			/* Apres avoir mis le css, il faudrait donner du temps au browser pour qu'il affiche le cursor, mais nous n'avons pas de yiedl */
			$('body').addClass('bov3_spinner_loading_cursor');
		}
		function spinner_stop() {
			$('body').removeClass('bov3_spinner_loading_cursor');
		}
		
		/**
		* @class
		* @static
		* @name boSpinner
		* @version 1.0
		*/
		"boSpinner".namespace(/** @lends boSpinner.prototype	*/ {
			/**
			 * Active le spinner sur l'ensemble du document
			 */
			start: function() {
				spinner_start();
			},
			/**
			 * Désactive le spinner sur l'ensemble du document
			 */
			stop: function() {
				spinner_stop();
			}
		});
		
		$(document).ajaxStart(function() {
			spinner_start();
		});
		$(document).ajaxStop(function() {
			spinner_stop();
		});
		/* Fin Gestion des appels ajax */
		
	} catch (e) {
		boError.setTitle("Imposssible d'inialiser wedia.bov3.spinner.js : " + e).show();
	}
})(jQuery);


