/*
 * icecarousel 28/05/2009
 * Guillaume Decroix, Stephane Iatonni, Nicolas Girod
 *****************************************************************
 * v1.1.2 [SI, NG]
 * Ajout de callbacks sur avant/après slide		[callback_before_slide, callback_after_slide : fonction]
 * Ajout de la pause au survol					[pause_on_hover : selecteur css]
 * Ajout des fonctions pause/start
 *
 * v1.1.1
 * La taille des li est désormais calculée sur le contenu du li
 * et non sur la taille de l'image
 *
 * v1.0.1
 *
 *****************************************************************
 * requiert jquery 1.3.2 (non testé sur les versions inférieures)
 *
 *Exemple :
 *			$(window).load(function(){
					$(".overflow_diaporama").icecarousel({
						btnNext: ".btn_avance",
						btnPrev: ".btn_retour",
						speed : 500,
						rotate : true,
						rotate_speed : 2000
					});
				});
 *
 * le conteneur doit avoir une taille fixe et etre en overflow.
 * la taille des ul / li est adapté automatiquement
 * la largeur des images n'a pas besoin d'être égale
 * s'applique sur un conteneur ayant pour structure interne : <ul><li><img></li><li><img></li><li><img></li></ul>
 * rajouter le bloc ci dessus dans le $(document).ready()
 * le $(window).load sert à s'assurer que les images sont completement charger avant de lancer le diaporama
 *
 * btnNext : element declenchant l'affichage de la vignette suivante.
 * btnPrev : element declenchant l'affichage de la vignette précédente.
 * speed : videsse de disparition d'une img
 * rotate : true / false (default) : determine si le diaporama se deroule automatiquement
 * rotate_speed : vitesse de rotation automatique du diaporama
 *
 */
(function($) {
$.fn.icecarousel = function(o) {
	o = $.extend({
		btnPrev: null,
		btnNext: null,
		auto: null,
		speed: 200,
		total_size: 0,
		temp_size : null,
		block_slide : false,
		_this :null,
		rotate : false,
		rotate_speed : 1000,
		pause_on_hover : false,
		callback_after_slide : false,
		callback_before_slide : false
	}, o || {});


		o._this=$(this);

		$(o._this).find('li').each(function(){
			o.temp_size=$(this).outerWidth();
			o.total_size+=o.temp_size;
			$(this).css('width',o.temp_size);
		});
		$(o._this).children('ul').css('width',o.total_size);

		if(o.btnNext){
			$(o.btnNext).click(function(event) {
				event.preventDefault();
				slide("avance");
			});
		}

		if(o.btnPrev){
			$(o.btnPrev).click(function(event) {
				event.preventDefault();
				slide("recule");
			});
		}

		if(o.pause_on_hover){
			$(o.pause_on_hover).mouseenter(function(event) {
				o.rotate = false;
			});
			$(o.pause_on_hover).mouseleave(function(event) {
				o.rotate = true;
			});
		}

		if (o.rotate==true && o.block_slide==false){

			setInterval(function() {
				if (o.rotate) {
					slide("avance");
				}
			}, o.rotate_speed);
		}

		function do_callback(event) {

			switch(event) {
				case 'after_slide':
					if (o.callback_after_slide != false && typeof(o.callback_after_slide) == 'function') {
						o.callback_after_slide();
					}
					break;
				case 'before_slide':
					if (o.callback_before_slide != false && typeof(o.callback_before_slide) == 'function') {
						o.callback_before_slide();
					}
					break;
			}
		}

		function pause() {
			o.rotate = false;
		}

		function start() {
			o.rotate = true;
		}

		function slide(_direction){

			if (_direction=="avance"){
				if (o.block_slide==false){
					o.block_slide=true;
					do_callback('before_slide');
					o.temp_size=$(o._this).find('li:nth-child(1)').outerWidth()*-1;
					$(o._this).children('ul').animate({
						marginLeft : o.temp_size
					}, o.speed,function(){
						$(o._this).children('ul').append($(o._this).find('li:nth-child(1)'));
						$(o._this).children('ul').css('marginLeft',0);
						$(o._this).find('li:last-child').css('width',$(o._this).find('li').outerWidth());
						o.block_slide=false;
						do_callback('after_slide');
					});
				}
			}else{
				if (o.block_slide==false){
					o.block_slide=true;
					do_callback('before_slide');
					o.temp_size=$(o._this).find('li').outerWidth();
					$(o._this).children('ul').css('marginLeft',-o.temp_size);
					$(o._this).children('ul').prepend($(o._this).find('li:last-child'));
					$(o._this).children('ul').animate({
						marginLeft: 0
					}, o.speed,function(){
						o.block_slide=false;
						do_callback('after_slide');
					});
				}
			}

		}
};
})(jQuery);
