/* cls.js : fonctions utilitaires JavaScript du site CLS.				**
*************************************************************************/

// donne un nom a la fenetre (base target du plan et du glossaire)
window.name="argos";

/* Verification de la validite 'syntaxique' d'une adresse email
** saisie dans un formulaire
***************************************************************/
function emailCheck (emailStr) {
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	
	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
		alert("Email address seems incorrect (check @ and .'s)")
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]
	
	if (user.match(userPat)==null) {
	    alert("Invalid email address:\nThe username doesn't seem to be valid.")
	    return false
	}
	
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		  for (var i=1;i<=4;i++) {
		    if (IPArray[i]>255) {
		        alert("Invalid email address:\nDestination IP address is invalid!")
			return false
		    }
	    }
	    return true
	}
	
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		alert("Invalid email address:\nThe domain name doesn't seem to be valid.")
	    return false
	}
	
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || 
	    domArr[domArr.length-1].length>4) {
	   alert("Invalid email address:\nThe address must end in a three or four-letter domain, or two letter country.")
	   return false
	}
	
	if (len<2) {
	   var errStr="Invalid email address:\nThis address is missing a hostname!"
	   alert(errStr)
	   return false
	}
	
	return true;
}

/* Ouvre un fenetre (pop-up) sans barres de navigation, avec menu,
** sans scrolls, redimensionable
***************************************************************/
function openWindow(url,largeur,hauteur,name)
{

// marge autour de l'image
largeur+=20;
hauteur+=20;

// version du navigateur
var browser="";
if(navigator.appName=="Netscape" && parseInt(navigator.appVersion)==3) { browser="n3"; }
if(navigator.appName=="Netscape" && parseInt(navigator.appVersion)==4) { browser="n4"; }
if(navigator.appVersion.indexOf("MSIE 4.0") != -1) { browser="ie4"; }

// Positionnement de la fenêtre
var w=0;
var h=0;
if ( browser=="n4" )
   {
   var screen_height=parent.screen.height;
   var screen_width=parent.screen.width;
   h=(screen_height-50-eval(largeur))/4;
   w=(screen_width-eval(largeur))/2;
   }
else {
	w=((800-eval(largeur))/2);
	h=((600-50-eval(hauteur))/4);
	}
if (h<0) h=0;
if (w<0) w=0;

// ouverture de la fenêtre et focus
// définit un nom de fenêtre unique
date = new  Date  ();
nom = date.getTime() ;
var newWind=window.open(url,nom,'toolbar=no,directories=no,location=no,resize=yes,menubar=yes,scrollbars=no,top='+h+',left='+w+',height='+hauteur+',width='+largeur);

   if (newWind.opener == null)
      {newWind.opener = window;}
   else
      { 
      if ( browser=="n3"  ||  browser=="n4"  ||  browser=="ie4" )
         newWind.focus();
      }   
}

/* Ouvre une fenetre sans barres de navigation, mais redimensionnable.
** Le nom de la fenetre est calcule d'apres l'url afin de n'ouvrir
** qu'une fenetre par service (1 plan, 1 glossaire, etc...)
** Parametres :
**   url = url de la page a afficher
**   w, h = largeur et hauteur (par défaut (650x500)
**   target = cible (par défaut nom du fichier, 'images' ou '_blank')
*********************************************************************/
function ouvreCadre(url) {
    // calcul du nom simple de la page a partir de l'url
    var fin = url.indexOf(".html");
    // traitement des parametres facultatifs de taille
    var w = arguments[1];
    var h = arguments[2];
    var nom = arguments[3];
    // page html : nom du fichier (plan, glossaire,...)
    if (!nom) {
        if (fin != -1) {
            var deb = url.lastIndexOf("/");
            nom = url.substring(deb + 1, fin);
        } else {
            // image (gif, jpg) : fenetre 'images'
            fin = url.indexOf(".gif");
            if (fin == -1) fin = url.indexOf(".jpg");
            if (fin != -1) nom = "images";
            // sinon nouvelle fenetre
            else nom = "_blank";
        }
    }
    if (!w) w = 650;
    if (!h) h = 500;
    // ouverture 
    var win = window.open(url, nom, "resizable=yes,scrollbars=yes,toolbar=no,width=" + w + ",height=" + h);
    if (win.opener == null) win.opener = this;
    // focus (si la fenetre est deja ouverte)
    win.focus();
}

/* Ouvre une image .gif, .jpg ou .png via la page /tools/popup_image.php
** sans barres de navigation, redimensionnee automatiquement
** a la taille de l'image.
** Par defaut le nom de la fenetre est fixe, toutes les images s'ouvrent
** donc dans ma meme fenetre.
** Parametres :
**   url = url absolue de l'image à afficher (pas de http://.. ni de relatif)
**   target = cible (par défaut 'imagesautoresize')
*********************************************************************/
function ouvreImage(urlImage) {
    // traitement des parametres facultatifs de taille
    var nom = arguments[1];
    // page html : nom du fichier (plan, glossaire,...)
    if (!nom) {
		nom = "imagesautoresize";
    }
    w = 650;
    h = 500;
	url = "/tools/popup_image.php?"+ urlImage; 
    // ouverture 
    var win = window.open(url, nom, "resizable=yes,scrollbars=no,toolbar=no,status=yes,left=20,top=20,width=" + w + ",height=" + h);
    if (win.opener == null) win.opener = this;
    // focus (si la fenetre est deja ouverte)
    win.focus();
}

/* Bascule vers l'autre version de la page (fr/en/es). 
** Retour :	false si aucune action (document ni '_fr', ni '_en', ni '_es'
**                               ou languecible ni 'fr', ni 'en', ni 'es')
**			true si le document alternatif est charge.
***************************************************************/
function changeLangue(languecible) {          // languecible = 'fr' ou 'en' ou 'es'
	var nom = document.location.toString();
    // memorisation de l'extension
	var indParams = nom.lastIndexOf("?");
	var parametres = "";
	if (indParams!=-1) {
		nom = nom.substring(0, indParams);
		parametres = nom.substring(indParams);
	}
	var indExt = nom.lastIndexOf(".");
    var ext = nom.substring(indExt);

  	var newExt;
	indExt = nom.indexOf("_en");
	if (indExt==-1) {indExt = nom.indexOf("_fr")} 
	if (indExt==-1) {indExt = nom.indexOf("_es")}
	if ((languecible!="fr") && (languecible!="en") && (languecible!="es")) { return }
	// sans nom de page (page par defaut)
	if (indExt==-1) {
		// page affichee dans la fenetre courante
		document.location = 'welcome_' + languecible + '.html' + parametres;
	}
	// avec nom de page
	else {
		newExt = "_" + languecible + ext;
		// page affichee dans la fenetre courante
		document.location = nom.substring(0, indExt) + newExt + parametres;
	}
}

/* Compose un lien d'adresse e-mail (pour tenter de minimiser les spams)
** Parametres :
**   nom = Nom qui apparait en lien (John SMITH)
**         Si nom = "adresse" le nom affiche sera l'adresse email
**   nomMail = identifiant de messagerie (john.smith)
**   url = url de l'adresse e-mail (cls.fr)
**   classe = classe de style (class="classe", facultatif)
**   objet = objet du mail (champ "subject", facultatif)
**   ccNom = identifiant de destinataire en copie (pierre.durand, facultatif)
**   ccUrl = url de l'adresse e-mail de destinataire en copie (cls.fr, facultatif)
**   bccNom = identifiant de destinataire en copie cachee (pierre.durand, facultatif)
**   bccUrl = url de l'adresse e-mail de destinataire en copie cachee (cls.fr, facultatif)
***************************************************************/
function lienMail (nom,nomMail,url)	{
    // traitement du parametre facultatif de style
    var classe = arguments[3];
    var objet = arguments[4];
    var ccNom = arguments[5];
    var ccUrl = arguments[6];
    var bccNom = arguments[7];
    var bccUrl = arguments[8];
	document.write('<a href="&#109;&#97;&#105;'+'&#108;&#116;&#111;&#58;'+nomMail+'&#64;'+url)
	if (objet || (ccNom && ccUrl) || (bccNom && bccUrl)) {
		document.write('?')
	}
	if (ccNom && ccUrl) {
		document.write('cc='+ccNom+'&#64;'+ccUrl)
	}
	if ((ccNom && ccUrl) && (bccNom && bccUrl)) {
		document.write('&')
	}
	if (bccNom && bccUrl) {
		document.write('bcc='+bccNom+'&#64;'+bccUrl)
	}
	if (objet && ((ccNom && ccUrl)||(bccNom && bccUrl))) {
		document.write('&')
	}
	if (objet) {
		document.write('subject='+escape(objet))
	}
	document.write('"')
	if (classe) {
		document.write(' class="'+classe+'"')
	}
	document.write('>')
	if (nom == "adresse") {
		document.write(nomMail+'&#64;'+url)
	}
	else {
		document.write(nom)
	}
	document.write('</a>')
}

/* Meme chose que lienMail() avec cc au webmaster
** Parametres :
**   nom = Nom qui apparait en lien (John SMITH)
**         Si nom = "adresse" le nom affiche sera l'adresse email
**   nomMail = identifiant de messagerie (john.smith)
**   url = url de l'adresse e-mail (cls.fr)
**   classe = classe de style (class="classe", facultatif)
**   objet = objet du mail (champ "subject", facultatif)
**   ccNom = identifiant de destinataire en copie (pierre.durand, facultatif)
**   ccUrl = url de l'adresse e-mail de destinataire en copie (cls.fr, facultatif)
***************************************************************/
function lienMailCc (nom,nomMail,url)	{
    // traitement du parametre facultatif de style
    var classe = arguments[3];
    var objet = arguments[4];
    var ccNom = arguments[5];
    var ccUrl = arguments[6];
	document.write('<a href="&#109;&#97;&#105;'+'&#108;&#116;&#111;&#58;'+nomMail+'&#64;'+url+'?cc=webmaster'+'&#64;'+'cls.fr')
	if (ccNom && ccUrl) {
		document.write(','+ccNom+'&#64;'+ccUrl)
	}
	if (objet) {
		document.write('&subject='+escape(objet))
	}
	document.write('"')
	if (classe) {
		document.write(' class="'+classe+'"')
	}
	document.write('>')
	if (nom == "adresse") {
		document.write(nomMail+'&#64;'+url)
	}
	else {
		document.write(nom)
	}
	document.write('</a>')
}

/* Meme chose que lienMail() avec cc au webmaster
** Appel de lienMailCc. lienMailBcc conservé pour compatibilité
** avec l'existant.
***************************************************************/
function lienMailBcc (nom,nomMail,url)	{
    // traitement du parametre facultatif de style
    var classe = arguments[3];
    var objet = arguments[4];
    var ccNom = arguments[5];
    var ccUrl = arguments[6];
	lienMailCc (nom,nomMail,url,classe,objet,ccNom,ccUrl)
}

/* Vérifie que le champ de recherche du moteur de recherche 
** interne est valide avant de lancer la recherche
*******************************************************/
function checkSearchForm(form) {
	var recherche = form.words.value;
	if ((recherche == "Rechercher...") || (recherche == "Search for...") || (recherche == "Buscar...") || (recherche == "")) {
		return false;
	}
	else { return true; }
}
