(function($) {

	$.fn.carrou = function(options) {
		//debug(this);
		var opts = $.extend({}, $.fn.carrou.defaults, options);

		return this.each(function() {
			var $$ = $(this);
			var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
			// verification existence du panorama dans les options
			var pano = o.hasOwnProperty("panorama") ? o.panorama.hasOwnProperty("itemSelector") ? true:false :false;
			// verification existence de l'autoScroll dans les options
			var autoScroll  = o.hasOwnProperty("autoscroll") ? o.autoscroll.hasOwnProperty("active") ? true:false : false;
			// si existence du panorama verification de l'existence d'une duree
			var durationScroll = o.hasOwnProperty("autoscroll") ? o.autoscroll.hasOwnProperty("duration") ? o.autoscroll.duration:2000 : false;
			
			// si existence du panorama definition de ses options
			if(pano === true) {
				var contentSelector = o.panorama.itemSelector || ".carrou_pano";
				var itemToShow  = o.panorama.itemToShow || 0;
				var classActive = o.panorama.classActive || "carrou_on";
				
				// masquage des container du panorama
				$(contentSelector).hide();
				$(contentSelector+':eq('+itemToShow+')').show();
			}
			
			// contruction du container global, des fleches de navigation et du container de la liste
			$$.wrap('<div class="'+o.classEl+'">').before('<a href="#" class="prev"><span>&lt;</span></a>').after('<a href="#" class="next"><span>&gt;</span></a>').wrap('<div class="carrouContainer">');
			
			// si existence du panorama, ajout de la classe active sur le 1er element visible
			if(pano === true) {
				$('li:eq('+itemToShow+')', $$).addClass(classActive);
			}
			
			// deplacement du 1er element en 1ere position afin de fluidifier le mouvement du carrousel
			$('li:last', $$).prependTo($$);
			
			// deplacement du carrousel vers la gauche de façons a masquer le 1er element de la liste (donc le dernier)
			$$.css('left', '-'+o.itemW+'px');
			
			// mise en cache des differents elements utiles du carrousel
			var $$$   = $$.parents('.'+o.classEl);
			var $prev = $$$.children('a.prev');
			var $next = $$$.children('a.next');
			
			// si existence du panorama, au click sur les items, affichage du container correspondant
			if(pano === true) {
				$('li a', $$).click(function() {
					if(!$(this).parents('li').hasClass(classActive)) {
						var curEl = $(this).parents('li');
						$('li.'+classActive, $$).removeClass(classActive);
						curEl.addClass(classActive).children('a').animate({marginRight: '+=0'}, 0, function() {
										$(contentSelector).hide();
										$(this.hash).show();
									});
					}
					return false;
				});
			}
			
			// fonction de deplacement vers la gauche
			var prevDpl = function(){
				$$.stop().animate({
							left: "0"
						}, 
						o.duration, 
						function() {
							$("li:last", $$).prependTo($$);
							$$.css({
								left: '-'+o.itemW+'px'
							});
							if(pano === true) {
								$('li.'+classActive, $$).removeClass(classActive).prev().addClass(classActive).children('a').animate({marginRight: '+=0'}, 0, function() {
										$(contentSelector).hide();
										$(this.hash).show();
									});
							}
						});
			}
			
			// fonction de deplacement vers la droite
			var nextDpl = function(){
				$$.stop().animate({
							left: '-'+(o.itemW*2)+'px'
						}, 
						o.duration, 
						function() {
							$("li:first", $$).appendTo($$);
							$$.css({
								left: '-'+o.itemW+'px'
							});
							if(pano === true) {
								$('li.'+classActive, $$).removeClass(classActive).next().addClass(classActive).children('a').animate({marginRight: '+=0'}, 0, function() {
										$(contentSelector).hide();
										$(this.hash).show();
									});
							}
						});
			}
			
			// detection du click sur la fleche de gauche
			$prev.click(function() {
				// si l'autoScroll est active, desactivation du timer au click sur la fleche de gauche
				if(autoScroll === true) {
					clearInterval (timmerScroll);
				}
				prevDpl();
				$(this).blur();
				return false;
			});
			
			// detection du click sur la fleche de droite
			$next.click(function() {
				// si l'autoScroll est active, desactivation du timer au click sur la fleche de droite
				if(autoScroll === true) {
					clearInterval (timmerScroll);
				}
				nextDpl();
				$(this).blur();
				return false;
			});
			
			// si l'autoScroll est active, mise en place du timer
			if(autoScroll === true) {
				var timmerScroll = setInterval ( nextDpl, durationScroll );
			}
			

		});
	};

	
	/*function debug($obj) {
		if (window.console && window.console.log)
		window.console.log('carrou selection count: ' + $obj.size());
	};*/

	
	$.fn.carrou.defaults = {
		classEl: 'my_carrou',
		duration: 'slow'
	};

	
})(jQuery);
