/*
On doit passer une li avec des items pour que ça fonctionne
*/

jQuery.fn.vonwacar = function(options) {
	var settings = {
		activeItemIndex :		0,
		itemWidth :				0,
		itemHeight :			0,
		itemsNumber :			0,
		firstIsSummary :		true,
		
		stripeCss :				{	width :			0,
									height :		0,
									marginLeft :	0,
									marginRight :	0
								},
		
		winCss :				{	width :			$('#posts').width()+'px',
									height :		$('#posts li:first-child').outerHeight()+'px',
									marginLeft :	$('#posts').css('marginLeft'),
									marginRight :	$('#posts').css('marginRight'),
									overflow :		'hidden',
									position :		'relative'
								},
		
		slideTime :				800,
		
		navTextSelector :		'h2',
		navTitleSelector :		'.intro h3',
		navSelector :			'#content',
		
		breadcrumbsSelector:	'h2',
		
		callBack :				function(){
									alert('vonwacar loaded')
								}
	};
	if(options){jQuery.extend(settings, options);}
	
	var methods = {
		updateNav :			function(){
								//alert('debug 1 : updateNav func');
								//desactivation des liens prev et next si au début ou à la fin
								if(settings.activeItemIndex <= 1){
									$('.carousel_prev').addClass('carousel_active');
								}else if($('.carousel_prev').hasClass('carousel_active')){
									$('.carousel_prev').removeClass('carousel_active');
								}
								if(settings.activeItemIndex >= settings.itemsNumber){
									$('.carousel_next').addClass('carousel_active');
								}else if($('.carousel_next').hasClass('carousel_active')){
									$('.carousel_next').removeClass('carousel_active');
								}
								//desactivation du liens correspondant à l'index de l'item activé
								$(".carousel_index").each(function(){
									$(this).removeClass('carousel_active');
									var href = $(this).attr('href');
									href = href.substr(href.length-2);
									if(href == '#'+settings.activeItemIndex){
										$(this).addClass('carousel_active');
									}
								});
								return false;				
		},
		scrollTo :			function(targetedItem){
								var itemToDisplay = 1;
								
								//recuperation de  l'index de l'item à afficher
								if(typeof targetedItem == 'string'){//ça veut dire qu'on à affaire à next ou prev
									//on récupère l'item actif, on recupère le sens (next/prev)  et on en déduit l'index de l'item à afficher
									if(targetedItem == 'next'){
										itemToDisplay = settings.activeItemIndex+1;
									}else if(targetedItem == 'prev'){
										itemToDisplay = settings.activeItemIndex-1;
									}
								}else if(typeof targetedItem == 'number'){//ça veut dire qu'on à affaire à un index d'item
									//du coup on sait direct quel est l'index de l'item à afficher
									itemToDisplay = targetedItem;
								}
								//on calcule le delta à appliquer au slide
								var delta = -(itemToDisplay-1)*settings.itemWidth;
								
								//on anime la liste de delta px
								$('#carousel > ul').animate({
									marginLeft : delta+'px'
								},settings.slideTime);
								
								//on met à jour les paramètres...
								settings.activeItemIndex = itemToDisplay;
								methods.updateNav();
								return false;
		}
	};
	//initialisation :
	//on complete la déclaration des paramètres
	settings.itemWidth = $('> li:first',this).outerWidth(true),
	settings.itemHeight = $('> li:first',this).outerHeight(),
	settings.itemsNumber = $('> *',this).length,
	
	//on élargi la liste pour pouvoir contenir tout les items et juste les items
	settings.stripeCss.width = settings.itemsNumber*settings.itemWidth;
	settings.stripeCss.width += 'px';
	
	//on limite la hauteur de la liste
	settings.stripeCss.height = settings.winCss.height;
	settings.activeItemIndex = 1;
	
	//on colle la classe active sur l'item actif
	$('> li:nth-child('+settings.activeItemIndex+')',this).addClass('active');
	
	//on creer les  boutons next et prev, et un bouton pour slider sur chaque item
	var navList = '<!--<div class="clear">&nbsp;</div><div class="grid_1">&nbsp;</div>-->';
	navList += '<div class="grid_12" id="carousel_navigation_double_wrapper" ><div id="carousel_navigation_wrapper"><ul id="carousel_navigation">';
	navList += '<li><a href="#" class="carousel_prev">« précédent</a></li>';
	
	//creation de la nav interne à la première fiche si déclaré comme sommaire
	if(true == settings.firstIsSummary){
		var summaryNavList = '<ul id="carousel_summary_navigation">';
		var summaryText = $('> li:first '+settings.breadcrumbsSelector, this).text();
		var breadcrumbsStart = '<span class="breadcrumbs"><a href="#1" title="'+summaryText+'" class="carousel_index">'+summaryText+'</a> » ';
	}
	
	for(var i = 1 ; i <= settings.itemsNumber ; i++){
		navText = $('> li:nth-child('+i+') '+settings.navTextSelector, this).text();
		navTitle = $('> li:nth-child('+i+') '+settings.navTitleSelector, this).text();
		//alert(navTitle);
		
		if(true == settings.firstIsSummary && i!=1){
			summaryNavList += '<li><a href="#'+i+'" title="'+navTitle+'" class="carousel_index summary_'+i+'">'+navText+' »</a></li>';
			//rajout d'un fil d'arianne sur les autres pages
			var breadcrumbs = breadcrumbsStart+navText+'</span>';
			$('> li:nth-child('+i+')', this).prepend(breadcrumbs);
		}
		navList += '<li><a href="#'+i+'" title="'+navTitle+'" class="carousel_index">'+navText+'</a></li>';
	}
	navList += '<li><a href="#" class="carousel_next">suivant »</a></li>';
	navList += '</ul></div></div>';
	$(settings.navSelector).after(navList);
	
	if(true == settings.firstIsSummary){
		$('> li:first',this).append(summaryNavList);
	}
	methods.updateNav();
	
	//on met tout les items les un au bout des autres
	$('> li',this).css('float','left');
	
	$(this)
		//on l'entoure avec une div qui va jouer le rôle de masque
		.wrap('<div id="carousel"></div>')
		.css(settings.stripeCss);
		
	$('#carousel').css(settings.winCss);

	$('a.carousel_prev, a.carousel_next, a.carousel_index').bind("click", function() {
			if(!$(this).hasClass("carousel_active")){
				var targetedItem = 0;
				if($(this).hasClass("carousel_next")){targetedItem = 'next';}
				if($(this).hasClass("carousel_prev")){targetedItem = 'prev';}
				if($(this).hasClass("carousel_index")){
					targetedItem = $(this).attr('href');
					targetedItem = parseInt(targetedItem.substr(targetedItem.length-1));
				}
				methods.scrollTo(targetedItem);
			}
			return false;
	});
	
	//appelle de callback
	settings.callBack();
};