// identificateur global d'objet (utile pour setTimeout)
var globalObject;
var globalRotatingObject;

//  Constructeur
function scrollingObj(objID, parentObjID, vitesse){
	var elm = document.getElementById(objID);
	var pelm = document.getElementById(parentObjID);

	// Attributs
	this.id=objID;
	this.css=elm.style;
	this.scrollHeight=elm.offsetHeight;
	this.clipHeight=pelm.offsetHeight;
	this.scrollWidth=elm.offsetWidth;
	this.clipWidth=pelm.offsetWidth;
	this.x=0;
	this.y=0;
	this.timer=0;
	this.vitesse=vitesse;
	this.loop=false;
	this.innerImg=new Array();
	this.totalInnerImg=0;

	// Methodes
	this.autoRotate=autoRotate;
	this.rotateImg=rotateImg;
	this.scanImg=scanImg;
	this.stopSliding=stopSliding;
	this.startSliding=startSliding;
	this.stopScrolling=stopScrolling;
	this.startScrolling=startScrolling;
	this.droite=droite;
	this.gauche=gauche;
	this.haut=haut;
	this.bas=bas;
	this.deplace=deplace;
	this.dump=dump;
}

function dump() {
	alert ( "Id: "+this.id+"\nNom: "+this.toString()+"\nscrollHeight :"+this.scrollHeight+"\nclipHeight :"+this.clipHeight+"\nx :"+this.x+"\ny :"+this.y+"\nvitesse :"+this.vitesse+"\ntimer :"+this.timer+"\nloop :"+this.loop);
}

// Méthode de déplacement générique
function deplace(x,y){
	this.x=x;
	this.y=y;
	this.css.left=this.x+"px";
	this.css.top=this.y+"px";
}

// Méthode de défilement vers le bas
function bas(v){
	if(this.y>this.clipHeight-this.scrollHeight){
		this.deplace(0,this.y-v);
			if(this.loop) {
				globalObject=this;
				this.timer=setTimeout("globalObject.bas("+v+")",this.vitesse);
			}
	}
}

// Méthode de défilement vers le haut
function haut(v){
	if(this.y<0){
		this.deplace(0,this.y-v);
		if(this.loop) {
			globalObject=this;
			this.timer=setTimeout("globalObject.haut("+v+")",this.vitesse);
		}
	}
}

// Méthode de défilement vers la gauche
function gauche(v){
	if(this.x>this.clipWidth-this.scrollWidth){
		this.deplace(this.x-v,0);
		if(this.loop) {
			globalObject=this;
			this.timer=setTimeout("globalObject.gauche("+v+")",this.vitesse);
		}
	}
	// Rewind pour le 360
	else {
		this.deplace(0,0);
		if(this.loop) {
			globalObject=this;
			this.timer=setTimeout("globalObject.gauche("+v+")",this.vitesse);
		}
	}
}

// Méthode de défilement vers la droite
function droite(v){
	if(this.x<0){
		this.deplace(this.x-v,0);
		if(this.loop) {
			globalObject=this;
			this.timer=setTimeout("globalObject.droite("+v+")",this.vitesse);
		}
	}
	// Rewind pour le 360
	else {
		this.deplace(this.clipWidth-this.scrollWidth,0);
		if(this.loop) {
			globalObject=this;
			this.timer=setTimeout("globalObject.droite("+v+")",this.vitesse);
		}
	}
}

// Méthode de lancement du défilement vertical
function startScrolling(v){
	this.loop=true;
	if(v>0)
		this.bas(v);
	else
		this.haut(v);
}

// Méthode d'arrêt du défilement vertical
function stopScrolling(){
	this.loop=false;
	if(this.timer)
		clearTimeout(this.timer);
}

// Méthode de lancement du défilement horizontal
function startSliding(v){
	this.loop=true;
	if(v>0)
		this.gauche(v);
	else
		this.droite(v);
}

// Méthode d'arrêt du défilement horizontal
function stopSliding(){
	this.loop=false;
	if(this.timer)
		clearTimeout(this.timer);
}

// Méthodes associées à la permutation circulaire des images incluses dans l'objet

// Méthode de détection des images
function scanImg () {
	var parentElm = document.getElementById (this.id);
	var thisChild = parentElm.firstChild;
	var i = 0;
	
	while ( thisChild != parentElm.lastChild ) {
		if ( thisChild.nodeType == 1 ) {
			if ( thisChild.nodeName == "img" || thisChild.nodeName == "IMG" ) {
				this.innerImg[i] = thisChild.id;
				i++;
			}
		}
		thisChild = thisChild.nextSibling;
	}
	
	this.totalInnerImg = i;
}

// Méthode de permutation
function rotateImg () {
	var i=0;
	var firstImg = document.getElementById(this.innerImg[0]).src;
	
	while ( i < this.totalInnerImg-1 ) {
		document.getElementById(this.innerImg[i]).src = document.getElementById(this.innerImg[i+1]).src;
		i++;
	}
	document.getElementById(this.innerImg[this.totalInnerImg-1]).src = firstImg;
}

// Methode de lancement de la rotation en automatique
function autoRotate (frequence, timeout) {

	globalRotatingObject=this;
	
	setInterval("globalRotatingObject.rotateImg()",frequence );
}

// Initialisation
function Init(){
	var ContainerElm = document.getElementById ("divconteneurcentre");
	var Elm = document.getElementById ("divcontenantcentre");

	// Detection des calques de défilement et création des objets associés
	if ( ContainerElm && Elm ) {
		Centre=new scrollingObj("divcontenantcentre", "divconteneurcentre", 50);
		Centre.deplace(0,0);
	}

	ContainerElm = document.getElementById ("divconteneurgauche");
	Elm = document.getElementById ("divcontenantgauche");


	if ( ContainerElm && Elm ) {
		Gauche=new scrollingObj("divcontenantgauche", "divconteneurgauche", 50);
		Gauche.deplace(0,0);
	}

	ContainerElm = document.getElementById ("divconteneurvignettes", "divconteneurvignettesGalerie");
	Elm = document.getElementById ("divcontenantvignettes", "divcontenantvignettesGalerie");

	if ( ContainerElm && Elm ) {
		Vignettes=new scrollingObj("divcontenantvignettes", "divconteneurvignettes", 50);
		Vignettes.deplace(0,0);
	}
	
	ContainerElm = document.getElementById ("divconteneurpanoramacentre");
	Elm = document.getElementById ("divcontenantpanoramacentre");
	
	if ( ContainerElm && Elm ) {
		Panorama=new scrollingObj("divcontenantpanoramacentre", "divconteneurpanoramacentre", 50);
		Panorama.deplace(0,0);
	}
	

	ContainerElm = document.getElementById ("divconteneurvignettesGalerie");
	Elm = document.getElementById ("divcontenantvignettesGalerie");
	
	if ( ContainerElm && Elm ) {
		CentreServices=new scrollingObj("divcontenantvignettesGalerie", "divconteneurvignettesGalerie", 50);
		CentreServices.deplace(0,0);
	}
}
function autoDefil( f, t ) {
	if ( Vignettes ) {
		Vignettes.scanImg();
		Vignettes.autoRotate(f,t);
	}
}
