/* fonction de biblio */
function TrouveStyle(Obj,Prop) {
    if (Obj.currentStyle) return Obj.currentStyle[Prop] ; //IE
    return getComputedStyle(Obj, null )[Prop] ; // normal std 
}

function getElements(classname, tagname, root) {
    if (!root) root = document ;
    else if (typeof root =="string") root = document.getElementById(root) ;
    if (!tagname) tagname = "*" ;
    var all = root.getElementsByTagName(tagname) ;
    if (!classname) return all ;
    var elements = [] ;
    for( var i = 0 ; i< all.length ; i++ ) {
	var element = all[i] ;
	if (estmembre(element, classname) ) elements.push(element) ;
    }
    return elements ;
    function estmembre(element, classname) {
	var classes = element.className ;
	if(!classes) return false ;
	if (classes == classname) return true ;
	// si plusieurs classes dans le string
	var ws = /\s+/ ;
	if(!ws.test(classes) ) return false ; // pas d'espace et pas de matchs
	// si on atteint ce code, c'est qu'il y a plusieurs classes
	var c = classes.split(ws) ;
	for(var i = 0 ; i < c.length ; i++) {
	    if (c[i] == classname)  return true ;
	    }
	return false ;
    } // fin estmembre
} // fin getElements ;


/* routine de cache */
function CacherReals() {
    
    var Tab = arguments ;
    
    if(!document.Cache) document.Cache = new Array() ;
    var j=document.Cache.length ;
    var i ;
    if (Tab.length) {
	var a = Tab.length ;
	
    }
    else {
	return ;
    }



    if(a) {
	for ( i=0 ; i < a ; i++ ) {


	// on peut commenter des entrées
	    if( Tab[i].indexOf('#') != 0 ) {

		document.Cache[j] = new Image() ;
		document.Cache[j++].src= Tab[i] ;
	    }
	    
	}
	//	alert("chargé : " + document.Cache.length + " images" ) ;
    }
    
 
}


/* code pour le défilement de texte info */
/* fonction de biblio */
/* nécessite de définir des globales : TailleInfo ? */

var TailleInfo= 0 ;
var Gap ; Gap=10 ;
var timedelayinfo = 2 ;
var timedelayInfo = timedelayinfo*100 ;

function idinfo(DivUn, DivDeux) {
    bande = document.getElementById(DivUn) ;
    bande2 = document.getElementById(DivDeux) ;
    TailleInfo = parseInt(TrouveStyle(bande,'width') ) +10 ;
    if (isNaN(TailleInfo)) { //IE

	TailleInfo = bande.offsetWidth ;
    }
}

function pas() {
    posabs = parseInt(TrouveStyle(bande,'left') ) ;
    posabs2 = parseInt(TrouveStyle(bande2,'left') ) ;
    posright = parseInt(TrouveStyle(bande,'right') )  ;
    posright2 = parseInt(TrouveStyle(bande2,'right') ) ; //alert(posright) ;
    posabs = posabs -Gap ;
    posabs2 = posabs2 -Gap ;

    if (posabs < -TailleInfo ) {
	posabs2 = 0 ; 
	posabs = TailleInfo ;
    }
    if (posabs2 < -TailleInfo ) { 
	posabs=0 ;
	posabs2 = TailleInfo ; 
    }
    bande.style.left = posabs +'px' ;
    bande2.style.left = posabs2 +'px' ;
}

function glisse() {

    bande2.style.left = TailleInfo + 'px';
    htimerInfo = setInterval(pas,timedelayInfo) ;
   
}


function chenillard(ch,  cont) { 
    obj= document.getElementById(cont) ;
    //var pos= pos ; pos est une globale 
    if (pos == ch.length) pos = 0 ;
    var sortie ='';
    for( var i=0 ;i<=ch.length ; i++) {
	if (i == pos ) {
	    if (ch.charAt(i) !=' ') {
		sortie += '<span style="color:#fff;">'+ch.charAt(i)+'</span>'
		    }
	    else {
		sortie += ch.charAt(i) ;
		++pos ;
		
	    }
	}
	else {
	    sortie += ch.charAt(i) ;
	}
	    
    }
    obj.innerHTML= sortie ;
    ++pos ;

}

/* un framework pour le drag and slide 
 * LA fonction est apelée par un Mdown.
 * Ensuite en détectant les mousemouve, elle
 * elle permet de bouger des trucs. Ici, on contraindra soit X, soit Y
 * puisque on veuit programmer un ascenceur.
 * Elle prend en argument l'élément à bouger et l'évènement qui la déclenche.
 * Il faudra l'accrocher à un trigger, 
 * l'étape suivante consistant à lier le mouvt de l'ascenceur et de l'écran
 */
function drag( pastille,piste,trace,fenster, direction ,event, max ) {
    //var pastille ;
    //if(window.attachEvent) pastille=event.srcElement ;
    //else pastille = event.currentTarget ;
    // la fenetre est passée comme id chaine
    if (typeof fenster == "string" ) 
	fenster= document.getElementById(fenster) ;
    if (typeof trace == "string" ) 
	trace = getElements(trace,'div',piste) ;
    trace = trace[0] ; // sur qu'il n'y en a qu'une
    var startX = event.clientX , startY = event.clientY ;
    
    // on prend une origine absolue
    var origX = pastille.offsetLeft , origY = pastille.offsetTop ;

    // théoriq., on a donc la position abs de la pastille :
    var absX = startX - origX , absY = startY - origY ;

    // notre fonction a été déclenchée par un Mdown. 
    //On enregistre cQFF pour les events suivants.
    if(document.addEventListener) { 
	// on peut l'attacher au doc puisque créé
	// par un trigger attaché

	document.addEventListener("mousemove", bouge, true) ;
	document.addEventListener("mouseup", arrete, true) ;


    }
    else if (document.attachEvent) {
	// modele IE , connais pas
	pastille.setCapture() ;
	pastille.attachEvent("onmousemove", bouge) ;
	pastille.attachEvent("onmouseup", arrete) ;
	pastille.attachEvent("onlosecapture", arrete) ;
    }
    else { // vieux modele IE 4 on s'en fout 
	alert('on ne doit jamais atteindre cett place') ;
    }

    // l'évenement ne concerne que ce qu'on désir : voir plus haut
    if(event.stopPropagation) event.stopPropagation() ;
    else event.cancelBubble = true ;
    // et avant ...
    if (event.preventDefault) event.preventDefault() ;
    else event.returnValue = false ; 
    
    /* et maintenant le handler qui bouge */
    function bouge(e) {
	if (!e) e= window.event ; //IE !
	// on voit la fenetre

	if (direction == 'X') {
	    
	    var posinit=parseInt(TrouveStyle(pastille,'left')) ;
	    var sens = ((e.clientX -absX) > posinit) ? 1 : 0 ;
	    if(sens) {
		if(posinit < max) {
		    pastille.style.left = (e.clientX - absX) +"px" ;
		    trace.style.width = (e.clientX - absX) +"px" ;
		    if(fenster) fenster.style.left =(absX - e.clientX) + "px";
		}
	    }
	    else {
		if (posinit > 0) {
		    pastille.style.left = (e.clientX - absX) +"px" ;
		    trace.style.width = (e.clientX - absX) +"px" ;
		    if(fenster) fenster.style.left = (absX - e.clientX) + "px";
		}
	    }
	}
	else {
	    var posinit=parseInt(TrouveStyle(pastille,'top')) ;
	    var sens = ((e.clientY -absY) > posinit) ? 1 : 0 ;
	    if(sens) {
		if(posinit < max) {
		    pastille.style.top = (e.clientY - absY) +"px" ;
		    trace.style.height = (e.clientY - absY) +"px" ;
		    if(fenster) fenster.style.top = 2*(absY - e.clientY) + "px" ;
		}
	    }
	    else {
		if (posinit > 0) {
		    pastille.style.top = (e.clientY - absY) +"px" ;
		    trace.style.height = (e.clientY - absY) +"px" ;
		    if(fenster) fenster.style.top = 2*(absY - e.clientY) + "px" ;
		}
	    }

	}
	// l'évenement ne concerne que ce qu'on désir : voir plus haut
		if(e.stopPropagation) e.stopPropagation() ;
		else e.cancelBubble = true ;
    }

    function arrete(e) {
	if (!e) e= window.event ; //IE !
	// il suffit de déenregistrer nos evènements
	
	if (document.removeEventListener ) {
	    //	    alert('listeners internes en désactivation');
	    document.removeEventListener("mousemove", bouge, true ) ;
	    document.removeEventListener("mouseup" , arrete, true ) ;


	}
	else if (document.detachEvent) {
	    pastille.detachEvent("onlosecapture", arrete) ;
	    pastille.detachEvent("onmouseup" , arrete) ;
	    pastille.detachEvent("onmousemove", bouge) ;
	    pastille.releaseCapture();
	}
       // l'évenement ne concerne que ce qu'on désir : voir plus haut
		if(e.stopPropagation) e.stopPropagation() ;
		else e.cancelBubble = true ;
    }
}

//
