	/*
		Fichier : scroll.js
		Description : fonctions de gestion des scrolls
		Projet: Site de Jacques HIMPENS <http://jhimpen.ajsinfo.net>
		Auteur : Sébastien WARIN <http://sebeuh.ajsinfo.net> pour AJSInfo
		Date de modification : 23/10/06
		Version : 1.4f
		(c) 2006 AJS Informatique <http://www.ajsinfo.net>
	*/
		
	/* Déclaration du tableau des scrollers et du cache */
	var scrollers = new Array(); var cache = null;
	
	/* Objet: Point */
	function Point(x, y) {
	    this.X = x;
	    this.Y = y;
	}
	
	/* Objet: Scroller */
	function Scroller(name, parent_size, initial_position, reloadPostBack) {
	    this.ActualPosition = new Point(initial_position.X, initial_position.Y);
	    this.InitialPosition = initial_position;
        this.Name = name;
	    this.ParentSize = parent_size;
	    this.Started = false;
	    this.ReloadPostBack = reloadPostBack;
	}
	
	/* Objet: Cache */
	function Cache(objDiv, objScroller) {
	    this.Div = objDiv;
	    this.Scroller = objScroller; 
	}
	
	/* Fonction d'enregistrement d'un scroller */
	function RegisterScroller(name, parentSize, initial_position) {
	    scrollers[scrollers.length] = new Scroller(name, parentSize, initial_position, false);
	}
	
	/* Fonction de repositionnement des Scrollers */
	function refixPosition() {
	    cache = null;
		for (var scrollerIndex=0; scrollerIndex<scrollers.length;scrollerIndex++) {
		    var objScroller = scrollers[scrollerIndex];
		    if(objScroller.ReloadPostBack) {
		        var objDiv = document.getElementById(objScroller.Name);
		        if(objDiv != null) {
	                objDiv.style.left = objScroller.ActualPosition.X + "px"; 
	                objDiv.style.top = objScroller.ActualPosition.Y + "px";   
		        }
		    }
		    else
		        resetPosition(objScroller.Name);
	    }
	}
	
	/* Fonction de reinitialition de la position */
	function resetPosition(sender) {
	    var objScroller = GetScrollerByName(sender);
	    objScroller.ActualPosition = new Point(objScroller.InitialPosition.X,objScroller.InitialPosition.Y);
	    var objDiv = document.getElementById(objScroller.Name);
		if(objDiv != null) {
	        objDiv.style.left = objScroller.ActualPosition.X + "px"; 
	        objDiv.style.top = objScroller.ActualPosition.Y + "px";   
        }
	}
	
	/* Fonction de remplissage du cache */
	function checkCache(sender) {
	    if(cache == null || sender != cache.Scroller.Name) {
	        var objScroller = GetScrollerByName(sender);
	        cache = new Cache(document.getElementById(objScroller.Name), objScroller);
	    }
	}
	
	/* Fonction de demarrage du scroll du sender */
	function startScroll(sender, direction) {
	    checkCache(sender);
	    cache.Scroller.Started = true;
		scroll(sender, direction);
	}
	
	/* Fonction d'arret du scroll du sender */
	function stopScroll(sender) {
		checkCache(sender);
	    cache.Scroller.Started = false;
	    cache = null;
	}
	
	/* Fonction de scrolling */
	function scroll(sender, direction) {
	    checkCache(sender);
	    // Recuperation des informations
		var objDiv = cache.Div;
		var objScroller = cache.Scroller;
		var parentSize = objScroller.ParentSize;
		var initialPos = objScroller.InitialPosition;
		var actualPos = objScroller.ActualPosition;
	    // Scrolling en fonction du sens
        switch(direction) {
            case "UP":
                // Haut
                if(actualPos.Y < initialPos.Y)
				    actualPos.Y += 3;
                break;
            case "DN":
                // Bas
                if(actualPos.Y > (1-(objDiv.scrollHeight - parentSize.Y)))
				    actualPos.Y -= 3;
                break;
            case "GT":
                // Droite
                if(actualPos.X > (1-(objDiv.scrollWidth - parentSize.X)))
				    actualPos.X -= 3;
                break;
            case "LT":
                // Gauche
                if(actualPos.X < initialPos.X)
				    actualPos.X += 3;
                break;
        }		
		// Enregistrement des nouvelles positions
		objScroller.ActualPosition = actualPos;
		// Affectation au DIV
	    objDiv.style.left = actualPos.X + "px"; 
	    objDiv.style.top = actualPos.Y + "px";
	    // Relancement du scrolling si mouseover
		if(objScroller.Started)
			setTimeout("scroll('" + sender + "','" + direction + "');", 100);
	}
	
	/* Fonction de recuperation d'un scroller par son nom */
	function GetScrollerByName(senderName) {
		for (var scrollerIndex=0; scrollerIndex<scrollers.length;scrollerIndex++) {
	        if(scrollers[scrollerIndex].Name == senderName) {
	            return scrollers[scrollerIndex];
	        }
	    }
	}
