/* 
#####################################################
#####################################################
##												   ##
##		Document JS développé pour le site		   ##		
##			http://www.gueuleton.com/			   ##
##												   ##
##			Propriété de ce document			   ##
##												   ##
##			  Simon Jean-Philippe				   ##
##		document créer le 25 janvier 2009		   ##
##				mis à jour le 					   ##
##												   ##
#####################################################
#####################################################
*/
	
	var Slider = Class.create({
									  
		//INITIALISATION DE L'ASCENSEUR				  
		initialize: function(pBoxSlider,pBoxContent,pWheel) {
			/*	
			################################
			##	INITIALISATION VARIABLES
			################################
			*/ 
			//identifiant de l'element contenant le slider
			var pBoxSlider = $(pBoxSlider) ; 
			
			//identifiant de l'element qui sera scroller
			var pBoxContent = $(pBoxContent) ; 
			
			//identifiant du parent de la box Scroller
			var pUpBox = $($(pBoxContent).up().id);
			
			
			/*	
			################################
			##	DIMENSIONS ELEMENTS
			################################
			*/ 
			//dimension du parent de la box scroller
			var pDimensionUpBox = pUpBox.getDimensions(); 
			//dimension de la box scroller
			var pDimensionBoxContent = pBoxContent.getDimensions(); 
			//dimension du contener du slider
			var pDimensionBoxSlider = pBoxSlider.getDimensions();
			
			
			/*	
			################################
			##	CALCULS
			################################
			*/ 
			var pRange = 0 ; // debut du scrool
			var pEndRange =  pDimensionBoxContent.height-pDimensionUpBox.height; //fin du scrool
			//alert(this.pBoxDownContent);
			var pHeightAscenseur = pDimensionBoxSlider.height/ (pDimensionBoxContent.height /pDimensionUpBox.height); // hauteur de l'ascenseur suivant les dimensions des box
			//this.construct(this.pBoxDownContent,this.pBoxContent);
			
			
			//#########################################
			//	CONSTRUCTION DE L'ASCENSEUR INTERIEUR/
			//#########################################
			
			if(pEndRange>0) { //si la différence entre les elements up et down sont > 0 on peut scroller
						
				var pAscenseur = Builder.node('div', { //construction de l'ascenseur
					id : 'pAscenseur',
					className : 'scroolBar',
					style : ' height:'+ pHeightAscenseur+'px; width:'+pDimensionBoxSlider.width+'px;'
				}) ;
				
				
				pBoxSlider.appendChild(pAscenseur); // insertion de l'ascenseur dans la box Slider
				
				$('pAscenseur').observe('mouseover', function() {
					$('pAscenseur').setStyle( {background : '#888888' });	   
				});
				$('pAscenseur').observe('mouseout', function() {
					$('pAscenseur').setStyle( {background : '#666666' });	   
				});
				
				
				var scroolValue = 0 ;
				var topAscenseurScrool = 0 ;
				//construction de l'ascenseur
				var sliderControl = new Control.Slider('pAscenseur', pBoxSlider, {
					axis : 'vertical',
					range: $R(pRange,pEndRange),
					sliderValue: 0,
					onSlide: function(value) {
						pBoxContent.setStyle({ top: -(parseInt(value)+1)	 + 'px'});
						scroolValue = parseFloat(pBoxContent.getStyle('top') ) ;
						topAscenseurScrool = parseInt($('pAscenseur').getStyle('top'));
						//alert(topAscenseurScrool);
					},
					onChange: function(value) {
						//alert(this.pBoxDownContent);
						pBoxContent.setStyle({ top: -(parseInt(value)+1)	 + 'px'});
						scroolValue = parseFloat(pBoxContent.getStyle('top'));
						topAscenseurScrool = parseInt($('pAscenseur').getStyle('top'));
						//salert(topAscenseurScrool);
					}
				});
	
			} else {
				pBoxSlider.remove();
			}
			
			
			
			/*	
			################################
			##	EVENT WHEEL
			################################
			*/ 
			if(pWheel && pEndRange>0) { 
			
					Object.extend(Event, {
						wheel:function (event){
							Event.stop(event);
							var delta = 0;
							if (!event) event = window.event;
							if (event.wheelDelta) { // on rentre ici si on n'est sous IE et OPERA
								//alert(event.wheelDelta);
								delta = event.wheelDelta/120;
								if (window.opera) delta = -delta;
							} else if (event.detail) {  // on rentre ici si on n'est sous Firefox
								//alert(event.detail);
								delta = -event.detail/3; 
							}
							return Math.round(delta); //Safari Round
						}
					});
					
					
					//calcul du nombre pixel a monter ou descendre du box scrool
					//calcul du rapport entre les hauteurs des elements (parentScrool-contentScroll & parentSlider-slider)
					var pixelTopBottom = (pDimensionUpBox.height-pDimensionBoxContent.height)/ (parseInt(pBoxSlider.getStyle('height'))-parseInt(pHeightAscenseur));
					
					//calcul de lespace du bat entre ascenseur et barre defilement
					var pEspaceBottom = parseInt(pDimensionBoxSlider.height-pHeightAscenseur);
					var topAscenceur = parseInt($('pAscenseur').getStyle('top'));
					
					if(pEspaceBottom>=300) { // si c'est supérieur à 300px on descende de 60px par 60px
						scroolAscenseur = 60;
					} else if(pEspaceBottom>=200) { //si c'est supérieur à 200px on descend de 50px par 50px
						scroolAscenseur = 40;
					} else if(pEspaceBottom>=100) { //..
						scroolAscenseur = 25;
					} else if(pEspaceBottom>=50) {//..
						scroolAscenseur = 25;
					} else if(pEspaceBottom>=1) {//..
						scroolAscenseur = 10;
					} else {//..
						scroolAscenseur = 1;
					}
					
					var ancienScroolAscenseur = scroolAscenseur ;
					
					$(pBoxContent).observe("mousewheel", function(e) {
						gestionScrooler(e);
					});
					
					
					$(pBoxContent).observe("DOMMouseScroll", function(e) {
						gestionScrooler(e);
					});
					
					function gestionScrooler(e) {
							//alert('ok');
						if(Event.wheel(e) < 0 ) { // molette vers nous
							//si on est pas arrivé en bas
							if(topAscenseurScrool<(parseInt($(pBoxSlider).getStyle('height'))-parseInt( $('pAscenseur').getStyle('height') ) ) ) {
								
								//verification 
								 var i=0;
								 while(i<=0) {
									 if( (topAscenseurScrool+scroolAscenseur) >= (parseInt($(pBoxSlider).getStyle('height'))-parseInt( $('pAscenseur').getStyle('height') ) )   ) {
										 scroolAscenseur -= 1 ;
									 } else {
										 i = 1 ;
									 }
								 }
								 
								scroolValue += pixelTopBottom*scroolAscenseur;
								  
								pBoxContent.setStyle({ top: (parseInt(scroolValue))+'px'});
								$('pAscenseur').setStyle({ top : (topAscenseurScrool+scroolAscenseur) });
								topAscenseurScrool = parseInt($('pAscenseur').getStyle('top'));
								
								//remise du scrool de base
								scroolAscenseur = ancienScroolAscenseur ;
							}
							
						} else { //molette extérieur
							//si on est arrivé en haut
							if(topAscenseurScrool>0) {
								
								 //verification 
								 var i=0;
								 while(i<=0) {
									 if( (topAscenseurScrool-scroolAscenseur) < 0 ) {
										 scroolAscenseur -= 1 ;
									 } else {
										 i = 1 ;
									 }
								 }
								 
								scroolValue -= pixelTopBottom*scroolAscenseur;
								
								pBoxContent.setStyle({ top: (parseInt(scroolValue))+'px'});
								$('pAscenseur').setStyle({ top : (topAscenseurScrool-scroolAscenseur)});
								topAscenseurScrool = parseInt($('pAscenseur').getStyle('top'));
								
								//remise du scrool de base
								scroolAscenseur = ancienScroolAscenseur ;
								
								
								
							} 
							
						}
					}//fin de focntion scrooler
					
					
					
					
			} // condition wheel
			
			/*	
			################################
			##	ResizeBox
			################################
			*/ 
			
			function resizeSlider() {
				
				newHeightBoxContent =  pBoxContent.getDimensions(); 
				
				//calcul de la hauteur du box scoller
				if(newHeightBoxContent.height!=pDimensionBoxContent.height) {
				//si différent de l'ancienne hauteur
					newHeightBoxContent.height = 800;
					alert('#'+pDimensionBoxContent.height);
					//redimension de l'ascenceur
					pHeightAscenseur = pDimensionBoxSlider.height/ (newHeightBoxContent.height /pDimensionUpBox.height);
					$('pAscenseur').setStyle("height: "+pHeightAscenseur+"");
					
					//calcul du nouveau rapport
					pixelTopBottom = (pDimensionUpBox.height-newHeightBoxContent.height)/ (parseInt(pBoxSlider.getStyle('height'))-parseInt(pHeightAscenseur));
					
					//mise a jour différence slider/boxSlider et du palier Wheel
					pEspaceBottom = parseInt(pDimensionBoxSlider.height-pHeightAscenseur);
					if(pEspaceBottom>=300) { // si c'est supérieur à 300px on descende de 60px par 60px
						scroolAscenseur = 60;
					} else if(pEspaceBottom>=200) { //si c'est supérieur à 200px on descend de 50px par 50px
						scroolAscenseur = 40;
					} else if(pEspaceBottom>=100) { //..
						scroolAscenseur = 25;
					} else if(pEspaceBottom>=50) {//..
						scroolAscenseur = 25;
					} else if(pEspaceBottom>=1) {//..
						scroolAscenseur = 10;
					} else {//..
						scroolAscenseur = 1;
					}
					
					ancienScroolAscenseur = scroolAscenseur;
					
					//changement de l'interval du scroll
					pEndRange =  newHeightBoxContent.height-pDimensionUpBox.height;
					sliderControl.options.setRange = $R(pRange,pEndRange);
					//mise a jour de la hauteur de la box scroller
					pDimensionBoxContent.height = 0;
					
					//stop des observer
					$(pBoxContent).stopObserving();
					$(pBoxContent).stopObserving();
					$('pAscenseur').stopObserving();
					
					pBoxContent.observe("mousewheel", function(e) {
						alert('ok');
						gestionScrooler(e);
					});
					
			
					pBoxContent.observe("DOMMouseScroll", function(e) {
																	  alert('ok');
						gestionScrooler(e);
					});
					
					
				} else {
					//alert('#'+newHeightDownBoxContent.height);
					//alert('#'+pDimensionBoxContent.height);
				}
			
			}
			
			var newHeightDownBoxContent = '' ;
			var timer = setInterval(resizeSlider,6000);
		}
		
		
	});
	
					

// JavaScript Document
