﻿// *****************************************************************
// 	Gestion des Liens dans les pages HTML et action (popup ou non) 
//	en fonction de la class utilisé

// ****************************************************************
 // Fonction permet d'enregistrer un gestionnaire d'evenement
 // Suivant les différents cas Internet Explorer, FireFox etc...
function addEvent(source, type, callback) 
{
 	// code standard DOM
  	if (source.addEventListener)
  	{source.addEventListener(type, callback, false);return true;} 
  	// code propriétaire MSIE
  	else if (source.attachEvent)
  	{  var r = source.attachEvent("on"+type, callback);return r;} 
  	
  	// code navigateur sans support DOM-event
  	else 
  	{eval('source.on' + type + '= callback') ;}
}


// abstraction pour recuperer un objet standard pour l'evenement en cours 
// comprend le modele DOM standard et le modele proprietaire de MSIE
// e : parametre recu lors de l'appel du gestionnaire d'evenement 
// retour : objet d'evenement standard

// ****************************************************************
 // Fonction permet de récupérer l'élément actif (balise A)
 // qui vient d'être activée
function getStandardElement(e) 
{
	// cas particulier de MSIE pour recuperer l'evenement en cours
 	if (e == null && window.event) 
 	{e = window.event ;}
 	
 	// cas particulier de MSIE pour recuperer la balise DOM cible	
 	if (e.target == null && e.srcElement) 
 	{e.target = e.srcElement ;}
 	
 	// cas particulier de MSIE pour empecher l'action par defaut du navigateur
 	if (! e.preventDefault )
 	{e.preventDefault = function () { this.returnValue = false ; } ;}
 	
 	// détermine elment qui vient d'être activé
 	elmt = e.target  ;
  	// Récupère element  Parent si ce n'est pas une balise A
  	if(elmt.nodeName!="A"){elmt = elmt.parentNode}
  	
 	return elmt ;
}


// ****************************************************************
 // Fonction appelée lorsqu'il s'agit d'un lien de type EXTERNE
 // Ouvre la page dans une nouvelle fenêtre
function lienExterne(e)
{
	// recupérer l'element qui vient d'être activé
	elmt = getStandardElement(e)  ;
	// recup url à afficher
  	var addr = elmt.getAttribute("href") ; 
  	// Ouvre la nouvelle fenètre
  	window.open(addr, "_blank", "resizable=yes,width=750,height=400,menuBar=yes,toolbar=yes, location=yes, status=yes, scrollbars=yes, copyhistory=yes")  ;
  	e.preventDefault()  ;
  	return false ;
}


// ****************************************************************
 // Fonction appelée lorsqu'il s'agit d'un lien de type POPUP
function lienPopup(e)
{
	// recupérer l'element qui vient d'être activé
	elmt = getStandardElement(e)  ;
	// recup url à afficher
  	var addr = elmt.getAttribute("href") ; 
  	// Ouvre la Popup 
  	window.open(addr, "popup", "resizable=yes,width=750,height=400,menuBar=no,toolbar=no, location=no, status=no, scrollbars=yes, copyhistory=no")  ;
  	e.preventDefault()  ;
  	return false ;
}


// ****************************************************************
 // Fonction appelée lorsqu'il s'agit d'un lien de type CLOSE
function closePopup(e)
{
	// Fermeture Popup
	window.close();
  	return false ;
}

// ****************************************************************
 // Vérifie l'intégralité des liens et ajoute un évènement onClick
 // en fonction des class utlisées pour définir le lien
function verifLinks() 
{
	// Recup liste complète de tous les liens
 	var lien, list, i ;
 	list = document.getElementsByTagName('a') ;
 	
 	// Pour chaque lien de la liste
 	for(i=0; i<list.length; i++) 
 	{
 		// récup info lien + Test si il est bien formaté (HREF + CLASS)
   		lien = list.item(i) ;
   		if (lien.getAttribute("href") && lien.className) 
   		{
   			// Si le nom de class contient externe >> action lien externe >> ouverture nouvelle fenêtre
     			if ((" "+lien.className+" ").indexOf("externe") != -1) 
     			{addEvent(lien, "click", lienExterne) ;}
     			
     			// Si le nom de class contient popup >> action ouverture Popup
     			if ((" "+lien.className+" ").indexOf("popup") != -1) 
     			{addEvent(lien, "click", lienPopup) ;}
     			
     			// Si le nom de class contient close >> alor fermeture de la popup
     			if ((" "+lien.className+" ").indexOf("close") != -1) 
     			{addEvent(lien, "click", closePopup) ;}
  		 }
 	}
}


// ****************************************************************
 // Lance la vérification des liens une fois que la page est chargée
if (document.getElementById) {
  addEvent(window, 'load', verifLinks) ;
}

