/* ================================================================================ * * 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 += '
' ; var Postfixe = '
' ; 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) ; }