


function Scrollbar(id_obj_source, parametres) {
	var _scrollbar = this;
	var _arguments = arguments;

	this.zone_div = {
		  obj_div_main : null
		, largeur : ''
		, hauteur : ''
		, couleur_fond : ''
		, bordure : ''
		, police : ''
		, couleur_police : ''
		, scrollTop : ''

		, getScroll : function () {
			scrollTop = parseInt(_scrollbar.obj_div.scrollTop);
			return scrollTop;
		}
		, setScroll : function (scrollTopNew) {
			if (scrollTopNew < _scrollbar.div_min_scroll) scrollTopNew = _scrollbar.div_min_scroll;
			if (scrollTopNew > _scrollbar.div_max_scroll) scrollTopNew = _scrollbar.div_max_scroll;

			//try {
				_scrollbar.obj_div.scrollTop = scrollTopNew;
			//}catch(e) { }

			this.scrollTop = this.getScroll();
			_scrollbar.scrollTop = this.scrollTop;
			return this.scrollTop;
		}
	};


	this.zone_scrollbar = {
		  obj_div_main : null
		, largeur : ''
		, hauteur : ''
		, fleches_hauteur : ''
		, fleches_image : ''
		, fleches_couleur : ''
		, paddingTop : ''

		, getPadding : function () {
			paddingTop = parseInt(_scrollbar.obj_div_pointer.style.paddingTop);
			return paddingTop;
		}
		, setPadding : function (paddingTopNew) {
			//if (paddingTopNew > _scrollbar.scrollbar_max_padding - _scrollbar.offsetPadding) paddingTopNew = _scrollbar.scrollbar_max_padding;
			//if (paddingTopNew < _scrollbar.scrollbar_min_padding + _scrollbar.offsetPadding) paddingTopNew = _scrollbar.scrollbar_min_padding;
			if (paddingTopNew > _scrollbar.scrollbar_max_padding) paddingTopNew = _scrollbar.scrollbar_max_padding;
			if (paddingTopNew < _scrollbar.scrollbar_min_padding) paddingTopNew = _scrollbar.scrollbar_min_padding;

			//try {
				_scrollbar.obj_div_pointer.style.paddingTop = paddingTopNew + "px";
			//}catch(e) { }

			_scrollbar.paddingTop = this.getPadding();
			this.paddingTop = this.getPadding();
			return this.paddingTop;
		}
	};


	// Informations sur le div source
	this.id_obj_source = id_obj_source;
	this.obj_source = document.getElementById(this.id_obj_source);

	// Verification de la faisabilitÃ© de creation de la scrollbar
	if (! this.obj_source) return _scrollbar.debug("impossible de charger la scrollbar sur le div selectionnÃ© (objet absent).");
	if (! this.obj_source.style.width) return _scrollbar.debug("impossible de charger la scrollbar sur le div sÃ©lectionnÃ© (width absent).");
	if (! this.obj_source.style.height) return _scrollbar.debug("impossible de charger la scrollbar sur le div sÃ©lectionnÃ© (height absent).");

	var navigateur = navigator.appName;
	if(navigateur != "Microsoft Internet Explorer"){
		if(navigator.appVersion.indexOf("Chrome") >= 0){
			navigateur = "Chrome";
		}else{
			navigateur = "FireFox";
		}
	}
	
	switch(navigateur){
		case "Microsoft Internet Explorer":
			this.obj_source.style.height = (parseInt(this.obj_source.style.height) - 10) + "px";
		break;
		case "Chrome":
			this.obj_source.style.height = (parseInt(this.obj_source.style.height) - 20) + "px";
		break;
		case "FireFox":
		break;
	}
	
	// Sauvegarde des parametres originals du div source
	this.obj_source_width =  parseInt(this.obj_source.style.width);
	this.obj_source_height = parseInt(this.obj_source.style.height);
	this.obj_source_html = this.obj_source.innerHTML;
	this.obj_source_overflow = this.obj_source.style.overflow;
	this.obj_source_overflow_y = this.obj_source.style.overflowY;
	this.obj_source_styles = this.obj_source.getAttribute("style");
	this.obj_source_classes = this.obj_source.getAttribute("class");


	// Calcul du id_scrollbar (nom de l'objet)
	window.max_id_scrollbar = (window.max_id_scrollbar) ? (window.max_id_scrollbar+1) : 1;
	this.id_scrollbar = "scrollbar_" + window.max_id_scrollbar;

	// Declaration des objets html a utiliser
	this.obj_div = null;				// div contenant ascenseur
	this.obj_div_pointer = null			// div de la scrollbar
	this.obj_img_pointer = null;		// image pointer flottant ascenseur
	this.obj_fleche_haut = null;			// image fleche haut
	this.obj_fleche_bas = null;			// image fleche bas


	// Parametres par defaut
	this.scrollbar_image_fleche_haut	= "";
	this.scrollbar_image_fleche_bas		= "";
	this.scrollbar_image_fond			= "";
	this.scrollbar_image_pointer		= "";
	this.scrollbar_image_pointer_over	= "";
	this.scrollbar_image_pointer_down	= "";
	this.scrollbar_couleur_fleches 		= "#666666";	// pas encore géré
	this.scrollbar_couleur_fleches_fond	= "#AAAAAA";
	this.scrollbar_couleur_fond 		= "#EEEEEE";
	this.scrollbar_couleur_fond_over 	= "#DDDDDD";
	this.scrollbar_couleur_pointer		= "#CCCCCC";
	this.scrollbar_couleur_pointer_over = "#EEEEEE";
	this.scrollbar_couleur_pointer_down = "#555555";
	this.scrollbar_hauteur_fleches	= 10;
	this.scrollbar_largeur 			= 10;
	this.scrollbar_padding_vertical	= 0;
	this.scrollbar_padding_hozizontal	= 0;
	this.scrollbar_a_droite 		= true;
	this.autoload 					= true;

	// Ecrasement des parametres par ceux recus en parametre
	for (parametre in parametres) {
		this[parametre] = parametres[parametre];
	}


	// Initialisation des parametres de base de la scrollbar
	this.scrollEnCours = false;
	this.div_hauteur_visible = 0;
	this.div_hauteur_pleine = 0;
	this.pointer_hauteur = 0;
	this.offsetScroll = 50;
	this.position_top_scrollbar = 0;
	this.position_clic_pointer = 0;

	this.debug = function (message_debug) {
		//alert("scrollbar '" + _scrollbar.id_scrollbar + "' : \n\n" + message_debug);
	}



	/* fonctions de la scrollbar */
	/* ======================== */

	this.getDivTaillePleine = function () {
		//return _scrollbar.obj_div.scrollHeight;

		old_height = _scrollbar.obj_div.style.height;
		_scrollbar.obj_div.style.height = "";
		_scrollbar.obj_div.style.overflow = "";
		valeur = _scrollbar.obj_div.offsetHeight;
		_scrollbar.obj_div.style.height = old_height;
		_scrollbar.obj_div.style.overflow = "hidden";

		return valeur;
	}

	// Initialise la scrollbar
	this.scrollbarInit = function () {
		_scrollbar.scrollbarBuild();			// Construction des div/tables/td


		_scrollbar.obj_div = document.getElementById(_scrollbar.id_scrollbar + "_div_scroll");						// div contenant ascenseur
		_scrollbar.obj_div_pointer = document.getElementById(_scrollbar.id_scrollbar + "_td_scrollbar_pointer");	// div de la scrollbar
		_scrollbar.obj_img_pointer = document.getElementById(_scrollbar.id_scrollbar + "_image_scrollbar_pointer");	// image pointer flottant ascenseur
		_scrollbar.obj_fleche_haut = document.getElementById(_scrollbar.id_scrollbar + "_div_scrollbar_haut");			// image fleche haut
		_scrollbar.obj_fleche_bas = document.getElementById(_scrollbar.id_scrollbar + "_div_scrollbar_bas");			// image fleche bas
		_scrollbar.obj_td_scroll = document.getElementById(_scrollbar.id_scrollbar + "_td_scrollbar");


		// Gestion de la taille du div et de la scrollbar
		{
			_scrollbar.div_hauteur_visible = _scrollbar.obj_source_height;			// hauteur du div (apres avoir forcÃ© le overflow:hidden)
			if (!_scrollbar.div_hauteur_visible || isNaN(_scrollbar.div_hauteur_visible) || _scrollbar.div_hauteur_visible <= 0) return _scrollbar.debug("erreur '_scrollbar.div_hauteur_visible' : " + _scrollbar.div_hauteur_visible);

			//_scrollbar.div_hauteur_pleine = _scrollbar.obj_div.scrollHeight;
			_scrollbar.div_hauteur_pleine = _scrollbar.getDivTaillePleine();
			//alert(_scrollbar.div_hauteur_pleine);
			if (!_scrollbar.div_hauteur_pleine || isNaN(_scrollbar.div_hauteur_pleine) || _scrollbar.div_hauteur_pleine <= 0) return _scrollbar.debug("erreur '_scrollbar.div_hauteur_pleine' : " + _scrollbar.div_hauteur_pleine);


			// Calcul du min/max scroll du div
			_scrollbar.div_min_scroll = 0;
			_scrollbar.div_max_scroll = _scrollbar.div_hauteur_pleine - _scrollbar.div_hauteur_visible;					// hauteur a scroller (dans le div)

			_scrollbar.paddingTop = _scrollbar.scrollbar_padding_vertical;							// Position du pointer (dans le referentiel 'ascenseur')
			//_scrollbar.fleche_bas_hauteur = _scrollbar.obj_fleche_bas.offsetHeight;
			//_scrollbar.fleche_haut_hauteur = _scrollbar.obj_fleche_haut.offsetHeight;
			_scrollbar.fleche_bas_hauteur = _scrollbar.scrollbar_hauteur_fleches;
			_scrollbar.fleche_haut_hauteur = _scrollbar.scrollbar_hauteur_fleches;

			_scrollbar.scrollbar_hauteur_pleine = _scrollbar.div_hauteur_visible - _scrollbar.fleche_haut_hauteur - _scrollbar.fleche_bas_hauteur;
			//_scrollbar.offsetScroll = parseInt(_scrollbar.div_hauteur_visible * 0.3);
			_scrollbar.offsetScroll = 40;
			if (!_scrollbar.offsetScroll || isNaN(_scrollbar.offsetScroll) || _scrollbar.offsetScroll <= 0) return _scrollbar.debug("erreur '_scrollbar.offsetScroll' : " + _scrollbar.offsetScroll);
		}


		// Gestion de la taille du pointer de l'ascenseur
		{
			_scrollbar.ratio_padding_scrolling_temp = (_scrollbar.scrollbar_hauteur_pleine - 2*_scrollbar.scrollbar_padding_vertical) / _scrollbar.div_hauteur_pleine;

			// Gestion de la taille du pointer de l'ascenseur
			_scrollbar.pointer_hauteur = parseInt(_scrollbar.scrollbar_hauteur_pleine * _scrollbar.ratio_padding_scrolling_temp);	// hauteur du petit carrÃ© (etirable en hauteur) a l'interieur de la scrollbar
			if (_scrollbar.pointer_hauteur < 1) _scrollbar.pointer_hauteur = 1;
			if (_scrollbar.pointer_hauteur > _scrollbar.scrollbar_hauteur_pleine) _scrollbar.pointer_hauteur = _scrollbar.scrollbar_hauteur_pleine - 2*_scrollbar.scrollbar_padding_vertical;
			//if (_scrollbar.pointer_hauteur > _scrollbar.scrollbar_hauteur_pleine) _scrollbar.pointer_hauteur = _scrollbar.scrollbar_hauteur_pleine;
			_scrollbar.obj_img_pointer.style.height = _scrollbar.pointer_hauteur;

			// Gestion de la taille de l'ascenseur (hors pointer)
			_scrollbar.scrollbar_hauteur_utile = _scrollbar.scrollbar_hauteur_pleine - _scrollbar.pointer_hauteur;		// hauteur a scroller (dans la scrollbar)
			if (_scrollbar.scrollbar_hauteur_utile < 0) _scrollbar.scrollbar_hauteur_utile = 0;

			// Calcul du min/max padding du pointer
			_scrollbar.scrollbar_min_padding = _scrollbar.scrollbar_padding_vertical;
			_scrollbar.scrollbar_max_padding = _scrollbar.scrollbar_hauteur_pleine - _scrollbar.pointer_hauteur - _scrollbar.scrollbar_padding_vertical;
//_scrollbar.debug("ratio_padding_scrolling = scrollbar_max_padding / div_max_scroll = " + _scrollbar.scrollbar_max_padding + " / " + _scrollbar.div_max_scroll + " = " + (_scrollbar.scrollbar_max_padding / _scrollbar.div_max_scroll));
			_scrollbar.ratio_padding_scrolling = _scrollbar.scrollbar_max_padding / _scrollbar.div_max_scroll;		// ratio entre le scroll du div et le scroll de la scrollbar
			_scrollbar.zone_scrollbar.setPadding(_scrollbar.scrollbar_min_padding);
			_scrollbar.offsetPadding = parseInt(_scrollbar.offsetScroll * _scrollbar.ratio_padding_scrolling);


			// Position de la scrollbar (referentiel 'document.body')
			positionAscenseur = Position.cumulativeOffset(_scrollbar.obj_div_pointer);
			_scrollbar.position_top_scrollbar = positionAscenseur[1];


// if (this.id_scrollbar == "scrollbar_6" && false) {
// 	alert("id_scrollbar = " + this.id_scrollbar + "\n" + 
// 		"scrollbar_hauteur_utile = " + _scrollbar.scrollbar_hauteur_utile + "\n" + 
// 		"scrollbar_hauteur_pleine = " + _scrollbar.scrollbar_hauteur_pleine + "\n" + 
// 		"pointer_hauteur = " + _scrollbar.pointer_hauteur + "\n" + 
// 		"scrollbar_max_padding = " + _scrollbar.scrollbar_max_padding);
// }

			// On regarde s'il n'y aurait pas moyen de se passer de la scrollbar
			if (_scrollbar.scrollbar_max_padding < 20) {
				_scrollbar.pointer_hauteur += _scrollbar.scrollbar_max_padding
				_scrollbar.scrollbar_max_padding = 0; 
			}
			if (_scrollbar.pointer_hauteur == _scrollbar.scrollbar_hauteur_pleine - _scrollbar.scrollbar_padding_vertical*2) {
				// la scrollbar prend toute la hauteur : on la cache
				_scrollbar.obj_img_pointer.style.display = "none";
				_scrollbar.obj_td_scroll.style.visibility = "hidden";
			}
		}

		// Applications des styles css
		{
			_scrollbar.obj_div.setAttribute("class", this.obj_source_classes);

			old_style_width = _scrollbar.obj_div.style.width;
			old_style_height = _scrollbar.obj_div.style.height;
			_scrollbar.obj_div.setAttribute("style", this.obj_source_styles);
			_scrollbar.obj_div.style.overflow = "hidden";
			_scrollbar.obj_div.style.width = old_style_width;
			_scrollbar.obj_div.style.height = old_style_height;
		}

		// Gestion des evenements onclick sur les fleches haut et bas et des mousemove/mousedown/mouseup sur le pointer
		if (_scrollbar.pointer_hauteur < _scrollbar.scrollbar_hauteur_pleine - _scrollbar.scrollbar_padding_vertical*2) {
			Event.observe(_scrollbar.obj_fleche_haut	, "click"	, this.scrollbarUp);
			Event.observe(_scrollbar.obj_fleche_bas 	, "click"	, this.scrollbarDown);

			Event.observe(_scrollbar.obj_img_pointer, "mousedown", this.scrollbarPointerPress);
			Event.observe(_scrollbar.obj_img_pointer, "mousemove", this.scrollbarPointerCouleurMouseOver);
			Event.observe(_scrollbar.obj_img_pointer, "mouseout", this.scrollbarPointerCouleurMouseOut);

			Event.observe(_scrollbar.obj_div_pointer, "mousedown", this.scrollbarClick);
			Event.observe(_scrollbar.obj_div_pointer, "mouseover", this.scrollbarCouleurFondOver);
			Event.observe(_scrollbar.obj_div_pointer, "mouseout", this.scrollbarCouleurFondOut);

			Event.observe(_scrollbar.obj_div_pointer, "mousewheel", this.scrollbarWheel);	// pour ie
			if (window.addEventListener) _scrollbar.obj_div_pointer.addEventListener('DOMMouseScroll', this.scrollbarWheel, false);	// pareil que la ligne precente, mais pour firefox

			Event.observe(document.body, "mouseup"  , this.scrollbarPointerRelease);
			Event.observe(document.body, "mousemove", this.scrollbarPointerMoveOver);

			Event.observe(_scrollbar.obj_div, "mousewheel", this.scrollbarWheel);	// pour ie
			if (window.addEventListener) _scrollbar.obj_div.addEventListener('DOMMouseScroll', this.scrollbarWheel, false);	// pareil que la ligne precente, mais pour firefox

		}

		// Gestion de l'evenement onresize du div [A ETUDIER]
		//this.timerOnResize = new PeriodicalExecuter(this.checkForResize, 5);

		// Debug
		_scrollbar.debug1();
	}

	this.checkForResize = function () {
		// Gestion de l'evenement onresize du div [A ETUDIER]
		
		//alert( "div_hauteur_pleine = " + _scrollbar.div_hauteur_pleine + "\n" + "obj_div.scrollHeight = " +  _scrollbar.obj_div.scrollHeight );
		
		if ( _scrollbar.div_hauteur_pleine != _scrollbar.obj_div.scrollHeight ) {
			_scrollbar.debug("la taille a changée : (avant: " + _scrollbar.div_hauteur_pleine + ") / (maintenant: " + _scrollbar.obj_div.scrollHeight + ")");
			_scrollbar.resizeDiv();
		}
	}

	this.resizeDiv = function () {
		// Gestion de l'evenement onresize du div [A ETUDIER]

		_scrollbar.div_hauteur_pleine = _scrollbar.obj_div.scrollHeight;
		_scrollbar.div_max_scroll = _scrollbar.div_hauteur_pleine - _scrollbar.div_hauteur_visible;					// hauteur a scroller (dans le div)
		
		// A FAIRE : recalcul de : pointer_hauteur
		// A FAIRE : recalcul de : scrollbar_hauteur_utile
		// A FAIRE : recalcul de : ratio_padding_scrolling
	}


	// Construit la scrollbar
	this.scrollbarBuild = function () {
		var largeur_div = _scrollbar.obj_source_width - _scrollbar.scrollbar_largeur - 8;		// le "-8" sort de nul part. il corrige un bug
		var hauteur_div = _scrollbar.obj_source_height;

		var tampon_html = "\n";
		tampon_html += "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"" + _scrollbar.id_scrollbar + "_table_scroll\" onselectstart=\"return false\">\n";
		tampon_html += "<tr>\n";

		// TD du div
		tampon_html_td1  = "";
		tampon_html_td1 += "	<td style=\"width:" + largeur_div + "px;padding-right:5px;\">\n";
		tampon_html_td1 += "		<div id=\"" + _scrollbar.id_scrollbar + "_div_scroll\" style=\"overflow:hidden;  padding:2px; font-size:12px; font-family:arial; height:" + hauteur_div + "px; width:" + largeur_div + "px; \">\n";
		tampon_html_td1 += 				_scrollbar.obj_source_html + "\n";
		tampon_html_td1 += "		</div>\n";
		tampon_html_td1 += "	</td>\n";
		
		//############ MODIF PRINT - DEBUT
		tabListeObjIdPrint[indiceListeObjIdPrint]=_scrollbar.id_scrollbar + "_div_scroll";
		indiceListeObjIdPrint++;
		//############ MODIF PRINT - FIN
		
		style_fleche_haut = "";
		if (_scrollbar.scrollbar_couleur_fleches != "") 		style_fleche_haut = "background-color:" + _scrollbar.scrollbar_couleur_fleches + "; ";
		if (_scrollbar.scrollbar_image_fleche_haut != "") 		style_fleche_haut = "background-repeat:no-repeat; background-image:url(" + _scrollbar.scrollbar_image_fleche_haut + "); ";
		style_fleche_bas = "";
		if (_scrollbar.scrollbar_couleur_fleches != "") 		style_fleche_bas  = "background-color:" + _scrollbar.scrollbar_couleur_fleches + "; ";
		if (_scrollbar.scrollbar_image_fleche_bas != "") 		style_fleche_bas  = "background-repeat:no-repeat; background-image:url(" + _scrollbar.scrollbar_image_fleche_bas + "); ";

		style_fleches_fond = "";
		if (_scrollbar.scrollbar_couleur_fleches_fond != "") 	style_fleches_fond = "background-color:" + _scrollbar.scrollbar_couleur_fleches_fond + "; ";
		if (_scrollbar.scrollbar_image_fleche_haut != "") 		style_fleches_fond = "";
		if (_scrollbar.scrollbar_image_fleche_bas != "") 		style_fleches_fond = "";

		style_fond = "";
		if (_scrollbar.scrollbar_couleur_fond != "") 			style_fond = "background-color:" + _scrollbar.scrollbar_couleur_fond + "; ";
		if (_scrollbar.scrollbar_image_fond != "") 				style_fond = "background-image:url(" + _scrollbar.scrollbar_image_fond + "); ";

		style_pointer = "";
		if (_scrollbar.scrollbar_couleur_pointer != "") 		style_pointer = "background-color:" + _scrollbar.scrollbar_couleur_pointer + "; ";
		if (_scrollbar.scrollbar_image_pointer != "") 			style_pointer = "background-image:url(" + _scrollbar.scrollbar_image_pointer + "); ";

//_scrollbar.debug(" style_fleche_haut = " + style_fleche_haut + "\n style_fleches_fond = " + style_fleches_fond);

		// TD de la scrollbar
		tampon_html_td2  = "";
		tampon_html_td2 += "	<td id=\"" + _scrollbar.id_scrollbar + "_td_scrollbar\" style=\"width:" + _scrollbar.scrollbar_largeur + "px; height:" + hauteur_div + "px; \" valign=\"top\" class=\"cssHidePrint\">\n";
		tampon_html_td2 += "		<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"100%\" width=\"" + _scrollbar.scrollbar_largeur + "\" style=\" \" \n>";
		tampon_html_td2 += "		<tr>\n";
		//tampon_html_td2 += "			<td id=\"" + _scrollbar.id_scrollbar + "_div_scrollbar_haut\" style=\"cursor:pointer; width:" + _scrollbar.scrollbar_largeur + "px; height:" + _scrollbar.scrollbar_hauteur_fleches + "px; " + style_fleches_fond + " \">";
		//tampon_html_td2 += "				<div style=\"width:" + (_scrollbar.scrollbar_largeur-2) + "px; margin:auto; height:" + (_scrollbar.scrollbar_hauteur_fleches-2) + "px; " + style_fleche_haut + "\"></div>";
		//tampon_html_td2 += "			</td>\n";
		tampon_html_td2 += "			<td id=\"" + _scrollbar.id_scrollbar + "_div_scrollbar_haut\" style=\"cursor:pointer; width:" + _scrollbar.scrollbar_largeur + "px; height:" + _scrollbar.scrollbar_hauteur_fleches + "px; " + style_fleche_haut + style_fleches_fond + " \"><img src=\"images/spacer.gif\" border=\"0\"/></td>\n";
		tampon_html_td2 += "		</tr>\n";
		tampon_html_td2 += "		<tr>\n";
		tampon_html_td2 += "			<td id=\"" + _scrollbar.id_scrollbar + "_td_scrollbar_pointer\" style=\" width:" + _scrollbar.scrollbar_largeur + "px; padding-top:" + _scrollbar.scrollbar_min_padding + "px; " + style_fond + " \" valign=\"top\">\n";
		tampon_html_td2 += "				<div id=\"" + _scrollbar.id_scrollbar + "_image_scrollbar_pointer\" style=\" margin:0; width:" + (_scrollbar.scrollbar_largeur - 0*_scrollbar.scrollbar_padding_hozizontal) + "px; height:10px; " + style_pointer + " \"></div>\n";
		tampon_html_td2 += "			</td>\n";
		tampon_html_td2 += "		</tr>\n";
		tampon_html_td2 += "		<tr>\n";
		//tampon_html_td2 += "			<td id=\"" + _scrollbar.id_scrollbar + "_div_scrollbar_bas\" style=\"cursor:pointer; width:" + _scrollbar.scrollbar_largeur + "px; height:" + _scrollbar.scrollbar_hauteur_fleches + "px; " + style_fleches_fond + " \">";
		//tampon_html_td2 += "				<div style=\"width:" + (_scrollbar.scrollbar_largeur-2) + "px; margin:auto; height:" + (_scrollbar.scrollbar_hauteur_fleches-2) + "px; " + style_fleche_bas + "\"></div>";
		//tampon_html_td2 += "			</td>\n";
		tampon_html_td2 += "			<td id=\"" + _scrollbar.id_scrollbar + "_div_scrollbar_bas\" style=\"cursor:pointer; width:" + _scrollbar.scrollbar_largeur + "px; height:" + _scrollbar.scrollbar_hauteur_fleches + "px; " + style_fleche_bas + style_fleches_fond + " \"><img src=\"images/spacer.gif\" /></td>\n";
		tampon_html_td2 += "		</tr>\n";
		tampon_html_td2 += "		</table>\n";
		tampon_html_td2 += "	</td>\n";

		if (_scrollbar.scrollbar_a_droite) {
			tampon_html += tampon_html_td1 + tampon_html_td2;
		}else{
			tampon_html += tampon_html_td2 + tampon_html_td1;
		}

		tampon_html += "</tr>\n";
		tampon_html += "</table>\n";

		_scrollbar.obj_source.style.overflow = "";
		_scrollbar.obj_source.style.overflowY = "";
		_scrollbar.obj_source.innerHTML = tampon_html;
	}




	// Detruit la scrollbar
	this.scrollbarRemove = function () {
		if (_scrollbar.obj_div) {
			var tampon_html = _scrollbar.obj_div.innerHTML;
			_scrollbar.obj_source.innerHTML = tampon_html;
		}
		_scrollbar.obj_source.style.overflow = _scrollbar.obj_source_overflow;
		_scrollbar.obj_source.style.overflowY = _scrollbar.obj_source_overflow_y;
	}

	// Applique la scrollbar par defaut de navigateur
	this.scrollbarAuto = function () {
		_scrollbar.scrollbarRemove();
		_scrollbar.obj_source.style.overflow = "auto";
	}



	/* Gestion des mouvements par deplacement du pointer */

	this.scrollbarPointerPress = function (event) {
		_scrollbar.scrollEnCours = true;
		_scrollbar.scrollbarPointerCouleurMouseDown();

		// Position du pointer (dans le referentiel document.body)
		_scrollbar.positionTopPointer = parseInt(_scrollbar.position_top_scrollbar + _scrollbar.paddingTop);	// + _scrollbar.fleche_haut_hauteur;

		// Position de la souris (dans le referentiel 'document.body')
		_scrollbar.positionTopSouris = Event.pointerY(event);

		// Position de la souris (dans le referentiel 'ascenseur')
		_scrollbar.position_clic_pointer = parseInt(_scrollbar.positionTopSouris - _scrollbar.positionTopPointer);

		// Debug
		_scrollbar.debug2();
	}

	this.scrollbarPointerRelease = function () {
		_scrollbar.scrollEnCours = false;

		isOverPointer = true;		// A REMPLACER PAR UNE DETECTION AUTO
		if (isOverPointer) {
			//_scrollbar.scrollbarPointerCouleurMouseOver();
			_scrollbar.scrollbarPointerCouleurMouseUp();
		}else{
			_scrollbar.scrollbarPointerCouleurMouseOut();
		}
	}


	this.scrollbarPointerMoveOver = function (event) {
		if (_scrollbar.scrollEnCours) {

			// Position de la souris (dans le referentiel 'document.body')
			positionTopSouris = Event.pointerY(event);

			// Position de la souris (dans le referentiel 'ascenseur')
			positionTopSourisAscenseur = positionTopSouris - _scrollbar.position_top_scrollbar;

			// Calcul de la nouvelle position du pointer (dans le referentiel 'ascenseur')
			paddingTopNew = positionTopSourisAscenseur -_scrollbar.position_clic_pointer;
			paddingTopNew = _scrollbar.zone_scrollbar.setPadding(paddingTopNew);

			// Calcul de la nouvelle position/scrolling du div
			scrollTopNew = parseInt(paddingTopNew / _scrollbar.ratio_padding_scrolling);
			scrollTopNew = _scrollbar.zone_div.setScroll(scrollTopNew);

			// Debug
			_scrollbar.debug3();

		}else{

		}
	}



	/* Gestion des clics sur l'ascenseur (hors pointer) */

	this.scrollbarClick = function (event) {
		// Position de la souris (dans le referentiel 'document.body')
		positionTopSouris = Event.pointerY(event);

		// Position de la souris (dans le referentiel 'ascenseur')
		positionTopSourisAscenseur = positionTopSouris - _scrollbar.position_top_scrollbar;

		if (positionTopSourisAscenseur < _scrollbar.paddingTop) {
			//_scrollbar.debug("vers le haut");
			_scrollbar.scrollbarUp();
		}else if (positionTopSourisAscenseur > _scrollbar.paddingTop + _scrollbar.pointer_hauteur)  {
			//_scrollbar.debug("vers le bas");
			_scrollbar.scrollbarDown();
		}

	}




	/* Gestion des mouvements par clic sur les fleches haut et bas */

	this.scrollbarMoveBy = function (offsetScroll) {
		//_scrollbar.scrollbarPointerCouleurMouseDown();


		// Calcul de la nouvelle position/scrolling du div
		scrollTopNew = _scrollbar.obj_div.scrollTop + offsetScroll;
		scrollTopNew = _scrollbar.zone_div.setScroll(scrollTopNew);

		// Calcul de la nouvelle position du pointer (dans le referentiel 'ascenseur')
		paddingTopNew = parseInt(scrollTopNew * _scrollbar.ratio_padding_scrolling);
		paddingTopNew = _scrollbar.zone_scrollbar.setPadding(paddingTopNew);

		// Calcul des pourcentages
		hauteur_scroll = _scrollbar.div_max_scroll - scrollTopNew;
		pourcentScroll = 100 - (100 * hauteur_scroll / _scrollbar.div_max_scroll);

		//_scrollbar.scrollbarPointerCouleurMouseOut();

		// Debug
		_scrollbar.debug3();
	}

	this.scrollbarUp = function () {
		_scrollbar.scrollbarMoveBy(-_scrollbar.offsetScroll);
	}

	this.scrollbarDown = function () {
		_scrollbar.scrollbarMoveBy(_scrollbar.offsetScroll);
	}

	this.scrollbarWheel = function (event) {
		if (event.detail) {
			// Firefox
			_scrollbar.scrollbarMoveBy( (event.detail>0) ? _scrollbar.offsetScroll/3 : -_scrollbar.offsetScroll/3 );
		}else{
			// Autre (IE)
			//_scrollbar.scrollbarMoveBy( (event.wheelDelta>0) ? _scrollbar.offsetScroll : -_scrollbar.offsetScroll; );
			_scrollbar.scrollbarMoveBy(-event.wheelDelta);
		}
	}



	/* Divers */

	this.scrollbarPointerCouleurMouseDown = function () {
		// On press la souris sur le pointer

		if (_scrollbar.scrollbar_image_pointer_down != "") {
			// une image de mousedown est existante
			_scrollbar.obj_img_pointer.style.backgroundImage = "url(" + _scrollbar.scrollbar_image_pointer_down + ")";
		}else{
			if (_scrollbar.scrollbar_couleur_pointer_down != "") {
				// une couleur de mousedown est existante
				_scrollbar.obj_img_pointer.style.backgroundColor = _scrollbar.scrollbar_couleur_pointer_down;
			}
		}
	}
	this.scrollbarPointerCouleurMouseUp = function () {
		// On relache la souris du pointer

		if (_scrollbar.scrollbar_image_pointer_down != "") {
			// une image de mousedown est existante
			_scrollbar.obj_img_pointer.style.backgroundImage = "url(" + _scrollbar.scrollbar_image_pointer + ")";
		}else{
			if (_scrollbar.scrollbar_couleur_pointer_down != "") {
				// une couleur de mousedown est existante
				_scrollbar.obj_img_pointer.style.backgroundColor = _scrollbar.scrollbar_couleur_pointer;
			}
		}

	}

	this.scrollbarPointerCouleurMouseOver = function () {
		// On passe au dessus du pointer de la scrollbar
		/*
		if (_scrollbar.scrollbar_image_pointer_over != "") {
			// une image de mouseover est existante
			_scrollbar.obj_img_pointer.style.backgroundImage = _scrollbar.scrollbar_image_pointer_over;
		}else{
			if (! _scrollbar.scrollEnCours && _scrollbar.scrollbar_couleur_pointer_over != "") {
				// une couleur de mouseover est existante
				_scrollbar.obj_img_pointer.style.backgroundColor = _scrollbar.scrollbar_couleur_pointer_over;
			}
		}
		*/
	}
	this.scrollbarPointerCouleurMouseOut = function () {
		// On sort de la zone au dessus du pointer de la scrollbar
		/*
		if (_scrollbar.scrollbar_couleur_pointer_over != "") {
			// une image de mouseout est existante
			_scrollbar.obj_img_pointer.style.backgroundImage = _scrollbar.scrollbar_image_pointer;
		}else{
			if (! _scrollbar.scrollEnCours && _scrollbar.scrollbar_couleur_pointer_over != "") {
				// une couleur de mouseout est existante
				_scrollbar.obj_img_pointer.style.backgroundColor = _scrollbar.scrollbar_couleur_pointer;
			}
		}
		*/
	}


	this.scrollbarCouleurFondOver = function () {
		// On passe au dessus de la scrollbar
		/*
		if (_scrollbar.scrollbar_couleur_fond_over != "") {
			_scrollbar.obj_div_pointer.style.backgroundColor = _scrollbar.scrollbar_couleur_fond_over;
		}
		*/
	}
	this.scrollbarCouleurFondOut = function () {
		// On sort de la zone au dessus de la scrollbar
		/*
		if (true) {
			_scrollbar.obj_div_pointer.style.backgroundColor = _scrollbar.scrollbar_couleur_fond;
		}
		*/
	}



	/* Debug */

	this.debug1 = function () {
		// Debug du scrollbarInit

		varDebug = "";
		varDebug += "div_hauteur_pleine = " + _scrollbar.div_hauteur_pleine + "<br>";
		varDebug += "div_hauteur_visible = " + _scrollbar.div_hauteur_visible + "<br>";
		varDebug += "div_max_scroll = " + _scrollbar.div_max_scroll + "<br>";
		varDebug += "<br>";
		varDebug += "scrollbar_hauteur_pleine = " + _scrollbar.scrollbar_hauteur_pleine + "<br>";
		varDebug += "scrollbar_hauteur_utile = " + _scrollbar.scrollbar_hauteur_utile + "<br>";
		varDebug += "scrollbar_max_padding = " + _scrollbar.scrollbar_max_padding + "<br>";
		varDebug += "<br>";
		varDebug += "ratio_padding_scrolling = _scrollbar.scrollbar_max_padding / _scrollbar.div_max_scroll = " + _scrollbar.scrollbar_max_padding + " / " + _scrollbar.div_max_scroll + " = " + _scrollbar.ratio_padding_scrolling + "<br>";
		varDebug += "pointer_hauteur = _scrollbar.scrollbar_hauteur_pleineÂ² / _scrollbar.div_max_scroll = " + _scrollbar.scrollbar_hauteur_pleine + "Â² / " + _scrollbar.div_max_scroll + " = " + _scrollbar.scrollbar_hauteur_pleine*_scrollbar.scrollbar_hauteur_pleine / _scrollbar.div_max_scroll + " = " + _scrollbar.pointer_hauteur + "<br>";
		if (obj = document.getElementById("div_debug1")) obj.innerHTML = varDebug;
	}


	this.debug2 = function () {
		// Debug du scrollbarPointerPress

		varDebug = "";
		varDebug += "position_clic_pointer = " + _scrollbar.position_clic_pointer + "<br>";
		varDebug += "positionTopSouris = " + _scrollbar.positionTopSouris + "<br>";
		varDebug += "positionTopPointer = " + _scrollbar.positionTopPointer + "<br>";
		if (obj = document.getElementById("div_debug2")) obj.innerHTML = varDebug;
	}

	this.debug3 = function () {
		// Debug du scrollbarPointerMoveOver

		// Calcul des pourcentages
		pourcentScrollDiv = parseInt(100 * _scrollbar.scrollTop / _scrollbar.div_max_scroll);
		pourcentPaddingScrollbar = parseInt(100 * _scrollbar.paddingTop / _scrollbar.scrollbar_max_padding);

		varDebug = "";
		varDebug += "position_clic_pointer = " + _scrollbar.position_clic_pointer + "<br>";
		varDebug += "scrollbarPaddingTop = " + _scrollbar.paddingTop + " (max: " + _scrollbar.scrollbar_max_padding + ")<br>";
		varDebug += "divScrollTop = " + _scrollbar.scrollTop + " (max: " + _scrollbar.div_max_scroll + ")<br>";
		varDebug += "pourcentScrollDiv = " + pourcentScrollDiv + "%<br>";
		varDebug += "pourcentPaddingScrollbar = " + pourcentPaddingScrollbar + "%<br>";
		if (obj = document.getElementById("div_debug3")) obj.innerHTML = varDebug;
	}



	/* Initialisation de l'objet */
	/* ========================= */

	if (this.autoload) {
		this.scrollbarInit();
	}
}



