// Séquencement / animation d'une page HTML
// v1.0a du 4 sept 2008
// v1.1 du 17 avril 2009 : ajout de start_delay = délai avant démarrage.
//	Permet le lancement simultané de groupes d'animation dont chaquez élément est très légèrement décalé par rapport au précédent

var seq=0,step=15,interval=30
var ok_seq=false
function go_motion() { if(!ok_seq) sf_seq() }
setTimeout('go_motion',3000)	// sécurité


// Déplacement horizontal/vertical de l'objet id avec transparence progressive
// *********************************************
var sf_memstyles=Array()
function sf_movseq(id,start_delay,end_delay,xi,yi,acc,x0,y0,sret,o) {
	if(!end_delay) var end_delay=interval
	if(!xi) var xi=0
	if(!yi) var yi=0
	if(!acc) var acc=3
	if(!x0) var x0=0
	if(!y0) var y0=0
	if(!o) var o=0
	if(typeof(sret)=='undefined') var sret=true		// true -> revenir au séquenceur à la fin
	if(typeof(start_delay)!='undefined' && start_delay)
		setTimeout('sf_movseq("'+id+'",0,'+end_delay+','+xi+','+yi+','+acc+','+x0+','+y0+','+sret+','+o+')',start_delay)
	else {
		var x=document.getElementById(id)
		if(x) {
			var t,a,xs,ys
			if(!o) {	// Position x/y initiale inconnue (1er passage) -> on va la lire
				if(!x.style.display || x.style.display=='none') {
					// Avec FF entre autre, il faut "afficher" l'objet pour pouvoir lire sa position
					// on le rend donc invisible (alpha=0) mais affiché (display=block)
					x.style.filter='alpha(opacity=0)'
					x.style.opacity=0
					x.style.display='block'
					o=1
				}
				if(!x0) { x0=x.style.left;if(!x0) x0=0 }
				if(!y0) { y0=x.style.top;if(!y0) y0=0 }
				if(!x0 && !y0) {
					try {
						if(x.currentStyle) {
							x0=x.currentStyle.left
							y0=x.currentStyle.top
						}
						else {
							x0=document.defaultView.getComputedStyle(x, '').getPropertyValue('left')
							y0=document.defaultView.getComputedStyle(x, '').getPropertyValue('top')
						}
					}
					catch(e) { }
				}
				if(x0) x0=parseInt(x0.substr(0,x0.length-2))
				if(y0) y0=parseInt(y0.substr(0,y0.length-2))
				sf_memstyles[id]={ x:x0+'px','y':y0+'px','t':Math.max(Math.abs(xi),Math.abs(yi))/2 }
			}
			var xia=Math.abs(xi),yia=Math.abs(yi)
			a=Math.max(xia,yia), t=100*(1-Math.sqrt(a/sf_memstyles[id]['t']))
			if(t<2) t=2
			x.style.left=(x0+xi)+'px'
			x.style.top=(y0+yi)+'px'
			x.style.filter='alpha(opacity='+t+')'
			x.style.opacity=t/100
			if(!o) { x.style.display='block'; o=1}
			if(xi || yi) {
				if(xia>0) { xia-=1+xia*(xia/a)/acc; if(xia<0) xia=0; xi=xi<0? -xia: xia }
				if(yia>0) { yia-=1+yia*(yia/a)/acc; if(yia<0) yia=0; yi=yi<0? -yia: yia }
				setTimeout('sf_movseq("'+id+'",'+start_delay+','+end_delay+','+xi+','+yi+','+acc+','+x0+','+y0+','+sret+','+o+')',30)
			}
			else if(sret) { setTimeout('sf_seq()',end_delay) }
		}
	}
}


// appararition en transparence de l'objet id
// ******************************************
function sf_alphaseq(id,start_delay,end_delay,step1,acc,end,sret,t) {
	if(!end_delay) var end_delay=interval
	if(!step1) var step1=step
	if(!acc) var acc=1
	if(typeof(sret)=='undefined') var sret=true		// true -> revenir au séquenceur à la fin
	if(typeof(end)=='undefined') var end=100		// % alpha final

	if(typeof(start_delay)!='undefined' && start_delay)
		setTimeout('sf_alphaseq("'+id+'",0,'+end_delay+','+step1+','+acc+','+end+','+sret+')',start_delay)
	else {
		if(!t) var t=0
		var x=document.getElementById(id)
		if(x) {
			t+=step1;
			if(acc>1) step1=step1*acc
			if(t>=end) t=end
			x.style.filter='alpha(opacity='+t+')';x.style.opacity=t/100;x.style.display='block'
		} else { t=end; end_delay=1 }
		if(t<end) setTimeout('sf_alphaseq("'+id+'",'+start_delay+','+end_delay+','+step1+','+acc+','+end+','+sret+','+t+')',interval)
		else if(sret) { setTimeout('sf_seq()',end_delay) }
	}
}

// apparition simple, sans transparence
// nécessaire avec IE6/7 où la transparence pose pb avec les textes en gras
function sf_showseq(id,start_delay,end_delay,sret) {
	if(!end_delay) var end_delay=interval
	if(typeof(sret)=='undefined') var sret=true		// true -> revenir au séquenceur à la fin
	if(typeof(start_delay)!='undefined' && start_delay)
		setTimeout('sf_alphaseq("'+id+'",0,'+end_delay+','+sret+')',start_delay)
	else {
		var x=document.getElementById(id)
		if(x) x.style.display='block'
		if(sret) setTimeout('sf_seq()',end_delay)
	}
}



// Changement de couleur de depart vers fin (forme : RRGGBB en hexa)
// *****************************************************************
function sf_rgbseq(id,depart,fin,end_delay,step1,acc,t) {
	if(!end_delay) var end_delay=interval
	if(!t) var t=0
	var x=document.getElementById(id),i,d,f
	if(x) {
		if(!step1) var step1=step	// step de tranparence
		if(!acc) var acc=1
		t+=step1;
		if(acc>1) step1=step1*acc
		if(t>=100) t=100
		r='#'
		for(i=0;i<5;i+=2) r+=sf_toHex(Math.floor(
			parseInt(depart.substr(i,2),16)*(1-t/100)
		  + parseInt(fin.substr(i,2),16)*t/100
		))
		x.style.color=r;x.style.display='block'
	} else { t=100; end_delay=1 }
	if(t<100) setTimeout('sf_rgbseq("'+id+'","'+depart+'","'+fin+'",'+end_delay+','+step1+','+acc+','+t+')',interval)
	else { setTimeout('sf_seq()',end_delay) }
}

var sf_hexa={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:'A',11:'B',12:'C',13:'D',14:'E',15:'F' }
function sf_toHex(i) {
	if (i < 0) return('00')
	else if (i > 255) return('FF')
	else return ''+sf_hexa[Math.floor(i/16)] + sf_hexa[Math.floor(i%16)]
}


// clignotement d'un objet
// ***********************
// a_on / a_off=transparence dans l'état on et off
// t_on / t_off=durée d'afficahge en msec pour on et off
// t_repeat=nb de clignotements (attention : off puis on = 2 clignotements)
function sf_flashseq(id,a_on,t_on,a_off,t_off,t_repeat,end_delay,sret,o,t) {
	if(!end_delay) var end_delay=interval
	if(!t) var t=0
	if(typeof(sret)=='undefined') var sret=true
	if(!o) var o=1	// 1=allumer, 0=éteindre
	var x=document.getElementById(id).style;
	t=o>0? a_on: a_off	// transparence
	o=-o
	x.filter='alpha(opacity='+t+')';x.opacity=t/100;x.display='block'
	t_repeat--
	if(t_repeat>0) setTimeout('sf_flashseq("'+id+'",'+a_on+','+t_on+','+a_off+','+t_off+','
		+ t_repeat+','+end_delay+','+sret+','+o+','+t+')',o>0?t_off:t_on)
	else if(sret) setTimeout('sf_seq()',end_delay)
}


// apparition de texte façon machine à écrire
// ******************************************
// lit le innerHTML, puis le remplace élément par élément.
// les tags <xxx> sont préservés, ils comptent comme 1 caractère
// les sauts de ligne également
var tpr_speed=50	// vitesse d'apparition
function sf_typewriter(id,end_delay,speed) {
	if(!end_delay) var end_delay=tpr_speed
	if(!speed) var speed=tpr_speed
	var x=document.getElementById(id)
	if(x) {
		txt=x.innerHTML
//		if(id.substr(0,7)=='reponse') alert(txt)
		x.innerHTML=''
		x.style.display='block'
		sf_tpr(id,txt,end_delay,speed)
	}
}

function sf_tpr(id,txt,end_delay,speed,l) {
	if(!l) var l=0
	var x=document.getElementById(id),c,i,txt=txt.replace(/%10/g,'\n')
	if(l<txt.length) {
		c=txt.charAt(l++)
		if(c=='<') {
			i=txt.indexOf('>',l)
			if(i!=-1) { c=txt.substr(l-1,i-l+2);l=i+1 }
		}
		x.innerHTML+=c
		setTimeout('sf_tpr("'+id+'","'+txt.replace(/\n/g,'%10').replace(/"/g,'\\"')+'",'+end_delay+','+speed+','+l+')',speed)
	} else setTimeout('sf_seq()',end_delay)
}


// alpha sur multiobjets
// *********************
// Les objets sont appelés xxx-0, xxx-1 etc. (où xxx=id)
var sf_seqnb=0
function sf_malphaseq(id,end_delay,delay2,step1,acc,t) {
	if(!end_delay) var end_delay=''
	if(!delay2) var delay2=interval
	if(!step1) var step1=''
	if(!acc) var acc=0
	if(!t) var t=0
	var n=id+'-'+(sf_seqnb++)
	if(document.getElementById(n)) { seq--;sf_alphaseq(n,end_delay,step1,acc,true,t) }
	else { sf_seqnb=0; setTimeout('sf_seq()',delay2) }
}

// RGB sur multiobjets
// *******************
function sf_mrgbseq(id,depart,fin,end_delay,delay2,step1,acc,t) {
	if(!end_delay) var end_delay=''
	if(!delay2) var delay2=interval
	if(!step1) var step1=''
	if(!acc) var acc=0
	if(!t) var t=0
	var n=id+'-'+(sf_seqnb++)
	if(document.getElementById(n)) { seq--;sf_rgbseq(n,depart,fin,end_delay,step1,acc,t) }
	else { sf_seqnb=0; setTimeout('sf_seq()',delay2) }
}

// Typewritersur multiobjets
// *************************
function sf_mtypewriter(id,end_delay,delay2,speed) {
	if(!end_delay) var end_delay=''
	if(!delay2) var delay2=interval
	if(!speed) var speed=''
	var n=id+'-'+(sf_seqnb++)
	if(document.getElementById(n)) { seq--;sf_typewriter(n,end_delay,speed) }
	else { sf_seqnb=0; setTimeout('sf_seq()',delay2) }
}

