/* ================================================================================ * * 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.ns6 = 0 ; this.ns4 = 0 ; this.opera = 0 ; this.bw = (this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera) ; // alert('dom : ' + this .dom + ' - opera : ' + this.opera + ' - ie6 : ' + this.ie6 + ' - ie5 : ' + this.ie5 + ' - ie4 : ' + this.ie4 + ' - ns6 : ' + this.ns6 + ' - ns4 : ' + this.ns4) ; return this ; } function Rediriger(entree) { if (screen.width >= 1024) { /* * Si l'ecran est en plus de 800x600 et que la page n'est pas appelee * par sa frame englobante, alors on reconstruit l'ensemble des frames * sinon, on ne reconstruit que l'ecran d'accueil */ if (parent.frames.length == 0) self.location = "index.php?Entree=" + entree ; } else { /* * Si l'ecran est de 800x600, on passe quand meme par la page * d'accueil */ if (parent.frames.length == 0) self.location = "accueil.php?Entree=" + entree ; } } /* ******************************************************************************** * Ouvre une fenetre 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 retourne 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 ((Browser.ie) || (Browser.ns6)) { var Pos = Coord.indexOf('px') ; if (Pos != -1) return (Coord.substring(0, Pos)) ; else return (Coord) ; } else return (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)) ; } /* ******************************************************************************** * 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)) ; } /* ******************************************************************************** * Change la hauteur d'un 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 ; } /* ******************************************************************************** * Change la partie visible d'un objet (rectangle de clipping) */ 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 + ')' ; } /* ******************************************************************************** * Change le contenu HTML d'un objet */ function writeHTML (e,h) { if (document.layers) { alert(e + ' - ' + h) ; e.document.open() ; e.document.write(h) ; e.document.close() ; } if (e.innerHTML) e.innerHTML = h ; } /* ******************************************************************************** * 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' : '' ; /* ******************************************************************************** * Recupere le texte selectionne dans la page */ function getSel() { if (window.getSelection) return (window.getSelection()) ; if (document.getSelection) return (document.getSelection()) ; if (document.selection) return (document.selection.createRange().text) ; return ; } // === 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) ; } // ---------[ verifierEmail ]--------------------------------------- // // Verification de la validite structurelle d'une adresse e-mail // // 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 e-mail 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 ; } // 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; } // 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; }