/* cls.js : fonctions utilitaires JavaScript du site CLS.				**
*************************************************************************/

// donne un nom a la fenetre (base target du plan et du glossaire)
window.name="cls";

/* Fonction utilisee dans la section outils/glossaire 
** Verification des champs du formulaire
***************************************************************/
function cherche_glossaire( motcle ) {
 
   trouve = "nok";
 
   for (i=0; (trouve != "OK") && (i< document.glossaire.elements.length); i++) {
      ancre  = document.glossaire.elements[i].name;
      lancre = ancre.toLowerCase();
      if ( lancre.indexOf( motcle.toLowerCase() ) == 0 )
         trouve = "OK";
   }
   
   if ( trouve == "OK" )
      location.hash = ancre;
   
   else
      alert( "Desole, le mot \"" + motcle + "\" n'est pas trouve." );
}

/* 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();
      }   
}

/* Ouverture de fenetres "calendrier", rubriques Aventure et Voile 
***************************************************************/
function OpenCalendar (lequel) {
	var fichier = "" ;
	var h=530 ;

	if (lequel=='old_en') {
		fichier = "calendrier2003_en.html";
		h=750;
	}
	else if(lequel=='old_fr'){
		fichier = "calendrier2003_fr.html";
		h=750;
	}
	else if(lequel=='en'){
		fichier = "calendrier_en.html";
		h=540;
	}
	else if(lequel=='fr'){
		fichier = "calendrier_fr.html";
		h=540;
	}
	else if(lequel=='old_fr_voile'){
		fichier = "calendrier2000_fr.html";
		h=280;
	}
	else if(lequel=='old_en_voile'){
		fichier = "calendrier2000_en.html";
		h=280;
	}
	else if(lequel=='fr_voile'){
		fichier = "calendrier_fr.html";
		h=400;
	}
	else if(lequel=='en_voile'){
		fichier = "calendrier_en.html";
		h=400;
	}

    // ouverture 
	var winName = "calendier"+lequel;
    var win = window.open(fichier, winName, "resizable=yes,scrollbars=no,toolbar=no,directories=no,menubar=no,top=10,left=10,width=830,height=" + h);
    if (win.opener == null) win.opener = this;
    // focus (si la fenetre est deja ouverte)
    win.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();
}

/* 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 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 (indExt==-1) {return};
	if ((languecible!="fr") && (languecible!="en") && (languecible!="es")) { return }
	newExt = "_" + languecible + ext;
	// page affichee dans la fenetre courante
	document.location = nom.substring(0, indExt) + newExt;
}

/* 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 bcc 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 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];
	document.write('<a href="&#109;&#97;&#105;'+'&#108;&#116;&#111;&#58;'+nomMail+'&#64;'+url+'?bcc=webmaster'+'&#64;'+'cls.fr')
	if (ccNom && ccUrl) {
		document.write('&cc='+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>')
}

/* Affiche la date de derniere modification du document, 
** selectionne l'anglais si son nom est de type '_en'.
*******************************************************/
function lastModif() {
	var date = new Date(document.lastModified);
	var annee = date.getFullYear(); 
	var mois = date.getMonth()+1;
	if (mois < 10) { mois = "0" + mois; }
	var jour = date.getDate();
	if (jour < 10) { jour = "0" + jour; }
	
	if ((annee<1970)&&(annee>=1900)) {annee+=100}
	// version anglaise (_en dans le nom du document)
	var nom = document.location.toString();
	if (nom.indexOf("_en") != -1) {
		document.write(annee + "/" + mois + "/" + jour);
	// sinon version francaise ou espagnole
	} else {
		document.write(jour + "/" + mois + "/" + annee);
	}
}

/* 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; }
}


/* Ouvre et ferme la fenetre 'Magazine'
*******************************************************/
function afficheMag () {
	if (document.getElementById("magazineBox") != null) {
		document.getElementById("magazineBox").style.visibility="visible";
	}
}
function fermeMag () {
	if (parent.frames[0] != null) {
		if (parent.frames[0].document.getElementById("magazineBox") != null) {
			parent.frames[0].document.getElementById("magazineBox").style.visibility="hidden";
		}
	}
	else {
		if (document.getElementById("magazineBox") != null) {
			document.getElementById("magazineBox").style.visibility="hidden";
		}
	}
}

/* Mise en surbrillance de la rubrique active dans le menu de droite
** ID de la rubrique active du menu defini par
** <img name="nom_id_rubrique"> et <div id="nom_id_rubrique"> dans le menu de droite
*******************************************************/

// Affichage du curseur devant la rubrique active
function afficheCurseurMenu (RubriqueActive) {
	if (RubriqueActive!="off") { 
		Curseur=new Image ();
		Curseur.src="/images/common/menu_plus_actif.gif";
		if (document.images[RubriqueActive]) {
			document.images[RubriqueActive].src = Curseur.src;
		}
	}
}

// Surbrillance du texte de la rubrique active
function surbrillance (RubriqueActive) {
	if (RubriqueActive!="") { 
		document.write("<style><"+"!--\n");
		document.write("#"+RubriqueActive+"{background-image:url(/images/common/bg_rightmenuactif.gif);background-repeat-x: no-repeat;}\n");
		document.write("--"+">\n</style>");
	}
}

function activeItemMenu (RubriqueActive) {
	afficheCurseurMenu (RubriqueActive);
	surbrillance (RubriqueActive);
}

