/************ Plugin JQuery ************* */
/********* Customized by Eduardo Oliveira ************ */
/* Réalisé par Creamama - Matthieu Léorat */
/* ************ juillet 2010 ************ */ 
/* ******** http://www.creamama.fr ****** */
/********** NECESSITE: jquery-1.4.2.min.js , ui.core-1.7.2.js , ui.draggable-1.7.2.js , jquery.mousewheel.min.js */
(function($) {
	$.fn.scrollbar = function(params) {
		params = $.extend( {
			taille_englobe: 350,
			taille_scrollbar: "auto",
			taille_bouton: 35,
			pas:5,
			molette: true,
			drag: true,
			debug: false,
			style: 'basic',	
			position:'gauche',
			alignement_scrollbar:'haut',	
			orientation: 'vertical',		
			marge_scroll_contenu: 5,		
			largeur_scrollbar:10,			
			visible_scrollbuttonWidth:5,	
			cible:'englobe',				
			nom:'divCentre',				
			bt_id:'bt_gr',					
			taille_manual:'off'				
		}, params);
		return this.each(function() {
			var $$ = $(this);
			var taille_englobe_init = params.taille_englobe;
			var taille_scrollbar_init = params.taille_scrollbar;
			function calcul_contenu_top_max(){
				return  params.taille_englobe - taille_contenu;
			}
			function calcul_bouton_top_max(){
				return params.taille_scrollbar - params.taille_bouton
			}
			function deplacement_bouton(info_top_contenu){
				var depl_bouton = (info_top_contenu/calcul_contenu_top_max())*(calcul_bouton_top_max());
				if(depl_bouton < 0){depl_bouton = 0;}
				if(depl_bouton > calcul_bouton_top_max()){depl_bouton = calcul_bouton_top_max();}
				$('#bouton_'+params.cible).css({'top':depl_bouton+"px"});
			}
			function deplacement_contenu(info_top_bouton){
				var depl_contenu = (info_top_bouton/calcul_bouton_top_max())*(calcul_contenu_top_max());
				if (depl_contenu > 0){depl_contenu = 0}
				if (depl_contenu < calcul_contenu_top_max()){depl_contenu = calcul_contenu_top_max()}
				$('#'+params.cible).css({'top':depl_contenu+"px"});
			}
			function styler_scrollbar(position,orientation){
				var type_marge_position;
				var marge_position;
				var marge_orientation;
				switch (position){
					case 'droite':
						$('#'+params.cible).after('<div id="scrollbar_'+params.cible+'"><div id="bouton_'+params.cible+'">&nbsp;<div id="'+params.bt_id+'">&nbsp;</div></div></div>');
						$('#scrollbar_'+params.cible).css({'margin-left':params.marge_scroll_contenu+'px'});
					break;
					case 'gauche':
						$('#'+params.cible).before('<div id="scrollbar_'+params.cible+'"><div id="bouton_'+params.cible+'">&nbsp;<div id="'+params.bt_id+'">&nbsp;</div></div></div>');
						$('#scrollbar_'+params.cible).css({'margin-right':params.marge_scroll_contenu+'px'});
					break;
				}
				switch (orientation){
					case 'haut':
						$('#scrollbar_'+params.cible).css({'margin-top':'0px'});
					break;
					case 'centre':
						var marge = (params.taille_englobe -params.taille_scrollbar)/2;
						$('#scrollbar_'+params.cible).css({'margin-top':marge+'px'});
					break;
					case 'bas':
						var marge = params.taille_englobe -params.taille_scrollbar;
						$('#scrollbar_'+params.cible).css({'margin-top':marge+'px'});
					break;
				}
			}
			var padTop=0;
			var padBot=0;
			var taille_contenu;
			if(params.taille_manual == 'off'){
				taille_contenu = $$.height()+1;
			}
			else{
				taille_contenu = params.taille_manual + 40;
			}
			function calcul_hauteur_auto(){
				if(params.taille_englobe == "auto"){
					padTop = $('#'+params.nom).css('padding-top');
					padTop = padTop.substring(0,padTop.length-2);
					padBot = $('#'+params.nom).css('padding-bottom');
					padBot = padBot.substring(0,padBot.length-2);
					if(params.nom =="divCentre") {
						params.taille_englobe = $("body").height()-561-padBot-padTop;
					}
					if(params.nom =="blocNews") {
						params.taille_englobe = $("body").height()-761-padBot-padTop;
					}
				}else{return false}
			}
			calcul_hauteur_auto();
			function controle_donnee(){
				calcul_hauteur_auto();
				if(taille_contenu > params.taille_englobe){
					if(params.taille_scrollbar == "auto"){params.taille_scrollbar = params.taille_englobe;}
					if(params.taille_scrollbar > params.taille_englobe){						
						params.taille_scrollbar = params.taille_englobe;	
					}
					return true;
				}else{
					return false;
				}		
			}
			if(controle_donnee()){
				window.onresize = function() {
					if(taille_englobe_init == "auto"){
						params.taille_englobe = $(window).height()-40-padBot-padTop;
						$$.css({'height':params.taille_englobe+'px'});
						if(taille_scrollbar_init == "auto"){
							params.taille_scrollbar = params.taille_englobe;
							$('#scrollbar_'+params.cible).css({'height':params.taille_scrollbar+'px'});
							deplacement_bouton($('#'+params.cible).css('top').substring(0,$('#'+params.cible).css('top').length-2));
							if(params.debug){affiche_position();}
						}
					}	
				};
				var temp = $$.width()-params.marge_scroll_contenu-params.largeur_scrollbar;
				$$.css({'width':params.marge_scroll_contenu+params.largeur_scrollbar+temp+'px'});
				$$.wrapInner('<div id="'+params.cible+'"></div>');
				$$.css({'height':params.taille_englobe+'px','overflow':'hidden','position':'absolute'});
				$('#'+params.cible).css({'top':0+'px','float':'left','position':'absolute','width':temp+'px', 'left':'15px'});	
				taille_contenu = $('#'+params.cible).height();
				if(params.taille_manual == 'off'){
					taille_contenu = $('#'+params.cible).height();
				}
				else{
					taille_contenu = params.taille_manual + 40;
				}
				styler_scrollbar(params.position,params.alignement_scrollbar);
				$$.append('<div class="clear"></div>');
				$(".clear").css({'clear':'both'});
				switch (params.style) {
					case 'basic':
						$('#scrollbar_'+params.cible).css({'width':params.largeur_scrollbar+'px',
											'float':'left',
											'height':params.taille_scrollbar+'px',
											'background':'#ffffff'	
						});
						$("#bouton_"+params.cible).css({'width':params.largeur_scrollbar+'px',
										'height':params.taille_bouton+'px',
										'background':'#ffffff',	
										'top':0+'px',
										'cursor':'pointer'
						});
						$("#"+params.bt_id).css({'width':params.visible_scrollbuttonWidth+'px',
										'height':params.taille_bouton+'px',
										'background':'#999999',	
										'position':'relative',
										'top':'0px',
										'left':'50%',
										'margin-left':'-'+params.visible_scrollbuttonWidth/2+'px',
										'margin-top':'-'+params.taille_bouton/2+'px',
										'cursor':'pointer'
						});				
					break;
				}
				if(params.drag){
					$("#bouton_"+params.cible).draggable({ 
						containment: 'parent',
						axis: 'y',
						start:function(){},
						drag: function(event, ui) {
							deplacement_contenu(ui.position.top);
							if(params.debug){affiche_position();}
						},
						stop: function(){}
					});
				}
				if(params.molette){
					$$.mousewheel(function(event, delta) {
						var top_contenu = $('#'+params.cible).css('top');
						top_contenu = parseInt( top_contenu.substring(0,(top_contenu.length-2)) );
						var top_bouton = $('#bouton_'+params.cible).css('top');
						top_bouton = parseInt( top_bouton.substring(0,(top_bouton.length-2)) );
						if (delta > 0) {							
							top_contenu = top_contenu + params.pas;
							if(top_contenu > 0){top_contenu = 0}
							$('#'+params.cible).css({'top':top_contenu+"px"});
						}else if (delta < 0){							
							top_contenu = top_contenu - params.pas;
							if(top_contenu < calcul_contenu_top_max()){top_contenu = calcul_contenu_top_max()}
							$('#'+params.cible).css({'top':top_contenu+"px"});							
						}
						deplacement_bouton(top_contenu);
						
						if(params.debug){affiche_position();}
						
						return false;
					});
				}
			}
        });
	}
})(jQuery);
