(function($){

	jQuery.fn.itiAnimation = function(options)
	{
		var settings = jQuery.extend(
		{
			debug: false,
			fadeTime : 2000,
			frequence : 4000,
			cle_bloc_images : 'div#images',
			cle_images : 'div.image',
			cle_bloc_puces : 'div#puces',
			cle_puces : 'a',
			class_puce_selected : 'selected',
			cle_bloc_textes : 'div#textes',
			cle_textes : 'a'
		}, options );
		
		var current_id = 0 ;
		var current_pos = 0 ;
		var animation = this ;
		current_id = animation.find(settings.cle_bloc_images+' '+settings.cle_images+':first').attr('rel') ;
		
		start(current_id,0) ;
		
		animation.find(settings.cle_bloc_puces+' '+settings.cle_puces).hover(function(){
			start($(this).attr('rel'),500) ;
		}) ;
		
		if ( settings.debug ) $(this).append('<div id="debug"></div>') ;
		
		function start(id_start,time)
		{
			if ( id_start != null ) switcher(id_start,true,time) ;
			animation.stopTime('animation') ;
			animation.everyTime(settings.frequence,'animation',function() {
				switcher(getNext()) ;
			}) ;
		}
		
		function getNext()
		{
			next = animation.find(settings.cle_bloc_images+' '+settings.cle_images+'[rel='+current_id+']').next(settings.cle_bloc_images+' '+settings.cle_images) ;
			if ( next.length == 1 ) return next.attr('rel') ;
			else return animation.find(settings.cle_bloc_images+' '+settings.cle_images+':first').attr('rel') ;
		}
		
		function switcher(vers,direct,time)
		{
			if ( direct == null ) direct = false ;
			if ( time == null ) time = settings.fadeTime ;
			
			debug('vers='+vers+' current='+current_id+' direct='+direct+' time='+time+"\n") ;
			
			animation.find(settings.cle_bloc_puces+' '+settings.cle_puces).removeClass(settings.class_puce_selected) ;
			animation.find(settings.cle_bloc_textes+' '+settings.cle_textes).hide() ;
			animation.find(settings.cle_bloc_puces+' '+settings.cle_puces+'[rel='+vers+']').addClass(settings.class_puce_selected) ;
			animation.find(settings.cle_bloc_textes+' '+settings.cle_textes+'[rel='+vers+']').show() ;
			
			var id_courante = animation.find(settings.cle_bloc_images+' '+settings.cle_images+'[rel='+current_id+']') ;
			var id_vers = animation.find(settings.cle_bloc_images+' '+settings.cle_images+'[rel='+vers+']') ;
			var id_toutes = animation.find(settings.cle_bloc_images+' '+settings.cle_images) ;
			
			if ( direct )
			{
				if ( current_id != vers )
				{
					id_toutes.stop() ;
					id_toutes.css('z-index',1) ;
					id_toutes.fadeTo(0,100) ;
					id_courante.css('z-index',2) ;
					id_courante.fadeTo(0,100) ;
					id_vers.fadeTo(0,100) ;
					id_vers.css('z-index',3) ;
					id_vers.fadeTo(time,100) ;
					current_id = vers ;
				}
				else
				{
					id_toutes.css('z-index',1) ;
					id_toutes.fadeTo(0,100) ;
					id_courante.css('z-index',3) ;
					id_courante.fadeTo(0,100) ;
				}
			}
			else
			{
				id_toutes.css('z-index',1) ;
				id_courante.css('z-index',3) ;
				id_vers.css('z-index',2);
				id_vers.fadeTo(0,100) ;
				id_courante.fadeTo(time,0,function(){
					id_vers.css('z-index',3) ;
				}) ;
				
				current_id = getNext() ;
			}
		}
		
		function debug(msg)
		{
			if ( settings.debug )
			{
				$('div#debug').append(msg+"\n") ;
			}
		}
		
	};

})(jQuery);
