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();
	
	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;
}