/* Quelques fonctions utiles */

//Arrête la propagation d'un évenement
function stopPropagation(evenement) {
	if (evenement.preventDefault) { //Pour les navigateur W3C
		evenement.preventDefault();
		evenement.stopPropagation();
	}
	//Pour IE (et les autres, ça fait pas de mal)
	evenement.returnValue = false;
	evenement.cancelBubble = true;
	return false;
};

// Observer un événement dans tous les navigateurs
function observeEvent(elt, evt, fun) {
	if (elt.addEventListener) { // W3C
		return elt.addEventListener(evt, fun, false);
	} else if (elt.attachEvent) { //IE
		return elt.attachEvent('on' + evt, fun);
	} else { // Yapa
		elt['on' + evt] = fun;
	}
}

// Position d'un événement souris
function eventPosition(e) {
	return {
		x: e.pageX || (e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft)),
		y: e.pageY || (e.clientY + (document.body.scrollTop  || document.documentElement.scrollTop ))
	};
}
			
// Position d'un élément
function elementPosition(e) {
	var x = 0, y = 0;
	do {
		x += e.offsetLeft || 0;
		y += e.offsetTop || 0;
		e = e.offsetParent;
	} while (e && getStyle(e, 'position') != 'absolute');
	return {x: x, y: y};
}

// Connaitre les dimensions d'un élément (offsetWidth & offsetHeight)
function elementDimensions(element)
{
	return {w: element.offsetWidth, h: element.offsetHeight};
};

// Encadrement d'un élément
function elementRectangle(element) {
	var pos = elementPosition(element),
		size = elementDimensions(element);
	return {x: pos.x, y: pos.y, w: size.w, h: size.h};
}

// La position pos est-elle à l'intérieur de l'élément elt ?
function isInside(pos, rec) {
	return	(pos.x > rec.x && pos.x < rec.x + rec.w)
		&&	(pos.y > rec.y && pos.y < rec.y + rec.h);
}

// Collision entre rectangles
function recOverlaps(rec1, rec2) {
	return !(
			(rec2.x >= rec1.x + rec1.w) // trop à droite
		||	(rec2.x + rec2.w <= rec1.x) // trop à gauche
		||	(rec2.y >= rec1.y + rec1.h) // trop en bas
		||	(rec2.y + rec2.h <= rec1.y)
	);
}

// Retourne le vrai style (prenant en compte les feuille de style) d'un élément
function getStyle(element, style) {
	if(element.currentStyle)
		return element.currentStyle[style];
	else if(window.getComputedStyle)
		return window.getComputedStyle(element, null)[style];
	else
		return element.style[style];
}

// Retourne la cible d'un événement
function eventTarget(e) {
	return e.target || e.srcElement;
}

// L'élément e a-t-il la classe c ?
function hasClassName(e, c) {
	return e.className && e.className.split(' ').indexOf(c) > -1;
}

