/* zpSlider : Slider horizontal
 * 		Structure HTML :
 * 			<div id="slider">
 * 				<div id="slider_prev"></div>
 * 				<div id="slider_next"></div>
 * 				
 * 				<div id="slider_moove">
 * 					<div class="slider_element">
 * 						...
 * 					</div>
 * 					<div class="slider_element">
 * 						...
 * 					</div>
 * 					....
 * 				</div>
 * 			</div>
 * 		
 * 		Variables :
 * 			bt_prev_id: 'slider_prev'				> id du bouton 'suivant'
 *			bt_next_id: 'slider_next', 				> id du bouton 'précédant'
 *			blc_moove_id: 'slider_moove', 			> id de la div qui se déplacera
 *			elements_class: 'slider_element', 		> class des éléments du slider
 *			elements_width: 0,						> taille des éléments (par défaut le calcul tout seul)
 * 			elements_per_page: 1					> nombre d'éléments par page
 *			slide_speed: 500,						> vitesse du déplacement
 *			slider_auto: false,						> déplacement automatique
 *			slider_auto_time: 3000					> temps entre chaque déplacement automatique
 *			pagination: false,						> pagination
 *			pagination_parent_id: 'slider_pagination',	> class du parent de la pagination
 *			pagination_on_class: 'on',				> class de la pagination active
 *			pagination_off_class: ''				> class de la pagination inactive
 * 
 * 		A lire avant de commencer :
 * 			Dans cette version la pagination est forcément du type :
 * 				<div id="pagination_parent_id">
 * 					<ul>
 * 						<li>...</li>
 * 						<li>...</li>
 * 						...
 * 					</ul>
 *				</div>
 * 			De plus aucune class ne doit être attribuée aux li
 * 
 * 		Infos et remarques pour les développeurs :
 * 			La pagination à été dev très rapidement, elle est à revoir impérativement
 * 			Le calcul automatique de elements_width est à revoir si on à plusieurs éléments / page
 */
(function($) {
	$.fn.zpSlider = function(params) {
		p = $.extend( {
			bt_prev_id: 'slider_prev', 
			bt_next_id: 'slider_next', 
			blc_moove_id: 'slider_moove', 
			elements_class: 'zp_slider_element', 
			elements_width: 320, 
			elements_per_page:1,
			slide_speed: 500,
			slider_auto: false,
			slider_auto_time: 3000,
			pagination: true,
			pagination_parent_id: 'slider_pagination',
			pagination_on_class: 'on',
			pagination_off_class: ''
		}, params);
		
		var t = $(this);
		var bt_prev = t.find('.'+p.bt_prev_id);
		var bt_next = t.find('.'+p.bt_next_id);
		var blc_moove = t.find('.'+p.blc_moove_id);
		var elements_cnt = t.find('.'+p.elements_class).size() / p.elements_per_page;
		var current_pos = 0;
		if(p.elements_width == 0)
			p.elements_width = t.width();
		var slide_auto_var = -1;
		var pagination_li = t.find('.'+p.pagination_parent_id).find('li');
		
		//Variable temporaire, utilisation multiple, pas forcément le plus beau, mais surement le plus optimisé
		var tmp_var;
		
		//Initialisation de la pagination
		if(p.pagination)
		{
			 t.find('.'+p.pagination_parent_id+' li:first-child').addClass('on');
		}
		
		//Initalisation du bouton Next
		bt_next.click(function(){
			
			blc_moove.stop(true, true);
			//if($(this).is(':hover'))
				clearInterval(slide_auto_var);
			if(current_pos < elements_cnt - 1)
			{
				blc_moove.animate({left: '-='+p.elements_width}, p.slide_speed, function(){ current_pos ++; change_pagination(t, p, current_pos) });
			}
			else
			{
				blc_moove.animate({left: '0'}, p.slide_speed, function(){ current_pos = 0; change_pagination(t, p, current_pos) });
			}
		});
		
		//Initalisation du bouton Previous
		bt_prev.click(function(){
			
			
			//Stop le déplacement en cours
			blc_moove.stop(true, true);
			
			//Vérifie si le déplacement est automatique ou lié à l'utilisateur (si le curseur est sur le bouton au moment du clique alors c'est l'utilisateur qui souhaite le déplacement)
			//if($(this).is(':hover'))
				clearInterval(slide_auto_var);
			
			if(current_pos > 0)
			{
				blc_moove.animate({left: '+='+p.elements_width}, p.slide_speed, function(){ current_pos --; change_pagination(t, p, current_pos) });
			}
			else
			{
				blc_moove.animate({left: '-' + p.elements_width * (elements_cnt - 1)}, p.slide_speed, function(){ current_pos = elements_cnt - 1; change_pagination(t, p, current_pos) });
			}
		});
		
		//Initialisation du défilement automatique
		if(p.slider_auto)
		{
			slide_auto_var = window.setInterval("zp_slider_auto('"+p.bt_next_id+"', '"+p.bt_prev_id+"')", p.slider_auto_time);
		}
		
		//Initialisation des boutons de pagination
		pagination_li.click(function(){
			tmp_var = $(this).index();
			blc_moove.animate({left: '-'+(p.elements_width * $(this).index())}, p.slide_speed, function(){ current_pos = tmp_var; change_pagination(t, p, tmp_var) });
		});
	}
})(jQuery);
function zp_slider_auto(next, prev)
{
	$('#'+next).click();
}
function change_pagination(t, p, current_pos){
	if(p.pagination)
	{
		t.find('.'+p.pagination_parent_id).find('li.on').removeClass('on');
		t.find('.'+p.pagination_parent_id+' li:eq('+(current_pos)+')').addClass('on');
	}
}

