/* un scroller ajustable et parametrable */

/* variables d'interface, modifiables */
var scrollSpeed = 1; // augmente: plus rapide
var scrollW=1; // pas de decalage a chaque iteration
var scrollIntervalDef = 1; // augmente: plus rapide
var timeOut = 30; // augmente: moins rapide, plus saccade 
var defil=true; // false: on arrete le defilement
var sens = 1; // sens de defilement 1: droite/gauche -1: gauche/droite


/* variables internes */
var pos=0; // position de la div interne
var scrollInterval=scrollIntervalDef; // combien d'iterations
var zero = 0; // position la plus a gauche (- largeur de div interne
var taille = 20; // taille "conceptuelle" de ce qui defile derriere la div "contenant"
var space = 10; // espace entre les deux div qui defilent alternativement
var contenant; // la frame externe
var contenu; // la frame interne
var dehors = 0;

/* fonction qui decale les deux frames et s'appelle recursivement au bout 
 * d'un certain temps. Decalage "modulo" pour faire l'effet d'un menu 
 * tournant avec seulement deux div qui sont des copies conformes */
function scroll() {
  if (defil) {
      for(i=0;i < scrollInterval;i++){
	  pos = (pos - (scrollW * sens)) % taille;
	  // operateur % en javacript: -4 % 5 = -4 ! et non pas 1 !!
	  document.getElementById(contenu).style.left= (zero + (pos + taille)
							% taille) + "px";
	  document.getElementById("dolly").style.left= (zero + ((pos + (3 * taille/2))
								% taille)) + "px";
      }
      setTimeout("scroll()",timeOut/scrollSpeed);
  }
}

/* description des parametres:
- nomContenant est l'id de la div globale
- nomContenu est l'id de la div interne qui tourne
- hautBas: 1 pour defiler en haut de la fenetre, 0 au milieu et -1 en bas.
  Si on veut configurer a la main, alors c'est n'importe quelle autre valeur
*/

function run(nomContenant,nomContenu,hautBas){
    // on recupere les donnees et on copie la div interne
    contenant = nomContenant;
    contenu = nomContenu;
    tailleFenetre = document.getElementById(contenant).offsetWidth;
    var defil = document.getElementById(contenu);
    /* alignement: bas ou haut ? */
    if (hautBas == 1) {
	defil.style.top = 0 + "px";
    } else { 
	if (hautBas == -1) {
	    var hautFenetre = document.getElementById(contenant).offsetHeight;
	    defil.style.top = (hautFenetre - defil.offsetHeight) + "px";
	} else {
	    if (hautBas == 0) {
		var hautFenetre = document.getElementById(contenant).offsetHeight;
		defil.style.top = ((hautFenetre - defil.offsetHeight)/2) + "px";
	    }
	}
    }
    var dolly = defil.cloneNode(true);
    offset = defil.offsetWidth;
    document.getElementById(contenant).appendChild(dolly);
    dolly.id="dolly";
	/* changer les id ?? rajouter "dolly_" devant ... */
	elemsd = dolly.getElementsByTagName('a');
	elemsi = defil.getElementsByTagName('a');
	i=0
	l=elemsd.length
	while(i < l){
		elemsd[i].id = "dolly_" + elemsi[i].id;
		i++;
	}
	
	
    /* mise a jour du point zero (a gauche: il faut que la div ait le temps 
     * de disparaitre prorement avant qu'elle ne revienne a droite */
    zero = -1 * offset;
    /* si les div sont trop petites, on augment l'espace entre elles */
    if (offset + 20 > tailleFenetre) {
	space = 10;
    } else {
	space = (tailleFenetre - offset) / 2;
    }
    taille = 2 * (offset + space);
    pos = offset; // pour commencer aligne a gauche
    scroll();
}

/* modification des vitesses de defilement */
function over(){
defil=false;
dehors++;
}
function out(){ 
defil=true;
dehors--;
setTimeout("razVitesse()",timeOut);
}
/* out/over peuvent etre appelee plusieure fois en MEME temps lorsque    *
 * l'on change de div, que l'on passe sur du texte, ... Pas controlable  *
 * c'est la raison d'etre de cette fonction qui lance seulement une fois */
function razVitesse(){
    if (defil==true) {
	defil=false; // stoppe tout
	setTimeout("razVitesse()",timeOut);
    } else {
	if (dehors == 0){// on a eu autant de sorties que d'entrees
	    defil=true;
	    scroll();
	}
    }
	
}

function modifySpeed(time,jump,way){
scrollSpeed=time;
scrollInterval=jump*scrollIntervalDef;
sens=way;
}
function ff(){
modifySpeed(3,2,1);
}
function rr(){
modifySpeed(3,2,-1);
}
function fff(){
modifySpeed(3,4,1);
}
function rrr(){
modifySpeed(3,4,-1);
}
function ns(){
modifySpeed(1,1,1);
}


function resizeImage(name, path){
	
	img = new Image();
	img.src = path;
	
	id = document.getElementById('image_defil_'+name);
	id.style.height="65px";
	id.style.width = parseInt((img.width*65)/img.height) + "px";
	
	p=id.parentNode;
	p.style.width = parseInt((img.width*65)/img.height) + "px";
	
	voile=document.getElementById("voile_" + name);
	voile.style.width = parseInt((img.width*65)/img.height) + "px";
	
	t=document.getElementById("voile_int_" + name);
	t.style.width = parseInt((img.width*65)/img.height) + "px";
}

function resizeImage_invalide(name, path){
	img = new Image();
	img.src = path;
	
	id = document.getElementById('image_defil_'+name);
	id.style.height="65px";
	id.style.width = parseInt((img.width*65)/img.height) + "px";
	
	p=id.parentNode;
	p.style.width= parseInt((img.width*65)/img.height) + "px";
	
	f=document.getElementById("voile_fixe_" + name);
	f.style.width= parseInt((img.width*65)/img.height) + "px";
}