(function($){

	$.fn.itiSlider = function(options)
	{
		var settings = jQuery.extend(
		{
			debug: false,
			frequence:4000,
			fadeTime:500,
			fadeDirect:300,
			id_images:'#images',
			id_image:'.image',
			id_minis:'#minis',
			id_mini:'.mini'
		}, options );
		
		var current_id = 0 ;
		var current_pos = 0 ;
		var animation = this ;
		var slide_lance = false ;
		var bloc_images = animation.find(settings.id_images) ;
		var images = bloc_images.find(settings.id_image) ;
		var bloc_minis = animation.find(settings.id_minis) ;
		var minis = bloc_minis.find(settings.id_mini) ;
		current_id = images.first().attr('rel') ;
		
		if ( settings.debug ) animation.find('#debug').show() ;
		
		if ( images.length > 1 )
		{
			start(current_id,0) ;
			images.show() ;
			minis.click(function(){
				switcher($(this).attr('rel'),true,settings.fadeDirect) ;
				animation.stopTime('animation') ;
				if ( settings.debug ) animation.find('#debug').prepend('debut delai'+"\n") ;
				bloc_images.animate(
					{'width':'100%'},
					settings.fadeDirect,
					function(){
						if ( settings.debug ) animation.find('#debug').prepend('fin delai'+"\n") ;
						if ( slide_lance )
						{
							start(current_id,0) ;
						}
					}
				) ;
			}) ;
		}
		else
		{
			bloc_minis.hide() ;
		}
		
		function start(id_start,time)
		{
			if ( images.length > 1 )
			{
				if ( id_start != null ) switcher(id_start,true,time) ;
				animation.stopTime('animation') ;
				slide_lance = true ;
				animation.everyTime(settings.frequence,'animation',function() {
					switcher(getNext()) ;
				}) ;
			}
		}
		
		function getNext()
		{
			next = bloc_images.find(settings.id_image+'[rel='+current_id+']').next(settings.id_image) ;
			if ( next.length == 1 ) return next.attr('rel') ;
			else return images.first().attr('rel') ;
		}
		
		function getPrev()
		{
			prev = bloc_images.find(settings.id_image+'[rel='+current_id+']').prev(settings.id_image) ;
			if ( prev.length == 1 ) return prev.attr('rel') ;
			else return images.last().attr('rel') ;
		}
		
		function switcher(vers,direct,time)
		{
			if ( direct == null ) direct = false ;
			if ( time == null ) time = settings.fadeTime ;
			
			if ( settings.debug ) $('#debug').prepend('vers='+vers+' current='+current_id+' direct='+direct+' time='+time+"\n") ;
			
			minis.removeClass('selected') ;
			bloc_minis.find(settings.id_mini+'[rel='+vers+']').addClass('selected') ;
			
			var image_courante = bloc_images.find(settings.id_image+'[rel='+current_id+']') ;
			var image_vers = bloc_images.find(settings.id_image+'[rel='+vers+']') ;
			
			if ( direct )
			{
				if ( current_id != vers )
				{
					images.stop().css('z-index',1).fadeTo(0,100) ;
					image_vers.css('z-index',2) ;
					image_courante.css('z-index',3).fadeTo(0,100).fadeTo(time,0) ;
					current_id = vers ;
				}
				else
				{
					images.css('z-index',1).fadeTo(0,100) ;
					image_courante.css('z-index',3).fadeTo(0,100) ;
				}
			}
			else
			{
				images.css('z-index',1).fadeTo(0,100) ;
				image_courante.css('z-index',3) ;
				image_courante.fadeTo(time,0,function(){
					image_vers.css('z-index',4) ;
				}) ;
				image_vers.css('z-index',2) ;
				current_id = getNext() ;
			}
		}
	};

})(jQuery);
