// SITE DBI
// 11/10/2003 - Net Créateurs (www.net-createurs.com)
// BIBLIO JAVASCRIPT GENERALE

var _mnucli;
function active(nom,t,d,c) {
	if(!d) {
		var n = self.document.images[nom], x='',e='';
		if(!n && self.document.layers) {
			var i=0;
			while(!n && i<document.layers.length) {
				x=document.layers[i].document.layers;
				if(!x.length) n=document.layers[i].document.images[nom];
				else {
					var j=0;
					while(!n && j<document.layers[i].document.layers.length) {
						n=document.layers[i].document.layers[j++].document.images[nom];
					}
				}
				i++;
			}
		}
		if (n) {
			var img = n.src;
			if(t.charAt(0) == '=') t=t.substring(1);
			else {
				x=get(img,'name');
				var i=x.lastIndexOf('_');
				if(i>-1) {
					e=x.substring(i+1);
					x=x.substring(0, i+1);
				}
			}
			var add=get(img,'path') + x + t + '.' + get(img,'ext');
			if(c && e) {
				var z=c.toString().split(':')
				if(!z[1]) z[1]=100;
				if(!z[2]) z[2]=100;
				var tempo= (z[0]%2 ? z[2] : z[1]);
				z[0]-=1;
				if(z[0]>0) _mnucli=setTimeout("active('" + nom + "','" + e + "','','" + z.join(':') + "')",tempo)
			}
			else if(_mnucli) clearTimeout(_mnucli);
			n.src= add
		}
	}
	else setTimeout("active('" + nom + "','" + t + "','','" + c + "')",d);
}



var imgload=0;
var image=new Array;
function img_load(nom,t) {
	var n = self.document.images[nom], x='';
	if(!n && self.document.layers) {
		var i=0;
		while(!n && i<document.layers.length) n= document.layers[i++].document.images[nom];
	}
	if(n) {
		var img = n.src;
		if(t.charAt(0) == '=') t=t.substring(1);
		else {
			x=get(img,'name');
			var i=x.lastIndexOf('_');
			if(i>-1) x=x.substring(0, i+1);
		}
		image[imgload]= new Image;
		image[imgload++].src= get(img,"path") + x + t + '.' + get(img,'ext');
	}
}



function get(nom,t) {
	var n="", i=nom.lastIndexOf("."), j=nom.lastIndexOf("/");
	if(i==-1) i=nom.length;
	if (t=='path') n=nom.substring(0,j) + '/';
	else if(t=='fullname') n=nom.substring(j+1);
	else if(t=='name') n=nom.substring(j+1,i);
	else if(t=='ext') n=nom.substring(i+1);
	i=n.indexOf('?'); if(i>-1) n=n.substring(0,i);
	i=n.indexOf('#'); if(i>-1) n=n.substring(0,i);
	return n;
}

// ......... Scroll v 2.1 - 12 nov 2008 ...........
// (c) net-Créateurs - www.net-createurs.com
// scroll smooth vers le haut de la page (to_top())
// ou vers le bas de page (to_bottom())
function scroll_val() {
	var r=-1;
	if(document.documentElement) r=document.documentElement.scrollTop	// IE6 / FF3 / Opera : OK. Safari/PC retourne tj 0
	if(r==0 && document.body) r=document.body.scrollTop;				// Safari PC : OK
	return(r)
}

function do_scroll (x,step,m) {
	var r=scroll_val();
	if(r>0) {
		self.scrollBy(0,-step);
		if(r>m) step=step*x;
		else step=step/x;
		if(step<10) step=10;
		setTimeout("do_scroll(" + x + "," + step + "," + m + ")",30)	
	}
	else if(r==-1) self.scrollTo(0,0);	// le navigateur ne sait pas retourner l'offset Y -> direct en haut de page
}

function to_top(x) {
	if(!x) var x=2;				// facteur d'accélération
	else if(x<1) x=1;
	if(navigator.appVersion.toLowerCase().indexOf('safari')>-1) x=x*1.5		// Safari PC est un peu lent lors du scroll
	var r=scroll_val();
	var m=Math.round(r*0.8);	// Seuil de décélération (80% de la hauteur de la fenêtre)
	var step=r/50;				// Step initial
	if(step<10) step=10;		// Step mini
	setTimeout("do_scroll(" + x + "," + step + "," + m + ")",30)
}


// Réinjection d'une transaction dans le caddie. x.responseText contient le caddie "système" de la fiche à réinjecter, en retour d'un erequête SQL
// Suppose que les modules caddie et cookie soient chargés
function putback(x) {
	if(x.responseText) {
		cook=lect_cook(true)			// Attention : variable globale
		var i,j,f,c,x,ok,content=unescape(x.responseText).split('::../')	// "::../" = séparateur de fiches, en théorie '::' seulement, mais le format natif regorge de ":" succesifs
		for(j in content) {
			c=content[j];
			if(j!='0') c='../'+c		// restitue le ../ effacé par split
			x=c.split('§'), ok=true
			f=Cde_dispo();				// Nr de la 1ère fiche dispo dans le caddie
			for(i in x) ok=ok && Cde_enr(f,Cde_db[i].nom,x[i])
			if(ok) memo_cook(cook)
		}
		self.document.location='../cgi-bin/go_recap.cgi'	// Réaffichage du caddie
	}
}


///////////   FONCTIONS AJAX   ////////////


// Ré-affichage d'un DIV en Ajax, avec gestion d'une mire d'attente 
// Affichage d'une mire d'attente éventuelle puis lancement de la routine Ajax 
function sf_ajaxLoader(url0,id0,params) {
	var delay=1
	if(!params) var params={}
	if(id0.indexOf('~')!=-1) {
		// affichage de l'indicateur de progression et estompage de la fenêtre std
		var x=id0.split('~'),id=x[0]
		if(!x[2]) x[2]=20		// alpha du conteneur
		var i=document.getElementById(id),l=document.getElementById(x[1])
		if(i && l) {
			// centrage de l'image de progression
			l.style.filter='alpha(opacity=0)';l.style.opacity=0;l.style.display='block'		// permet de lire la taille de l'image mais sans la rendre apparente
			l.style.top=Math.floor((i.offsetHeight-l.offsetHeight)/2)+'px'
			l.style.left=Math.floor((i.offsetWidth-l.offsetWidth)/2)+'px'
			l.style.filter='alpha(opacity=100)';l.style.opacity=1;
			i.style.filter='alpha(opacity='+x[2]+')';i.style.opacity=x[2]/100;
		}
	}
	setTimeout('sf_ajaxLoad("'+url0+'",\'sf_refresh(x,"'+id0+'")\',\''+params+'\')',delay)
}


// --------------------------
// Ajax loader : chargement d'une page. Pour préserver une compatibilité maxi malgré l'utilisation du mode POST,
// qui évite l'écueil du cache avec IE6, et le pb de la conversion UTF8, ce script ajax ne devrait lancer que des scripts PHP 
// qui reverront en échange un contenu UTF8'isé, après quelques checks simples de sécurité
// Ce loader appelle la fonction 'func' passée en argument une fois le chargement terminé
function sf_ajaxLoad(file_url,func,params) {
	var x = false;
	if (window.XMLHttpRequest) x = new XMLHttpRequest()
	else if (window.ActiveXObject) {
		try { x = new ActiveXObject("Msxml2.XMLHTTP") }
		catch (e) {
			try { x = new ActiveXObject("Microsoft.XMLHTTP") }
			catch (e) {}
	 	}
 	}
//	en cas d'erreur de sécurité, de ficher pas trouvé etc. le status n'est pas égal à 200
//	if(x) x.onreadystatechange=function() { if(x.readyState == 4 && x.status == 200) eval(func) }
	if(x && func) x.onreadystatechange=function() { if(x.readyState == 4) eval(func) }
//	x.open("GET",file_url, true); 										// GET avec IIs6, true -> mode asynchrone
	x.open("POST",file_url, true); 										// POST évite le cache (pas GET), true -> mode asynchrone

	// Header indispensable pour le mode POST
	if(!params) var params='sf_form=true'
	x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//	x.setRequestHeader("Content-length", params.length);				// params.length est tj undefined -> blocage avec IE6...
	x.setRequestHeader("Connection", "close");
//	x.overrideMimeType("text/html; charset=ISO-8859-1")					// OK FF IE7 Safari, mais pas IE6 -> il vaut mieux convertir en UTF8 à la source
//	x.setRequestHeader("Content-Type", "text/html; charset=ISO-8859-1")	// Absolument aucun effet
//	x.send(null);														// en POST, null est censé être remplacé par un formulaire à  soumettre...
	x.send(params)
}


// ----------------------
// MAJ d'un contenu en AJAX
function sf_refresh(r,id0) {
	if(id0.indexOf('~')!=-1) {
		var x=id0.split('~'),id0=x[0]
		var i=document.getElementById(id0),l=document.getElementById(x[1])
		l.style.display='none';
		i.style.filter='alpha(opacity=100)';i.style.opacity=1;		
	}
	var r=ml_getResponse(r)
	document.getElementById(id0).innerHTML=r[1]
	for(var i in r[0]) eval(i+'="'+r[0][i]+'"')
	if(typeof(addReflections)=='function') addReflections()					// ajoute les réflexions au contenu AJAX chargé
	if(typeof(x_update)=='function') x_update('scroll2-slider',0,1,10000)	// MAJ du slider éventuel
}

// extrait les éventuels paramètres imbriqués en début de contenu Ajax
// forme : "::param=valeur:param=valeur::end::code HTML"
// Retourne ret[0]=tableau des paramètres trouvés, ret[1]=contenu HTML
function ml_getResponse(r) {
	var ret=new Array(new Array(),'')
	if(r.responseText) {
		var j=0,i=0,k,key
		if(r.responseText.substring(0,2)=='::') {
			do {
				j=i+2
				i=r.responseText.indexOf('::',j)
				if(i!=-1) {
					x=r.responseText.substring(j,i)
					k=x.indexOf('=')
					if(k==-1) { if(x!='end') ret[0][x]='' }
					else ret[0][x.substring(0,k)]=x.substring(k+1)
				}
			}
			while(i!=-1 && !ret[0]['end'])
		}
		ret[1]=r.responseText.substring(j)
	}
	return ret
}
