// ***********************************************************************************************
// Class Scroll
// ***********************************************************************************************

/*
---------------------------------------------------------
DESCRIPTION

Gestion et personnalisation de la barre de scroll sur tous navigateurs

---------------------------------------------------------
USAGE

var monScroll = new classScroll(idDivScroll, idDivContenant, idDivContenu)

idDivScroll : Identifiant de la <div> de scroll.
idDivContenant :  Identifiant de la <div> du contenant.
idDivContenu :  Identifiant de la <div> du contenu.

---------------------------------------------------------
METHODES


---------------------------------------------------------
PROPRIETES

---------------------------------------------------------
GESTIONNAIRE D'EVENEMENTS

*/

//variable dans laquelle on stoque l'id de l'élément sur lequel on passe
var idElementScroll = "";


// ---------------------------------------------------------
// Cr?ation des ?l?ments "Scroll" n?cessaires
function iniScroll(){
	//var pointeurElement = document.getElementById("conteneurDefilement");
	
	/*dragAndDrop("testInterpolation", true, 100, 400, 100, 400);
	lierElements("testInterpolation", true, "conteneurDefilement", true, 0, 400, 400, 800);*/
	//dragAndDrop("testInterpolation", true, 100, 400, 100, 600);
	//var pointeurElement = document.getElementById("scrollAffPrincipal").getElementsByTagName("div")[2];
	
	if(document.getElementById("conteneurScrollActualites")){
		new classScroll("scrollActualites", "conteneurScrollActualites", "contenuActualites", false);
	}
	/*
	if(document.getElementById("conteneurScrollBlocAmov")){
		new classScroll("scrollBlocAmov", "conteneurScrollBlocAmov", "contenuBlocAmov", false);
	}
	*/
	if(document.getElementById("conteneurScrollPrimaire")){
		new classScroll("scrollAffPrimaire", "conteneurScrollPrimaire", "contenuPrimaire", true);
	}
	if(document.getElementById("conteneurScrollSecondaire")){
		new classScroll("scrollAffSecondaire", "conteneurScrollSecondaire", "contenuSecondaire", true);
	}
	if(document.getElementById("conteneurScrollPrimairePopInDetailActu")){
		new classScroll("scrollAffPrimairePopIn", "conteneurScrollPrimairePopInDetailActu", "contenuPrimairePopIn", true);
	}
	
	if(document.getElementById("conteneurScrollPrimairePopIn")){
		new classScroll("scrollAffPrimairePopIn", "conteneurScrollPrimairePopIn", "contenuPrimairePopIn", true);
	}
	
	

	//new classScroll("scrollActualites", "conteneurScrollActualites", "contenuActualites");
	//new classScroll("scrollBlocAmov", "conteneurScrollBlocAmov", "contenuBlocAmov");
	
	return true;
}

function iniScrollPopin(){
	//var pointeurElement = document.getElementById("conteneurDefilement");
	
	/*dragAndDrop("testInterpolation", true, 100, 400, 100, 400);
	lierElements("testInterpolation", true, "conteneurDefilement", true, 0, 400, 400, 800);*/
	//dragAndDrop("testInterpolation", true, 100, 400, 100, 600);
	//var pointeurElement = document.getElementById("scrollAffPrincipal").getElementsByTagName("div")[2];

	
	if(document.getElementById("conteneurScrollPrimairePopInDetailActu")){
		new classScroll("scrollAffPrimaire", "conteneurScrollPrimairePopInDetailActu", "contenuPrimairePopIn", true);
	}
	
	if(document.getElementById("conteneurScrollPrimairePopIn")){
		new classScroll("scrollAffPrimaire", "conteneurScrollPrimairePopIn", "contenuPrimairePopIn", true);
	}
	
	

	//new classScroll("scrollActualites", "conteneurScrollActualites", "contenuActualites");
	//new classScroll("scrollBlocAmov", "conteneurScrollBlocAmov", "contenuBlocAmov");
	
	return true;
}

// ---------------------------------------------------------
// Cr?ation de la classe "Scroll"
function classScroll(idDivScroll, idDivContenant, idDivContenu, barreDefilVisible){
	
	
	document.getElementById(idDivContenant).style.overflow = "hidden";
	
	document.getElementById(idDivContenant).onmouseover = enregIdElement;
	document.getElementById(idDivContenant).onmouseout = suppenregIdElement;
	
	function enregIdElement()
	{
		idElementScroll = idDivContenant;	
	}
	
	function suppenregIdElement()
	{
		idElementScroll = "";
	}
	
	
	// ---------------------------------------------------------
	// V?rification de la taille du contenu par rapport au contenant
	var contenantHauteur = connaitreHauteur(idDivContenant, true);
	var contenuHauteur = connaitreHauteur(idDivContenu, true);
	var contenuHauteurOld = contenuHauteur*0.99;
	contenuHauteur = contenuHauteur + (contenuHauteur*0.05);
	
	// ---------------------------------------------------------
	// Limites de d?placement
	var contenuLimiteTopHaut =  -contenuHauteur + contenantHauteur;


	// ---------------------------------------------------------
	// Initialisation
	this.scrollPas = 1;
	this.cadence = 50;
	this.scrollMargeGauche = 5;
	this.pointeursMarge = 1;
	
	if(contenuHauteurOld <= contenantHauteur){
		//alert("Id Scroll = " + idDivScroll + " + Hauteur Contenu = " + contenuHauteur  + " + Hauteur Contenant =  " + contenantHauteur );
		
		if(document.getElementById(idDivScroll)){
			document.getElementById(idDivScroll).style.display = "none";
			
			// ---------------------------------------------------------
			// Initialisation du bord droit du contenant	
			var contenantLargeur = connaitreLargeur(idDivContenant, true);
			document.getElementById(idDivContenu).style.width = contenantLargeur + "px" ;
		}
		
		return false;
	}
	
	/*if(document.getElementById(idDivScroll)){
		return false;
	}*/

	if(document.getElementById(idDivScroll)){
		document.getElementById(idDivScroll).style.display = "block";
	}

	// ---------------------------------------------------------
	// On d?sactive le scroll standard de l'?l?ment contenant
	//document.getElementById(idDivContenant).style.overflow = "hidden";

	// ---------------------------------------------------------
	// Initialisation de la position du Contenu
	with(document.getElementById(idDivContenu)){
		style.position = "absolute";
		style.top = "0";
		style.left = "0";
	}
	
	if(!document.getElementById(idDivScroll)){
	
	// Cr?ation du div conteneur de la PopIn
	var importScroll = document.createElement("div");
	importScroll.setAttribute("id", idDivScroll);
	importScroll.setAttribute("class", "scrollObjetVert");
	//importScroll.style.zIndex = 999;
	//importScroll.style.display = "none";
	
	// On injecte ? la fin du div conteneur le code du Scroll
	document.getElementById(idDivContenant).appendChild(importScroll);
	
	// On rep?re le <div> fraichement int?gr? et on y insere le code du scroll
	var pointeurScroll = document.getElementById(idDivScroll);
	
	// ---------------------------------------------------------
	// Construction HTML de l'?l?ment Scroll
	// Attention d'avoir les m?mes noms de classe de la feuille de style jointe
	var codeHTML = '<div id="' + idDivScroll + 'PH" class="scrollPointeurHaut"></div>';
	codeHTML += '<div id="' + idDivScroll + 'BD" class="scrollBarreDefil"></div>';
	codeHTML += '<div id="' + idDivScroll + 'PB" class="scrollPointeurBas"></div>';

	pointeurScroll.innerHTML = codeHTML;
	
	var contenantLargeur = connaitreLargeur(idDivContenant, true);
	pointeurScroll.style.position = "absolute";
	pointeurScroll.style.top = "0";
	pointeurScroll.style.left = contenantLargeur - 15 + "px";
	
	}

	// ---------------------------------------------------------
	// Initialisation du bord droit du contenant	
	var contenantLargeur = connaitreLargeur(idDivContenant, true);
	//var scrollLargeur = connaitreLargeur(idDivScroll, true);
	//var scrollLargeur = document.getElementById(idDivScroll).offsetWidth;
	var scrollLargeur = 15;
	
 	var largeurFinale = contenantLargeur - scrollLargeur - this.scrollMargeGauche ;
	document.getElementById(idDivContenu).style.width = largeurFinale  + "px";
	
	// ---------------------------------------------------------
	// On repere les ?l?ments Pointeur Haut, Pointeur Bas et Barre de D?filement

	idDivPointeurHaut = String(idDivScroll) + 'PH';
	divPointeurHaut = document.getElementById(idDivPointeurHaut);

	idDivPointeurBas = String(idDivScroll) + 'PB';
	divPointeurBas = document.getElementById(idDivPointeurBas);
	

	idDivBarreDefil = String(idDivScroll) + 'BD';
	divBarreDefil = document.getElementById(idDivBarreDefil);
	
	// ---------------------------------------------------------
	// Adaptation de la hauteur du Scroll a la hauteur du Contenant
	document.getElementById(idDivScroll).style.height = contenantHauteur + "px";
	
	// ---------------------------------------------------------
	// Adaptation de la hauteur de la barre de d?filement
	var pointeurHautHauteur = connaitreHauteur(idDivPointeurHaut, true);
	var pointeurBasHauteur = connaitreHauteur(idDivPointeurBas, true);
	
	var barreDefilLimiteTop = pointeurHautHauteur + this.pointeursMarge;
	divBarreDefil.style.top = barreDefilLimiteTop + "px";
	var barreDefilZoneDeGlisseHauteur = contenantHauteur - pointeurHautHauteur - pointeurBasHauteur - (2*this.pointeursMarge);
	var barreDefilHauteur = Math.floor((contenantHauteur / contenuHauteur) * barreDefilZoneDeGlisseHauteur) + 1;
	divBarreDefil.style.height = barreDefilHauteur + "px";
	
	var LimitBottom = contenantHauteur - pointeurBasHauteur - barreDefilHauteur;
	var LimitTop = pointeurHautHauteur;

	// ---------------------------------------------------------
	// On applique les ?v?nements de souris aux ?l?ments du Scroll
	new classPointeur(idDivPointeurHaut, idDivContenant, idDivContenu, -1, this.scrollPas, this.cadence, divBarreDefil, LimitTop, LimitBottom);
	new classPointeur(idDivPointeurBas, idDivContenant, idDivContenu, 1, this.scrollPas, this.cadence, divBarreDefil, LimitTop, LimitBottom);
	
	//new classPointeurBas(idDivPointeurBas, idDivContenant, idDivContenu, 1, this.scrollPas, this.cadence, divBarreDefil, LimitTop, LimitBottom);
	
	//new classPointeurHaut(idDivPointeurBas, idDivContenant, idDivContenu, -1, this.scrollPas, this.cadence, divBarreDefil, LimitTop, LimitBottom);
	
	dragAndDrop(divBarreDefil, pointeurHautHauteur, contenantHauteur - pointeurBasHauteur, 4, 11, idDivScroll, true, idDivContenant, idDivContenu, barreDefilVisible);

	//element = divBarreDefil;
	
	return true;

}

function classPointeurBas(idDivPointeur, idDivContenant, idDivContenu, sensDefil, scrollPas, cadence, divBarreDefil, limitTop, limitBottom){
	
	var divPointeur = document.getElementById(idDivPointeur);
	var monInterval = '';
	
	var pointeurBarreDefil = document.getElementById(divBarreDefil);
	
	divPointeur.onmousedown = debutDefil;
	
	divPointeur.ondblclick = arretDefil;
	divPointeur.onmouseup = arretDefil;
	divPointeur.onmouseout = arretDefil;
	
	//on essaye de gérer le scroll
	function handle(delta) {
		alert(idElementScroll);
		if (delta < 0)
		{
			if(idElementScroll == idDivContenant)
			{
				debutDefil();
			}
		}
		else
		{
			
		}
	
	}

function wheel(event){
	var delta = 0;
	if (!event) event = window.event;
	if (event.wheelDelta) {
		delta = event.wheelDelta/120; 
		if (window.opera) delta = -delta;
	} else if (event.detail) {
		delta = -event.detail/3;
	}
	if (delta)
		handle(delta);
        if (event.preventDefault)
                event.preventDefault();
        event.returnValue = false;
}

/* Initialization code. */
if (window.addEventListener)
	window.addEventListener('DOMMouseScroll', wheel, false);
window.document.getElementById(idDivContenant).onmousewheel = document.getElementById(idDivContenant).onmousewheel = wheel;
	
	// Arr?t du d?filement
	function arretDefil(){
		window.clearInterval(monInterval);
	}

	// D?but du d?filement
	function debutDefil(){

		var pointeurContenu = document.getElementById(idDivContenu);
		var pointeurContenant = document.getElementById(idDivContenant);
		var facteur = pointeurContenant.offsetHeight / divBarreDefil.offsetHeight;
		//var facteurIncrementation = pointeurContenant.offsetHeight / pointeurContenu.offsetHeight;
		
		//on va regarder si on doit déclencher le défilement selon si la souris est au dessus d'un id
		
		sequenceDefil();
		
		function sequenceDefil(){
			/* Application du d?filement ? la propri?t? demand?e */
			//pointeurElement.style.top = parseInt(pointeurElement.style.top) + scrollPas*sensDefil + "px";
			positionTop = parseInt(divBarreDefil.style.top) + scrollPas*sensDefil;
			if(positionTop <= limitTop){
				positionTop = limitTop;
			}
			if(positionTop >= limitBottom){
				positionTop = limitBottom;
			}
			divBarreDefil.style.top = positionTop + "px";
			
			pointeurContenu.style.top =  - (positionTop - 7)*facteur +  "px";
		}
	}

	return true;
}


function classPointeurHaut(idDivPointeur, idDivContenant, idDivContenu, sensDefil, scrollPas, cadence, divBarreDefil, limitTop, limitBottom){
	
	var divPointeur = document.getElementById(idDivPointeur);
	var monInterval = '';
	
	var pointeurBarreDefil = document.getElementById(divBarreDefil);
	
	divPointeur.onmousedown = debutDefil;
	
	divPointeur.ondblclick = arretDefil;
	divPointeur.onmouseup = arretDefil;
	divPointeur.onmouseout = arretDefil;
	
	//on essaye de gérer le scroll
	function handle(delta) {
		if (delta < 0)
		{
			
		}
		else
		{
			if(idElementScroll == idDivContenant)
			{
				debutDefil();
			}
		}
	
	}

function wheel(event){
	var delta = 0;
	if (!event) event = window.event;
	if (event.wheelDelta) {
		delta = event.wheelDelta/120; 
		if (window.opera) delta = -delta;
	} else if (event.detail) {
		delta = -event.detail/3;
	}
	if (delta)
		handle(delta);
        if (event.preventDefault)
                event.preventDefault();
        event.returnValue = false;
}

/* Initialization code. */
if (window.addEventListener)
	window.addEventListener('DOMMouseScroll', wheel, false);
window.document.getElementById(idDivContenant).onmousewheel = document.getElementById(idDivContenant).onmousewheel = wheel;
	
	// Arr?t du d?filement
	function arretDefil(){
		window.clearInterval(monInterval);
	}

	// D?but du d?filement
	function debutDefil(){

		var pointeurContenu = document.getElementById(idDivContenu);
		var pointeurContenant = document.getElementById(idDivContenant);
		var facteur = pointeurContenant.offsetHeight / divBarreDefil.offsetHeight;
		//var facteurIncrementation = pointeurContenant.offsetHeight / pointeurContenu.offsetHeight;
		
		//on va regarder si on doit déclencher le défilement selon si la souris est au dessus d'un id
		
		sequenceDefil();
		
		function sequenceDefil(){
			/* Application du d?filement ? la propri?t? demand?e */
			//pointeurElement.style.top = parseInt(pointeurElement.style.top) + scrollPas*sensDefil + "px";
			positionTop = parseInt(divBarreDefil.style.top) + scrollPas*sensDefil;
			if(positionTop <= limitTop){
				positionTop = limitTop;
			}
			if(positionTop >= limitBottom){
				positionTop = limitBottom;
			}
			divBarreDefil.style.top = positionTop + "px";
			
			pointeurContenu.style.top =  - (positionTop - 7)*facteur +  "px";
		}
	}

	return true;
}

// ---------------------------------------------------------
// Cr?ation de la classe "Pointeur Haut"
function classPointeur(idDivPointeur, idDivContenant, idDivContenu, sensDefil, scrollPas, cadence, divBarreDefil, limitTop, limitBottom){
	
	var divPointeur = document.getElementById(idDivPointeur);
	var monInterval = '';
	
	var pointeurBarreDefil = document.getElementById(divBarreDefil);
	
	divPointeur.onmousedown = debutDefil;
	
	divPointeur.ondblclick = arretDefil;
	divPointeur.onmouseup = arretDefil;
	divPointeur.onmouseout = arretDefil;
	
	
	
	// Arr?t du d?filement
	function arretDefil(){
		window.clearInterval(monInterval);
	}

	// D?but du d?filement
	function debutDefil(){

		var pointeurContenu = document.getElementById(idDivContenu);
		var pointeurContenant = document.getElementById(idDivContenant);
		var facteur = pointeurContenant.offsetHeight / divBarreDefil.offsetHeight;
		//var facteurIncrementation = pointeurContenant.offsetHeight / pointeurContenu.offsetHeight;

		monInterval = window.setInterval(function(){sequenceDefil()}, 1000 / cadence);
		
		function sequenceDefil(){
			/* Application du d?filement ? la propri?t? demand?e */
			//pointeurElement.style.top = parseInt(pointeurElement.style.top) + scrollPas*sensDefil + "px";
			positionTop = parseInt(divBarreDefil.style.top) + scrollPas*sensDefil;
			if(positionTop <= limitTop){
				positionTop = limitTop;
			}
			if(positionTop >= limitBottom){
				positionTop = limitBottom;
			}
			divBarreDefil.style.top = positionTop + "px";
			
			pointeurContenu.style.top =  - (positionTop - 7)*facteur +  "px";
		}
	}

	return true;
}

// ***********************************************************************************************
// Fonctions pour le Drag and Drop d'un objet
// ***********************************************************************************************

// ---------------------------------------------------------
// Initialisation
function dragAndDrop(pointeurElement){
	
	if(typeof(pointeurElement) == "string"){
		var pointeurElement = document.getElementById(pointeurElement);
	}
	
	
	// V?rification de la limite Top
	if(typeof(dragAndDrop.arguments[1]) == 'number'){
		
		pointeurElement.attributLimitTop = true;
		pointeurElement.limitTop = dragAndDrop.arguments[1];
		pointeurElement.style.top = pointeurElement.limitTop + "px";
		
	}else{
		pointeurElement.attributLimitTop = false;
	}
	
	// V?rification de la limite Bottom
	if(typeof(dragAndDrop.arguments[2]) == 'number'){
		
		pointeurElement.attributLimitBottom = true;
		pointeurElement.limitBottom = dragAndDrop.arguments[2] - pointeurElement.offsetHeight;
		
	}else{
		pointeurElement.attributLimitBottom = false;
	}
	
	// V?rification de la limite Left
	if(typeof(dragAndDrop.arguments[3]) == 'number'){
		
		pointeurElement.attributLimitLeft = true;
		pointeurElement.limitLeft = dragAndDrop.arguments[3];
		pointeurElement.style.left = pointeurElement.limitLeft + "px";
		
	}else{
		pointeurElement.attributLimitLeft = false;
	}
	
	// V?rification de la limite Right
	if(typeof(dragAndDrop.arguments[4]) == 'number'){
		
		pointeurElement.attributLimitRight = true;
		pointeurElement.limitRight = dragAndDrop.arguments[4] - pointeurElement.offsetWidth;
		
	}else{
		pointeurElement.attributLimitRight = false;
	}
	
	// V?rifie la r?f?rence ? un ?l?ment parent
	if(typeof(dragAndDrop.arguments[5]) != 'undefined'){
		
		pointeurElement.attributParent = true;
		pointeurElement.elementParent = dragAndDrop.arguments[5];

		if(dragAndDrop.arguments[6] != undefined){
			pointeurElement.attributIdParent = true;
		}else{
			pointeurElement.attributIdParent = false;
		}
		
		pointeurElement.decalageY = connaitrePosTop(pointeurElement.elementParent, pointeurElement.attributIdParent);
		pointeurElement.decalageX = connaitrePosLeft(pointeurElement.elementParent, pointeurElement.attributIdParent);

	}else{
		pointeurElement.decalageY = 0;
		pointeurElement.decalageX = 0;
	}
	
	// Element conteneur de texte
	if(typeof(dragAndDrop.arguments[7]) != 'undefined'){
		
		pointeurElement.idDivContenant = dragAndDrop.arguments[7];
		
	}
	
	// Element conteneur de texte
	if(typeof(dragAndDrop.arguments[8]) != 'undefined'){
		
		pointeurElement.idDivContenu = dragAndDrop.arguments[8];
		
	}
	
	// Element conteneur de texte
	if(typeof(dragAndDrop.arguments[9]) != 'undefined'){
		
		pointeurElement.barreDefilVisible = dragAndDrop.arguments[9];
		
	}
	
	// pointeurElement.style.cursor = "move";
	if(!pointeurElement.barreDefilVisible){
		pointeurElement.style.left = "-9999px";
	}
	pointeurElement.onmousedown = lancerDragAndDrop;
}

// ---------------------------------------------------------
// Envoi le drag de l'objet en cours
function lancerDragAndDrop(e){

	// V?rification de la position du pointeur de souris par rapport ? l'?l?ment ? d?placer
	var posPointeurSouris = connaitrePosPointeurSouris(e);
	var posTopSouris = posPointeurSouris[0]; // + this.decalageY;
	var posLeftSouris = posPointeurSouris[1]; // + this.decalageX;
	
	var posTopElement = connaitrePosTop(this, false);
	var posLeftElement = connaitrePosLeft(this, false);
	
	this.diffTop = posTopElement - posTopSouris;
	this.diffLeft = posLeftElement - posLeftSouris;
	
	// Ne permet plus la s?lection dans IE pendant le d?placement
	document.onselectstart = function(){
		return false;
	}
	
	
	document.pointeurElement = this;

	document.onmouseup = function(e){
		document.onselectstart = '';
		document.onmousemove = '';
		document.pointeurElement.focus();
	}
	
	// Application du Drag de l'?l?ment au mouvement de souris
	document.onmousemove = function(e){
	

		// Ne permet plus la s?lection dans FF pendant le d?placement
		var pointeurElement = document.pointeurElement; 
		pointeurElement.focus();
		pointeurElement.style.zIndex = 999;
		
		// R?cup?ration des la position du pointeur de souris
		var posPointeurSouris = connaitrePosPointeurSouris(e);
		var posTopSouris = posPointeurSouris[0];
		var posLeftSouris = posPointeurSouris[1];
		
		// D?termination de la position de l'?l?ment drager
		pointeurElement.style.position = "absolute";
		var posElementTop = posTopSouris + pointeurElement.diffTop - pointeurElement.decalageY;
		var posElementLeft = posLeftSouris + pointeurElement.diffLeft - pointeurElement.decalageX;
		
		//window.status = posElementTop + " - " + posElementLeft + " | ";
		
		// window.status = pointeurElement.idDivContenu;
		
		if(pointeurElement.attributLimitTop && posElementTop <= pointeurElement.limitTop){
			posElementTop = pointeurElement.limitTop;
			//window.status += " Limite Top";
		}
		if(pointeurElement.attributLimitBottom && posElementTop >= pointeurElement.limitBottom){
			posElementTop = pointeurElement.limitBottom;
			//window.status += " Limite Bottom";
		}
		if(pointeurElement.attributLimitLeft && posElementLeft <= pointeurElement.limitLeft){
			posElementLeft = pointeurElement.limitLeft;
			//window.status += " Limite Left";
		}
		if(pointeurElement.attributLimitRight && posElementLeft >= pointeurElement.limitRight){
			posElementLeft = pointeurElement.limitRight;
			//window.status += " Limite Right";
		}
		
		if(pointeurElement.attributParent){
			//posElementTop = posElementTop + pointeurElement.decalageY;
			//posElementLeft = posElementLeft + pointeurElement.decalageX;
		}
		
		pointeurElement.style.top = posElementTop +  "px";
		pointeurElement.style.left = posElementLeft + "px";
		
		var pointeurContenu = document.getElementById(pointeurElement.idDivContenu);
		var pointeurContenant = document.getElementById(pointeurElement.idDivContenant);
		var facteur = pointeurContenant.offsetHeight / pointeurElement.offsetHeight;
			
		pointeurContenu.style.top =  - (posElementTop - 7)*facteur +  "px";
		

	
	}
	
}

/*
   function Timer() {
   iniScroll();
       setTimeout("Timer()",2000);
   }
   //Timer();
  // setTimeout("iniScroll()",2000);
*/

