/*
	AgrandissementImage v1.0 - objet-agrandissement-image.js
	DHTML - objet faisant apparaître une image par agrandissement
	Documentation : http://francois-delegue.fr/developpement-web/dhtml-objet-agrandissement-image.php

	Copyright 2008 François Delègue
	License CC-GNU GPL - Creative Commons et Licence Publique Générale GNU
	Informations http://creativecommons.org/licenses/GPL/2.0/deed.fr
*/


function AgrandissementImage (urlImage, nomVarJS, positionX, positionY, conteneur, intervalle)
{
// navigateurs récents seulement
	if (!document.getElementById || !document.createTextNode) { return }

// variables
	var i;
	var img;
	var tempo = null;
	var dimensionsX = new Array ();
	var dimensionsY = new Array ();
	var margesX = new Array ();
	var margesY = new Array ();

// nombre d'étapes d'agrandissement
// pourrait être en paramètre
	var NB_PAS = 15;		// IE n'accepte pas "const"
	
// propriétés via paramètres
	this.urlImage		= urlImage;
	this.nomVarJS		= nomVarJS;	
	this.positionX		= positionX || 0;
	this.positionY		= positionY || 0;
	this.conteneur		= conteneur || "";
	this.intervalle	= intervalle || 10;

// propriétés additionnelles
	this.on		= false;
	this.enMvt	= false;

// méthodes
	this.agrandir	= agrandir;
	this.rapetisser= rapetisser;
	this.cacher		= cacher;

// ajout de l'image,on attend qu'elle soit chargée pour l'initialiser
	// vars de communication des propriétés à initImage ()
	var d = this.nomVarJS, t = this.positionY, l = this.positionX, c = this.conteneur;
	// chargement
	var preloadImg = new Image ();
	preloadImg.onload = initImage;	
	preloadImg.src = this.urlImage;

	function agrandir ()
	{		
		if (!this.on)
		{
			if (!this.enMvt)
			{
				img.style.display = "block";
				this.enMvt = true;
				i = 0;
			}

			if (i < NB_PAS)
			{
				img.style.marginLeft = margesX[i] + "px";
				img.style.marginTop  = margesY[i] + "px";
				img.width  = dimensionsX[i];
				img.height = dimensionsY[i];
				i ++;
				tempo = setTimeout (this.nomVarJS + ".agrandir()", this.intervalle);
			}
			else
			{
				clearTimeout (tempo);
				this.on = true;
				this.enMvt = false;
			}
		}
	}

	function rapetisser ()
	{
		if (this.on)
		{
			if (!this.enMvt)
			{
				this.enMvt = true;
				i -= 1;
			}
			
			if (i >= 0)
			{
				img.style.marginLeft = margesX[i] + "px";
				img.style.marginTop  = margesY[i] + "px";
				img.width  = dimensionsX[i];
				img.height = dimensionsY[i];
				tempo = setTimeout (this.nomVarJS + ".rapetisser()", this.intervalle);
				i --;
			}
			else
			{
				clearTimeout (tempo);
				this.on = false;
				this.enMvt = false;
				img.style.display = "none";
			}
		}
	}

	function cacher ()
	{
		this.on = false;
		img.style.display = "none";
		i = 0;
	}
	
	function initImage ()
	{
		var image = document.createElement('img');
		image.setAttribute ('src', preloadImg.src);
		image.setAttribute ('id', d);
		image.setAttribute ('height', preloadImg.height);
		image.setAttribute ('width', preloadImg.width);
		image.style.top = t + "px";
		image.style.left = l + "px";
		image.style.display = 'none';
		image.style.position = 'absolute';
		if (c)
		{
			document.getElementById(c).appendChild(image);
		}
		else
		{
			document.getElementsByTagName('body')[0].appendChild(image);
		}
		
	// référence à l'image pour agrandir () et diminuer ()
		img = document.getElementById(d);
		
	// calcul des dimensions successives
		var pasX = parseInt (preloadImg.width / NB_PAS);
		var pasY = parseInt (preloadImg.height / NB_PAS);
		
		for (i=1; i<NB_PAS; i++)
		{
			dimensionsX[i-1] = pasX * i;
			dimensionsY[i-1] = pasY * i;
		}
		
		dimensionsX[NB_PAS-1] = preloadImg.width;
		dimensionsY[NB_PAS-1] = preloadImg.height;

	// calcul des marges successives		
		for (var i in dimensionsX)
		{
			margesX[i] = parseInt ((preloadImg.width - dimensionsX[i]) / 2);
		}
	
		for (var i in dimensionsY)
		{
			margesY[i] = parseInt ((preloadImg.height - dimensionsY[i]) / 2);
		}
	}
}

