<!--
// Librairie de fonctions jQuery de chiffrage/déchiffrage élémentaire
// d'adresses de courrier électronique. Dépend de jQuery 1.2.6+
//
// (c) 2001-2008 Le Petit Atelier de Génie logiciel, Olivier Lange
//
// Consultez http://www.petit-atelier.ch/ pour contacter l'auteur et
// http://www.petit-atelier.ch/email.html pour un formulaire interactif
// permettant de chiffrer les adresses.
//
// Ce script est distribué selon les termes de le GNU General Public License
// (voir http://www.fsf.org/licensing/licenses/gpl.html et la notice qui suit).
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
// $Id: jquery.xpg.js 71 2009-03-23 07:43:30Z olange@petit-atelier.ch $

( function( $){
  // ~~~ Constants ~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~

  var mailtoSplit = /^(mailto:)(.*)$/

  // ~~~ Wrapper functions ~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~

  $.fn.xpguncrypt = function() {
    return this.each( function() {
      var m = mailtoSplit.exec( this.href);
      this.href = m[1] + xpgEmailUncrypt( m[2]);
    });
  }; // xpguncrypt

  $.fn.xpgcrypt = function() {
    return this.each( function() {
      var m = mailtoSplit.exec( this.href);
      this.href = m[1] + $.xpgEmailCrypt( m[2]);
    });
  }; // xpgcrypt

  // ~~~ Local functions ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~

  var xpgTranslate = function( sText, sMapSrc, sMapDst) { //v1.0, olange
  // Transpose les caractères d'une chaîne de caractères à partir d'une table de correspondance,
  // à la façon de la fonction XPath 'translate()'. Les caractères qui ne figurent pas dans
  // la table de correspondance sont transcrits tels quels.
  //
  // @param sText  chaîne de caractères dont les caractères doivent être transposés.
  // @param sMapSrc  chaîne de caractères représentant la source de la table de correspondance.
  // @param sMapDest  chaîne de caractères représentant la destination de la table de correspondance.
  // @returns  la chaîne de caractères transposée.
  //
  // @assert  que les paramètres sMapSrc et sMapDst contiennent le même nombre de caractères,
  //   c'est-à-dire qu'il existe une correspondance dans sMapDst pour chaque caractère de sMapSrc.
    var i,j,c,sResult='';
    for( i = 0; i < sText.length; i++) {
      c = sText.charAt( i);
      j = sMapSrc.indexOf( c);
      sResult += ( j != -1) ? sMapDst.charAt( j) : c;
    }
    return sResult;
  }; // xpgTranslate

  var xpgEmailUncrypt = function( sCrypt) { //v1.1, olange
  // Déchiffrage d'une chaîne de caractères encodée par la fonction XSL 'xpg.util.emailEncrypt'
  // ou la fonction 'xpgEmailEncrypt' (voir ci-après).
  //
  // @param sCrypt  chaîne de caractères contenant l'adresse de courrier électronique
  //   (ou toute chaîne de caractères) qui doit être encodée.
  // @returns  la chaîne de caractères encodée.
    var sSrc = "|zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA.@_-=9876543210";
    var sDst = "%0123456789=-_@.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    return xpgTranslate( sCrypt, sSrc, sDst);
  }; // xpgEmailUncrypt

  var xpgEmailCrypt = function( sEmail) { //v1.1, olange
  // Chiffrage symétrique d'une chaîne de caractères. L'encodage, très simple et symétrique,
  // n'a pour but que d'empêcher des aspirateurs d'adresses de courrier électronique d'identifier
  // celles-ci; il est obtenu par une transposition élémentaire de tous les caractères, y compris
  // de ceux qui forment le protocole. Pour décoder, nous transposons simplement dans "l'autre sens".
  //
  // Note: cette fonction doit être en phase avec la fonction 'xpg.util.emailEncrypt' du script
  // XSL 'transform/xpage/xpg-util.inc.xsl').
  //
  // Note: le caractère pourcent '%' ne doit pas figurer dans la chaîne chiffrée, car il serait
  // interprété par le navigateur comme séquence spéciale avant d'être déchiffré. On le remplace
  // ici par le caractère pipe '|', qui ne devrait pas se trouver dans une adresse email.
  //
  // @param sCrypt  chaîne de caractères contenant l'adresse de courrier électronique
  //   (ou toute chaîne de caractères) qui doit être décodée.
  // @returns  la chaîne de caractères décodée.
    var sSrc = "%0123456789=-_@.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    var sDst = "|zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA.@_-=9876543210";
    return xpgTranslate( sEmail, sSrc, sDst);
  }; // xpgEmailCrypt
})( jQuery);

// On document ready
$( function(){
  $("a[behavior*=xpguncrypt]").xpguncrypt();
  $("a[behavior*=xpgcrypt]").xpgcrypt();
});

// eof -->