/* ================================================================================
*
* Fonction JavaScript diverses (mais nez en moins tres utiles)
*
* ================================================================================
*/
/* ********************************************************************************
* Tente de reconnaître le browser actuel
*/
function TestBrowser()
{
this.ver = navigator.appVersion ;
this.agent = navigator.userAgent ;
this.dom = 0 ;
this.ie6 = 0 ;
this.ie5 = 0 ;
this.ie4 = 0 ;
this.ie = this.ie4 || this.ie5 || this.ie6 ;
this.mac = 0 ;
this.ns7 = 0 ;
this.ns6 = 0 ;
this.ns4 = 0 ;
this.ns = this.ns6 || this.ns7 ;
this.opera = 0 ;
this.moz = 1 ;
this.bw = (this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera || this.moz) ;
return this ;
}
/* ********************************************************************************
* Ouvre une fenêtre annexe
*
* URL URL complete, parametres y compris
* Nom Nom interne de la fenetre
* Largeur Largeur en pixels de la fenetre
* Longueur Longueur en pixels de la fenetre
*/
function ouvrirFenetre(URL, Nom, Largeur, Hauteur)
{
Fenetre = window.open(URL, Nom, 'scrollbars=yes,resizable=yes,toolbar=no,menubar=no,location=no,titlebar=yes,width=' + Largeur + ',height=' + Hauteur) ;
Fenetre.focus() ;
}
/* ================================================================================
* Interface 'portable' d'acces aux objets de la page et
* de manipulation de leur style
*
* Modules d'apres ceux de Chris Nott disponibles sur http://www.dithered.com
*/
/* ********************************************************************************
* Retourne l'objet dont on a passe le nom.
* Point de passage obligatoire avant de manipuler l'objet, les autres
* fonctions utilisant ce qui est retourné ici
*/
function getObject (e,f)
{
if (document.layers)
{
f = (f) ? f : self ;
var V = f.document.layers ;
if (V[e])
return V[e] ;
for (var W = 0 ; W < V.length ; )
t = getObject (e, V[W++]) ;
return t ;
}
if (document.all)
return document.all[e] ;
return document.getElementById(e) ;
}
/* ********************************************************************************
* Dans le cas de Netscape 6, les valeurs de taille et position dans les
* styles sont suivis de 'px'
* Cette fonction supprime le 'px'
*/
function clean(Coord)
{
if ((Coord == '') || (Coord == 0))
return (Coord) ;
else
return (parseInt(Coord)) ;
}
/* ********************************************************************************
* Rend un objet visible
*/
function showObject (e)
{
if (document.layers)
e.visibility = 'show' ;
else
e.style.visibility = 'visible' ;
}
/* ********************************************************************************
* Cache un objet
*/
function hideObject (e)
{
if (document.layers)
e.visibility = 'hide' ;
else
e.style.visibility = 'hidden' ;
}
/* ********************************************************************************
* Lit l'ordre d'empilement (z-index) d'un objet
*/
function getZindex (e)
{
if (document.layers)
return (e.zindex) ;
else
return (e.style.zindex) ;
}
/* ********************************************************************************
* Change l'ordre d'empilement (z-index) d'un objet
*/
function setZindex (e,z)
{
if (document.layers)
e.zindex = z ;
else
e.style.zindex = z ;
}
/* ********************************************************************************
* Lit la position horizontale d'un objet
*/
function getLeft (e)
{
if (document.layers)
return (e.left) ;
else
if (Browser.opera)
return (e.style.pixelLeft) ;
else
return (clean(e.style.left) * 10 / 10) ;
}
/* ********************************************************************************
* Change la position horizontale d'un objet
*/
function setLeft (e,x)
{
if (document.layers)
e.left = x ;
else
if (Browser.opera)
e.style.pixelLeft = x ;
else
e.style.left = x + px ;
}
/* ********************************************************************************
* Lit la position verticale d'un objet
*/
function getTop (e)
{
if (document.layers)
return (e.top) ;
else
if (Browser.opera)
return (e.style.pixelTop) ;
else
return (clean(e.style.top) * 10 / 10) ;
}
/* ********************************************************************************
* Change la position verticale d'un objet
*/
function setTop (e,y)
{
if (document.layers)
e.top = y ;
else
if (Browser.opera)
e.style.pixelTop = y ;
else
e.style.top = y + px ;
}
/* ********************************************************************************
* Lit la largeur d'un objet
*/
function getWidth (e)
{
if (document.layers)
return (e.clip.width) ;
else
if (Browser.opera)
return (e.style.pixelWidth) ;
else
return (clean(e.style.width)) ;
}
/* ********************************************************************************
* Change la largeur d'un objet
*/
function setWidth (e,w)
{
if (document.layers)
e.clip.width = w ;
else
if (Browser.opera)
e.style.pixelWidth = w ;
else
e.style.width = w + px ;
}
/* ********************************************************************************
* Lit la hauteur d'un objet
*/
function getHeight (e)
{
if (document.layers)
return (e.clip.height) ;
else
if (Browser.opera)
return (e.style.pixelHeight) ;
else
return (clean(e.style.height)) ;
}
// ---------[ setHeight ]----------------------------------------------------------
//
// Change la hauteur d'un objet
//
// En entree :
// e Reference de l'objet
// h Hauteur a affecter a l'objet
//
function setHeight (e,h)
{
if (document.layers)
e.clip.height = h ;
else
if (Browser.opera)
e.style.pixelHeight = h ;
else
e.style.height = h + px ;
}
// ---------[ setClip ]------------------------------------------------------------
//
// Definit la zone visible d'un objet (clipping)
//
// En entree :
// e Reference de l'objet
// t Coordonnee du haut du rectangle (top)
// r Coordonnee de droite du rectangle (right)
// b Coordonnee du bas du rectangle (bottom)
// x Coordonnee de gauche du rectangle (left)
//
function setClip(e,t,r,b,x)
{
if (document.layers)
{
X = e.clip ;
X.top = t ;
X.right = r ;
X.bottom = b ;
X.left = x ;
}
else
e.style.clip = 'rect(' + t + px + ' ' + r + px + ' ' + b + px + ' ' + x + px + ')' ;
}
// ---------[ writeHTML ]---------------------------------------------------------
//
// Change le contenu HTML d'un objet
//
// En entree :
// e Reference de l'objet
// h HTML a injecter
//
function writeHTML (e,h)
{
if (document.layers)
{
e.document.open() ;
e.document.write(h) ;
e.document.close() ;
}
if (e.innerHTML)
e.innerHTML = h ;
}
// ---------[ getBGColor ]--------------------------------------------------------
//
// Recupere la couleur de fond d'un objet
//
// En entree :
// e Reference de l'objet
//
function getBGColor(e)
{
return(e.style.backgroundColor) ;
}
// ---------[ setBGColor ]--------------------------------------------------------
//
// Change la couleur de fond d'un objet
//
// En entree :
// e Reference de l'objet
// c Nouvelle couleur
//
function setBGColor(e, c)
{
e.style.backgroundColor = c ;
}
// ---------[ getFGColor ]--------------------------------------------------------
//
// Recupere la couleur de texte d'un objet
//
// En entree :
// e Reference de l'objet
//
function getFGColor(e)
{
return(e.style.color) ;
}
// ---------[ setFGColor ]--------------------------------------------------------
//
// Change la couleur de texte d'un objet
//
// En entree :
// e Reference de l'objet
// c Nouvelle couleur
//
function setFGColor(e, c)
{
e.style.color = c ;
}
// ---------[ setBorderColor ]----------------------------------------------------
//
// Change la couleur des bordures d'un objet
//
// En entree :
// e Reference de l'objet
// t Nouvelle couleur de la bordure haute
// r Nouvelle couleur de la bordure droite
// b Nouvelle couleur de la bordure basse
// l Nouvelle couleur de la bordure gauche
//
function setBorderColor(e, t, r, b, l)
{
if (t != '')
e.style.borderTopColor = t ;
if (r != '')
e.style.borderRightColor = r ;
if (b != '')
e.style.borderBottomColor = b ;
if (l != '')
e.style.borderLeftColor = l ;
}
/* ********************************************************************************
* Lit le mode d'affichage (display) d'un objet
*/
function getDisplay (e)
{
if (document.layers)
return (e.display) ;
else
return (e.style.display) ;
}
/* ********************************************************************************
* Change le mode d'affichage (display) d'un objet
*/
function setDisplay (e,z)
{
if (document.layers)
e.display = z ;
else
e.style.display = z ;
}
// ================================================================================
/*
* Initialisations
*/
var Browser = new TestBrowser() ;
var px = ((Browser.ie) || (Browser.ns6)) ? 'px' : '' ;
// -----------------------------------------------------------------------
// Creation des tableaux des jours et mois pour les fonctions de
// conversion des dates alphabetiques
// -----------------------------------------------------------------------
MoisFR = new Array("Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin",
"Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre") ;
JoursFR = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi",
"Vendredi", "Samedi") ;
MoisEN = new Array("January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December") ;
JoursEN = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday") ;
// ---------[ coderDateAlphabetique ]--------------------------------------
//
// Conversion d'une date en chaine alphabetique (sans l'heure)
//
// En entree :
// laDate Date qu'il faut convertir
//
// En sortie :
// Retour Chaine contenant la date formatee
//
function coderDateAlphabetique(laDate)
{
var DateCourante = new Date(laDate) ;
var lAnnee = DateCourante.getFullYear() ;
var leMois = MoisFR[DateCourante.getMonth()] ;
var leJour = JoursFR[DateCourante.getDay()] ;
return leJour + " " + DateCourante.getDate() + " " + leMois + " " + lAnnee ;
}
// ---------[ coderHeureAlphabetique ]------------------------------------
//
// Conversion d'une date et d'une heure en chaine alphabetique
//
// En entree :
// laDate Date qu'il faut convertir
//
// En sortie :
// Retour Chaine contenant la date formatee
//
function coderDateHeureAlphabetique(laDate)
{
var DateCourante = new Date(laDate) ;
var lAnnee = DateCourante.getFullYear() ;
var leMois = MoisFR[DateCourante.getMonth()] ;
var leJour = JoursFR[DateCourante.getDay()] ;
return leJour + " " + DateCourante.getDate() + " " + leMois + " " + lAnnee +
" à " + DateCourante.getHours() + " heures " + DateCourante.getMinutes() ;
}
// ---------[ coderDateNumerique ]----------------------------------------
//
// Conversion d'une date en chaine numerique (sans l'heure)
//
// En entree :
// laDate Date qu'il faut convertir
//
// En sortie :
// Retour Chaine contenant la date formatee
//
function coderDateNumerique(laDate)
{
DateCourante = new Date(laDate) ;
leMois = new String(DateCourante.getMonth() + 1) ;
if (leMois.length == 1)
{
leMois = "0" + leMois ;
}
leJour = new String(DateCourante.getDate()) ;
if (leJour.length == 1 )
{
leJour = "0" + leJour ;
}
return leJour + "/" + leMois + "/" + DateCourante.getFullYear() ;
}
// ---------[ coderDateHeureNumerique ]-----------------------------------
//
// Conversion d'une date et d'une heure en chaine numerique
//
// En entree :
// laDate Date qu'il faut convertir
//
// En sortie :
// Retour Chaine contenant la date formatee
//
function coderDateHeureNumerique(laDate)
{
DateCourante = new Date(laDate) ;
leMois = new String(DateCourante.getMonth() + 1) ;
if (leMois.length == 1)
{
leMois = "0" + leMois ;
}
leJour = new String(DateCourante.getDate()) ;
if (leJour.length == 1 )
{
leJour = "0" + leJour ;
}
lHeure = new String(DateCourante.getHours())
if (lHeure.length == 1 )
{
lHeure = "0" + lHeure ;
}
laMinute = new String(DateCourante.getMinutes())
if (laMinute.length == 1 )
{
laMinute = "0" + laMinute ;
}
return leJour + "/" + leMois + "/" + DateCourante.getFullYear() + " " +
lHeure + ":" + laMinute ;
}
// ---------[ coderHeureNumerique ]---------------------------------------
//
// Conversion d'une heure en chaine numerique
//
// En entree :
// laDate Date qu'il faut convertir
//
// En sortie :
// Retour Chaine contenant l'heure formatee
//
function coderHeureNumerique(laDate)
{
DateCourante = new Date(laDate) ;
lHeure = new String(DateCourante.getHours())
if (lHeure.length == 1 )
{
lHeure = "0" + lHeure ;
}
laMinute = new String(DateCourante.getMinutes())
if (laMinute.length == 1 )
{
laMinute = "0" + laMinute ;
}
return lHeure + ":" + laMinute ;
}
// ---------[ initChampTexte ]-------------------------------------------
//
// Initialisation des caracteristiques d'un champ texte
//
// En entree :
// Nom Nom du champ a traiter
// Longueur Taille du champ en pixels
// Hauteur Hauteur du champ en pixels
// Modifiable Flag indiquant se le champ est saisissable
// Alignement 'left' ou 'right' selon l'alignement voulu
//
function initChampTexte(Nom, Longueur, Hauteur, Modifiable, Alignement)
{
var Objet, i ;
Objet = getObject(Nom) ;
if (Objet)
{
for (i = 0 ; i < arguments.length ; i++)
{
switch(i)
{
case 1 :
if (Longueur != 0)
setWidth(Objet, Longueur) ;
break ;
case 2 :
if (Hauteur != 0)
setHeight(Objet, Hauteur) ;
break ;
case 3 :
if (Modifiable)
{
Objet.readOnly = false ;
setBGColor(Objet, '#ffffff') ;
setFGColor(Objet, '#000000') ;
}
else
{
Objet.readOnly = true ;
setBGColor(Objet, '#f0f0f0') ;
setFGColor(Objet, '#000000') ;
}
break ;
case 4 :
Objet.style.textAlign = Alignement ;
break ;
}
}
}
}
// ---------[ changerBoutonRadio ]---------------------------------------
//
// Changement de l'etat d'un bouton radio 'image'
//
// En entree :
// Champ Nom du champ qui contient le nom du bouton actuellement selectionne
// Nom Nom du bouton a basculer
//
// En sortie :
// Le bouton initialement selectionne est a l'etat normal
// Le bouton clique est a l'etat coche
// Le champ 'Champ' contient 'Nom'
//
function changerBoutonRadio(Champ, Nom)
{
var Formulaire, Cible, Bouton ;
Formulaire = document.formulaire ;
Cible = eval('Formulaire.' + Champ) ;
if (Cible.value != Nom)
{
/*
if (Cible.value != '')
{
Bouton = getObject(Cible.value) ;
Bouton.src = 'images/rbn_normal.gif' ;
}
Bouton = getObject(Nom) ;
Bouton.src = 'images/rbn_checked.gif' ;
*/
Cible.value = Nom ;
}
traiterComplement(Nom) ;
}
// ---------[ changerCaseACocher ]---------------------------------------
//
// Changement de l'etat d'une case a cocher 'image'
//
// En entree :
// Le champ 'Champ' contient la combinaison des noms des cases actuellement cochees
// Le bouton 'Nom' est celui a cocher
// Etat est a vide, 'on' ou 'off' selon ce qu'on veut
//
// En sortie :
// Le bouton clique est a l'etat coche ou decoche
// Le champ 'Champ' contient la nouvelle combinaison des noms des cases cochees
//
function changerCaseACocher(Champ, Nom, Etat)
{
var Formulaire, Cible, Bouton, NbChamps, Trouve, i ;
var Boutons = new Array() ;
Formulaire = document.formulaire ;
Cible = eval('Formulaire.' + Champ) ;
if (Cible.value != '')
{
Boutons = Cible.value.split('|') ;
NbChamps = Boutons.length ;
Trouve = false ;
for (i = 0 ; i < NbChamps ; i++)
{
if ((Boutons[i] == Nom) && ((Etat == '') || (Etat == 'off')))
{
// Bouton coche -> On le decoche
// et on le supprime de la liste
Trouve = true ;
/*
Bouton = getObject(Nom) ;
Bouton.src = 'images/cbx_normal.gif' ;
*/
Boutons.splice(i, 1) ;
break ;
}
}
if ((! Trouve) && ((Etat == '') || (Etat == 'on')))
{
// Bouton pas encore coche -> On le coche
// et on le rajoute a la liste
/*
Bouton = getObject(Nom) ;
Bouton.src = 'images/cbx_checked.gif' ;
*/
Boutons.push(Nom) ;
}
Cible.value = Boutons.join('|') ;
}
else
{
if ((Etat == '') || (Etat == 'on'))
{
// Rien de coche initialement -> on coche le bouton clique
/*
Bouton = getObject(Nom) ;
Bouton.src = 'images/cbx_checked.gif' ;
*/
Cible.value = Nom ;
}
}
}
// ---------[ chargerListe ]---------------------------------------------
//
// Charge une listbox ou combobox avec un ensemble de valeurs
//
// En entree :
// Liste Objet liste à traiter
// Valeurs Tableau associatif contenant
// - en clé, la valeur associée à l'item
// - en valeur, le texte de l'item
// Mode 'R' = Remplacement du contenu
// 'RT' = Remplacement avec tri selon items
// 'A' = Ajout au contenu
// 'AT' = Ajout avec tri complet selon items
//
function chargerListe(Liste, Valeurs, Mode)
{
var i, Item, Tempo = new Array() ;
if ((Liste.type != 'select-one') && (Liste.type != 'select-multiple'))
return ;
if ((Valeurs.length == 0) && ((Mode == 'R') || (Mode == 'RT')))
{
Liste.length = 0 ;
return ;
}
if (Mode == 'AT')
{
Tempo = recupererValeursListe(Liste) ;
for (Valeur in Tempo)
{
Valeurs[Valeur] = Tempo[Valeur] ;
Valeurs.length++ ;
}
}
if ((Mode == 'R') || (Mode == 'RT') || (Mode == 'AT'))
Liste.length = 0 ;
if ((Mode == 'RT') || (Mode == 'AT'))
Valeurs = trierValeursTableauAssociatif(Valeurs) ;
i = Liste.length ;
for (Valeur in Valeurs)
{
Item = new Option() ;
Item.value = Valeur ;
Item.text = Valeurs[Valeur] ;
Liste[i++] = Item ;
}
Liste.selectedIndex = 0 ;
}
// ---------[ selectionnerListeCle ]-------------------------------------
//
// Selectionne un ou des elements dans une listbox ou combobox
// d'apres la cle ou valeur de l'element
//
// En entree :
// Liste Objet liste à traiter
// Valeurs Tableau contenant les valeurs des items a selectionner
//
function selectionnerListeCle(Liste, Valeurs)
{
var i, j, Valeurs ;
if ((Liste.type != 'select-one') && (Liste.type != 'select-multiple'))
return ;
for (i = 0 ; i < Valeurs.length ; i++)
for (j = 0 ; j < Liste.length ; j++)
if (Liste.options[j].value == Valeurs[i])
Liste.options[j].selected = true ;
}
// ---------[ selectionnerListeTexte ]-----------------------------------
//
// Selectionne un ou des elements dans une listbox ou combobox
// d'apres le libelle de l'element
//
// En entree :
// Liste Objet liste à traiter
// Valeurs Tableau contenant les valeurs des items a selectionner
//
function selectionnerListeTexte(Liste, Valeurs)
{
var i, j, Valeurs ;
if ((Liste.type != 'select-one') && (Liste.type != 'select-multiple'))
return ;
for (i = 0 ; i < Valeurs.length ; i++)
for (j = 0 ; j < Liste.length ; j++)
{
if (Liste.options[j].text == Valeurs[i])
{
Liste.options[j].selected = true ;
break ;
}
}
}
// ---------[ recupererSelectionListe ]----------------------------------
//
// Recupere les choix selectionnes dans une listbox ou combobox
//
// En entree :
// Liste Objet liste à traiter
//
// En sortie :
// Valeurs Tableau associatif contenant
// - en clé, la valeur associée à l'item
// - en valeur, le texte de l'item
//
function recupererSelectionListe(Liste)
{
var i, Valeurs ;
if ((Liste.type != 'select-one') && (Liste.type != 'select-multiple'))
return ;
Valeurs = new Array() ;
for (i = 0 ; i < Liste.length ; i++)
if (Liste.options[i].selected)
Valeurs[Liste.options[i].value] = Liste.options[i].text ;
return (Valeurs) ;
}
// ---------[ recupererValeursListe ]------------------------------------
//
// Recupere tous les items presents dans une listbox ou combobox
//
// En entree :
// Liste Objet liste à traiter
//
// En sortie :
// Valeurs Tableau associatif contenant
// - en clé, la valeur associée à l'item
// - en valeur, le texte de l'item
//
function recupererValeursListe(Liste)
{
var i, Valeurs ;
if ((Liste.type != 'select-one') && (Liste.type != 'select-multiple'))
return ;
Valeurs = new Array() ;
for (i = 0 ; i < Liste.length ; i++)
{
Valeurs[Liste.options[i].value] = Liste.options[i].text ;
Valeurs.length++ ;
}
return (Valeurs) ;
}
// ---------[ trierListe ]-----------------------------------------------
//
// Trie tous les items presents dans une listbox ou combobox
//
// En entree :
// Liste Objet liste à trier
// Mode 'Valeur' = tri selon les valeurs
// 'Item' = tri selon les textes
//
function trierListe(Liste, Mode)
{
var i, Valeurs, Item ;
if ((Liste.type != 'select-one') && (Liste.type != 'select-multiple'))
return ;
Valeurs = new Array() ;
for (i = 0 ; i < Liste.length ; i++)
if (Mode == 'Item')
Valeurs[Liste.options[i].value] = Liste.options[i].text ;
else
Valeurs[Liste.options[i].text] = Liste.options[i].value ;
Valeurs = trierValeursTableauAssociatif(Valeurs) ;
Liste.length = 0 ;
i = 0 ;
for (Valeur in Valeurs)
{
Item = new Option() ;
if (Mode == 'Item')
{
Item.value = Valeur ;
Item.text = Valeurs[Valeur] ;
}
else
{
Item.value = Valeurs[Valeur] ;
Item.text = Valeur ;
}
Liste.options[i++] = Item ;
}
}
// ---------[ trierValeursTableauAssociatif ]----------------------------
//
// Trie le contenu d'un tableau associatif selon ses valeurs (pas ses clés)
//
// En entree :
// Tablo Tableau a trier
//
// En sortie :
// Tableau trie
//
// ATTENTION : Ne fonctionne pas s'il y a des doublons dans les valeurs !!!
//
function trierValeursTableauAssociatif(Tablo)
{
var i, Tempo1, Tempo2 ;
Tempo1 = new Array() ;
Tempo2 = new Array() ;
i = 0 ;
for (Cle in Tablo)
{
Tempo1[i++] = Tablo[Cle] ;
Tempo1.length++
}
Tempo1.sort() ;
for (i = 0 ; i < Tempo1.length ; i++)
for (Cle in Tablo)
if (Tempo1[i] == Tablo[Cle])
{
Tempo2[Cle] = Tempo1[i] ;
Tempo2.length++ ;
}
return (Tempo2) ;
}
// ---------[ trierClesTableauAssociatif ]----------------------------
//
// Trie le contenu d'un tableau associatif selon ses clés
//
// En entree :
// Tablo Tableau a trier
//
// En sortie :
// Tableau trie
//
function trierClesTableauAssociatif(Tablo)
{
var i, Tempo1, Tempo2 ;
Tempo1 = new Array() ;
Tempo2 = new Array() ;
i = 0 ;
for (Cle in Tablo)
Tempo1[i++] = Cle ;
Tempo1.sort() ;
for (i = 0 ; i < Tempo1.length ; i++)
Tempo2[Cle] = Tempo1[i] ;
return (Tempo2) ;
}
// ---------[ verifierEmail ]---------------------------------------
//
// Verification de la validite structurelle d'une adresse email
//
// En entree :
// adresse Adresse a verifier
//
// En sortie :
// Retour 'faux' si adresse incorrecte
// 'vrai' sinon
//
function verifierEmail (adresse)
{
var emailPattern = /^(.+)@(.+)$/ ;
var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]" ;
var validChars = "\[^\\s" + specialChars + "\]" ;
var quotedUser = "(\"[^\"]*\")" ;
var ipDomainPattern = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/ ;
var atom = validChars + '+' ;
var word = "(" + atom + "|" + quotedUser + ")" ;
var userPattern = new RegExp("^" + word + "(\\." + word + ")*$") ;
var domainPattern = new RegExp("^" + atom + "(\\." + atom +")*$") ;
//
// On commence par separer la partie nom d'utilisateur
// de la partie nom de domaine
//
var matchArray = adresse.match(emailPattern) ;
if (matchArray == null)
{
// L'adresse email semble incorrecte
return false ;
}
var user = matchArray[1] ;
var domaine = matchArray[2] ;
//
// On verifie ensuite le nom d'utilisateur
//
if (user.match(userPattern) == null)
{
// Le nom d'utilisateur semble invalide
return false ;
}
//
// Dans le cas ou le domaine est une adresse IP au lieu d'un nom,
// on verifie que l'adresse est correcte
//
var IPArray = domaine.match(ipDomainPattern) ;
if (IPArray != null)
{
// Ca ressemble a une adresse IP...
for (var i = 1 ; i <= 4 ; i++)
{
if (IPArray[i] > 255)
{
// ...mais ca n'en est pas une
return false ;
}
}
return true
}
//
// On s'assure que le nom de domaine a une syntaxe acceptable
//
var domainArray = domaine.match(domainPattern) ;
if (domainArray == null)
{
// ce qui ne semble pas etre le cas
return false ;
}
//
// La syntaxe du nom de domaine semble valide, mais il faut
// maintenant s'assurer qu'on a bien une terminaison sur deux ou
// trois lettres, precedee d'un point et d'un autre nom
//
//
// On isole chacun des composants du nom de domaine
//
var atomPattern = new RegExp(atom,"g") ;
domainArray = domaine.match(atomPattern) ;
var len = domainArray.length ;
if (domainArray[domainArray.length - 1].length < 2 || domainArray[domainArray.length - 1].length > 4)
{
// La derniere partie ne fait pas deux ou trois caracteres
return false ;
}
//
// On verifie maintenant l'avant-derniere partie
//
if (len < 2)
{
// Elle n'est pas assez longue
return false ;
}
// Si on arrive la, c'est que l'adresse semble valide
return true ;
}
// FONCTIONS ECRITES PAR TARZENT (merci Tarzent !)
// Supprime les espaces de début et de fin de chaine
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
// Complete une date pour qu'elle soit au format JJ/MM/AAAA
// 1.01.1, 1/1/01, 01-01-01, 010101, 01012001 donneront tous 01/01/2001
// dans le cas ou l'année n'est pas complétement renseignée,
// celle-ci est déduite en fonction de l'année en cours
// (ex: 2/12/54 -> 02/12/1954 et 2/12/4 -> 02/12/2004)
String.prototype.completeDate = function()
{
var chain = this;
if (/^\d+$/.test(chain) && (6 == chain.length || 8 == chain.length))
chain = chain.substring(0, 2) + "/" + chain.substring(2, 4) + "/" + chain.substring(4, chain.length);
var reg = /^(\d{1,2})[\/\.\\-](\d{1,2})[\/\.\\-](\d{1,4})$/;
if (reg.test(chain))
{
chain = chain.replace(reg, "$1/$2/$3");
var tab = chain.split("/");
for (var i = 0; i < 2; i++)
tab[i] = eval(tab[i]) > 9 ? tab[i] : "0" + eval(tab[i]);
if (4 != tab[2].length)
{
var ObjetDate = new Date();
var year = new String(ObjetDate.getFullYear());
if (eval(tab[2]) > eval(year.substring(2,4)))
year = eval(year.substring(0,2) - 1) + year.substring(2,4);
tab[2] = year.substring(0, 4 - tab[2].length) + tab[2];
}
return tab.join("/");
}
return chain;
}
// Remplace toutes les occurences d'une chaine
String.prototype.replaceAll = function(search, repl)
{
var str = this;
while (str.indexOf(search) != -1)
str = str.replace(search, repl);
return str;
}
// VERIFICATION DE CHAINES DE CARACTERES
// Date au format JJ/MM/AAAA (à utiliser éventuellement avec completeDate())
// Vérifie si la date existe.
String.prototype.isDate = function()
{
if (/^\d{2}[\/]\d{2}[\/]\d{4}$/.test(this))
{
var dat1 = this.split("/");
var dat2 = new Date(dat1[2], dat1[1] - 1, dat1[0]);
return (dat2.getDate() == dat1[0] && dat2.getMonth() == dat1[1]-1 && dat2.getFullYear() == dat1[2]);
}
return false;
}
// Caractères alphabétiques (accents pris en charge + espaces)
String.prototype.isAlpha = function()
{
return /^[A-Za-zÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôùû\s]+$/.test(this);
}
// Caractères alphanumériques (+ accents + espaces)
String.prototype.isAlphaNum = function()
{
return /^[\wÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôùû\s]+$/.test(this);
}
// Caractères numériques (= nombre positif)
String.prototype.isNumeric = function()
{
return /^\d+$/.test(this);
}
// La chaine représente un nombre (positif ou négatif)
String.prototype.isNumber = function()
{
return /^[-]?\d+$/.test(this);
}
// La chaine n'est pas constituée que de caractères d'espacement
String.prototype.isNotEmpty = function()
{
return !/^\s*$/.test(this);
}
// E-mail (vérifie juste que l'adresse est conforme puisque l'utilisateur peut toujours
// s'arranger pour donner une fausse adresse, ou une adresse temporaire...;-)
String.prototype.isEmail = function()
{
return /^[\w\._]+@[\w]{2,}[.][A-Za-z]{1,6}$/.test(this);
}
// Numéro de téléphone (formats: 0NNNNNNNNN, 0N-NN-NN-NN-NN,
// 0N.NN.NN.NN.NN et 0N NN NN NN NN)
String.prototype.isNoTel = function()
{
return /^[+]{0,1}\d{0,3}[ ]{0,1}(\d{2,3}[ \.-]{0,1}){2,4}$/.test(this) ;
// return /^(0\d{9)|(0\d[ \.-]\d{2}[ \.-]\d{2}[ \.-]\d{2}[ \.-]\d{2})$/.test(this);
}
// Numéro de sécu
String.prototype.isNoSecu = function()
{
if (/^[12]\d{2}((1[0-2])|(0[1-9]))\d{10}$/.test(this))
{
var secu = parseInt(this.substring(0, 13));
var cle = parseInt(this.substring(13, 15));
return cle == (97 - secu % 97);
}
return false;
}
// === Fonctions de gestion des cookies ==================================================
function lireValeurCookie(offset)
{
var endstr = document.cookie.indexOf (";", offset) ;
if (endstr == -1)
endstr = document.cookie.length ;
return (unescape(document.cookie.substring(offset, endstr))) ;
}
function lireCookie(nom)
{
var arg = nom + "=" ;
var alen = arg.length ;
var clen = document.cookie.length ;
var i = 0 ;
while (i < clen)
{
var j = i + alen ;
if (document.cookie.substring(i, j) == arg)
return lireValeurCookie(j) ;
i = document.cookie.indexOf(" ", i) + 1 ;
if (i == 0)
break ;
}
return ('') ;
}
function ecrireCookie(nom, valeur)
{
var argv = ecrireCookie.arguments ;
var argc = ecrireCookie.arguments.length ;
var expires = (argc > 2) ? argv[2] : null ;
var path = (argc > 3) ? argv[3] : null ;
var domain = (argc > 4) ? argv[4] : null ;
var secure = (argc > 5) ? argv[5] : false ;
document.cookie = nom + "=" + escape(valeur) +
((expires==null) ? "" : ("; expires=" + expires.toGMTString())) +
((path==null) ? "" : ("; path=" + path)) +
((domain==null) ? "" : ("; domain=" + domain)) +
((secure==true) ? "; secure" : "") ;
}
function effacerCookie(nom)
{
date = new Date ;
date.setFullYear(date.getFullYear() - 1) ;
ecrireCookie(nom, null, date) ;
}
// === Fonctions de gestion des tooltips ==================================================
var TipNom = '' ;
var TipAffiche = false ;
var TipX = 0 ;
var TipY = 0 ;
function getEcranLargeur()
{
if (! Browser.ie)
return (parent.window.innerWidth) ;
else
return (parent.document.body.clientWidth) ;
}
function getEcranHauteur()
{
if (! Browser.ie)
return (parent.window.innerHeight) ;
else
return (parent.document.body.clientHeight) ;
}
function afficherTooltip(e, Nom)
{
var Objet, Texte ;
TipNom = Nom ;
if (! Browser.ie)
{
TipX = e.pageX ;
// TipY = e.pageY ;
TipY = 10 ;
}
else
{
TipX = event.x + document.body.scrollLeft ;
// TipY = event.y + document.body.scrollTop ;
TipY = 10 + document.body.scrollTop ;
}
Ecran = getEcranLargeur() ;
// window.status = 'TipX1 = ' + TipX + ' - TipY1 = ' + TipY
/*
if (TipX + 260 > Ecran)
TipX -= 260 ;
else
TipX += 10 ;
*/
TipX = 760 - 260 + (Ecran - 760) / 2 ;
TipY += 5 ;
// window.status += ' - TipX2 = ' + TipX + ' - TipY2 = ' + TipY + ' - Ecran = ' + Ecran ;
TipAffiche = true ;
setTimeout('montrerTooltip()', 500) ;
}
function montrerTooltip()
{
if (TipNom == '')
return ;
Objet = getObject('tooltip') ;
Objet.innerHTML = lireValeurTooltip(TipNom) ;
setTop(Objet, TipY) ;
setLeft(Objet, TipX) ;
if (TipAffiche)
showObject(Objet) ;
}
function cacherTooltip()
{
var Objet ;
if (! TipAffiche)
return ;
if (TipAffiche)
{
Objet = getObject('tooltip') ;
hideObject(Objet) ;
TipAffiche = false ;
}
}
function changerFondColonneMenu(Mouvement, Nom)
{
Objet = getObject(Nom) ;
if (Mouvement == 'in')
{
setBGColor(Objet, '#0080ff') ;
setFGColor(Objet, '#ffffff') ;
}
else
{
setBGColor(Objet, '#e0e0e0') ;
setFGColor(Objet, '#000000') ;
}
}
function changerFondBarreMenu(Mouvement, Nom)
{
Objet = getObject(Nom) ;
if (Mouvement == 'in')
{
setBGColor(Objet, '#e0e0e0') ;
setFGColor(Objet, '#000000') ;
}
else
{
setBGColor(Objet, '#0080ff') ;
setFGColor(Objet, '#ffffff') ;
}
}
function changerFondListe(Mouvement, Nom)
{
Objet = getObject(Nom) ;
Cellules = Objet.getElementsByTagName('td') ;
for (i = 0 ; i < Cellules.length ; i++)
{
if (Mouvement == 'in')
{
setBGColor(Cellules[i], '#f0f0f0') ;
setFGColor(Cellules[i], '#000000') ;
}
else
{
setBGColor(Cellules[i], '#ffffff') ;
setFGColor(Cellules[i], '#000000') ;
}
}
}
// --------- GESTION DYNAMIQUE DES SCRIPTS --------------------------
function chargerScript(NomFichier)
{
var Scripts = document.getElementsByTagName('script') ;
for (i = 0 ; i < Scripts.length ; i++)
{
if (Scripts[i].id == 'Nadynamic')
{
Scripts[i].parentNode.removeChild(Scripts[i]) ;
break ;
}
}
var Script = document.createElement('script') ;
Script.src = NomFichier ;
Script.type = 'text/javascript' ;
// Script.defer = true ;
Script.id = 'Nadynamic' ;
document.getElementsByTagName('head')[0].appendChild(Script) ;
}
// --------- GESTION DE LA ZONE DE DEBUG ---------------------------
var DebugZone ;
function clearDebug()
{
if (! Debug)
return ;
if (DebugZone)
DebugZone.innerHTML = 'Effacer Debug
' ;
}
function initDebug()
{
if (! Debug)
return ;
DebugZone = getObject('debug_zone') ;
if (DebugZone)
{
clearDebug() ;
setDisplay(DebugZone, 'block') ;
}
else
Debug = false ;
}
function debug(Chaine)
{
if (! Debug)
return ;
Chaine = Chaine.replaceAll('<', '<') ;
Chaine = Chaine.replaceAll('>', '>') ;
Chaine = Chaine.replaceAll('|', '
') ;
if (DebugZone)
{
DebugZone.innerHTML += Chaine.replaceAll("\n", "
") + "
" ;
}
}
// --------- GESTION DES LISTES -------------------------------------
function selectionListe(Liste, Cible)
{
var Objet, Chaine, Index, i ;
var Composantes = new Array() ;
var Valeurs = new Array() ;
var Options = new Array() ;
Objet = Liste ;
Index = Objet.selectedIndex ;
if (Index < 0)
return ;
Cible.value = Objet.options[Index].value ;
cacherComplement() ;
}
function montrerComplement(Largeur, Hauteur)
{
Objet = getObject('complement_cellule') ;
if (Hauteur != 0)
setHeight(Objet, Hauteur - 21) ;
Objet = getObject('complement') ;
setLeft(Objet, 350) ;
setTop(Objet, 150 + document.body.scrollTop) ;
if (Hauteur != 0)
setHeight(Objet, Hauteur) ;
showObject(Objet) ;
}
function cacherComplement()
{
Objet = getObject('complement') ;
hideObject(Objet) ;
Objet = getObject('complement_contenu') ;
Objet.innerHTML = ' '
}
function completerComplement(Fermer)
{
Objet = getObject('complement_contenu') ;
var Prefixe = ''
Prefixe += '| ' ;
Prefixe += ' |
' ;
Objet.innerHTML = Prefixe + Objet.innerHTML + Postfixe ;
}
// --------- TRAITEMENT DE LA SAISIE D'UN FORMULAIRE D'OBJET --------
function enregistrer(Objet, Mode, Prefixe)
{
var chainePost = '' ;
for (i = 0 ; i < document.formulaire.elements.length ; i++)
{
if (document.formulaire.elements[i].id.indexOf(Prefixe) == -1)
continue ;
chainePost += '&' + document.formulaire.elements[i].id + '=' + escape(document.formulaire.elements[i].value) ;
}
webService(Objet + '_enregistrement', 'mode=' + Mode + chainePost) ;
}
// --------- GESTION DE LA LISTE DES TELEPHONES OU DES EMAILS -------
var Liste = new Array() ;
var NbAjouts = 0 ;
function selectionnerListe()
{
var Objet, Chaine, Index, i ;
var Composantes = new Array() ;
var Valeurs = new Array() ;
var Options = new Array() ;
Objet = getObject('LISTE') ;
Index = Objet.selectedIndex ;
if (Index < 0)
return ;
Liste[0] = Objet.options[Index].text ;
Liste[1] = Objet.options[Index].value ;
Composantes = Liste[0].split('(') ;
Composantes[0] = Composantes[0].substr(0, Composantes[0].length - 1) ;
Composantes[1] = Composantes[1].substr(0, Composantes[1].length - 1) ;
Objet = getObject('SAISIE') ;
Objet.value = Composantes[0] ;
Valeurs[0] = Composantes[1] ;
selectionnerListeTexte(getObject('TYPE'), Valeurs) ;
}
function supprimerListe()
{
var Objet ;
var Liste = new Array() ;
Objet = getObject('LISTE') ;
for (i = 0 ; i < Objet.length ; i++)
{
if (Objet.options[i].selected)
continue ;
Liste[Objet.options[i].value] = Objet.options[i].text ;
Liste.length++ ;
}
chargerListe(Objet, Liste, 'RT') ;
}
function ajouterListe(TypeObjet)
{
var Objet ;
var Liste = new Array() ;
Objet = getObject('SAISIE') ;
if (Objet.value.trim == '')
return ;
if (TypeObjet == 'EMAIL')
{
if (! verifierEmail(Objet.value))
{
alert ('Adresse email invalide !') ;
return ;
}
}
else
if (! Objet.value.isNoTel())
{
alert ('Numero de telephone invalide !') ;
return ;
}
Liste['NEW' + ++NbAjouts] = Objet.value ;
Objet = getObject('TYPE') ;
Liste['NEW' + NbAjouts] += ' (' + Objet.options[Objet.selectedIndex].text + ')' ;
Liste.length++ ;
Objet = getObject('LISTE') ;
chargerListe(Objet, Liste, 'AT') ;
}
function recupererListe(Cible)
{
Objet = getObject(Cible) ;
if (Objet.value.trim() == '')
return ;
var Valeurs = Objet.value.split('\n') ;
var Liste = new Array() ;
for (i = 0 ; i < Valeurs.length ; i++)
Liste[(i + 1).toString()] = Valeurs[i] ;
Liste.length++ ;
Objet = getObject('LISTE') ;
chargerListe(Objet, Liste, 'RT') ;
}
function transfererListe(Cible)
{
Chaine = '' ;
Objet = getObject('LISTE') ;
for (i = 0 ; i < Objet.length ; i++)
{
if (i != 0)
Chaine += '\n' ;
Chaine += Objet.options[i].text ;
}
Objet = getObject(Cible) ;
Objet.value = Chaine ;
}
// --------- GESTION DES HEURES D'OUVERTURE D'UN ABONNE -------------
function recupererHeures()
{
Objet = getObject('ABO_OUVERTURE') ;
if (Objet.value.trim() == '')
return ;
var Heures = new Array() ;
var Valeurs = Objet.value.split('\n') ;
for (i = 0 ; i < Valeurs.length ; i++)
{
// Analyse de chaque ligne
Heures = Valeurs[i].split(' ') ;
Jour = Heures[0].substr(0,3).toUpperCase() ;
k = 1 ;
for (j = 1 ; j < Heures.length ; j++)
{
if (Heures[j] == 'Ferme')
break ;
if (Heures[j].indexOf(':') != -1)
{
Objet = getObject(Jour + k) ;
Objet.value = Heures[j] ;
k++ ;
}
}
}
}
function transfererHeures()
{
var Jours = new Array('Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim') ;
Chaine = '' ;
for (i = 0 ; i < 7 ; i++)
{
if (i != 0)
Chaine += '\n' ;
Chaine += Jours[i] + ' ' ;
for (j = 1 ; j <= 4 ; j++)
{
Objet = getObject(Jours[i].toUpperCase() + j) ;
if ((Objet.value.indexOf(':') != 2) || (Objet.value.length != 5))
{
alert ("Au moins une des heures n'est pas au bon format 'HH:MM' !") ;
return(-1) ;
}
if (j == 1)
{
if (Objet.value == '00:00')
{
Chaine += 'Ferme' ;
break ;
}
Chaine += Objet.value + ' - ' ;
}
if ((j == 2) || (j == 4))
{
if (Objet.value == '00:00')
{
alert ("Les heures ne sont pas correctement saisies !") ;
return(-1) ;
}
Chaine += Objet.value ;
}
if (j == 3)
{
if (Objet.value == '00:00')
break ;
Chaine += ' / ' + Objet.value + ' - ' ;
}
}
}
Objet = getObject('ABO_OUVERTURE') ;
Objet.value = Chaine ;
return(0) ;
}