/*
	ProgresBars.js
	Réalisé par Romuald BRUNET
	Date : 13/02/2002
	Version 1.0
	
	Cette classe permet de créer des barres de progression animées en indiquant éventuellement un pourcentage
	La fonction startAllBars() permet de déplacer toutes les barres simultanément
	
	Utilisation de base :
		mavariable = new ProgressBar(pourcentage, taille maximale);
		mavariable.start();
	
*/
var progressBars = new Array(); // Variable globale ou pour pouvoir accèder aux barres

function ProgressBar(percent, maxsize) {
	// Variables modifiables
	this.speed = 2.5; // vitesse du remplisage, pourcent(s) d'augmentation par cycle
	this.startValue = 0; // pourcentage auquel la barre commence
	this.interval = 50; // durée de l'intervalle entre les cycles (en millisecondes)
	this.imagesource = "./media/image/barmiddle.gif"; // nom du fichier image
	this.imageheight = 14; // hauteur de l'image en pixels
	this.maxPercent = 45; // pourcentage maxium. Evite d'avoir 50 % d'espace qui ne sert à rien :)
	this.percent = percent; // pourcentage à atteindre
	this.maxSize = maxsize; // taille maximum de la barre

	/*
		Objet dans lequel afficher le pourcentage. A indiquer pour chaque barre différente
		Valeurs valides :
		- chaine de caractère représentant l'ID (exemple pour <span id="toto"></span> --> "toto")
		- réference Javascript à l'objet en question
	*/
	this.percentIndicator = null;
	
	// Variables "internes"
	this.step = 1; // détermine le nombre de pixels d'augmentation par cycle
	this.intervalId = null; // sert à savoir quelle intervalle annuler à la fin
	
	this.img = document.createElement("img"); // l'objet image
	this.img.style.visibility = "hidden"; // on la masque pour l'instant
	this.img.align = "bottom"; // pour mieux aligner le texte si on décide de mettre le pourcentage à la fin
	
	scripts = document.getElementsByTagName("script");
	container = scripts[scripts.length - 1].parentNode;
	container.appendChild(this.img); // on insèrre l'image "juste après" le script
	
	// On ajoute cette instance aux barres
	this.id = progressBars.length;
	progressBars[this.id] = this;
	
	// Fonctions
	this.start = ProgressBarStart; // Démarre le dessin de cette barre
	this.progress = ProgressBarProgress; // Incrémente la barre (usage "interne")
}

// Démarre le dessin de cette barre
function ProgressBarStart() {
	if (!this.img) return; // si appellé en dehors de la classe on ne fait rien
	if (this.intervalId) return; // si on a déjà démarré on ne fait rien
	
	if (this.percentIndicator) // s'il existe
		if (!this.percentIndicator.parentNode) // et si pas de parent
			this.percentIndicator = document.getElementById(this.percentIndicator); // alors ça doit être le nom de l'ID :)

	this.img.src = this.imagesource; // on indique la source
	this.img.height = this.imageheight; // ... la hauteur
	this.img.style.visibility = "visible"; // on ne masque plus la barre
	this.img.width = this.maxSize * this.startValue / this.maxPercent; // taille de l'image relatif à la position de départ

	this.value = this.maxSize * this.percent / this.maxPercent; // valeur en pixels de la barre au final
	this.step = this.maxSize / this.maxPercent * this.speed; // détermination du pas pour chaque "cycle"

	this.intervalId = window.setInterval("progressBars[" + this.id + "].progress()", this.interval);
}

// Incrémente la barre (usage "interne")
function ProgressBarProgress() {
	//if (!this.img) return; // si appellé en dehors de la classe on ne fait rien (OFF)
	
	this.img.width += this.step; // on incrémente la taille de l'image
	width = this.img.width;
	
	if (this.percentIndicator) // si on a un endroit ou indiquer le pourcentage
		this.percentIndicator.innerHTML = Math.round(width * this.maxPercent / this.maxSize) + "%";

	if (width >= this.value) { // si la taille de la barre dépasse la taille calculé au départ
		window.clearInterval(this.intervalId); // on arrête

		if (this.percentIndicator) // eventuellement on indique le bon pourcentage (problèmes d'arrondi sinon)
			this.percentIndicator.innerHTML = this.percentIndicator.innerHTML = this.percent + "%";
	}
}

// Démarre simultanement toutes les barres
function startAllBars() {
	for (i = 0; i < progressBars.length; i++) {
		progressBars[i].start();
	}
}