// ucbEvenement.js

// Raccourci pour remplacer document.getElementById()... 
// Le code est plus clair comme ça...
// Et c'est moins fatiguant ! :P
function $(id)
{
	return document.getElementById(id);
}

// Cette fonction prends en paramètre l'objet recu en argument d'un fonction appelée par un évènement.
// Elle renvoie l'objet décrivant l'évènement, avec certaines propriétés supplémentaires afin de récupérer
// des données dont la place varie normalement en fonction des navigateurs. Ces propriétés sont :
// - toucheClavier : Contient le code de la touche clavier utilisée pour les évenements clavier
// - target : L'élément visé par l'élément (la textbox d'un évènement keypress par exemple)
// - boutonSouris : Le bouton de la souris utilisé lors d'un évènement souris
// - mouseX, mouseY : les coordonnées de la souris lors d'un évènement de souris, relatives au document (et pas à l'écran)
function ucbNormaliseEvenement(e)
{
	if(!e) 
		var e = window.event;
		
	if(!e.target) // Bug IE
		e.target = e.srcElement;
	
	if(e.target.nodeType == 3) // Bug anciennes versions Opera
		e.target = e.target.parentNode;	
	
	if(e.keyCode) 
		e.toucheClavier = e.keyCode;
	
	if(e.which) 
		e.toucheClavier = e.which;
	
	if(e.type == "mouseup" || e.type == "mousedown" || e.type == "click")
	{
		if(e.which) 
			e.boutonSouris = e.which;
		if(e.button)
			e.boutonSouris = e.button;
		
		e.mouseX = 0;
		e.mouseY = 0;
		if(e.pageX || e.pageY)
		{
			e.mouseX = e.pageX;
			e.mouseY = e.pageY;
		}
		else if(e.clientX || e.clientY)
		{
			e.mouseX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			e.mouseY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}
	}
	
	return e;
}

// Ajoute une fonction (callback) pour écouter un évènement particulier (nomEvenement) sur un élément de la page (cible)
// Notez que les noms d'évènement se passent sans le préfixe "on" (par exemple "click" et non "onclick")
function ucbAjouteEvenement(cible, nomEvenement, callback)
{
	if(cible.attachEvent) // version IE
		cible.attachEvent("on" + nomEvenement, callback);
	else // Version officielle DOM
		cible.addEventListener(nomEvenement, callback, false);
}

// Supprime un écouteur d'évènement ajouté avec ucbAjouteEvenement.
// Cette fonction doit prendre exactement les mêmes paramètres que lorsque le ucbAjouteEvenement à annuler a été utilisé. 
function ucbRetireEvenement(cible, nomEvenement, callback)
{
	if(document.attachEvent)
		cible.detachEvent("on" + nomEvenement, callback);
	else
		cible.removeEventListener(nomEvenement, callback, false);
}

// Cette fonction doit être utilisée pour bloquer l'action qui a déclenché l'évènement (keypress par exemple)
// lorsque l'évènement a été ajouté via ucbAjouteEvenement. Elle a été créée pour le bon fonctionnement des
// annulation dans les navigateurs pointilleux où un return false ne suffit pas pour annuler l'action.
// Pour l'utiliser, remplacez votre "return false;" par un "return ucbAnnuleAction(event);".
function ucbAnnuleAction(e)
{
	// Version officielle DOM
	if(e && e.preventDefault)
		e.preventDefault();
	
	// Version IE
	return false;
}