// Scripts génériques du site

var nc_nav={ which:'', majVersion:0, iPhone:false }
var	x=navigator.userAgent.toLowerCase(),
	isIE=x.indexOf('msie '),
	isFF=x.indexOf('firefox/'),
	isOP=x.substring(0,6)=='opera/',
	isCH=x.indexOf('chrome/'),
	isSA=(isCH==-1? x.indexOf('safari/') : -1)	// Chrome signe Chrome ET Safari
nc_nav['iPhone']=x.indexOf('iphone;')!=-1
if(isSA!=-1 || isOP) voffset=x.indexOf('version/')
if(isIE!=-1) { nc_nav['which']='IE'; nc_nav['majVersion']=parseInt(x.substring(isIE+5)) }
else if(isFF!=-1) { nc_nav['which']='FF'; nc_nav['majVersion']=parseInt(x.substring(isFF+8)) }
else if(isOP) { nc_nav['which']='OP'; nc_nav['majVersion']=parseInt(x.substring(voffset+8)) }
else if(isSA!=-1) { nc_nav['which']='SA'; nc_nav['majVersion']=parseInt(x.substring(voffset+8)) }
else if(isCH!=-1) { nc_nav['which']='CH'; nc_nav['majVersion']=parseInt(x.substring(isCH+7)) }

// chargeur de fonction onresize
function addResizeEvent(func) {
  var oldonresize = window.onresize;
  if (typeof window.onresize != 'function') {
    window.onresize= func;
  } else {
    window.onresize = function() {
      if (oldonresize) oldonresize();
      func();
    }
  }
}


// Multiple onload function created by: Simon Willison
// http://simonwillison.net/2004/May/26/addLoadEvent/
// Usage : addLoadEvent( function() { go_motion() } )
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}


// converti un texte en text HTML
// nl vrai -> rempalce les \n par des saut de ligne, sion -> espaces
function convert4html(x,nl) {
	return unescape(x).replace('<','&lt;').replace('\n',nl? '<br />' : ' ')
}

// Détermination du navigateur client
var nc_nav={ which:'', majVersion:0 }
var	x=navigator.userAgent.toLowerCase(),
	isIE=x.indexOf('msie '),
	isFF=x.indexOf('firefox/'),
	isOP=x.substring(0,6)=='opera/',
	isCH=x.indexOf('chrome/'),
	isSA=(isCH==-1? x.indexOf('safari/') : -1)	// Chrome signe Chrome ET Safari
if(isSA!=-1 || isOP) voffset=x.indexOf('version/')
if(isIE!=-1) { nc_nav['which']='IE'; nc_nav['majVersion']=parseInt(x.substring(isIE+5)) }
else if(isFF!=-1) { nc_nav['which']='FF'; nc_nav['majVersion']=parseInt(x.substring(isFF+8)) }
else if(isOP) { nc_nav['which']='OP'; nc_nav['majVersion']=parseInt(x.substring(voffset+8)) }
else if(isSA!=-1) { nc_nav['which']='SA'; nc_nav['majVersion']=parseInt(x.substring(voffset+8)) }
else if(isCH!=-1) { nc_nav['which']='CH'; nc_nav['majVersion']=parseInt(x.substring(isCH+7)) }


// 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
// Suppoe 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
																			// la chaine de réponse a été utilisée par le module Ajax pour éviter les pb de codage '§' de Perl
		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='go-recap.php'	// Réaffichage du caddie
	}
}


// fade in/out. Ne nécessite qu'une unique image
// p=transparence init:transparence finale:step (delta transparence sur 50 msec)
// t=référence vers l'objet où se trouve btn_id : rien = self, 1=top
if(!x_IDmem) var x_IDmem=new Array
if(!x_status) var x_status=new Array
function x_fade(btn_id,p,t,alpha) {
	if(typeof(t)=='undefined') var t=''
	if(t=='') var btn=document.getElementById(btn_id)
	else var btn=top.document.getElementById(btn_id)
	if(typeof(alpha)=='undefined' && x_IDmem[btn_id]) clearTimeout(x_IDmem[btn_id])
	if(!p && p!='0') var px=new Array; else px=p.split(':')
	if(!px[0] && px[0]!='0') px[0]=100	// alpha de départ
	if(!px[1]) px[1]=50		// alpha de fin
	if(!px[2]) px[2]=10		// step
	px[2]=Math.abs(parseInt(px[2]))
	px[0]=parseInt(px[0]);px[1]=parseInt(px[1])
	if(!alpha && alpha!='0') var alpha=px[0]	// premier passage
	if(px[0]>px[1]) px[2]=-px[2]
	if(btn) {
		if(btn.style.opacity!='') {
			alpha0=btn.style.opacity*100	// IE6/7 : opacity est positionné ci-dessous quel que soit le navigateur
			if((px[2]<0 && alpha0<=px[1]) || (px[2]>0 && alpha0>=px[1])) alpha=px[1]
			else if((px[2]<0 && alpha0<alpha) || (px[2]>0 && alpha0>alpha)) alpha=alpha0
		}
		btn.style.filter='alpha(opacity='+alpha+')'
		btn.style.opacity=alpha/100
		btn.style.display='inline'
		var end=px[2]<0 ? alpha<=px[1] : alpha>=px[1]
		if(!end) {
			alpha+=px[2]
			if((px[2]<0 && alpha<=px[1]) || (px[2]>0 && alpha>=px[1])) alpha=px[1]
			x_IDmem[btn_id]=setTimeout('x_fade("' + btn_id + '","'
			+ p + '","'+t+'",'+alpha+')'
			, 50)
		}
		else {
			x_status[btn_id]=alpha? 1:0
			if(alpha==0) btn.style.display='none'
		}
	}
}



// 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
}

// 
function sf_prodrefresh(r,id0) {
	var r=ml_getResponse(r)
	document.getElementById(id0).innerHTML=r[1]
	for(var i in r[0]) eval(i+'="'+r[0][i]+'"')					// récup des paramètres retournés avant le contenu
	if(prod_preset) tab_changeto('tab2',true)					// mode modification -> affiche directement la demande de comptage plutôt que les critères
	if(typeof(addReflections)=='function') addReflections()		// ajoute les réflexions au contenu AJAX chargé
}
