 /*	==========================================================
	Filename		: sa_lib.js
	Author			: Copyright 2001-2003 La Mire(www.lamire.com)
	Created			: vendredi 29 novembre 2002 15:08:26
	Last Updated	: mercredi 15 janvier 2003 13:52:19
	Comments		: DHTML API
	==========================================================*/

d=document;
ns4=(d.layers)?1:0;
ie=(d.all)?1:0;
op=navigator.userAgent.toLowerCase().indexOf('opera')!=-1;
dom=(d.getElementById)?1:0;
ns6=(dom&&!ie)?1:0;
function gE(e,f){if(ns4){f=(f)?f:self;var V=f.document.layers;if(V[e])return V[e];for(var W=0;W<V.length;)t=gE(e,V[W++]);return t;}if(d.all)return d.all[e];return d.getElementById(e);}
function sE(e){if(ns4)e.visibility='show';else e.style.visibility='visible';}
function hE(e){if(ns4)e.visibility='hide';else e.style.visibility='hidden';}
function sZ(e,z){if(ns4)e.zIndex=z;else e.style.zIndex=z;}
// set x,y pos
function sX(e,x){if(ns4)e.left=x;else if(op)e.style.pixelLeft=x;else e.style.left=x;}
function sY(e,y){if(ns4)e.top=y;else if(op)e.style.pixelTop=y;else e.style.top=y;}
function moveto(e,p){sX(e,p.x);sY(e,p.y)}// move to a point
// get height and width
function gW(e){if(ns4)return e.clip.width;else return(op)?e.style.pixelWidth:parseInt(e.style.width);}
function gH(e){if(ns4)return e.clip.height;else return(op)?e.style.pixelHeight:parseInt(e.style.height);}
// get x,y and pt pos
function gX(e){if(ns4)return e.left;else return(op)?e.style.pixelLeft:e.style.left;}
function gY(e){if(ns4)return e.top;else return(op)?e.style.pixelTop:e.style.top;}
function gPT(e){return new pt(gX(e),gY(e));}
// clip
function sC(e,t,r,b,x){if(ns4){X=e.clip;X.top=t;X.right=r;X.bottom=b;X.left=x;}else e.style.clip='rect('+t+' '+r+' '+b+' '+x+')';}
// write
function wH(e,h){if(ns4){Y=e.document;Y.write(h);Y.close();}if(e.innerHTML)e.innerHTML=h;}
function pt(x,y){this.x=x;this.y=y;}// défini un objet point
// trouve la position absolue d'un élément dans la page retourne un objet point
function eltPos(o){var x,y;x=0;y=0;while(o.offsetParent){x+=o.offsetLeft;y+=o.offsetTop;o=o.offsetParent;}return new pt(x,y);}
// renvoie la taille du document dans un objet point - attention les valeurs n'existent que si le doc est complètement chargé.
function wsize(){var w,h;w=(ie)?d.body.offsetWidth-20:d.innerWidth;h=(ie)?d.body.offsetHeight-5:d.innerHeight;return new pt(w,h)}
  //centre du document : this.x50=this.x2/2;this.y50=this.y2/2;
// renvoie les valeurs de scroll top et left dans un objet point.
function wscroll(){
	var w,h;
	if (ie){h=d.body.scrollTop;w=d.body.scrollLeft;}else{h=window.pageYOffset;h=window.pageXOffset;}
	return new pt(w,h);
}
function sign(x,y){return(x<y)?1:-1};
function px(n){return n+(!ns4&&!op?'px':0)};
// ---------- END DHTML API


// =================================== gestion de la barre de menu ========================
var timerID = null;
var menu = Array();
cmenu = null; // menu ouvert
var delay=500;
var offsetx=100;
var offsety=20;

// fonctions appelées par les panels
function panelout(){timerID=setTimeout('closeall()',delay);}
function panelover() {	clearTimeout(timerID);}
// fonctions appelées par les handlers
function handout(){	timerID=setTimeout('closeall()',delay);}
function handover(hand,drop){
	var m,s,w,p,a,mw,scr;
	m=gE(drop);s=menu[drop];closeall();  // hide all menus first
	if (!s){
		p=eltPos(hand);// positioning
		w=wsize(); // taille de la fenêtre
		p.y+=offsety;
		// p.x+=offsetx; // option offset fixe
		// option centrer sous le handler
		p.x+= offsetx-(gW(m)/2);
		if(p.x<0)p.x=0;// ajuste la position à gauche
		moveto(m,p);
		sE(m); // show
		menu[drop]=1; // set status
	}
	clearTimeout(timerID);
}

function closeall(){for (a in menu){hE(gE(a));menu[a]=0;}}  // hide all menus
// =================================== fin gestion de la barre de menu ========================
// =============== "hilite" sur les cellules de tableau (DOM: IE5+ NS6+)
function mmOvr(o,s){if(o.className){o.className=s;o.style.cursor=(ns6)?'pointer':'hand';}}
function mmOut(o,s){if(o.className){o.className=s;o.style.cursor='default';}}
function mmClk(s){document.location.href=s;}
// =================================== gestion collapse (DOM: IE5+ NS6+) ========================
// img as object, panel as string
function collapse(img,panel){
	var s;
	// test si ouvert ou fermé
	m=gE(panel);
	s=(m.style.display=='block')?1:0;
	m.style.display=(s)?'none':'block';
	img.src=(s)?icnClosed:icnOpen;
	// alert ("x :"+img.parentNode.className);
	img.parentNode.className=(s)?cssClosed:cssOpen;
}

// =================================== horizontal and vertical scroll only. =====================
/*
	e : element object
	d : coord destination
	o : 'h' || 'v' vertical or horizontal scroll
	sp:speed
	funcCall : fonction appelée à la fin du scroll (optionnel)
	s : coordonnée de départ (optionnel)
*/
var sliders= new Array(); // (global) keep handler to sliders objects
var oslide = null;
// use window.clearTimeout(oslide); to stop sliding an element.
function slide(e,d,o,sp,funcCall,s){
	var num;
	if(typeof(e)!='object'){num=e;e=sliders[num]; e.sliding=true;}
	else{num=e.id;sliders[num]=e;if(e.sliding)return}
	
	s=(o=='h')?s||parseInt(e.left||e.style.left||e.style.pixelLeft):s||parseInt(e.top||e.style.top||e.style.pixelTop);
	si=sign(s,d); s+=si*sp; if(s>d*si)s=d; 
	if(o=='h')sX(e,px(s));else sY(e,px(s));
	if (s==d){
		e.sliding=false;if(funcCall!='')eval(funcCall);
	}else {
		setTimeout('slide("'+num+'",'+d+','+d+','+sp+',"'+funcCall+'",'+s+')', 30);
	}
}
