 /*	==========================================================
	Filename		: core.js
	Author			: Copyright 2001-2003 La Mire(www.lamire.com)
	Created			: mercredi 8 octobre 2003 16:47:41
	Last Updated	: mercredi 8 octobre 2003 16:47:41
	Comments		: 
	
	DOM API - mainly from http://timmorgan.info/1k/
	bibliothèque de base.
	
	==========================================================*/

var d=document;
var ua = navigator.userAgent;
var ns4=(d.layers)?1:0;
var op = /opera [56789]|opera\/[56789]/i.test(ua); // opera version 5+
var ie = !op && /MSIE/.test(ua);
var dom=d.getElementById;
var ns6=(dom&&!ie)?1:0;
var mac=(ua.indexOf("Mac")!=-1);
var macie5 = ie && mac && /MSIE 5/i.test(ua); // IE mac 5
// no support for ns4 !
if (ns4) alert ("le support de Netscape 4 n'est pas assure.");
// 1K dom original
function gE(e){return d.getElementById(e)};
function cE(t){return d.createElement(t||'div')};
function aC(e,p){return (p||d.body).appendChild(e)};
function sE(e){e.style.visibility='visible'};
function hE(e){e.style.visibility='hidden'};
function sZ(e,z){e.style.zIndex=z};
function sX(e,x){e.style.left=px(x)};
function sY(e,y){e.style.top=px(y)};
function sW(e,w){e.style.width=px(w)};
function sH(e,h){e.style.height=px(h)};
function sC(e,t,r,b,l){e.style.clip='rect('+t+' '+r+' '+b+' '+l+')'};
function wH(e,h){e.innerHTML=h};
function sB(e,b){e.style.background=b};
function sign(x,y){return(x<y)?1:-1};
function px(n){return n+'px'};

// additions
function moveto(e,p){sX(e,p.x);sY(e,p.y)}
function gW(e){return(op)?e.style.pixelWidth:parseInt(e.style.width);}
function gH(e){return(op)?e.style.pixelHeight:parseInt(e.style.height);}
function gX(e){return(op)?e.style.pixelLeft:e.style.left;}
function gY(e){return(op)?e.style.pixelTop:e.style.top;}

function pt(x,y){this.x=x;this.y=y;}
function gPT(e){return new pt(gX(e),gY(e));}
// retourne la position absolue d'un objet dans la page (testé : win : Mozilla 1.5, NS6.2, IE5.0 et Mac : IE5.1)
function eltPos(o){
	var x=0,y=0;
	if (macie5){  // macie5
		var lastOffset=0;
		while(o){
			if(o.leftMargin){x+=parseInt(o.leftMargin);y+=parseInt(o.topMargin);}
			if((o.offsetLeft != lastOffset) && o.offsetLeft){x+=parseInt(o.offsetLeft);y+=parseInt(o.offsetTop);}
			if(o.offsetLeft!=0) lastOffset = o.offsetLeft;
			o=o.parentElement;
		}
	}else{ // other os
		if(o.x){x=o.x;y=o.y}
		else{while(o.offsetParent){x+=o.offsetLeft;y+=o.offsetTop;o=o.offsetParent;}}
	}
	return new pt(x,y);
}
// retourne le rectangle contenant d'un objet
function eltRect(e) {
	var c=eltPos(e);return{left:c.x,top:c.y,bottom:c.y+e.offsetHeight,right:c.x+e.offsetWidth};
}
// retourne les dimensions intérieures de la fenêtre du navigateur
function winSize() {
	var w=0,h=0;
  if(op){w=window.innerWidth;h=window.innerHeight;}
  else if(d.documentElement && d.documentElement.clientWidth){w=d.documentElement.clientWidth;h=document.documentElement.clientHeight;}
  else if(d.body && d.body.clientWidth){w=d.body.clientWidth;h=document.body.clientHeight;}
  else if(xDef(window.innerWidth,window.innerHeight,d.height)){
    w=window.innerWidth;h=window.innerHeight;
    if(d.height>window.innerHeight) w-=16;if(d.width>window.innerWidth) h-=16;
  }
  return {'w':w,'h':h};
}
function xDef() {
  for(var i=0;i<arguments.length;++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}
// 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);
}
// events (DOM only)
function addEvt(e,ev,f){if(ie)e.attachEvent("on"+ev,f);else e.addEventListener(ev,f,true);}
function remEvt(e,ev,f){if(ie)e.detachEvent("on"+ev,f);else e.removeEventListener(ev,f,true);}
function stopEvt(ev){
if(ie){window.event.cancelBubble=true;window.event.returnValue=false;}
else{ev.preventDefault();ev.stopPropagation();}}
function getElement(ev){return(ie)?window.event.srcElement:ev.currentTarget;}
function getTargetElement(ev){return(ie)?window.event.srcElement:ev.target;}
// =================================== 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);
	}
}
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;
}
// ---------- END DOM API