/*Slider JavaScript*/
/*Cet add-on va générer un slider sur la page selon les critères envoyés*/
/*Un champs de type hidden sera créer en même temps, contenant sa valeur*/

/*Ce script à été programmé par Kevin Gilbert (KeGi Site Web)*/
/*Il est libre de droit*/

/*Variables globales*/

var align_slider = new Array;
var width_slider = new Array;
var minimum_slider = new Array;
var maximum_slider = new Array;
var callback_slider = new Array;
var callback_slider = new Array;

var slider_down = '';

/*Largeur du curseur*/

var cursor_width = 16;
var cursor_real_width = (cursor_width + 0); /*ajouter les bordures du cursor si vous en mettez (* 2)*/

function addEvent(obj,event,fct){

	/*Cette fonction permet d'ajouter un événements à un objet (cross browsers)*/

	if(obj.attachEvent)
	obj.attachEvent('on' + event,fct);
	else
	obj.addEventListener(event,fct,true);
	
}

function get_posx_parent(child){

	/*Cette fonction trouve l'abscise absolu d'un élément*/

	var x = 0;
	while(child)
	{
		x += child.offsetLeft;
		child = child.offsetParent;
	}

	return x;

}

function get_posy_parent(child){

	/*Cette fonction trouve l'ordoné absolu d'un élément*/

	var y = 0;
	while(child)
	{
		y += child.offsetTop;
		child = child.offsetParent;
	}

	return y;

}

function mouseup_slider(){

	slider_down = '';
	
}

function mouseCoords(ev){

	/*Cette fonction retourne les coordonées de la souris (cross browsers)*/

	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

function move_mouse_cursor(event){

	if(slider_down != ''){

		/*Si on drag présentement un curseur...*/
		
		var souris = mouseCoords(event);
		var divSlider = document.getElementById(slider_down+'_div');
		var divSliderCursor = document.getElementById(slider_down+'_cursor');

		if(align_slider[slider_down]){
			
			/*On calcule la réelle position absolue dans la page*/
			pos_container = (get_posy_parent(divSlider) + 1);
			
			/*On calcule la position du curseur dans son parent*/
			pos_container_fp = (divSlider.offsetTop + 1);
			
		}else{

			pos_container = (get_posx_parent(divSlider) + 1);
			pos_container_fp = (divSlider.offsetLeft + 1);
			
		}
		
		var middle_cursor = Math.round((cursor_real_width / 2) - 1);
		
		if(align_slider[slider_down]){
			
			/*On calcule le déplacement en fonction des valeurs envoyés*/
			
			if((((souris.y - pos_container) + (middle_cursor + 1))) < width_slider[slider_down] && (((souris.y - pos_container) - middle_cursor)) > -1){

				divSliderCursor.style.top = (((souris.y - pos_container) - middle_cursor) + pos_container_fp)+'px';

			}else{
				
				if(((souris.y - pos_container) + (middle_cursor + 1)) >= width_slider[slider_down]){
					
					divSliderCursor.style.top = ((width_slider[slider_down] - cursor_real_width) + pos_container_fp)+'px';
					
				}
				
				if(((souris.y - pos_container) - middle_cursor) <= -1){
					
					divSliderCursor.style.top = pos_container_fp+'px';
					
				}
				
			}
			
		}else{
			
			if((((souris.x - pos_container) + (middle_cursor + 1))) < width_slider[slider_down] && (((souris.x - pos_container) - middle_cursor)) > -1){

				divSliderCursor.style.left = (((souris.x - pos_container) - middle_cursor) + pos_container_fp)+'px';

			}else{
				
				if(((souris.x - pos_container) + (middle_cursor + 1)) >= width_slider[slider_down]){
					
					divSliderCursor.style.left = ((width_slider[slider_down] - cursor_real_width) + pos_container_fp)+'px';
					
				}
				
				if(((souris.x - pos_container) - middle_cursor) <= -1){
					
					divSliderCursor.style.left = pos_container_fp+'px';
					
				}
				
			}
			
		}
		
		if(align_slider[slider_down]){
			
			/*La position en pixel sur le slider*/
			var pos_pix_cursor = (divSliderCursor.offsetTop - pos_container_fp);
			
		}else{
			
			/*La position en pixel sur le slider*/
			var pos_pix_cursor = (divSliderCursor.offsetLeft - pos_container_fp);
			
		}
		
		/*On calcule la valeur selon le minimum et le maximum*/
		var val_pos_cursor = Math.round(((pos_pix_cursor * (maximum_slider[slider_down] - minimum_slider[slider_down])) / (width_slider[slider_down] - cursor_real_width)) + minimum_slider[slider_down]);
		
		/*On met à jour la valeur du curseur*/
		document.getElementById(slider_down).value = val_pos_cursor;
		
		/*On appelle la fonction CallBack*/
		
		if(callback_slider[slider_down] != ''){
		
		callback_slider[slider_down](slider_down);
		
		}
		
	}

}

function update_value_slider(slider){

	/*Cette fonction met le curseur à la valeur du slider*/

	var val_slider = document.getElementById(slider);
	var divSlider = document.getElementById(slider+'_div');
	var divSliderCursor = document.getElementById(slider+'_cursor');

	if(val_slider == ''){

		val_slider.value = 0;
		return 0;

	}else{

		if(val_slider.value >= minimum_slider[slider] && val_slider.value <= maximum_slider[slider]){

			/*On affecte la valeur*/

			var new_val = Math.floor(((val_slider.value * (width_slider[slider] - cursor_real_width)) / maximum_slider[slider]));
			
			if(align_slider[slider]){
				
				var pos_container = (divSlider.offsetTop + 1);

				var new_val = (new_val + pos_container);

				divSliderCursor.style.top = new_val+'px';
				
			}else{

				var pos_container = (divSlider.offsetLeft + 1);

				var new_val = (new_val + pos_container);

				divSliderCursor.style.left = new_val+'px';
				
			}
			
		}else{

			val_slider.value = 0;
			return 0;

		}

		return 1;

	}
}

function init_slider(name_sli,align_sli,minimum_sli,maximum_sli,default_value_sli,width_sli,callback_sli){

	/*Uniquement cette fonction sera appellée pour la création, ongénère nos éléments et nos événements*/

	/*On remplie nos variables globales*/

	align_slider[name_sli] = align_sli;
	width_slider[name_sli] = (width_sli + cursor_real_width);
	minimum_slider[name_sli] = minimum_sli;
	maximum_slider[name_sli] = maximum_sli;
	callback_slider[name_sli] = callback_sli;
	
	/*On vérifie la valeur par défaut*/
	
	if(default_value_sli < minimum_slider[name_sli]){
		default_value_sli = minimum_slider[name_sli];
	}
	
	if(default_value_sli > maximum_slider[name_sli]){
		default_value_sli = maximum_slider[name_sli];
	}
	
	var divSlider = document.getElementById(name_sli+'_div');
		
	if(divSlider){

		/*Background du Slider*/

		if(align_slider[name_sli]){
			
			divSlider.className = 'bg_slider_vertical';
			divSlider.style.height = width_slider[name_sli]+'px';

		}else{
			
			divSlider.className = 'bg_slider_horizontal';
			divSlider.style.width = width_slider[name_sli]+'px';
			
		}
		
		divSlider.innerHTML = '<input id="'+name_sli+'" type="hidden" name="'+name_sli+'" value="'+default_value_sli+'" />';
		
		/*On créer un nouvel élément (Curseur)*/
		
		var cursor_slider = document.createElement("div");

		cursor_slider.id = name_sli+'_cursor';
		
		if(align_slider[name_sli]){ /*Si notre slider est vertical*/
			
			cursor_slider.className = 'slider_cursor_vertical';
			
			cursor_slider.style.top = (divSlider.offsetTop + 1)+'px';
			cursor_slider.style.left = (divSlider.offsetLeft - 3)+'px';
			cursor_slider.style.height = cursor_width+'px';
			
		}else{ /*Si notre slider est horizontale*/
			
			cursor_slider.className = 'slider_cursor_horizontal';

			cursor_slider.style.top = (divSlider.offsetTop - 2)+'px';
			cursor_slider.style.left = (divSlider.offsetLeft + 1)+'px';
			cursor_slider.style.width = cursor_width+'px';
			
		}
		
		divSlider.appendChild(cursor_slider);
		
		var divSliderCursor = document.getElementById(name_sli+'_cursor');
		
		/*On ajoute nos événements et on envoie au parent*/
		
		/*Sur quelques browsers (e.g. FF3), lorsque vous sélectionner un élément une fois*/
		/*et que vous réessayez de dragger cet élément, il essayera de sortir l'élément*/
		/*et le curseur ne réagira plus, on déselectionne tout en utilisant body.focus();.*/

		addEvent(cursor_slider,"mousedown",function(){ document.body.focus(); slider_down = name_sli; });
		addEvent(cursor_slider,"mouseup",function (){ mouseup_slider(); document.body.focus(); });
		
		if(align_slider[name_sli]){
			
			addEvent(cursor_slider,"mouseover",function(){ divSliderCursor.className = 'slider_cursor_hover_vertical'; });
			addEvent(cursor_slider,"mouseout",function(){ divSliderCursor.className = 'slider_cursor_vertical'; });

		}else{
			
			addEvent(cursor_slider,"mouseover",function(){ divSliderCursor.className = 'slider_cursor_hover_horizontal'; });
			addEvent(cursor_slider,"mouseout",function(){ divSliderCursor.className = 'slider_cursor_horizontal'; });
			
		}
		
		/*On met les valeurs à jour afin que le curseur prenne la valeur par défaut*/
		
		update_value_slider(name_sli);
		
		/*On appelle la fonction CallBack*/

		if(callback_slider[name_sli] != ''){
		
		callback_slider[name_sli](name_sli);
		
		}
		
	}

}
