/**
 * SCRIPT initialement écris pour le forum de Yua, il permet maintenant de remplacer n'importe quel texte
 * en smiley si le texte est dans une balise SPAN et que le morceau de texte est défini comme étant un smiley
 *
 * Actuellement utilisé pour :
 *   Yua forum,
 *   barre info empire,
 *   album photos empire (commentaires),
 *   WatataEmpire (commentaire)
 * 
 */

tableauSmiley = new Array();

  tableauSmiley[0]  = new Array(":null"   ,   "null.gif");
  tableauSmiley[1]  = new Array(":marjo"  ,   "http://vivalempire.free.fr/smileys/marjo.gif");
  tableauSmiley[2]  = new Array(":ryu"    ,   "http://vivalempire.free.fr/smileys/ryu.gif");
  tableauSmiley[3]  = new Array(":wink"   ,   "http://vivalempire.free.fr/smileys/icon_wink.gif");
  tableauSmiley[4]  = new Array(":d"      ,   "http://vivalempire.free.fr/smileys/happy.gif");
  tableauSmiley[5]  = new Array(":p"      ,   "http://vivalempire.free.fr/smileys/tongue.gif");
  tableauSmiley[6]  = new Array(":o"      ,   "http://vivalempire.free.fr/smileys/embarassed.gif");
  tableauSmiley[7]  = new Array(":lol"    ,   "http://vivalempire.free.fr/smileys/laugh.gif");
  tableauSmiley[8]  = new Array(":/"      ,   "http://vivalempire.free.fr/smileys/ohwell.gif");
  tableauSmiley[9]  = new Array(":\\"     ,   "http://vivalempire.free.fr/smileys/ohwell.gif");
  tableauSmiley[10] = new Array(":("      ,   "http://vivalempire.free.fr/smileys/frown.gif");
  tableauSmiley[11] = new Array(":|"      ,   "http://vivalempire.free.fr/smileys/indifferent.gif");
  tableauSmiley[12] = new Array(":disquette", "http://vivalempire.free.fr/smileys/eyes.gif");
  tableauSmiley[13] = new Array(":)"      ,   "http://vivalempire.free.fr/smileys/smile.gif");
  tableauSmiley[14] = new Array(">d"      ,   "http://vivalempire.free.fr/smileys/grin.gif");
  tableauSmiley[15] = new Array(":ario"   ,   "http://vivalempire.free.fr/smileys/mafia.gif");
  tableauSmiley[16] = new Array(":arf"    ,   "http://vivalempire.free.fr/smileys/arf.gif");
  tableauSmiley[17] = new Array(":evil"   ,   "http://vivalempire.free.fr/smileys/devil.gif");
  tableauSmiley[18] = new Array(":gene"   ,   "http://vivalempire.free.fr/smileys/icon_redface.gif");
  tableauSmiley[19] = new Array(":rika"   ,   "http://vivalempire.free.fr/smileys/rika.gif");
  tableauSmiley[20] = new Array(":x"      ,   "http://vivalempire.free.fr/smileys/sick.gif");
  tableauSmiley[21] = new Array(">:"      ,   "http://vivalempire.free.fr/smileys/mad.gif");
  tableauSmiley[22] = new Array(":ange"   ,   "http://vivalempire.free.fr/smileys/angel.gif");
  tableauSmiley[23] = new Array(";)"      ,   "http://vivalempire.free.fr/smileys/wink.gif");
  tableauSmiley[24] = new Array(":yua"    ,   "http://vivalempire.free.fr/smileys/hihi.gif");
  tableauSmiley[25] = new Array(":zen"    ,   "http://vivalempire.free.fr/smileys/chineese.gif");
  tableauSmiley[26] = new Array(":ppgirl" ,   "http://vivalempire.free.fr/smileys/cheerleader.gif");
  tableauSmiley[27] = new Array(":drink"  ,   "http://vivalempire.free.fr/smileys/drink.gif");
  tableauSmiley[28] = new Array(":kisti"  ,   "http://forum-images.hardware.fr/images/perso/arwenalia.gif");
  tableauSmiley[29] = new Array(":love"   ,   "http://forum-images.hardware.fr/images/perso/arwenalia.gif");
  tableauSmiley[30] = new Array(":rikapaf",   "http://vivalempire.free.fr/smileys/rikapaf.gif");
  tableauSmiley[31] = new Array(":rolleyes",  "http://vivalempire.free.fr/smileys/eyes.gif");
  tableauSmiley[32] = new Array(":wowo"   ,   "http://vivalempire.free.fr/smileys/wowo.gif");
  tableauSmiley[33] = new Array(":oups"   ,   "http://vivalempire.free.fr/smileys/icon_redface.gif");

function chargement() {
		/*
		sortie = document.getElementById("out"); // DEBUG
		sortie.value = "";
		*/

bloc = document.getElementsByTagName("span");


  for (i = 0; i < bloc.length; i++) {
  
  smileyChanged = false; /* par défaut on n'a encore rien changé */
    

        for (j = 0; j < bloc[i].childNodes.length; j++) {

	cible = bloc[i].childNodes[j];

	  if (cible.nodeName == "#text") {
		    /* sortie.value += "\n\n" + cible.parentNode.childNodes[j].nodeName; // DEBUG */
		    changeSmiley(cible);
          }


       }/* 2° for */


  }/* 1° for */




}/* fin de chargement */


setTimeout("chargement()", 200);



function changeSmiley(cible) {

smileyTab = new Array();

var i = 0;

var indice = 0;
var longueur = 0;
var lastLong = 0;
var lastIndice = 0;

  while (i < cible.nodeValue.length) {

    
    data = check(cible, i);	/* contrôle tt les smileys dans le texte */
    indice = data[0];
    longueur = data[1];
    lastIndice = data[2];

    

      txt = document.createTextNode("");
      txt.nodeValue = cible.nodeValue.substring(lastIndice + lastLong, indice);
      cible.parentNode.insertBefore(txt, cible);
      /* crèe le texte avant le smiley et avant la borne de fin */

    
    if (data[3] == true) {
      smile = document.createElement("img");

        smile.src = tableauSmiley[ data[4] ][1];
        /* source du smiley */
        
      cible.parentNode.insertBefore(smile, cible);

    }
    /* un smiley est bien reconnu */


    lastLong = longueur;
    /* remet la longueur à jour */

      

    i = data[0]+1;
    /* i est mis à la prochaine position après celle du smiley */
    /* si on était dans le cas spécial d'un commencement de ligne, on remet à 1 */
    /* pour éviter une boucle infinie */
  }




cible.parentNode.removeChild(cible);
/* on peut maintenant supprimer le contenu principal du texte */

}/* fin de changeSmiley() */



function check(cible, indice) {


var i = indice;
/* plus 1 car on débute un char. après le dernier smiley */

//if ((i == 1) && (cible.nodeValue.charAt(0) == ":")) i--;
/* excepté si l'on est en début de ligne, auquel cas on remet à zéro */



data = new Array();
data[0] = i;      /* indice actuel                            */
data[1] = 0;      /* longueur du smiley                       */
data[2] = indice; /* correspond au lastIndice                 */
data[3] = false   /* si vrai alors smiley, sinon fin de texte */
data[4] = 0;      /* index sur SRC du smiley                  */

  while (i < cible.nodeValue.length) {

      if ( cible.nodeValue.charAt(i) == ":"
          ||
           cible.nodeValue.charAt(i) == ">"
          ||
           cible.nodeValue.charAt(i) == ";") {
      /* un smiley commence par ":" ou un ">" ou un ";" */
          smileTab = new Array();
          smileTab = checkSmile(i, cible.nodeValue);
      

          if (smileTab[0] != 0) {
            data[3] = true;		/* oui un smiley existe */
            data[4] = smileTab[0];      /* indice dans la table des smiley */
            data[1] = smileTab[1];      /* longueur du smiley = longueur du texte le représentant */
            break;
          }
      }

    

  i++;
  data[0] = i;
  }


return data;

}/* fin de check */


function checkSmile(indice, txt) {

var s = "";
var smileTab = new Array();
    smileTab[0] = 0; /* indice du smiley dans la table */
		     /* le CODE 0 indique que le smiley n'a pas été reconnu (par défaut) */
    smileTab[1] = 0; /* indique la longueur du smiley : 0 par défaut */

var i = indice;

  while (i < txt.length) {

    if (txt.charAt(i) == " ") break;
    //if (checkCodeSmile(s)[0]!=0) break; /** supprimé provisoirement : n'a pas de sens */

    s += txt.charAt(i);
    i++;
  }



smileTab = checkCodeSmile(s);
/* vérifie si le code du smiley existe */

return smileTab;


}/* fin de checkSmile */




function checkCodeSmile(s) {

/*
 * Seule partie modifiable du script.
 * Renvoit le numéro d'indice du smiley ainsi que sa longueur.
 */

var smileTab = new Array();
smileTab[0] = 0;
smileTab[1] = 0;
s = s.toLowerCase();
var i = 0;

  while (i < tableauSmiley.length) {

     if (s == tableauSmiley[i][0]) {               /* si on trouve le bon code                 */
       smileTab[0] = i;                            /* donne l'indice dans le tableau de smiley */
       smileTab[1] = tableauSmiley[i][0].length-1; /* donne la longueur du code -1 pour espace */
       break;
     }    

   i++;
  }

return smileTab;

}/* fin de checkCodeSmile */

