<!--
// nav.js (http://www.buchbon.ch/com/script/nav.js)
//
// Librairie de fonctions JavaScript de gestion des évènements déclenchés 
// par la manipulation des éléments graphiques interactifs des pages.
//
// $Id: nav.js 282 2007-08-05 17:28:46Z olange@petit-atelier.ch $
//
// (c) Le Petit Atelier de Génie logiciel, http://www.petit-atelier.ch/,
// à l'exception des fonctions conçues par Macromedia et générées par
// par l'outil Macromedia Dreamweaver, http://www.macromedia.com/.

/* Functions that locates a property within the DOM. */
function MM_findObj(n, d) { //v4.0, Macromedia
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

/* Functions that swaps images. */
function MM_swapImage() { //v3.0, Macromedia
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0, Macromedia
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

/* Function that handle preload. */
function MM_preloadImages() { //v3.0, Macromedia
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

/* Function that handle element property updating. */
function MM_changeProp(objName,x,theProp,theValue) { //v3.0, Macromedia
  var obj = MM_findObj(objName);
  if (obj && (theProp.indexOf("style.")==-1 || obj.style)) eval("obj."+theProp+"='"+theValue+"'");
}

/* Function that opens a document in a new window. */
function MM_openBrWindow(theURL,winName,features) { //v2.0, Macromedia
  window.open(theURL,winName,features);
}

/* Function that handle page language switching. */
function setlang(lang,loc) { //v1.0, olange@petit-atelier.ch
  // Remplace un motif de langue codé dans une URI ('/fr/index.html')
  // par le motif correspondant ('/de/index.html') au code langue passé
  // dans le paramètre 'lang' ('de').
  //
  // @param lang  chaîne de caractères avec code de la langue, dont le
  //   motif doit être placé dans l'adresse URI; les valeurs possibles 
  //   sont { 'de', 'fr', 'it', 'en' }.
  //
  // @param loc (optionnel)  chaîne de caractères contenant l'adresse URI
  //   dont le motif de la langue doit être subsitué; si non spécifié,
  //   utilise par défaut l'URI de la page courante.
  //
  // @returns  si le paramètre 'loc' a été spécifié, retourne l'adresse URI
  //   après substitution du motif de langue; sinon, ne retourne aucune valeur
  //   et met à jour directement l'adresse de la page courante.
  //
  // @except  affiche un message d'erreur si le code langue est invalide.
  //
  // Notes: si l'URI d'origine ne contient pas de motif de langue, il est inséré.
  //
  // Le motif n'est localisé qu'en tant que préfixe de la partie relative au nom
  // de ressource (après le protocole et l'hôte figurant dans l'URI).
  //
  // La fonction n'est pas sensible à la casse de l'URI d'origine; attention: pour
  // la même raison, elle ne préserve pas la casse de l'URI d'origine.
  //
  // Codes langue et motifs de langue: 'fr' et 'fr/' pour le français, 'de' et 'de/' pour l'allemand,
  // 'it' et 'it/' pour l'italien, 'rm' et 'rm/' pour le rétro-romanche et 'en' et 'en/' pour l'anglais.
  // 
  // Exemple: l'appel setlang( 'fr', 'http://www.gallerie-ph.ch/de/cartes/index.html')
  // doit retourner 'http://www.gallerie-ph.ch/fr/cartes/index.html'; l'appel setlang( 'fr')
  // commande quant à lui le chargement de l'URI de la page en cours mise à jour avec le motif
  // de langue correspondant au français ('fr').

  // Enumération des motifs de langues susceptibles d'être codés dans une adresse URI
  var URN_PREFIX_FR = 'fr/', URN_PREFIX_DE = 'de/', URN_PREFIX_IT = 'it/', URN_PREFIX_RM = 'rm/'
  var urn_prefix_arr = new Array( URN_PREFIX_FR, URN_PREFIX_DE, URN_PREFIX_IT, URN_PREFIX_RM)

  // Mode d'exécution: si l'argument 'loc' est défini, c'est celui-ci qui est manipulé
  // et sa nouvelle valeur qui est retournée; sinon, c'est l'URL de la fenêtre en cours
  // qui est manipulé et mis à jour, une valeur TRUE (!0) étant retournée par la fonction.

  var retNewLoc = -1 // si positionné, indique que la nouvelle URL doit être retournée
  if( !loc)  { loc = window.location.href; retNewLoc = 0 } // sinon, indique qu'une valeur TRUE doit être retournée

  // Conversion de l'URI en cours en minuscules
  loc = loc.toLowerCase()

  // Localisation du motif de langue en cours

  // Position de départ de la recherche d'un motif de langue existant
  var uri_prot = '://'
  var is = loc.indexOf( uri_prot);
  if( is != -1) {                                         // Si indicateur de protocole présent,
    is += uri_prot.length; var it = loc.indexOf( '/', is) // recherche premier slash le suivant:
    if( it == -1) { loc += '/'; is = loc.length }         // départ = caractère suivant le slash (ou
    else { is = it+1 }                                    // suivant le nom d'hôte auquel on ajoute
  } else {                                                //  un slash, s'il n'y avait pas de slash).
    is = (( loc.charAt( 0) == '/') ? 1 : 0)               // Sinon, départ = premier caractère, ou le suivant
  } // if-else                                            // si ce premier caractère est un slash.

  // Extraction du motif de langue en cours, s'il en existe un
  var im = -1
  for( i = 0; i < urn_prefix_arr.length; i++) {
    im = loc.indexOf( urn_prefix_arr[ i], is)
    if( im == is) { loc = loc.substr( 0, im) + loc.substr( im+urn_prefix_arr[ i].length); break }
  } // for

  // Recomposition de l'adresse URL contenue dans loc avec le nouveau préfixe

  // Détermination du nouveau préfixe
  var new_urn_lang = ''
  switch( lang) {
    case 'fr':  new_urn_lang = URN_PREFIX_FR; break
    case 'de':  new_urn_lang = URN_PREFIX_DE; break
    case 'it':  new_urn_lang = URN_PREFIX_IT; break
    case 'rm':  new_urn_lang = URN_PREFIX_RM; break
      return // Langues momentanément indisponibles
    default:   alert( "Paramètre de langue invalide: '"+lang+"'"); return
  } // switch

  // Insertion du nouveau motif, à l'endroit où l'existant été localisé
  newLoc = loc.substr( 0, is) + new_urn_lang + loc.substr( is);

  // Valeur retournée: selon mode d'exécution (voir plus haut)
  if( retNewLoc) { return( newLoc) }
  else { window.location.href = newLoc }
} // setlang

/* Function that sets focus on an element; when called with setFocus(null), sets the focus
 * on the first visible element of the first form, whenever there is one on the page. */
function setFocus(e,f) { //v1.0, olange & mbigler
  var x,i=0; if(e) x=MM_findObj(e,f);
  else { var f=document.forms; if( f && f[0]) { x=f[0].elements[i++];
    while( x.type == "hidden") x=f[0].elements[i++]; }}
  if(x) { x.focus(); if (x.type == "text") x.select(); }
}

// eof -->