/*michel.staelens@wanadoo.fr*/
/*http://perso.wanadoo.fr/michel.staelens/  */

/*version 1.2 with sensitive images*/

var deltax=0,deltay=0,xcour=0,ycour=0,i_info=-1
var info=new Array()
var preCharge=new Array()

//initialisation des zones arriere (zar) et devant (zdv)
function initScroll(){
	document.write('<div id="zar" class="scroll">&nbsp;</div>')
	document.write('<div id="zdv" class="scroll">&nbsp;</div>')
}

//liaison=-1 pour depart; +1 pour arrivee; 0 pour les deux
function add_txt(tit,txt,bas,mouvement,liaison){
	info[info.length]={type:"txt",titre:tit,texte:txt,bas:bas,mouvement:mouvement.substring(0,1),liaison:liaison}
}
function add_img(source,mouvement,liaison,cible){
	preCharge[preCharge.length]=new Image()
	preCharge[preCharge.length-1].src=source
	info[info.length]={type:"img",source:source,mouvement:mouvement.substring(0,1),liaison:liaison,cible:((cible==null)?"":cible)}
}

//reecriture des objets zar et zdv
function table_txt(tit,txt,bas){return("<table cellspacing=0 width="+mszone.l+" height="+mszone.h+"><tr><td class=scrollTitle>"+tit+"</td></tr><tr><td class=scrollBody width=100% height=100%>"+txt+"</td></tr><tr><td class=scrollFoot>"+bas+"</td></tr></table>")}
function table_img(source){return("<img src=\""+source+"\" width="+mszone.l+" height="+mszone.h+" border=0 />")}

//debut boucle
function startScroll(){
	initImage()
	i_old=i_info
	i_info++
	i_new=i_info
	if(i_new>=info.length){i_info=0;i_new=0}
	if(i_old==-1){//initialisation
		positionnerObj("zar",mszone.x,mszone.y)
		positionnerObj("zdv",mszone.x,mszone.y)
	}
	else{
		ceci=(info[i_old].type=="txt")?(table_txt(info[i_old].titre,info[i_old].texte,info[i_old].bas)):(table_img(info[i_old].source))
		if(info[i_old].type=="img"&&info[i_old].cible!=""){ceci="<a href=\""+info[i_old].cible+"\" target=\"_blank\">"+ceci+"</a>"}
		redefinirObj((info[i_new].liaison!=-1)?"zar":"zdv",ceci)
		positionnerObj("zar",mszone.x,mszone.y)
		entrevoirObj("zar",0,0,mszone.l,mszone.h)
	}
	ceci=(info[i_new].type=="txt")?(table_txt(info[i_new].titre,info[i_new].texte,info[i_new].bas)):(table_img(info[i_new].source))
	if(info[i_new].type=="img"&&info[i_new].cible!=""){ceci="<a href=\""+info[i_new].cible+"\" target=\"_blank\">"+ceci+"</a>"}
	redefinirObj((info[i_new].liaison!=-1)?"zdv":"zar",ceci)
	switch(info[i_info].mouvement){
		case("g"): case("l"): xcour=-mszone.l;ycour=0;deltax=2;deltay=0;break //gauche,left
		case("d"): case("r"): xcour=mszone.l;ycour=0;deltax=-2;deltay=0;break //droit,right
		case("h"): case("t"): xcour=0;ycour=-mszone.h;deltax=0;deltay=2;break //haut,top
		case("b"): //bas,bottom,par defaut
		default  : xcour=0;ycour=mszone.h;deltax=0;deltay=-2;break
	}
	defiler(info[i_info].mouvement,info[i_info].liaison)
}
function defiler(cas,liaison){
	xcour+=deltax
	ycour+=deltay
	switch(cas){
		case("g"): case("l"): 
			if (xcour<=0){
				if(liaison==0){
					positionnerObj("zar",mszone.x+mszone.l+xcour,mszone.y)
					entrevoirObj("zar",0,0,-xcour,mszone.h)
				}
				if(liaison!=-1){
					positionnerObj("zdv",mszone.x+xcour,mszone.y)
					entrevoirObj("zdv",-xcour,0,mszone.l,mszone.h)
				}
				if(liaison==-1){
					positionnerObj("zdv",mszone.x-mszone.l-xcour,mszone.y)
					entrevoirObj("zdv",mszone.l+xcour,0,mszone.l,mszone.h)
				}
				timerScroll=setTimeout("defiler('"+cas+"',"+liaison+")",vit_move_x)
			}
			else{timerScroll=setTimeout("startScroll()",vit_change)}
			break
		case("d"): case("r"): 
			if (xcour>=0){
				if(liaison==0){
					positionnerObj("zar",mszone.x-mszone.l+xcour,mszone.y)
					entrevoirObj("zar",mszone.l-xcour,0,mszone.l,mszone.h)
				}
				if(liaison!=-1){
					positionnerObj("zdv",mszone.x+xcour,mszone.y)
					entrevoirObj("zdv",0,0,mszone.l-xcour,mszone.h)
				}
				if(liaison==-1){
					positionnerObj("zdv",mszone.x+mszone.l-xcour,mszone.y)
					entrevoirObj("zdv",0,0,xcour,mszone.h)
				}
				timerScroll=setTimeout("defiler('"+cas+"',"+liaison+")",vit_move_x)
			}
			else{timerScroll=setTimeout("startScroll()",vit_change)}
			break
		case("h"): case("t"): 
			if (ycour<=0){
				if(liaison==0){
					positionnerObj("zar",mszone.x,mszone.y+mszone.h+ycour)
					entrevoirObj("zar",0,0,mszone.l,-ycour)
				}
				if(liaison!=-1){
					positionnerObj("zdv",mszone.x,mszone.y+ycour)
					entrevoirObj("zdv",0,-ycour,mszone.l,mszone.h)
				}
				if(liaison==-1){
					positionnerObj("zdv",mszone.x,mszone.y-mszone.h-ycour)
					entrevoirObj("zdv",0,mszone.h+ycour,mszone.l,mszone.h)
				}
				timerScroll=setTimeout("defiler('"+cas+"',"+liaison+")",vit_move_y)
			}
			else{timerScroll=setTimeout("startScroll()",vit_change)}
			break
		case("b"): 
		default  : 
			if (ycour>=0){
				if(liaison==0){
					positionnerObj("zar",mszone.x,mszone.y-mszone.h+ycour)
					entrevoirObj("zar",0,mszone.h-ycour,mszone.l,mszone.h)
				}
				if(liaison!=-1){
					positionnerObj("zdv",mszone.x,mszone.y+ycour)
					entrevoirObj("zdv",0,0,mszone.l,mszone.h-ycour)
				}
				if(liaison==-1){
					positionnerObj("zdv",mszone.x,mszone.y+mszone.h-ycour)
					entrevoirObj("zdv",0,0,mszone.l,ycour)
				}
				timerScroll=setTimeout("defiler('"+cas+"',"+liaison+")",vit_move_y)
			}
			else{timerScroll=setTimeout("startScroll()",vit_change)}
			break
	}
}

//navigateurs
var da	=document.all
var dom	=document.getElementById
var dl	=document.layers

//position image
var mszone
function initImage() {
	var img;
	if (dl){
		img = findImage("scroll",document)
		mszone = getPosImage(img)
		mszone.l = img.width
		mszone.h = img.height
	}
	else if (da){
		img = document.all["scroll"]
		mszone = elementXYOffset(img)
		mszone.l = img.width
		mszone.h = img.height
	}
	else if (dom){
		img = document.getElementById("scroll")
		mszone = elementXYOffset(img)
		mszone.l = img.width
		mszone.h = img.height
	}
//	status=("[ x , y , l , h ] = [ " + mszone.x + " , " + mszone.y + " , " + mszone.l + " , " + mszone.h + " ]")
}
function findImage(name,doc){
	var i,img;
	for (i=0; i < doc.images.length; i++)
		if(doc.images[i].name==name)
		return doc.images[i];
	for (i=0; i < doc.layers.length; i++)
		if((img=findImage(name,doc.layers[i].document))!=null){
			img.container=doc.layers[i];
			return img;
		}
		return null;
}
function getPosImage(obj){
	if(obj.container!=null) return {x:obj.container.pageX+obj.x,y:obj.container.pageY+obj.y}
	else return {x:obj.x,y:obj.y}
}
function elementXYOffset(obj){
	var xOffset, yOffset, elParent;
	if(typeof obj.offsetTop == 'number'){
		yOffset = obj.offsetTop||0;
		xOffset = obj.offsetLeft||0;
		elParent = obj.offsetParent;
		while(elParent){
			yOffset += elParent.offsetTop||0;
			xOffset += elParent.offsetLeft||0;
			elParent = elParent.offsetParent;
		}
	}
	else if(typeof obj.top == 'number'){//some Net 4 DIVs
		yOffset = obj.top;
		xOffset = obj.left;
	}
	else if(typeof obj.y == 'number'){//Net 4 IMG & A
		yOffset = obj.y;
		xOffset = obj.x;
	}
	else{//information is not available
		yOffset = 0; //maybe use NaN instead.
		xOffset = 0;
	}
	return {x:xOffset,y:yOffset};
}

//objets
function redefinirObj(nom,ceci){
	if(da){document.all(nom).innerHTML=ceci}
	else if(dom){document.getElementById(nom).innerHTML=ceci}
	else if(dl){doc=document.layers[nom];doc.document.write(ceci);doc.document.close()}
}
function positionnerObj(nom,gauche,haut){
	if(da){document.all(nom).style.left=gauche;document.all(nom).style.top=haut}
	else if(dom){document.getElementById(nom).style.left=gauche+"px";document.getElementById(nom).style.top=haut+"px"}
	else if(dl){document.layers[nom].left=gauche;document.layers[nom].top=haut}
}
function entrevoirObj(nom,gauche,haut,droit,bas){
	if(da){document.all(nom).style.clip="rect("+haut+"px "+droit+"px "+bas+"px "+gauche+"px)"}
	else if(dom){document.getElementById(nom).style.clip="rect("+haut+"px "+droit+"px "+bas+"px "+gauche+"px)"}
	else if(dl){document.layers[nom].clip.left=gauche;document.layers[nom].clip.top=haut;document.layers[nom].clip.right=droit;document.layers[nom].clip.bottom=bas}
}

