drag = function (elementDeplace, evenement) {
	
	elementDeplace.style.display = "block";
	
	// Position de la souris (en coordonnées de fenêtre) au début du glissement.
	var debutX = evenement.clientX;
	var debutY = evenement.clientY;
	
	// Position d'origine (en coordonnées de document) de l'élément que 
	// l'utilisateur va faire glisser. Puisque 'elementDeplace' est positionné
	// de manière absolue, nous supposons que 'offsetParent' est le corps du document.
	var origX = elementDeplace.offsetLeft;
	var origY = elementDeplace.offsetTop;
	
	// Même si les coordonnées sont dans des systèmes différents, nous pouvons
	// tout de même calculer leur différence et l'utilisons dans la fonction 
	// gestionnaireDeplacement(). Cela fonctionne car la position des barre de
	// défilement ne change jamais pendant le glissement.
	var deltaX = debutX - origX;
	var deltaY = debutY - origY;
	
	if (/bulle/.test(elementDeplace.id)) {
		
		//alert(window.getComputedStyle("opacity").elementDeplace);
		//alert(parseFloat(window.getComputedStyle("opacity").elementDeplace));
		//if (parseFloat(window.getComputedStyle("opacity").elementDeplace) == 1)  {
			
			var deltaX = -15;
			var deltaY = -22;
		//}
	}
	
	// Enregistrer les gestionnaires qui répondent aux événements 'mousemove'
	// et à l'événement 'onmouseup' qui vient aprés 'onmousedown'.
	if (document.addEventListener) { // Modèle d'événement du DOM Niveau 2.
		
		// Enregistrer des gestionnaires d'événements avec capture.
		document.addEventListener("mousemove", gestionnaireDeplacement, true);
		document.addEventListener("mouseup", gestionnaireRelachement, true);
	}
	else if (document.attachEvent) { // Modèle d'événements d'Internet Explorer 5+
		
		// Dans le modèle d'événements d'Internet Explorer, les événements sont capturés
		// par l'appel de setCapture() sur l'élément.
		elementDeplace.setCapture();
		elementDeplace.attachEvent("onmousemove", gestionnaireDeplacement);
		elementDeplace.attachEvent("onmouseup", gestionnaireRelachement);
		
		// Traiter la perte de la capture de la souris comme un événement 'onmouseup'.
		elementDeplace.attachEvent("onlosecapture", gestionnaireRelachement);
	}
	else { // Modèle d'événements d'Internet Explorer 4
		
		// Dans Internet Explorer 4, nous ne pouvons utiliser attachEvent() ou 
		// setCapture(). Nous fixons donc directement les gestionnaires d'événements 
		// dans l'objet de document et espérons que les événements de la souris
		// se propageront.
		var ancienGestDeplacement = document.onmousemove;
		var ancienGestRelachement = document.onmouseup;
		
		document.onmousemove = gestionnaireDeplacement;
		document.onmouseup = gestionnaireRelachement;
	}
	
	// Puisque nous traitons l'évènement, ne laisser personne d'autre le voir.
	if (evenement.stopPropagation) evenement.stopPropagation(); // DOM Niveau 2.
	else evenement.cancelBubble = true; // Internet Explorer.
	
	// Empêcher les actions par défaut.
	if (evenement.preventDefault) evenement.preventDefault(); // DOM Niveau 2.
	else evenement.returnValue = false; // Internet Explorer.
	
	/**
	 * Voici le gestionnaire qui capture les événements 'onmousemove' lorsque
	 * l'utilisateur fait glisser un élément. Il est responsable du déplacement
	 * de l'élément.
	 */
	function gestionnaireDeplacement(e) {
	 
		if (!e) e = window.event; // Modèle d'événement d'Internet Explorer.
		
		// Déplacer l'élément vers la position courante de la souris,
		// ajustée comme nécessaire par le décalage du clic de souris initial.
		elementDeplace.style.left = (e.clientX - deltaX) + 'px';
		elementDeplace.style.top = (e.clientY - deltaY) + 'px';
		
		// Personne d'autre ne doit voir cet événement.
		if (e.stopPropagation) e.stopPropagation(); // DOM Niveau 2.
		else e.cancelBubble = true; // Internet Explorer.
	}
	
	/**
	* Voici le gestionnaire qui capture l'évènement final 'onmouseup' qui 
	* se produit à la fin de l'opération de glissement.
	*/
	function gestionnaireRelachement(e) {
	
		if (!e) e = window.event; // Modèle d'événement d'Internet Explorer.
	
		// Désenregistrer les gestionnaires d'évènements avec capture.
		if (document.removeEventListener) { // Modèle d'événements du DOM Niveau 2
		
			document.removeEventListener("mouseup", gestionnaireRelachement, true);
			document.removeEventListener("mousemove", gestionnaireDeplacement, true);
		}
		else if (document.detachEvent) { // Modèle d'évènements d'Internet Explorer 5+
		
			elementDeplace.detachEvent("onlosecapture", gestionnaireRelachement);
			elementDeplace.detachEvent("onmouseup", gestionnaireRelachement);
			elementDeplace.detachEvent("onmousemove", gestionnaireDeplacement);
			elementDeplace.releaseCapture();
		}
		else { // Modèle d'évènements d'Internet Explorer 4
		
			// Restaurer les gestionnaires d'origine, si présents.
			document.onmouseup = ancienGestRelachement;
			document.onmousemove = ancienGestDeplacement;
		}
		
		// Empêcher la propagation de l'événement.
		if (e.stopPropagation) e.stopPropagation(); // DOM Niveau 2.
		else e.cancelBubble = true; // Internet Explorer.
		
		elementDeplace.style.left = (e.clientX - deltaX) + 'px';
		elementDeplace.style.top = (e.clientY - deltaY) + 'px';
	}
};

