// Scripts génériques du site

var x=new Image(); x.src='img/menus/acheter.gif';	// Preload image active du menu "habiter/investir"

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


// Clic sur une bte de sélection (investir) -> déselect des autres et lance l'analyse
function change_investir(obj) {
	var id=obj.id, btes=new Array('budget','economie','effort')		// La bte "gestion" est gérée différemment
	if(id!='gestion') {
		for(var i in btes) { if(btes[i]!=id) document.getElementById(btes[i]).selectedIndex=0 }
	}
	document.getElementById('filtre').submit()
	
}

// Diaporama, les diapos doivent s'appeler diapo-1, diapo-2, ... diapo-n
// step=incrément (+1 / -1)
// si l'objet 'diapo-'+nr n'existe pas, on repasse à la première (diapo-1) 
// ou à la dernière selon le step (recherche incrémentale jusqu'à tomber sur une inexistante)
var diapo_nr=1, diapo_count=-1
function diapo(step) {
	if(diapo_count==-1) {	// calcul du nb total de diapos
		diapo_count=0
		do { diapo_count++ } while(document.getElementById('diapo-'+diapo_count))
		diapo_count--
	}
	if(diapo_count>1) {
		var old_dia=diapo_nr
		diapo_nr+=step
		if(diapo_nr>diapo_count) diapo_nr-=diapo_count
		else if(diapo_nr<1) diapo_nr+=diapo_count
		x_fade('diapo-'+old_dia,'100:0:25')
		x_fade('diapo-'+diapo_nr,'0:100:25')
	}
}


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

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

// Animation de la phrase en haut des pages
function anim(what) {
	if(what) { x_fade('coeur-de-ville','1:100:5'); what=0 }
	else { x_fade('coeur-de-ville','100:1:5'); what=1 }
	setTimeout('anim('+what+')',4600)
}

// 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(String(btn.style.opacity)!='undefined') {
			alpha0=parseFloat(btn.style.opacity,10)*100	// opacity est positionné ci-dessous même avec IE6/7/8
			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==100? '' : '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'
		}
	}
}


// scroll progressif vers l'objet id, ou vers début de page si id=_top
var x_scroll_doc1
function x_scroll_to_object(id) {
	var comp=200, iecomp=230
	var target=-1
	if(id=='_top') target=0
	else {
		var x=document.getElementById(id)
		if(x) {
		target=x.offsetTop-5
		if(target<0) target=0
		else target+=comp+(document.all? iecomp : 0)
		}
	}
 if(target>-1) {
 var doc=document.compatMode && document.compatMode=="BackCompat" ? document.body : document.documentElement
 x_scroll_doc1=navigator.userAgent.toLowerCase().indexOf('safari')>-1? document.body : doc // Forcage obligatoire avec 3.1 (525.13)
 var offset=x_scroll_doc1.scrollTop
 var down=target>=offset
 var hwin=doc.clientHeight // hauteur de la fenêtre
 var stepdiv=2000/hwin
 if(down) {
 // scroll vers le bas : si la cible est hors de portée on s'arrête au scroll maxi possible
 // nécessaire pour avoir l'effet de ralentisement
 var max_target=Math.max(x_scroll_doc1.scrollHeight,doc.clientHeight)-doc.clientHeight // scroll maxi possible
 target=Math.min(max_target,target)
 }
 var distance=Math.abs(target-offset),step=1, old_offset=offset-1
 x_do_scroll(target,distance,old_offset,offset,stepdiv,down)
 }
}

function x_do_scroll(target,distance,old_offset,offset,stepdiv,down) {
 if(distance) {
 old_offset=offset
 var step=Math.round(distance/stepdiv)
 if(step<1) step=1
 offset+=down? step : -step
 self.scrollTo(0,offset)
 offset=x_scroll_doc1.scrollTop
 distance=Math.abs(target-offset)
 if(distance && old_offset!=offset)
 setTimeout('x_do_scroll('+target+','+distance+','+old_offset+','+offset+','+stepdiv+','+down+')',30)
 }
} 


// Affichage d'une mire d'attente éventuelle puis lancement de la routine Ajax 
function sf_ajaxLoader(url0,id0,params,autocenter) {
	var delay=200					// délai avant de lancer la requête ajax
	if(!params) var params={}

	// -- affichage de l'indicateur de progression
	if(id0.indexOf('~')!=-1) {
		var x=id0.split('~'),id=x[0]
		if(!x[2]) x[2]=20			// alpha du conteneur

		var l=document.getElementById(x[1])
		if(l) {
			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
			if(autocenter==1) {	
				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;
		}
	}
	else id=id0

	// --  estompage du contenu actuel
	var i=document.getElementById(id)
	if(i) i.style.filter='alpha(opacity=0'+x[2]+')';i.style.opacity=x[2]/100;

	// -- lancement du rafraichissement du contenu, après délai éventuel
	setTimeout('sf_ajaxLoad("'+url0+'",\'sf_ajaxrefresh(x,"'+id0+'")\',\''+params+'\')',delay)

}

// Ajax loader : charge le contenu d'un fichier. 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 simplea 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) 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)
}

// ----------------------
// post fonction après réception du contenu en Ajax : MAJ du contenu
function sf_ajaxrefresh(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;		
	}	
	document.getElementById(id0).innerHTML=r.responseText
	//  MAJ de la photo zoom, car étant ratachée au body elle n'est pas mise à jour dans le DIV ajax...
	var x=document.getElementById('photos-0'),		// <div> conteneur de l'ancienne photo
	t=document.getElementById('book-image')
	if(x && t) {
		var c=x.innerHTML.split('<img')				// FF, Safari, GG Chrome
		if(!c[1]) c=x.innerHTML.split('<IMG')		// IE6, Opera
		var i= c[1]? c[1].indexOf('>') : -1
		if(i!=-1) {
			c[1]=c[1].substring(i+1)
			x.innerHTML=c[0]+'<img src="'+t.src+'" alt="" border="0">'+c[1]
		}
	}
	
}


