/*
	ApparitionElement v1.0 - objet-apparition-element.js
	DHTML - objet faisant apparaître un élément près du curseur de la souris
	Documentation : http://francois-delegue.fr/developpement-web/dhtml-objet-apparition-element.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 ApparitionElement (idElement, fading, distanceCurseurX, distanceCurseurY)
{
// navigateurs récents seulement
	if (!document.getElementById || !document.createTextNode) { return }	

// variables
	var posSourisX, posSourisY;
	var VITESSE_FADING = 2;	// augmenter la valeur de VITESSE_FADING pour ralentir les fadings / IE ne permet pas "const"
	var fadedIn = false;
	var fadedOut = false;
	var style;

// propriétés via paramètres
	this.idElement	= idElement;
	this.fading		= fading || 0;		// fading non appliqué par défaut
	// distances X et Y au curseur de 10 par défaut
	this.distanceCurseurX = (distanceCurseurX || undefined) || 10;
	this.distanceCurseurY = (distanceCurseurY || undefined) || 10;

// style
	style = document.getElementById(this.idElement).style;
	style.display = "none";
	style.position = "absolute";

// switch méthodes utilisées avec ou sans fading
	if (this.fading == 1 || this.fading == true)
	{
		this.afficher	= fadeIn;
		this.masquer	= fadeOut;	
	}
	else
	{
		this.afficher	= afficher;
		this.masquer	= masquer;	
	}

// switch méthodes donnant la position de la souris
	if (document.createEvent)	// DOM
	{
		posSourisX = domPosX;
		posSourisY = domPosY;
	}	
	else if (document.fireEvent)	// IE
	{
		posSourisX = iePosX;
		posSourisY = iePosY;
	}

	this.positionner = positionner;

	function afficher (e)
	{
		this.positionner (posSourisX(e), posSourisY(e));
		style.display = "block";
	}
	
	function masquer ()
	{
		style.display = "none";
	}
	
	function fadeIn (e)
	{
		this.positionner (posSourisX(e), posSourisY(e));

		if (fadedIn == false)
		{		
			fadedIn = true;
			var tempo = 1;
			var i = 0;
			var t = null;
	
			for (i=1; i<=100; i++)
			{				
				t = setTimeout ("document.getElementById('"+this.idElement+"').style.opacity="+i/100+";document.getElementById('"+this.idElement+"').style.filter='alpha(Opacity="+ i +")';", tempo * VITESSE_FADING);
				tempo ++;
			}
			clearTimeout(t);
			// éviter clignotement
			t = setTimeout ("document.getElementById('"+this.idElement+"').style.display='block'", 10);		
		}
	}

	function fadeOut ()
	{
		fadedOut = true;
		var tempo = 1;
		var i = 0;
		var t = null;

		for (i=100; i>=0; i--)
		{
			t = setTimeout ("document.getElementById('"+this.idElement+"').style.opacity="+i/100+";document.getElementById('"+this.idElement+"').style.filter='alpha(Opacity="+ i +")';", tempo * VITESSE_FADING);
			tempo++;
		}
		clearTimeout(t);
		fadedIn = false;
	}

// méthodes privées

	function positionner (x, y)
	{		
		style.top = (y + this.distanceCurseurY) + "px";
		style.left = (x + this.distanceCurseurX) + "px";
	}

	function domPosX (e)
	{
		return e.pageX;
	}

	function domPosY (e)
	{
		return e.pageY;
	}
	
	function iePosX ()
	{
		return window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
	}
	
	function iePosY ()
	{
		return window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
}

