linksTarget = {
    /**
     *  Sur un click sur le document vérifie s'il faut ouvrir les liens dans une nouvelle fenêtre ()
     */         
    init: function() {
        var cA = document.getElementsByTagName("a"), oA;
        for (i = 0; oA = cA[i]; i++) {
            if (linksTarget.util.hasClassName(oA,"external")
                || linksTarget.util.hasClassName(oA,"document"))
            {
            	linksTarget.util.addEventLst(oA,"click",linksTarget.clickEvtLst);
            }
        }
    },
    clickEvtLst : function (evt) {
    	if (!evt && window.event) {evt = window.event;}
        if (!evt) {return;}
        window.open(this.href);
        if (evt && evt.preventDefault) {
        	evt.preventDefault();
        } else if (window.event) {
        	evt.returnValue = false;
        }
        return false;
    },
    unload : function () {
        var cA = document.getElementsByTagName("a"), oA;
        for (i = 0; oA = cA[i]; i++) {
            if (linksTarget.util.hasClassName(oA,"external")
                || linksTarget.util.hasClassName(oA,"document"))
            {
            	linksTarget.util.removeEventLst(oA,"click",linksTarget.clickEvtLst);
            }
        }
		linksTarget.util.removeEventLst(window,"load",linksTarget.init);
		linksTarget.util.removeEventLst(window,"unload",linksTarget.unload);
    },
    /*
     * Objet contenant quelques fonctions utilisées régulièrement et développées dans un autre cadre
     */
    util : {
        /**
         * Ajout un gestionnaire d'événnement sur un noeud du DOM
         * @param   Node        EventTarget noeud sur lequel enregistrer le gestionnaire
         * @param   string      type        chaîne corresondant au type d'événement à gérer (load, submit, click, etc...)
         * @param   function    listener    Objet fonction correspondant au gestionnaire à déclencher
         * @param   bool        useCapture  Booleen présisant - pour le mobel standard - si le gestionnaire est capturant ou pas
         */
        addEventLst: function(EventTarget,type,listener,useCapture) {
        	useCapture = typeof(useCapture)=="boolean"?useCapture:false;
        	if (EventTarget.addEventListener) {
        		EventTarget.addEventListener(type, listener, useCapture);
        	} else if ((EventTarget==window) && document.addEventListener) {
        		document.addEventListener(type, listener, useCapture);
        	} else if (EventTarget.attachEvent) {
        		EventTarget["e"+type+listener] = listener;
        		EventTarget[type+listener] = function() {EventTarget["e"+type+listener]( window.event );}
        		EventTarget.attachEvent("on"+type, EventTarget[type+listener]);
        	}
        },
        /**
         * Enlève un gestionnaire d'événnement sur un noeud du DOM
         * @param   Node        EventTarget noeud sur lequel enlever le gestionnaire
         * @param   string      type        chaîne corresondant au type d'événement à gérer (load, submit, click, etc...)
         * @param   function    listener    Objet fonction correspondant au gestionnaire à enlever
         * @param   bool        useCapture  Booleen présisant - pour le mobel standard - si le gestionnaire a enlever est capturant ou pas
         */
		removeEventLst: function(EventTarget,type,listener,useCapture) {
			useCapture = typeof(useCapture)=="boolean"?useCapture:false;
			if (EventTarget.removeEventListener) {
				EventTarget.removeEventListener(type,listener, useCapture);
			} else if ((EventTarget==window) && document.removeEventListener) {
				document.removeEventListener(type,listener, useCapture);
			} else if (EventTarget.detachEvent) {
				EventTarget.detachEvent("on"+type, EventTarget[type+listener]);
				EventTarget[type+listener]=null;
				EventTarget["e"+type+listener]=null;
			}
		},
    	/**
    	 * Détermine si une classe HTML est spécifiée sur un noeud de type élément 
    	 * @param  Node    oNode        Noeud à interroger
    	 * @param  string  className    Chaîne représentant la classe recherchée
    	 * @return bool    true si le noeud possède la classe, non dans les autres cas	 
    	 */
        hasClassName: function(oNode,className) {
        	return (oNode.nodeType==1)?
        		((" "+oNode.className+" ").indexOf(" "+className+" ")!=-1):false;
        }
    }
}
linksTarget.util.addEventLst(window,"load",linksTarget.init);
linksTarget.util.addEventLst(window,"unload",linksTarget.unload);

