if(!window.Ellipse)
	Ellipse=new Object();
Ellipse.Debug = false;
Ellipse.EffectsLength = 200;

// Cette fonction est lanc�e lors de l'affichage de l'ellipse.
Ellipse.initFocus = function()
{
	Ellipse.debug("--- Ellipse.initFocus : Start ------------------------------------------");
	
	zoomRatio = $($("#zoom-ratio")).text();
	
	imageSelected = $("#ellipse-image-5")[0];
	
	Ellipse.setFocus(imageSelected, zoomRatio);
	
	Ellipse.debug("--- Ellipse.initFocus : End ------------------------------------------");
}

Ellipse.debug = function(message)
{
	if(Ellipse.Debug == true)
	{
		//console.log(message);
	}
}

// Init
/*$(function(){

	// On v�rifie que l'on est en train d'afficher l'ellipse
	ellipse = $("#ellipse-top")[0];
	
	if(ellipse)
	{
		Ellipse.initFocus();
	}

});*/

// Cette fonction :
// - Identifie toutes les images composant l'ellipse
// - D�finit les z-index de toutes les images composant l'ellipse
// - D�finit les zooms respectifs des images composant l'ellipse
// - Lance l'animation de zoom
Ellipse.setFocus = function(img, zoomRatio)
{
	// Identification de toutes les images composant l'ellipse
	if(!Ellipse.Images)
	{
		Ellipse.getImages(img);
	}
	
	// On renseigne si ce n'est d�j� fait le coefficient de zoom des images
	if(!Ellipse.MaxZoomRatio)
	{
		Ellipse.MaxZoomRatio = zoomRatio;
	}
	
	// On Identifie dans la liste d'images celle qui dispose du focus
	Ellipse.setFocusedImage(img);
	
	// D�finition des z-index et des niveaux de zoom pour toutes les images composant l'ellipse
	Ellipse.setZIndexAndZooms(img);
	
	// Lancement de l'animation des zooms
	Ellipse.startZoomingAnimation();
	
}

// Cette fonction :
// - Identifie toutes les images composant l'ellipse
Ellipse.getImages = function(img)
{
	Ellipse.debug("--- Ellipse.getImages : Start ------------------------------------------");

	// On r�cup�re dans une variable temporaire tous les conteneurs d'images
	var temp = $(img).parent().parent().children("a");
	
	var tempImage;
	Ellipse.Images = new Array();
	
	Ellipse.debug("temp : " + temp);
	Ellipse.debug("temp size : " + temp.length);
	
	// Pour chacun
	for(i=0 ; i<temp.length ; i++)
	{
		// On r�cup�re l'image dans le conteneur
		tempImage = $(temp[i]).children()[0];

		// On d�finit par d�faut que le niveau de zoom est nul
		Ellipse.debug("tempImage : " + tempImage);
		tempImage.CurrentZoomRatio = 0;
		
		// On sauvegarde les dimensions initiales de l'image
		tempImage.originalHeight = $(tempImage).height();
		tempImage.originalWidth = $(tempImage).width();
		
		// On sauvegarde la position initiale de l'image
		tempImage.originalPosition = $($(tempImage).parent()[0]).position();
		
		// On l'ajoute � la liste d'image
		Ellipse.Images.push(tempImage);
	}

	Ellipse.debug("Images trouv�es : " + Ellipse.Images.length);
	Ellipse.debug("--- Ellipse.getImages : End --------------------------------------------");
}

// Cette m�thode identifie dans la liste d'images celle qui dispose du focus
Ellipse.setFocusedImage = function(img)
{
	Ellipse.debug("--- Ellipse.setFocusedImage : Start ------------------------------------------");
	Ellipse.debug("img ID : " + img.id);
	
	// Pour toutes les images identifi�es
	Ellipse.debug("Nb d'images � v�rifier : " + Ellipse.Images.length);
	for(i=0 ; i<Ellipse.Images.length ; i++)
	{
		Ellipse.debug("It�ration n�" + i + " - ID Image : " + Ellipse.Images[i].id);
		
		// Si l'image courante est la m�me que celle pass�e en param�tre
		if(img.id == Ellipse.Images[i].id)
		{
			Ellipse.Images[i].isFocused = true;
			Ellipse.FocusedImageIndex = i;
		}
		// Sinon,
		else
		{
			Ellipse.Images[i].isFocused = false;
		}
	}
	
	Ellipse.debug("FocusedImageIndex : " + Ellipse.FocusedImageIndex);
	Ellipse.debug("FocusedImage : " + Ellipse.Images[Ellipse.FocusedImageIndex].id);
	Ellipse.debug("--- Ellipse.setFocusedImage : End --------------------------------------------");
}

// Cette m�thode d�finit tous les z-index de toutes les images composant l'ellipse
Ellipse.setZIndexAndZooms = function(img)
{
	Ellipse.debug("--- Ellipse.setZIndexAndZooms : Start ------------------------------------------");
	
	// On parcourt chaque image composant l'ellipse
	for(i=0 ; i<Ellipse.Images.length ; i++)
	{
	
		// L'image courante
		var currentImage = Ellipse.Images[i];
	
		// On calcule la pond�ration de l'image courante
		// Plus l'image est proche de l'image disposant du focus, plus la pond�ration est grande
		var imageWeight = Math.abs( -1 * Math.abs(i - Ellipse.FocusedImageIndex) + Math.round(Ellipse.Images.length / 2));
		
		Ellipse.debug("pond�ration(" + i + ") : " + imageWeight);	
		
		// On d�finit le z-index de l'image courante
		Ellipse.setZindex(currentImage, imageWeight);
		
		// On d�finit le zoom de l'image courante
		Ellipse.setZoom(currentImage, imageWeight);
		
	}
	
	Ellipse.debug("--- Ellipse.setZIndexAndZooms : End --------------------------------------------");
}

// Cette m�thode renseigne les z-index des images contenues dans l'ellipse
Ellipse.setZindex = function(img, imageWeight)
{
	//Ellipse.debug("--- Ellipse.setZindex : Start ------------------------------------------");

	// La pond�ration de l'image est affect�e comme z-index au conteneur de l'image
	var temp = $(img).parent()[0];
	$(temp).css("z-index",imageWeight);
	
	//Ellipse.debug("--- Ellipse.setZindex : End --------------------------------------------");
}

// Cette m�thode renseigne les zooms des images contenues dans l'ellipse
Ellipse.setZoom = function(img, imageWeight)
{
	Ellipse.debug("--- Ellipse.setZoom : Start ------------------------------------------");
	
	// On calcule le zoom souhait� pour l'image courante (qui sera inversement proportionnel � la pond�ration de l'image)
	img.TargetZoomRatio = Math.abs(Ellipse.MaxZoomRatio * (imageWeight / (Ellipse.Images.length / 2)));
	
	Ellipse.debug("Zoom ratio : " + img.TargetZoomRatio);
	Ellipse.debug("--- Ellipse.setZoom : End --------------------------------------------");
}

// Cette m�thode d�marre les animations des images contenues dans l'ellipse
Ellipse.startZoomingAnimation = function()
{
	Ellipse.debug("--- Ellipse.startZoomingAnimation : Start ------------------------------------------");
	
	// Pour chacunes des images
	for(i=0 ; i<Ellipse.Images.length ; i++)
	{
		var currentImage = Ellipse.Images[i];
	
		// On calcule les dimensions cibles en appliquant le facteur de grossissement
		var targetHeight = currentImage.originalHeight * (currentImage.TargetZoomRatio + 1);
		var targetWidth = currentImage.originalWidth * (currentImage.TargetZoomRatio + 1);
	
		Ellipse.debug("currentImage.originalPosition.top : " + currentImage.originalPosition.top);
		Ellipse.debug("targetHeight : " + targetHeight);
		Ellipse.debug("currentImage.originalHeight : " + currentImage.originalHeight);
	
		// On calcule le d�calage n�cessaire pour avoir l'impression que les images sont zoom�es � partir de leur centre
		var targetX = Math.round(currentImage.originalPosition.left - ((targetWidth - currentImage.originalWidth) / 2));
		var targetY = Math.round(currentImage.originalPosition.top - ((targetHeight - currentImage.originalHeight) / 2));

		// On pr�pare les param�tres � int�grer dans les r�glages de l'animation		
		targetHeight = targetHeight + "px";
		targetWidth = targetWidth + "px";
		targetX = targetX + "px";
		targetY = targetY + "px";
	
		Ellipse.debug("targetX : " + targetX);
		Ellipse.debug("targetY : " + targetY);
	
		// On arr�te les animations qui pourraient encore s'ex�cuter sur l'image
		$(currentImage).stop();
	
		// On lance la nouvelle animation
		$(currentImage).animate(
			{
				width: targetWidth,
				height: targetHeight
			}
			, Ellipse.EffectsLength);
			
		// On arr�te les animations qui pourraient encore s'ex�cuter sur le conteneur de l'image
		$($(currentImage).parent()[0]).stop();	
		
		// On lance la nouvelle animation
		$($(currentImage).parent()[0]).animate(
			{
				left: targetX,
				top: targetY
			}
			, Ellipse.EffectsLength);
	}
	
	Ellipse.debug("--- Ellipse.startZoomingAnimation : End --------------------------------------------");
}

// Cette m�thode fait apparaitre le paragraphe s�lectionn�
Ellipse.displayText = function(index)
{
	Ellipse.debug("--- Ellipse.displayText : Start --------------------------------------------");

	// On masque toutes les paragraphe
	$("div[id^=societe-]").hide("slow");
	//on fait apparaitre la bonnne
	$("div#societe-" + index).show("slow");
	
	Ellipse.debug("--- Ellipse.displayText : End --------------------------------------------");
	return false;
}
