// AUTEUR: Ch.JARLIER - CJMEDIASTUDIO 	----------------------------------------------------------------
// Date de création: 04/05/2001 	
//
// © Ch.JARLIER 2001 - All rights reserved
// ne pas utiliser sans l'autorisation express de l'auteur
//
// Gestion de zone déroulantes 			
// 		contenu libre					
//		position absolu ou relative		
//      scroll annonce automatique		
//		pilotage par boutons et slider  
//

// ------------ constantes -----------------------------------------------------------------------------

// correspondance des vitesses (timeout + inc) valeurs speed : 0..9
var spd = [0,200,100,50,50,15,15,15,15,1];
var icv = [0,1,1,1,2,2,3,5,10,20];

// marge du bas du scroller
var scbotmargin = 30; 

// delai par défaut de fonction delaihidescroll
var delaiZhide = 500;

// texte infobul slider et boutons
var slidinfobul = "Glissez moi !";
var topinfobul = "clic: tout en haut";
var botinfobul = "clic: tout en bas";

// navigateur en cours NavNS = Netscape 4+
var NavNS = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 4);
//  mot clef visibility suivant navigateur
var invis = (NavNS) ? 'hide' : 'hidden';
var vis = (NavNS) ? 'show' : 'visible';

var sc_mask = "espaceur.gif";	// nom de l'image espaceur par défaut
function define_mask(urlm) {	// fonction de modification de l'image espaceur
 sc_mask = urlm;
}

function funcdelai(func) {
 funcdel = func;
}

// --------- var globales -----------------------------------------------------------------------------

var sc = new Array();			// tableau des objets de paramètres 
var sci = new Array();			// tableau des layers à scroller
var indrag = 100;				// numéro du slider en cours de drag


// ------------------- fonctions de gestion de la fenètre déroulante et du slider ---------------------


// ----------------- définition d'une zone de scroll ----------------
// numsc = numéro de zone 0..9
// left - top : coordonnée absolue dans la fenêtre (pixel)
// width,height : taille de la zone (pixel)
// scrollh : hauteur totale du contenu  (pixel)
// couleur du fond en hexa - "" = pas de fond - #FFFFFF = fond blanc
// vitesse de scroll par défaut de 0 à 9 (0=stop 9=max)
function scrollparam(numsc,left,top,width,height,scrollh,bgcol,speed) {
 sc[numsc]=new scparam(left,top,width,height,scrollh,bgcol,speed);
}

// -------- en-tête et pied de la zone -- entoure le contenu HTML de la zone DIV= sc0, sc1 ...
function headscroll(numsc) {
	return sc[numsc].headscroll; 
}
	
function footscroll(numsc) {
	return sc[numsc].footscroll;
}

// ---------------- initialisation de la zone -----------------------
// à utiliser après la définition de la zone - prépare la zone
// numsc = numéro de zone
// posit:true -> position relative  false - position absolue
// décalage haut et gauche si position relative (pixel) 
function scrollinit(numsc, posit, xp, yp) {
	sci[numsc] = (NavNS) ? eval("document.sc"+numsc) : eval("document.all.sc"+numsc+".style");
	if (posit) {  // position relative (placer une IMG dummy appelé dum0 dum1...) 
	    xp = xp || 0;
		yp = yp || 0;
		getCoordImg(eval("document.dum"+numsc));
		sc[numsc].leftedge = xPos + xp;
        sc[numsc].topedge = yPos + yp ;
	}
}


// définition de l'objet slider ----------------------------------------------
// doit être placé avant l'image guide
// numsc : n° de l'objet scroll auquel il est rataché
// urlimg : URL de l'image du slider
// wi - hi : taille du slider en pixel
function definescroller(numsc,urlimg,wi,hi) {
	ScDiv = sc[numsc];
	ScDiv.scrollerwi = wi;
	ScDiv.scrollerhi = hi;
	
	if (NavNS) { 	
	 	scrollhtml = "<layer id='scbut"+numsc+"' position='absolute' visibility='hide'>";
	 	scrollhtml += "<A HREF='javascript://' ONMOUSEDOWN='TrapMouseDown("+numsc+")' TITLE='"+slidinfobul+"'><img src='"+urlimg+"' border='0' width='"+wi+"' height='"+hi+"'></A></layer>";
	} else {
  	 	scrollhtml = "<div id='scbut"+numsc+"' style='position:absolute; visibility:hidden'>";
	 	scrollhtml += "<a href='javascript://' onFocus=\"this.blur()\" ONMOUSEDOWN='TrapMouseDown("+numsc+")' TITLE='"+slidinfobul+"'><img src='"+urlimg+"' width='"+wi+"' height='"+hi+"' border='0'></a></div>";
	} 
	
	document.write(scrollhtml);
}


// définition d'un bouton top bottom 
function definebuttsc(numsc,bt,urlimg,wi,hi) {
	btx = (bt=="bottom") ? "b" : "t" ;
	ov = (bt=="bottom") ? "up(" : "down(" ;
	cl = (bt=="bottom") ? "bot(" : "top(" ;
	tx = (bt=="bottom") ? botinfobul : topinfobul ;
	
	if (NavNS) { 	
	 	scrollhtml = "<layer id='scbut"+btx+numsc+"' position='absolute' visibility='hide'>";
	 	scrollhtml += "<a href='javascript://' TITLE='"+tx+"' ONMOUSEOVER='scroll"+ov+numsc+"); return true;' ONMOUSEOUT='stopscroll("+numsc+"); return true;' ONCLICK='scroll"+cl+numsc+"); return true;'>";
		scrollhtml += "<img src='"+urlimg+"' border='0' width='"+wi+"' height='"+hi+"'></A></layer>";
	} else {
  	 	scrollhtml = "<div id='scbut"+btx+numsc+"' style='position:absolute; visibility:hidden'>";
		scrollhtml += "<a href='javascript://' TITLE='"+tx+"' onFocus=\"this.blur()\" ONMOUSEOVER='scroll"+ov+numsc+"); return true;' ONMOUSEOUT='stopscroll("+numsc+"); return true;' ONCLICK='scroll"+cl+numsc+"); return true;'>";
	 	scrollhtml += "<img src='"+urlimg+"' width='"+wi+"' height='"+hi+"' border='0'></a></div>";
	} 
	
	document.write(scrollhtml);
}

// image guide : image horizontale ou verticale servant de guide au slider
// l'image doit être nommée "scbutg0","scbutg1" avec le numéro de la zone scroll


// initialisation de l'objet slider -----------------------------------
// doit être placé après l'image guide
// l'offset x et y décale le slider par rapport à l'image guide
// lim remplace la longueur de l'image guide (taille du déplacement)
function scrollerginit(numsc,ofx,ofy,lim) {
	ScDiv = sc[numsc];
	
	guide = eval("document.scbutg"+numsc);
	getCoordImg(guide);
	getSizeImg(guide);
	ofx = ofx || 0;
	ofy = ofy || 0; 
	xPos = xPos + ofx;
	yPos = yPos + ofy;
	horiz = ( wPos > hPos) ? true : false;
	ScDiv.scrollerx = (horiz)? xPos : xPos + (wPos  / 2) ;
	ScDiv.scrollery = (horiz)? yPos + (hPos  / 2) : yPos ;
	ScDiv.scrollerw = (horiz)? (lim)? lim : wPos : 1;
	ScDiv.scrollerh = (horiz)? 1: (lim)? lim : hPos ;
	
	ScDiv.scrollerhoriz = horiz;
	ScDiv.scroller = true;
	indrag=100;
	ActivTrapMouse();
}

// initialisation de les boutons top bottom -----------------------------------
// doit être placé après l'image guide
// l'offset x et y décale le bouton par rapport à l'image guide
function scrollbutinit(numsc,bt,ofx,ofy) {

	btx = (bt=="bottom") ? "b" : "t" ;
	
    sctop = (NavNS) ? eval("document.scbut"+btx+numsc) : eval("document.all.scbut"+btx+numsc+".style");
    ScDiv = sc[numsc];

	guide = eval("document.scbutg"+numsc);
	getCoordImg(guide);
	ofx = ofx || 0;
	ofy = ofy || 0; 
	xPos = xPos + ofx;
	yPos = yPos + ofy;

    if (NavNS) {
        sctop.left = xPos;
        sctop.top = yPos;
    } else {
        sctop.pixelLeft = xPos;
        sctop.pixelTop = yPos;
    }
     
    sctop.visibility=vis;
}


// cache un bouton top bottom ---------
function hidescbut(numsc,bt) {  
	btx = (bt=="bottom") ? "b" : "t" ;
    sctop = (NavNS) ? eval("document.scbut"+btx+numsc) : eval("document.all.scbut"+btx+numsc+".style");
    sctop.visibility=invis;
}




// ------------------------------ fonction des boutons de contrôle -------------------------------------

//	 showscroll(numsc)		   -- montre la zone 'numsc'
//	 hidescroll(numsc)		   -- cache la zone 'numsc'

//   autoscroll(numsc)         -- lance le scroll automatique de la zone 'numsc' à la vitesse par défaut
//   autoscroll(numsc,speed )  -- lance le scroll automatique de la zone 'numsc' à la vitesse indiquée 

//   scrolltop(numsc)		   -- affiche le haut du contenu de la zone
//   scrollbot(numsc)		   -- affiche le bas du contenu de la zone

//   scrollup(numsc)		   -- scroll vers le haut jusqu'à la limite à la vitesse par défaut
//   scrollup(numsc,speed)     -- scroll vers le haut jusqu'à la limite à la vitesse indiquée

//   scrolldown(numsc)		   -- scroll vers le bas jusqu'à la limite à la vitesse par défaut
//   scrolldown(numsc,speed)   -- scroll vers le bas jusqu'à la limite à la vitesse indiquée

//   stopscroll(numsc)         -- arrête le scroll en cours 

//   scrollfixp(numsc,clipp)   -- affiche le contenu de la zone à la position clipp en % 0 à 100

//   setscvalue(numsc,vhtml)   -- modifi le contenu d'une zone - le param 'vhtml' contient tt balise html
//   cscvalue(numsc0,numsc1)   -- copie le contenu de numsc0 dans numsc1 (IE seul)





// -------------------------------------- implémentation -----------------------------------------------
// -----------------------------------------------------------------------------------------------------

// -----------------------------------------------------------------------------------------------------
// -------  création  objet scroller methode NEW ------------------
function scparam(left,top,width,height,scrollh,bgcol,speed) {
	// propriétés générales
    this.topedge = top || 10;  
    this.leftedge = left || 10;  
	this.cliptop = height || 100; 
    this.boxheight = height || 100; 
    this.boxwidth = width || 200;  
    this.scrollheight = scrollh || this.boxheight; 
	this.timeO = null;
	speed = speed || 5;
	if (speed<0) speed=0; else if (speed>9) speed=9;
	this.speed = speed;
	bgcol = bgcol || "";
	if (bgcol!="") bkgrd = "bgcolor='"+bgcol+"'"; else bkgrd="";

	// génération de l'entête de l'objet scroller	
    this.headscroll = "<table border=0 cellpadding=2 cellspacing=0 " + bkgrd +" >";
    this.headscroll += "<tr><td><img src='" + sc_mask + "' width=1 height="+height+"></td></tr>";
    this.headscroll += "<tr><td width='"+(width-2)+"' NOWRAP>";
    this.footscroll = "</td></tr><tr><td><img src='" + sc_mask + "' width=1 height="+height+"></td></tr></table>";
	
	// gestion de la disparition temporisée
	this.cjHMenuTimer = null;
	this.cjHStart = null;
	this.cjHFlag = false;
	
	// préparation des propriétés du slider
	this.scrollerw = 10;
	this.scrollerh = 100;
	this.scrollerx = 0;
	this.scrollery = 0;
	this.scrollerp = 0
	this.scrollerwi = 10;
	this.scrollerhi = 10;	
	this.scroller = false;
	this.scrollerhoriz = false;
}
// -----------------------------------------------------------------------------------------------------


// récupère les coordonnées d'une image témoin (posit relative)
function getCoordImg(imaId) {
        if (NavNS) {
            xPos = imaId.x;
            yPos = imaId.y;
        } else {
			xPos = imaId.offsetLeft;
			yPos = imaId.offsetTop;
			tempEl = imaId.offsetParent;
  			while (tempEl != null) {
  				xPos += tempEl.offsetLeft;
				yPos += tempEl.offsetTop;
  				tempEl = tempEl.offsetParent;
  			}
        }
}

// récupère la taille d'une image témoin (posit relative)
function getSizeImg(imaId) {
        if (NavNS) {
            wPos = imaId.width;
            hPos = imaId.height;
        } else {
			wPos = imaId.width;
			hPos = imaId.height;
        }
}

// -----------------------------------------------------------------------------------------------------

// scroll automatique bouclé --------------
function autoscroll(numsc,speed,cliptop) {   
 	SciDiv = sci[numsc];
	ScDiv = sc[numsc];
	cliptop = cliptop || ScDiv.cliptop ;
	speed = speed || ScDiv.speed;
	if (speed<0) speed=0; else if (speed>9) speed=9;
    if (NavNS) {
        SciDiv.clip.top = cliptop;
        SciDiv.clip.bottom = cliptop + ScDiv.boxheight;
        SciDiv.clip.left = 0;
        SciDiv.clip.right = ScDiv.boxwidth + ScDiv.leftedge;
        SciDiv.left = ScDiv.leftedge;
        SciDiv.top = ScDiv.topedge - cliptop;
    } else {
        SciDiv.clip = "rect(" + cliptop + "px " + (ScDiv.boxwidth + ScDiv.leftedge) + "px " + (cliptop + ScDiv.boxheight) + "px 0px)";
        SciDiv.pixelLeft = ScDiv.leftedge;
        SciDiv.pixelTop = ScDiv.topedge - cliptop;
    }
	ScDiv.cliptop = cliptop;
    cliptop = (cliptop + icv[speed]) % (ScDiv.scrollheight + ScDiv.boxheight);
    SciDiv.visibility=vis;
    if (ScDiv.speed>0) ScDiv.timeO=setTimeout("autoscroll("+numsc+"," + speed + "," + cliptop + ")", spd[speed]);
}

// -----------------------------------------------------------------------------------------------------

// montre la zone ------------
function showscroll(numsc) {   
 	SciDiv = sci[numsc];
	ScDiv = sc[numsc];
	clearTimeout(ScDiv.timeO);
	cliptop = ScDiv.cliptop;
    if (NavNS) {
        SciDiv.clip.top = cliptop;
        SciDiv.clip.bottom = cliptop + ScDiv.boxheight;
        SciDiv.clip.left = 0;
        SciDiv.clip.right = ScDiv.boxwidth + ScDiv.leftedge;
        SciDiv.left = ScDiv.leftedge;
        SciDiv.top = ScDiv.topedge - cliptop;
    } else {
        SciDiv.clip = "rect(" + cliptop + "px " + (ScDiv.boxwidth + ScDiv.leftedge) + "px " + (cliptop + ScDiv.boxheight) + "px 0px)";
        SciDiv.pixelLeft = ScDiv.leftedge;
        SciDiv.pixelTop = ScDiv.topedge - cliptop;
    }
	ScDiv.cliptop = cliptop;
	clearcjH(numsc);
    SciDiv.visibility=vis;
}
// -----------------------------------------------------------------------------------------------------

// cache la zone ------------------
function hidescroll(numsc) {   
 	SciDiv = sci[numsc];
	ScDiv = sc[numsc];
	clearTimeout(ScDiv.timeO);
	clearcjH(numsc);
    SciDiv.visibility=invis;
}

// cache toutes les zones sauf numsc ---------
function cacheAllm(numsc) {
	for (var i=0; i<sci.length ; i++) {
	  if (eval(i)!=eval(numsc)) {
		ob = eval(sci[i]);
		ob.visibility = invis;
	  }
	}
}


//cache le slider ---------
function hideslider(numsc) {  
 sclr = (NavNS) ? eval("document.scbut"+numsc) : eval("document.all.scbut"+numsc+".style");
 sclr.visibility=invis;
}

// --------------- cache temporisé -----------
function delaihidescroll(numsc,delh) {
	delh = delh || delaiZhide ;
	ScDiv = sc[numsc];
	ScDiv.cjHStart = new Date();
	ScDiv.cjHFlag = true;
	ScDiv.cjHMenuTimer = setTimeout("delaiHscroll("+numsc+","+delh+")", delh);
}

function delaiHscroll(numsc,delh) {
	delh = delh || delaiZhide ;
	ScDiv = sc[numsc];
	if (!ScDiv.cjHFlag) return;
	var elapsed = new Date() - ScDiv.cjHStart;
	if (elapsed < delh) {
		ScDiv.cjHMenuTimer = setTimeout("delaiHscroll("+numsc+","+delh+")", delh+100-elapsed);
		return;
	}
	ScDiv.cjHFlag = false;
	if (funcdel) eval(funcdel);
	hidescroll(numsc);
}

function clearcjH(numsc)
{
	ScDiv = sc[numsc];
	if (ScDiv.cjHMenuTimer) clearTimeout(ScDiv.cjHMenuTimer);
	ScDiv.cjHMenuTimer = null;
	ScDiv.cjHFlag = false;
}

// -----------------------------------------------------------------------------------------------------

// arrête le scroll en cours ------
function stopscroll(numsc) {   
	ScDiv = sc[numsc];
	clearTimeout(ScDiv.timeO);
}


// -----------------------------------------------------------------------------------------------------

// modifie le contenu d'une zone
function setscvalue(numsc,vhtml) {
    txt = headscroll(numsc);
	txt += vhtml;
    txt +=footscroll(numsc);
	if (NavNS) {
	    vl = eval("document.sc"+numsc);
		vl.document.write(txt);
		vl.document.close();
	} else {
	  vl = eval("document.all.sc"+numsc);
	  vl.innerHTML = txt;
	}
}
// -----------------------------------------------------------------------------------------------------
// copie le contenu de numsc0 dans numsc1
function cscvalue(numsc0,numsc1) {
	if (NavNS) {
		vs = eval("document.sc"+numsc0);
	    vd = eval("document.sc"+numsc1);
		vs.document.open();
		vd.document.write(vs.document.read());
		vd.document.close();
	} else {
	  	vs = eval("document.all.sc"+numsc0);
	  	vd = eval("document.all.sc"+numsc1);
	  	vd.innerHTML = vs.innerHTML;
	}
 
}


// place le slider à une valeur % 0 à 100
function scrollerposp(numsc,pospc){
     sclr = (NavNS) ? eval("document.scbut"+numsc) : eval("document.all.scbut"+numsc+".style");
     ScDiv = sc[numsc];
     pospc = pospc || 0 ;
     if (pospc>100) pospc = 100;
     
     if (ScDiv.scrollerhoriz) { 
      spx = ScDiv.scrollerx + ((ScDiv.scrollerw-ScDiv.scrollerwi) * pospc) / 100;
      spy = ScDiv.scrollery - ScDiv.scrollerhi/2;
     } else {
      spx = ScDiv.scrollerx - ScDiv.scrollerwi/2;
      spy = ScDiv.scrollery + ((ScDiv.scrollerh-ScDiv.scrollerhi) * pospc) / 100;
     } 
    
     if (NavNS) {
        sclr.left = spx;
        sclr.top = spy;
     } else {
        sclr.pixelLeft = spx;
        sclr.pixelTop = spy;
     }
     
     sclr.visibility=vis;
}
// -----------------------------------------------------------------------------------------------------

// scroll vers le haut ---------------------
function scrollup(numsc,speed) {   
 if (speed) 
  scrollupto(numsc,sc[numsc].scrollheight + scbotmargin,speed);
 else scrollupto(numsc,sc[numsc].scrollheight + scbotmargin);
}
// -----------------------------------------------------------------------------------------------------

// scroll vers le bas ---------------------
function scrolldown(numsc,speed,cliptop) {  
  if (speed) 
  scrolldownto(numsc,sc[numsc].boxheight,speed);
 else scrolldownto(numsc,sc[numsc].boxheight);
}

// scroll vers le haut to pos ---------------------
function scrollupto(numsc,posto,speed,cliptop) {   
 	SciDiv = sci[numsc];
	ScDiv = sc[numsc];
	cliptop = cliptop || ScDiv.cliptop ;
	speed = speed || ScDiv.speed;
	if (speed<0) speed=0; else if (speed>9) speed=9;
    if (NavNS) {
        SciDiv.clip.top = cliptop;
        SciDiv.clip.bottom = cliptop + ScDiv.boxheight;
        SciDiv.clip.left = 0;
        SciDiv.clip.right = ScDiv.boxwidth + ScDiv.leftedge;
        SciDiv.left = ScDiv.leftedge;
        SciDiv.top = ScDiv.topedge - cliptop;
    } else {
        SciDiv.clip = "rect(" + cliptop + "px " + (ScDiv.boxwidth + ScDiv.leftedge) + "px " + (cliptop + ScDiv.boxheight) + "px 0px)";
        SciDiv.pixelLeft = ScDiv.leftedge;
        SciDiv.pixelTop = ScDiv.topedge - cliptop;
    }
	ScDiv.cliptop = cliptop;
    SciDiv.visibility=vis;
	
	//mise à jour du scroller si necessaire
	totalsc = ScDiv.scrollheight + scbotmargin - ScDiv.boxheight;
	p = cliptop - ScDiv.boxheight ;
	clipp =  (p>0)? ( 100 * p ) / totalsc : 0;
	if (ScDiv.scroller) scrollerposp(numsc,clipp);

	if (cliptop!=posto) {
        cliptop = (cliptop + icv[speed]) % (ScDiv.scrollheight + ScDiv.boxheight);
    	if (cliptop>posto) cliptop=posto;
        if ((cliptop <= ScDiv.scrollheight + ScDiv.boxheight)) ScDiv.timeO=setTimeout("scrollupto("+numsc+"," +posto+"," + speed + "," + cliptop + ")", spd[speed]);
	}
}
// -----------------------------------------------------------------------------------------------------


// scroll vers le bas to pos---------------------
function scrolldownto(numsc,posto,speed,cliptop) {   
 	SciDiv = sci[numsc];
	ScDiv = sc[numsc];
	cliptop = cliptop || ScDiv.cliptop ;
	speed = speed || ScDiv.speed;
	if (speed<0) speed=0; else if (speed>9) speed=9;
    if (NavNS) {
        SciDiv.clip.top = cliptop;
        SciDiv.clip.bottom = cliptop + ScDiv.boxheight;
        SciDiv.clip.left = 0;
        SciDiv.clip.right = ScDiv.boxwidth + ScDiv.leftedge;
        SciDiv.left = ScDiv.leftedge;
        SciDiv.top = ScDiv.topedge - cliptop;
    } else {
        SciDiv.clip = "rect(" + cliptop + "px " + (ScDiv.boxwidth + ScDiv.leftedge) + "px " + (cliptop + ScDiv.boxheight) + "px 0px)";
        SciDiv.pixelLeft = ScDiv.leftedge;
        SciDiv.pixelTop = ScDiv.topedge - cliptop;
    }
	ScDiv.cliptop = cliptop;
	SciDiv.visibility=vis;
	
	//mise à jour du scroller si necessaire
	totalsc = ScDiv.scrollheight + scbotmargin - ScDiv.boxheight;
	p = cliptop - ScDiv.boxheight ;
	clipp =  (p>0)? ( 100 * p ) / totalsc : 0;
	if (ScDiv.scroller) scrollerposp(numsc,clipp);
	
	if (cliptop!=posto) {
        cliptop = (cliptop - icv[speed]) % (ScDiv.scrollheight + ScDiv.boxheight);
    	if (cliptop<posto) cliptop=posto;
        if (cliptop >= 0) ScDiv.timeO=setTimeout("scrolldownto("+numsc+"," + posto +',' + speed + "," + cliptop + ")", spd[speed]);;
	}	
}

// -----------------------------------------------------------------------------------------------------


// envoi à une position en pixel -------
function scrollfixat(numsc,cliptop) {   
 	SciDiv = sci[numsc];
	ScDiv = sc[numsc];
	clearTimeout(ScDiv.timeO);
    if (NavNS) {
        SciDiv.clip.top = cliptop;
        SciDiv.clip.bottom = cliptop + ScDiv.boxheight;
        SciDiv.clip.left = 0;
        SciDiv.clip.right = ScDiv.boxwidth + ScDiv.leftedge;
        SciDiv.left = ScDiv.leftedge;
        SciDiv.top = ScDiv.topedge - cliptop;
    } else {
        SciDiv.clip = "rect(" + cliptop + "px " + (ScDiv.boxwidth + ScDiv.leftedge) + "px " + (cliptop + ScDiv.boxheight) + "px 0px)";
        SciDiv.pixelLeft = ScDiv.leftedge;
        SciDiv.pixelTop = ScDiv.topedge - cliptop;
    }
	ScDiv.cliptop = cliptop;
	
	//mise à jour du scroller si necessaire
	totalsc = ScDiv.scrollheight + scbotmargin - ScDiv.boxheight;
	p = cliptop - ScDiv.boxheight ;
	clipp =  (p>0)? ( 100 * p ) / totalsc : 0;
	if (ScDiv.scroller) scrollerposp(numsc,clipp);
	
    SciDiv.visibility=vis;
}
// -----------------------------------------------------------------------------------------------------


// envoi à une position en % 0 à 100
function scrollfixp(numsc,clipp,nosclr) {   
 	SciDiv = sci[numsc];
	ScDiv = sc[numsc];
	totalsc = ScDiv.scrollheight + scbotmargin - ScDiv.boxheight;
	clipp = clipp || 0 ;
	cliptop = (clipp>0 && clipp<=100) ? ScDiv.boxheight + (totalsc * clipp) / 100 : ScDiv.boxheight;
	clearTimeout(ScDiv.timeO);
    if (NavNS) {
        SciDiv.clip.top = cliptop;
        SciDiv.clip.bottom = cliptop + ScDiv.boxheight;
        SciDiv.clip.left = 0;
        SciDiv.clip.right = ScDiv.boxwidth + ScDiv.leftedge;
        SciDiv.left = ScDiv.leftedge;
        SciDiv.top = ScDiv.topedge - cliptop;
    } else {
        SciDiv.clip = "rect(" + cliptop + "px " + (ScDiv.boxwidth + ScDiv.leftedge) + "px " + (cliptop + ScDiv.boxheight) + "px 0px)";
        SciDiv.pixelLeft = ScDiv.leftedge;
        SciDiv.pixelTop = ScDiv.topedge - cliptop;
    }
	ScDiv.cliptop = cliptop;
	nosclr = nosclr || false;
	if ( !nosclr && ScDiv.scroller) scrollerposp(numsc,clipp)
    SciDiv.visibility=vis;
}
// -----------------------------------------------------------------------------------------------------

// envoi en haut
function scrolltop(numsc) {   
	scrollfixat(numsc,sc[numsc].boxheight);
}

// envoi en bas
function scrollbot(numsc) {   
	scrollfixat(numsc,sc[numsc].scrollheight + scbotmargin);
}

// -----------------------------------------------------------------------------------------------------


// ---- capture le mousedown sur slider
function TrapMouseDown(numsc) {
	indrag = numsc;
}


// ----- capture le mouseup n'importe ou
function TrapMouseUp() {
	indrag=100;
}

// ----- capture le glissement de la souris pour slider
function TrapMouseMove(e) {
  
  if (indrag!=100) {
     numsc = indrag;
     sclr = (NavNS) ? eval("document.scbut"+numsc) : eval("document.all.scbut"+numsc+".style");
     ScDiv = sc[numsc];
     if (NavNS) {
	   xmouse = e.pageX;
	   ymouse = e.pageY;
	 } else {
	   xmouse = event.x;
	   ymouse = event.y;
	 }  
     if (ScDiv.scrollerhoriz) { 
	  	minx = ScDiv.scrollerx + ScDiv.scrollerwi/2;
	  	maxx = ScDiv.scrollerx + ScDiv.scrollerw - ScDiv.scrollerwi/2;
      	if (xmouse < minx ) spx = minx - ScDiv.scrollerwi/2; 
		else if (xmouse > maxx ) spx=maxx - ScDiv.scrollerwi/2;  
		else spx = xmouse - ScDiv.scrollerwi/2;
      	spy = ScDiv.scrollery - ScDiv.scrollerhi/2;
		spc = (100*(spx - minx + ScDiv.scrollerwi/2))/(maxx - minx); 
     } else {
	  	miny = ScDiv.scrollery + ScDiv.scrollerhi/2;
	  	maxy = ScDiv.scrollery + ScDiv.scrollerh - ScDiv.scrollerhi/2;
	    spx = ScDiv.scrollerx - ScDiv.scrollerwi/2;
      	if (ymouse < miny ) spy=miny-ScDiv.scrollerhi/2; 
		else if (ymouse > maxy ) spy = maxy - ScDiv.scrollerhi/2;  
		else spy = ymouse - ScDiv.scrollerhi/2;
		spc = (100*(spy - miny + ScDiv.scrollerhi/2))/(maxy - miny);
     } 
    
     if (NavNS) {
        sclr.left = spx;
        sclr.top = spy;
     } else {
        sclr.pixelLeft = spx;
        sclr.pixelTop = spy;
     } 
	 sclr.visibility=vis;
	 scrollfixp(numsc,spc,true);
	 if (NavNS) return false; 
   } 
   if (!NavNS) return false; 
}


// ----- détourne les évenements souris ----------
function ActivTrapMouse() {
	if (NavNS) 	document.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
	document.onmousemove = TrapMouseMove;
	document.onmouseup = TrapMouseUp;
}
