/* auteur: Bernard Martin-Rabaud */
/* date de creation: 01/02/01 */

// *****************************************************
// JEU DU PENDU : 
// *****************************************************

// *****************************************************
// VARIABLES GLOBALES
var liste = new CListeThemes();
// *****************************************************

// *****************************************************
// CLASSES DES THEMES

// constructeur de la classe des thèmes      
function CTheme(titre) {
   this.titre = titre; // titre du thème
   this.mots = new Array(); // liste des mots du thème
}

/*
// contrôle un mot
function CTh_controle_mot(nummot) {
   // contrôle si le nombre d'indices est <= 3
   var args = new Array();
   args = this.mots[nummot].split(",");
   // si le nombre d'indices est > 3, on ne prend que les 3 1ers
   if (args.length > 4) {
      alert("Ce mot contient plus de 3 indices ou un des indices contient lui-même une virgule");
	  this.mots[nummot] = args[0];
	  var i = 0;
	  for (i=1;i<4;i++) this.mots[nummot] += ", " + args[i];
   }  
}
*/

// crée un nouveau mot
function CTh_nouveau_mot(contenu) {
   var nbmots = this.mots.length;
   this.mots[nbmots] = contenu;
//   this.controle_mot(nbmots);
}
  
function CTh_modif_titre(titre) {
   this.titre = titre;
}

// retourne la valeur du mot de numéro "nummot" dans le thème 
function CTh_contenu_mot(nummot) {
   return this.mots[nummot];
}

// modifie le mot de numéro "nummot" dans le thème
function CTh_modif_mot(nummot, valeur) {
   this.mots[nummot] = valeur;
//   this.controle_mot(nummot);
}

// supprime le mot d'indice "nummot"
function CTh_suppr_mot(nummot) {
   var i = 0;
   for (i=nummot;i<this.mots.length-1;i++) this.mots[i] = this.mots[eval(i+1)];
   this.mots.length--;
} 

// "remonte" un mot d'un indice vers le début de la liste des mots
// ce qui revient à permutter le mot avec son précédent
function CTh_remonte_mot(nummot) {
   var i = 0;
   var temp = this.mots[nummot];
   var autremot = nummot ? nummot - 1 : this.mots.length - 1;
   this.mots[nummot] = this.mots[autremot];
   this.mots[autremot] = temp;
}

// "descend" un mot d'un indice vers la fin de la liste des mots
// ce qui revient à permutter le mot avec son suivant
function CTh_descend_mot(nummot) {
   var i = 0;
   var temp = this.mots[nummot];
   var autremot = (nummot == this.mots.length - 1) ? 0 : eval(nummot + 1);
   this.mots[nummot] = this.mots[autremot];
   this.mots[autremot] = temp;
}

// formatte le thème en accolant "titre|mot0|mot2|...."
function CTh_formatte() {
   var i = 0;
   var ch = this.titre;
   for (i=0;i<this.mots.length;i++) ch += "|" + this.mots[i];
   return ch;
}

// CTheme.prototype.controle_mot = CTh_controle_mot;
CTheme.prototype.nouveau_mot = CTh_nouveau_mot;
CTheme.prototype.modif_titre = CTh_modif_titre;
CTheme.prototype.contenu_mot = CTh_contenu_mot;
CTheme.prototype.modif_mot = CTh_modif_mot;
CTheme.prototype.suppr_mot = CTh_suppr_mot;
CTheme.prototype.remonte_mot = CTh_remonte_mot;
CTheme.prototype.descend_mot = CTh_descend_mot;
CTheme.prototype.formatte = CTh_formatte;
// FIN DE CLASSE DES MOTS ET THEMES
// *****************************************************


// *****************************************************
// CLASSE DE LA LISTE DES THEMES

function CListeThemes() {
   this.themes = new Array();
   this.cars = "0123456789AÀÂÄBCÇDEÉÈÊËFGHIÎÏJKLMNOÔÖPQRSTUÙÛÜVWXYZaàâäbcçdeéèêëfghiîïjklmnoôöpqrstuùûüvwxyz ";
}

// crée un objet CMot
function CLT_nouveau_mot(theme, valeur) {
   // ajoute à un nouvel objet CMot au thème
   this.themes[theme].nouveau_mot(valeur);
}

// ajoute à liste.themes un nouvel objet CTheme
function CLT_nouveau_theme(titre) {
   this.themes[this.themes.length] = new CTheme(titre);
}

// supprime un thème
function CLT_suppr_theme(numtheme) {
   var i = 0;
   this.themes[numtheme] = null;
   for (i=eval(numtheme+1);i<this.themes.length;i++)
      this.themes[i-1] = this.themes[i];
   this.themes.length--;
}

// supprime le mot d'indice "nummot" dans le thème "theme"
function CLT_suppr_mot(theme, nummot) {
   this.themes[theme].suppr_mot(nummot);
}

// modifie le mot de numéro "nummot" du thème "theme'
function CLT_modif_mot(theme, nummot, valeur) {
   this.themes[theme].modif_mot(nummot, valeur);
}

// détermine si le mot de numéro "nummot" du thème "theme" existe 
function CLT_existe_mot(theme, nummot) {
   return nummot < this.themes[theme].mots.length;
}

// retourne la valeur du mot de numéro "nummot" dans le thème "theme" 
function CLT_valeur_mot(theme, nummot) {
   return this.themes[theme].contenu_mot(nummot);
}

// code une lettre
function CLT_code_lettre(lettre, rotation) {
   var n = this.cars.indexOf(lettre);
   if (n == -1) return lettre;
   return this.cars.charAt(eval(n + rotation - (n < cars.length - rotation) ? 0 : cars.length));
}

// code un texte
function CLT_code(texte) {
   var i = 0;
   var n = ((texte.length > this.cars.length) || (texte.length < 3)) ? this.cars.length : texte.length;
   n = (n % 2) ? (n - 1) / 2 : n / 2; 
   var ch = "";
   for (i=0;i<texte.length;i++) ch += this.code_lettre(texte.charAt(i), n);
   return ch;
} 

// décode une lettre
function CLT_decode_lettre(lettre, rotation) {
   var n = this.cars.indexOf(lettre);
   if (n == -1) return lettre;
   return this.cars.charAt(eval(n - rotation + (n > rotation) ? 0 : this.cars.length));
}
   
// décode un texte
function CLT_decode(texte) {
   var i = 0;
   var n = ((texte.length > this.cars.length) || (texte.length < 3)) ? this.cars.length : texte.length;
   n = (n % 2) ? (n - 1) / 2 : n / 2; 
   var ch = "";
   for (i=0;i<texte.length;i++) ch += this.decode_lettre(texte.charAt(i), n);
   return ch;
} 

// formatte les thèmes de cette façon :
// "&theme0|mot00|mot01...&theme1|mot10|mot11|..."
function CLT_formatte() {
   var i = 0;
   var ch = "";
   for (i=0;i<this.themes.length;i++) ch += "&" + this.themes[i].formatte();
   return ch;
}
   
CListeThemes.prototype.nouveau_mot = CLT_nouveau_mot;
CListeThemes.prototype.nouveau_theme = CLT_nouveau_theme;
CListeThemes.prototype.suppr_theme = CLT_suppr_theme;
CListeThemes.prototype.suppr_mot = CLT_suppr_mot;
CListeThemes.prototype.existe_mot = CLT_existe_mot;
CListeThemes.prototype.valeur_mot = CLT_valeur_mot;
CListeThemes.prototype.modif_mot = CLT_modif_mot;
CListeThemes.prototype.code_lettre = CLT_code_lettre;
CListeThemes.prototype.code = CLT_code;
CListeThemes.prototype.decode_lettre = CLT_decode_lettre;
CListeThemes.prototype.decode = CLT_decode;
CListeThemes.prototype.formatte = CLT_formatte;







