/**
 * Permet d'ajouter un event handler (ie.compat)
 * @param (object) 		elem - l'objet
 * @param (string) 		type - type d'évenement sans le prefixe on
 * @param (function) 		callback - Fonction appelée lorsque l'évènement est activé
 */
function addEvent (elem, type, callBack)
{
	var elem = (typeof elem == 'string') ? document.getElementById(elem) : elem;
	if (elem.addEventListener)
		elem.addEventListener(type, callBack, false);
	else if (elem.attachEvent)
		elem.attachEvent('on'+type, callBack);
}

/**
 * Permet d'ajouter un event handler (ie.compat)
 * @param (object) 		elem - l'objet
 * @param (string) 		type - type d'évenement sans le prefixe on
 * @param (function) 		callback - Fonction appelée lorsque l'évènement est activé
 */
function rmEvent (elem, type, callBack)
{
	if (elem.removeEventListener)
		elem.removeEventListener(type, callBack, false);
	else if (elem.detachEvent)
		elem.detachEvent('on'+type, callBack);
}

function getElementsByClassName (elem, theTag, theClass)
{
	var i, j, k;
	var okElems = new Array();
	var elems 	= elem.getElementsByTagName(theTag);
	
	for (i = 0, j = 0; i < elems.length; i++)
	{
		if (elems.item(i).className != "")
		{
			var classes = elems.item(i).className.split(' ');
			for (k = 0; k < classes.length; k++)
				if (classes[k] == theClass)
					okElems[j++] = elems.item(i); // stock l'objet
		}
	}
			
	return okElems; // on retourne le tableau d'objets
}

function removeClass (elem, theClass)
{
	if (typeof elem == "string") elem = document.getElementById(elem);
	if (elem == null) return null;
	
	var newClasses = new Array();
	var oldClasses = elem.className.split(' ');
	
	for (var i = 0; i < oldClasses.length; i++)
		if (oldClasses[i] != theClass)
			newClasses.push(oldClasses[i]);
			
	elem.className = newClasses.join(' ');
}

function addClass (elem, theClass)
{
	if (typeof elem == "string") elem = document.getElementById(elem);
	if (elem == null) return null;
	
	var classes = elem.className.split(' ');
	
	if (hasClass(elem, theClass))
		return true;
			
	classes.push(theClass);
	elem.className = classes.join(' ');
}

function hasClass (elem, theClass)
{
	if (typeof elem.className == 'undefined' || elem.className == '') return false;
	if (typeof elem == "string") elem = document.getElementById(elem);
	if (elem == null) return null;
	if (elem.className == "") return false;
	
	var classes = elem.className.split(' ');
	
	for (var i = 0; i < classes.length; i++)
		if (classes[i] == theClass)
			return true;
			
	return false;
}

function absPosY (elem)
{
	y = elem.offsetTop || 0;
	while (elem = elem.offsetParent)
		y += elem.offsetTop;
		
	return y;
}

function absPosX (elem)
{
	x = elem.offsetLeft || 0;
	while (elem = elem.offsetParent)
		x += elem.offsetLeft;
		
	return x;
}

function getParentByName (elem, name)
{
	if (name.length < 1)
		return false;
	name = name.toUpperCase();
	if (typeof elem != 'undefined' && elem.nodeName != "")
	{
		while (elem && elem.nodeName != name)
			elem = elem.parentNode;
		if (elem.nodeName == name)
			return elem;
	}
	return false;
}

function getNextSibling (elem, name)
{
	if (name.length < 1)
		return false;
	name = name.toUpperCase();
	if (typeof elem != 'undefined')
	{
		while (elem && elem.nodeName != name)
			elem = elem.nextSibling;
		if (elem && elem.nodeName == name)
			return elem;
	}
	return false;
}

function getPrevSibling (elem, name)
{
	if (name.length < 1)
		return false;
	name = name.toUpperCase();
	if (typeof elem != 'undefined')
	{
		while (elem && elem.nodeName != name)
			elem = elem.previousSibling;
		if (elem && elem.nodeName == name)
			return elem;
	}
	return false;
}

document.ready = function (callBack) {addEvent(window, 'load', callBack)}

function $ (id) {return typeof id == 'string' ? document.getElementById(id) : null}



function MM_openBrWindow (theURL, winName, features)
{
  window.open (theURL, winName, features);
}