// récup d'un délai
function getDelay( $s )
{
	// délai de l'animation (ou random si pas défini)
	var d = parseInt( $s.attr('data-delay') );
	if ( isNaN(d) )
	{
		d = 1000 + Math.round( Math.random() * 4000 );
	}
	return d;
}

// Action du slideshow
function slideshow( $s )
{
	// Récup le tableau d'images
	var imgs = eval('('+$s.attr('data-images')+')');

	// Calcul le nouvel id
	var n = ( $s.data('n') + 1 ) % imgs.length;

	// trouve l'ancienne image (et sauve le nouvel id au passage)
	var $old = $s.data('n',n).find('img');

	// uniquement si il n'y a pas d'effet appliqué sur l'image
	if ( parseFloat( $old.css('opacity') ) == 1.0 )
	{
		var css = $old.position();
		css.position = 'absolute';

		// créer la nouvelle image, la cache, l'insère et la fait apparaitre doucement. Quand fini,
		$old.clone().attr('src',imgs[n]).hide().insertAfter( $old.css( css ) ).fadeIn( function()
		{
			// Quand animation finie, vire l'ancienne image
			$old.remove();

			// Et propgramme la prochaine animation
			setTimeout( function() { slideshow( $s ); }, getDelay( $s ) );
		});
	}
	else
	{
		// sinon ça bug, donc on saute le tour ;)
		setTimeout( function() { slideshow( $s ); }, getDelay( $s ) );
	}
}


$.fn.slideshow = function()
{
	return this.each( function()
	{
		var $s = $(this).data('n',0);
		setTimeout( function() { slideshow( $s ); }, getDelay( $s ) );
	});
}
