
function ajouterEvenement(_Element, evenementType, appelFonction) {
var _ElementArchive = _Element;
if(typeof(_Element) == "string"){
var _Element = $id(_Element);
}
if(_Element == null || _Element == ""){
eventErreur(_ElementArchive);
return false;
}
if(_Element.addEventListener){
if(evenementType == "mouseenter"){
_Element.addEventListener("mouseover", eventMouseenter, false);
if(typeof(_Element.listeFonctionsEnter) == "undefined"){
_Element.listeFonctionsEnter = Array();
}
_Element.listeFonctionsEnter.push(appelFonction);
_Element.autorisationExeFonctionEnter = true;
_Element.addEventListener("mouseout", eventVerifMouseout, false);
return true;
}else if(evenementType == "mouseleave"){
_Element.addEventListener("mouseout", eventMouseleave, false);
if(typeof(_Element.listeFonctionsLeave) == "undefined"){
_Element.listeFonctionsLeave = Array();
}
_Element.listeFonctionsLeave.push(appelFonction);
_Element.autorisationExeFonctionLeave = true;
return true;
}else if(evenementType == "mousewheel"){
_Element.addEventListener("DOMMouseScroll", appelFonction, false);
return true;
}else{
_Element.addEventListener(evenementType, appelFonction, false);
return true;
}
} 
else if(_Element.attachEvent){
var retour = _Element.attachEvent("on" + evenementType, appelFonction);
return retour;
} 
else{
return false;
}
}
function eventMouseenter(e){
var _EventObjetOrigine = e.currentTarget;
if(this.autorisationExeFonctionEnter){
for(i=0; _Fonction = _EventObjetOrigine.listeFonctionsEnter[i]; i++){
_Fonction(e);
}
_EventObjetOrigine.autorisationExeFonctionEnter = false;
}
}
function eventVerifMouseout(e){
var _EventObjetOrigine = e.currentTarget;
var _EventVaSur = e.relatedTarget;
if(eventEstIlEnfant(_EventObjetOrigine, _EventVaSur) < 0){
_EventObjetOrigine.autorisationExeFonctionEnter = true;
}else{
_EventObjetOrigine.autorisationExeFonctionEnter = false;
}
}
function eventMouseleave(e){
var _EventObjetOrigine = e.currentTarget;
var _EventVaSur = e.relatedTarget;
if(eventEstIlEnfant(_EventObjetOrigine, _EventVaSur) < 0){
_EventObjetOrigine.autorisationExeFonctionLeave = true;
}else{
_EventObjetOrigine.autorisationExeFonctionLeave = false;
}
if(this.autorisationExeFonctionLeave){
for(i=0; _Fonction = _EventObjetOrigine.listeFonctionsLeave[i]; i++){
_Fonction(e);
}
}
}
function eventEstIlEnfant(_Parent, _Enfant){
if(_Enfant == _Parent)
return 0;
var i = 0;
while(_Enfant = _Enfant.parentNode){
i++;
if(_Enfant == _Parent)
return i;
}
return -1;
}
function supprimerEvenement(_Element, evenementType, appelFonction) {
if(typeof(_Element) == "string"){
var _Element = $id(_Element);
}
if(_Element.removeEventListener){
_Element.removeEventListener(evenementType, appelFonction, false);
return true;
} 
else if(_Element.detachEvent){
var retour = _Element.detachEvent("on" + evenementType, appelFonction);
return retour;
} 
else{
alert("Suppression d'événement impossible sur l'objet " + _Element);
return false;
}
}
function eventConnaitreProprietes(e){
e = e || this;
var eventProprietes = Array();
eventProprietes.objetOrigine = e.currentTarget || e.srcElement;
eventProprietes.type = e.type;
eventProprietes.estSur = e.target || e.srcElement;
if(eventProprietes.type == "mouseover" || eventProprietes.type == "mouseenter"){
eventProprietes.vientDe = e.relatedTarget || e.fromElement;
eventProprietes.vaSur = e.target || e.toElement;
}else if(eventProprietes.type == "mouseout" || eventProprietes.type == "mouseleave"){
eventProprietes.vientDe = e.target || e.fromElement;
eventProprietes.vaSur = e.relatedTarget || e.toElement;
}
return eventProprietes;
}
function $this(e){
e = e || this;
return e.target || e.srcElement;
}
function $thisOrigine(e){
e = e || this;
return e.currentTarget || e.srcElement;
}
function eventErreur(afficher){
alert("Ajout d'événement impossible : l'objet '" + afficher + "' n'existe pas");
return true;
}