GrattageFD

Aide au Grattage dans MountyHall, version 1.1.1 du 18/04/2013, par Vapulabehemot (82169)

2019-03-12 기준 버전입니다. 최신 버전을 확인하세요.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

/**************************************************************************************************************************
*  Script : GrattageFD "Aide au Grattage dans MountyHall"                                                                 *
*  Compatibilité : encodage UTF-8 (Greasemonkey, Chrome)                                                                  *
*  Auteur : Vapulabehemot (82169)                                                                                         *
*  Contributeurs : - basé sur l'étude de El'Haine (91821)                                                                 *
*                    http://www.mountyhall.com/Forum/display_topic_threads.php?ForumID=17&TopicID=156343&PagePosition=1	  *	
*                  - intégration de l'algorithme de détermination des gribouillages de trollthar (85665)                  *
*                    http://www.mountyhall.com/Forum/display_topic_threads.php?ThreadID=2454151#2454151                   *
*  Historique : 1.1.2 (03/03/2019, Roule) Correction return en dehors d'une fonction					                  *
*				1.1.1 (18/04/2013) compatibilité avec les parchemins gribouillés "naturels"				                  *
*				1.1.0 (17/04/2013) reconnaissance des gribouillages totalement grattés									  * 
*				1.0.0 (13/04/2013) gestion du Grattage de parchemins pour modification de leurs effets					  * 
*				0.0.1 (06/04/2013)                                                                                        *
**************************************************************************************************************************/


// ==UserScript==
// @name GrattageFD
// @description Aide au Grattage dans MountyHall, version 1.1.1 du 18/04/2013, par Vapulabehemot (82169)
// @version 1.1.2
// @include */mountyhall/MH_Play/Actions/Competences/Play_a_Competence26b.php*
// @injectframes 1
// @namespace https://greasyfork.org/users/70018
// ==/UserScript==


// *** CONSTANTES ***
var couleurBonus = '336633'; // vert '336633'
var couleurMalus = '990000'; // rouge '990000'
var couleurAutre= '000000'; // noir '000000'
var couleurSansEffet = '707070'; // gris '707070'


// *** Procédure principale exécutée sur la page de la compétence Grattage ***
if (window.self.location.toString().indexOf('Competences/Play_a_Competence26b.php') != -1) {
	bloc_main_grattage: try {
		// vérification du type de Grattage et décompte du nombre de gribouillages
		//'l_grib1' = Grattage d'un parchemin avec gribouillages alignés (dix gribouillages pour un parchemin, trois pour un parchemin gribouillé "naturel") 
		var l_grib1 = document.getElementsByClassName("l_grib1");
		if (l_grib1.length == 0) {
			break bloc_main_grattage;
		} 
				
		// récupération du formulaire
		var form = document.getElementsByName('ActionForm')[0];
		
		//récupération des numéros des gribouillages
		var gribouillages = new Array();
		var idGribouillages = new Array();
		var parchemin = '';
		for (var i=0;i<l_grib1.length;i++) {
			gribouillages[i] = form.childNodes[6].childNodes[1].childNodes[0].childNodes[i];
			// vérification de la présence des cases à cocher
			if (gribouillages[i].childNodes[0].type != "checkbox") {
				// gribouillage totalement Gratté non-sélectionnable : ajout d'une case à cocher invisible pour reproduire l'organisation des gribouillages[i]
				var unInput = document.createElement('input');
				unInput.type = "checkbox";
				unInput.value = 0;
				unInput.style.visibility = 'hidden';
				gribouillages[i].insertBefore(unInput, gribouillages[i].firstChild);
			}
			idGribouillages[i] = (gribouillages[i].childNodes[2].getAttribute('src')).replace('Play_a_Competence26_img.php?Code=', '');
			parchemin += idGribouillages[i] + ' ';
		}

		// analyse des gribouillages
		var resultatAnalyse = analyseGribouillages(parchemin.replace(/\s+$/g,''));
		var infoGribouillages = resultatAnalyse['infoGribouillages'];
		var effetGribouillages = resultatAnalyse['effetGribouillages'];
		var effetParchemin = '<br/>Effet Théorique du parchemin actuel = ' + resultatAnalyse['effetParchemin'];

		// génération de la fenêtre d'informations
		creerInfos();
		
		// ajout sur les gribouillages de la gestion d'affichage de la fenêtre d'informations 
		for (var i=0;i<l_grib1.length;i++) {
			gribouillages[i].childNodes[2].id = i;
			gribouillages[i].childNodes[2].addEventListener('mouseover', afficheInfos, true);
			gribouillages[i].childNodes[2].addEventListener('mouseout', cacheInfos, true);
		}

		// ajout sur les gribouillages de la gestion des cases à cocher
		for (var i=0;i<l_grib1.length;i++) {
			gribouillages[i].childNodes[0].addEventListener('click', cliqueGribouillage, true);
		}
		
		// ajout des zones d'affichage des effets sous les gribouillages 
		for (var i=0;i<l_grib1.length;i++) {
			var uneDiv = document.createElement('div');
			uneDiv.title = 'Effet du gribouillage';
			uneDiv.innerHTML = effetGribouillages[i];
			gribouillages[i].appendChild(uneDiv);
		}

		// ajout de la zone d'affichage de l'effet total du parchemin avant et après Grattage
		var uneDiv = document.createElement('div');
		uneDiv.innerHTML = effetParchemin + '</br></br>&nbsp';
		form.insertBefore(uneDiv, form.childNodes[7]);
	}
	catch (e) {
		alert('Main() : ' + e.message);
	}
}


// *** Analyse la suite de numéros de gribouillages reçue en paramètre et retourne le résultat sous forme d'un tableau de tableaux ***
function analyseGribouillages(parchemin) {
	try {
		var infoGribouillages = new Array();
		var effetGribouillages = new Array();
		var effetParchemin = '';
		var resultatAnalyse = new Array();
		
		// ****************************************************************************************************************************	
		// *** algorithme de détermination des effets des Grattages des gribouillages par trollthar (85665) : version du 21/02/2013 ***
		// ****************************************************************************************************************************
		//  + traduction du python vers le javascript
		//  + tableau des caractéristiques
		//  + exclusion des gribouillages déjà grattés et totalement grattés
		//  + remplacement de la sortie console par des sauvegardes dans le tableau de résultat
		//  + remplacement de l'effet du Grattage du gribouillage par l'effet du gribouillage
		
		var numerosOriginaux = parchemin.split(' ');
		var numeros = parchemin.split(' ');

		// + tableau des caractéristiques, avec les noms/abréviations utilisés dans MountyHall et dans l'ordre des affichages dans MountyHall
		// ATT | ESQ | DEG | REG | Vue | PV | TOUR | Armure | Effet de Zone
		// plus Durée
		var caracteristiques = new Array();
		caracteristiques[0] = 'ATT : ';
		caracteristiques[1] = 'ESQ : ';
		caracteristiques[2] = 'DEG : ';
		caracteristiques[3] = 'REG : ';
		caracteristiques[4] = 'Vue : ';
		caracteristiques[5] = 'PV : ';
		caracteristiques[6] = 'TOUR : ';
		caracteristiques[7] = 'Armure : ';
		caracteristiques[8] = 'Effet de Zone : ';
		caracteristiques[9] = 'Durée : ';
		
		var effetDict = new Array();
		effetDict[1320] = [caracteristiques[0],caracteristiques[0]];
		effetDict[2344] = [caracteristiques[0],caracteristiques[1]];
		effetDict[3368] = [caracteristiques[0],caracteristiques[2]];
		effetDict[4392] = [caracteristiques[0],caracteristiques[7]];
		effetDict[5416] = [caracteristiques[0],caracteristiques[3]];
		effetDict[6440] = [caracteristiques[0],caracteristiques[4]];
		effetDict[7464] = [caracteristiques[0],caracteristiques[5]];
		effetDict[8488] = [caracteristiques[0],caracteristiques[6]];
		effetDict[9512] = [caracteristiques[0],caracteristiques[9]];
		effetDict[10536] = [caracteristiques[0],caracteristiques[8]];

		effetDict[11560] = [caracteristiques[1],caracteristiques[0]];
		effetDict[12584] = [caracteristiques[1],caracteristiques[1]];
		effetDict[13608] = [caracteristiques[1],caracteristiques[2]];
		effetDict[14632] = [caracteristiques[1],caracteristiques[7]];
		effetDict[15656] = [caracteristiques[1],caracteristiques[3]];
		effetDict[16680] = [caracteristiques[1],caracteristiques[4]];
		effetDict[17704] = [caracteristiques[1],caracteristiques[5]];
		effetDict[18728] = [caracteristiques[1],caracteristiques[6]];
		effetDict[19752] = [caracteristiques[1],caracteristiques[9]];
		effetDict[20776] = [caracteristiques[1],caracteristiques[8]];

		effetDict[21800] = [caracteristiques[2],caracteristiques[0]];
		effetDict[22824] = [caracteristiques[2],caracteristiques[1]];
		effetDict[23848] = [caracteristiques[2],caracteristiques[2]];
		effetDict[24872] = [caracteristiques[2],caracteristiques[7]];
		effetDict[25896] = [caracteristiques[2],caracteristiques[3]];
		effetDict[26920] = [caracteristiques[2],caracteristiques[4]];
		effetDict[27944] = [caracteristiques[2],caracteristiques[5]];
		effetDict[28968] = [caracteristiques[2],caracteristiques[6]];
		effetDict[29992] = [caracteristiques[2],caracteristiques[9]];
		effetDict[31016] = [caracteristiques[2],caracteristiques[8]];

		effetDict[32040] = [caracteristiques[7],caracteristiques[0]];
		effetDict[33064] = [caracteristiques[7],caracteristiques[1]];
		effetDict[34088] = [caracteristiques[7],caracteristiques[2]];
		effetDict[35112] = [caracteristiques[7],caracteristiques[7]];
		effetDict[36136] = [caracteristiques[7],caracteristiques[3]];
		effetDict[37160] = [caracteristiques[7],caracteristiques[4]];
		effetDict[38184] = [caracteristiques[7],caracteristiques[5]];
		effetDict[39208] = [caracteristiques[7],caracteristiques[6]];
		effetDict[40232] = [caracteristiques[7],caracteristiques[9]];
		effetDict[41256] = [caracteristiques[7],caracteristiques[8]];

		effetDict[42280] = [caracteristiques[3],caracteristiques[0]];
		effetDict[43304] = [caracteristiques[3],caracteristiques[1]];
		effetDict[44328] = [caracteristiques[3],caracteristiques[2]];
		effetDict[45352] = [caracteristiques[3],caracteristiques[7]];
		effetDict[46376] = [caracteristiques[3],caracteristiques[3]];
		effetDict[47400] = [caracteristiques[3],caracteristiques[4]];
		effetDict[48424] = [caracteristiques[3],caracteristiques[5]];
		effetDict[49448] = [caracteristiques[3],caracteristiques[6]];
		effetDict[50472] = [caracteristiques[3],caracteristiques[9]];
		effetDict[51496] = [caracteristiques[3],caracteristiques[8]];

		effetDict[52520] = [caracteristiques[4],caracteristiques[0]];
		effetDict[53544] = [caracteristiques[4],caracteristiques[1]];
		effetDict[54568] = [caracteristiques[4],caracteristiques[2]];
		effetDict[55592] = [caracteristiques[4],caracteristiques[7]];
		effetDict[56616] = [caracteristiques[4],caracteristiques[3]];
		effetDict[57640] = [caracteristiques[4],caracteristiques[4]];
		effetDict[58664] = [caracteristiques[4],caracteristiques[5]];
		effetDict[59688] = [caracteristiques[4],caracteristiques[6]];
		effetDict[60712] = [caracteristiques[4],caracteristiques[9]];
		effetDict[61736] = [caracteristiques[4],caracteristiques[8]];

		effetDict[62760] = [caracteristiques[5],caracteristiques[0]];
		effetDict[63784] = [caracteristiques[5],caracteristiques[1]];
		effetDict[64808] = [caracteristiques[5],caracteristiques[2]];
		effetDict[65832] = [caracteristiques[5],caracteristiques[7]];
		effetDict[66856] = [caracteristiques[5],caracteristiques[3]];
		effetDict[67880] = [caracteristiques[5],caracteristiques[4]];
		effetDict[68904] = [caracteristiques[5],caracteristiques[5]];
		effetDict[69928] = [caracteristiques[5],caracteristiques[6]];
		effetDict[70952] = [caracteristiques[5],caracteristiques[9]];
		effetDict[71976] = [caracteristiques[5],caracteristiques[8]];

		effetDict[73000] = [caracteristiques[6],caracteristiques[0]];
		effetDict[74024] = [caracteristiques[6],caracteristiques[1]];
		effetDict[75048] = [caracteristiques[6],caracteristiques[2]];
		effetDict[76072] = [caracteristiques[6],caracteristiques[7]];
		effetDict[77096] = [caracteristiques[6],caracteristiques[3]];
		effetDict[78120] = [caracteristiques[6],caracteristiques[4]];
		effetDict[79144] = [caracteristiques[6],caracteristiques[5]];
		effetDict[80168] = [caracteristiques[6],caracteristiques[6]];
		effetDict[81192] = [caracteristiques[6],caracteristiques[9]];
		effetDict[82216] = [caracteristiques[6],caracteristiques[8]];

		effetDict[83240] = [caracteristiques[9],caracteristiques[0]];
		effetDict[84264] = [caracteristiques[9],caracteristiques[1]];
		effetDict[85288] = [caracteristiques[9],caracteristiques[2]];
		effetDict[86312] = [caracteristiques[9],caracteristiques[7]];
		effetDict[87336] = [caracteristiques[9],caracteristiques[3]];
		effetDict[88360] = [caracteristiques[9],caracteristiques[4]];
		effetDict[89384] = [caracteristiques[9],caracteristiques[5]];
		effetDict[90408] = [caracteristiques[9],caracteristiques[6]];
		effetDict[91432] = [caracteristiques[9],caracteristiques[9]];
		effetDict[92456] = [caracteristiques[9],caracteristiques[8]];

		effetDict[93480] = [caracteristiques[8],caracteristiques[0]];
		effetDict[94504] = [caracteristiques[8],caracteristiques[1]];
		effetDict[95528] = [caracteristiques[8],caracteristiques[2]];
		effetDict[96552] = [caracteristiques[8],caracteristiques[7]];
		effetDict[97576] = [caracteristiques[8],caracteristiques[3]];
		effetDict[98600] = [caracteristiques[8],caracteristiques[4]];
		effetDict[99624] = [caracteristiques[8],caracteristiques[5]];
		effetDict[100648] = [caracteristiques[8],caracteristiques[6]];
		effetDict[101672] = [caracteristiques[8],caracteristiques[9]];
		effetDict[102696] = [caracteristiques[8],caracteristiques[8]];

		var uniteCarac = new Array();
		uniteCarac[caracteristiques[0]] = [1,' D3'];
		uniteCarac[caracteristiques[1]] = [1,' D3'];
		uniteCarac[caracteristiques[2]] = [1,''];
		uniteCarac[caracteristiques[7]] = [1,''];
		uniteCarac[caracteristiques[3]] = [1,''];
		uniteCarac[caracteristiques[4]] = [1,''];
		uniteCarac[caracteristiques[5]] = [1,' D3'];
		uniteCarac[caracteristiques[6]] = [-15,' min'];
		uniteCarac[caracteristiques[9]] = [1,' Tour'];
		uniteCarac[caracteristiques[8]] = [1,''];

		var effetTotal = new Array();
		effetTotal[caracteristiques[0]] = 0;
		effetTotal[caracteristiques[1]] = 0;
		effetTotal[caracteristiques[2]] = 0;
		effetTotal[caracteristiques[7]] = 0;
		effetTotal[caracteristiques[3]] = 0;
		effetTotal[caracteristiques[4]] = 0;
		effetTotal[caracteristiques[5]] = 0;
		effetTotal[caracteristiques[6]] = 0;
		effetTotal[caracteristiques[9]] = 0;
		effetTotal[caracteristiques[8]] = 0;

		var epaisseurDict = new Array();
		epaisseurDict[0] = 'Très gras';
		epaisseurDict[1] = 'Gras';
		epaisseurDict[2] = 'Moyen';
		epaisseurDict[3] = 'Fin';
		epaisseurDict[4] = 'Très fin (version 3)';
		epaisseurDict[5] = 'Très fin (version 2)';
		epaisseurDict[6] = 'Très fin (version 1)';

		var orientationDict = new Array();
		orientationDict[0] = 'Initiale';
		orientationDict[1] = 'Symétrie Horizontale';
		orientationDict[2] = 'Symétrie Verticale';
		orientationDict[3] = 'Symétrie Centrale';

		// Si le numéro est impair, on utilise le numéro pair le précédant
		for (var i=0;i<numeros.length;i++) {
			numeros[i] = parseInt(numeros[i]);
			if (numeros[i]%2==1){
				numeros[i] -=1;
			}
		}
			  
		var numeroDeb = 1288
		var intervalle = 1024

		// boucle sur les numéros donnés en entrée
		for (var i=0;i<numeros.length;i++) {

			var debFamille = parseInt((numeros[i]-numeroDeb)/intervalle)*intervalle+numeroDeb;
			var repereTableau = debFamille+32;
			var epaisseur = parseInt((numeros[i]-debFamille)/8);
			var orientation = (numeros[i]-debFamille)/2%4;
			
			// + exclusion des gribouillages déjà Grattés ou totalement Grattés
			if (numeros[i] < numeroDeb || effetDict[repereTableau] == null || epaisseurDict[epaisseur] == null){
				infoGribouillages[i] = '<center><b>Gribouillage ' + numerosOriginaux[i] + '</b></center>';
				if (gribouillages[i].childNodes[0].value == 0) {
					infoGribouillages[i] += '<hr/><i>Grattage impossible</i>';
					effetGribouillages[i] = ajouteMiseEnForme('Vierge') + '<br/>&nbsp;';
				}
				else {
					infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme('Aucun changement d\'effet');
					effetGribouillages[i] = ajouteMiseEnForme('Sans effet') + '<br/>&nbsp;';
				}
			}
			else {
			
				var carac1 = effetDict[repereTableau][0];
				var carac2 = effetDict[repereTableau][1];
						 
				// + remplacement de la sortie console par des sauvegardes dans infoGribouillages et effetGribouillages
				infoGribouillages[i] = '<center><b>Gribouillage ' + numerosOriginaux[i] + '</b></center>';
				infoGribouillages[i] += '<hr/>Epaisseur : ' + epaisseurDict[epaisseur];
				infoGribouillages[i] += '<br/>&nbsp;&nbsp;<b>&#8594;</b>&nbsp;Puissance : ' + Math.min(5, epaisseur+1);
				infoGribouillages[i] += '<br/>Orientation : ' + orientationDict[orientation];
				var bonusMalusDict = new Array();
				bonusMalusDict['Initiale'] = 'Malus | Bonus';
				bonusMalusDict['Symétrie Horizontale'] = 'Malus | Malus';
				bonusMalusDict['Symétrie Verticale'] = 'Bonus | Malus';
				bonusMalusDict['Symétrie Centrale'] = 'Bonus | Bonus';
				infoGribouillages[i] += '<br/>&nbsp;&nbsp;<b>&#8594;</b>&nbsp;' + bonusMalusDict[orientationDict[orientation]];
				
				//  + remplacement de l'effet du Grattage du gribouillage par l'effet du gribouillage et sauvegarde dans effetGribouillages
				effetGribouillages[i] = '';
			
				if (epaisseur == 0) {

					if (orientation == 0 || orientation == 1) {
						if (carac1 != carac2) {
							infoGribouillages[i] += '<br/>Caractéristique 1 : ' + carac1.substring(0, carac1.length - 3);
							infoGribouillages[i] += '<br/>Caractéristique 2 : Aucune';
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme(carac1 + (epaisseur+1)*uniteCarac[carac1][0] + uniteCarac[carac1][1]);
							effetGribouillages[i] += ajouteMiseEnForme(carac1 + (-1*(epaisseur+1)*uniteCarac[carac1][0]) + uniteCarac[carac1][1]) + '<br/>&nbsp;';
							effetTotal[carac1] += (epaisseur+1)*uniteCarac[carac1][0];
						}
						else {
							infoGribouillages[i] += '<br/>Caractéristique 1 : ' + carac1.substring(0, carac1.length - 3);
							infoGribouillages[i] += '<br/>Caractéristique 2 : ' + carac2.substring(0, carac2.length - 3);
							infoGribouillages[i] += '<br/>&nbsp;&nbsp;(deux caractéristiques identiques s\'annulent)';
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme('Aucun changement');
							effetGribouillages[i] += ajouteMiseEnForme('Sans effet') + '<br/>&nbsp;';
						}
					}
					else {
						if (carac1 != carac2) {
							infoGribouillages[i] += '<br/>Caractéristique 1 : ' + carac1.substring(0, carac1.length - 3);
							infoGribouillages[i] += '<br/>Caractéristique 2 : Aucune';
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme(carac1 + (-1*(epaisseur+1)*uniteCarac[carac1][0]) + uniteCarac[carac1][1]);
							effetGribouillages[i] += ajouteMiseEnForme(carac1 + (epaisseur+1)*uniteCarac[carac1][0] + uniteCarac[carac1][1]) + '<br/>&nbsp;';
							effetTotal[carac1] -= (epaisseur+1)*uniteCarac[carac1][0];
						}
						else {
							infoGribouillages[i] += '<br/>Caractéristique 1 : ' + carac1.substring(0, carac1.length - 3);
							infoGribouillages[i] += '<br/>Caractéristique 2 : ' + carac2.substring(0, carac2.length - 3);
							infoGribouillages[i] += '<br/>&nbsp;&nbsp;(deux caractéristiques identiques s\'annulent)';
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme('Aucun changement');
							effetGribouillages[i] += ajouteMiseEnForme('Sans effet') + '<br/>&nbsp;';
						}
					}
					
				}
				else {

					infoGribouillages[i] += '<br/>Caractéristique 1 : ' + carac1.substring(0, carac1.length - 3);
					infoGribouillages[i] += '<br/>Caractéristique 2 : ' + carac2.substring(0, carac2.length - 3);
				
					if (orientation == 0) {
						if (carac1 != carac2) {
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme(carac1 + (epaisseur+1)*uniteCarac[carac1][0] + uniteCarac[carac1][1]);
							infoGribouillages[i] += ' | ' + ajouteMiseEnForme(carac2 + (-1*epaisseur*uniteCarac[carac2][0]) + uniteCarac[carac2][1]);
							effetGribouillages[i] += ajouteMiseEnForme(carac1 + (-1*(epaisseur+1)*uniteCarac[carac1][0]) + uniteCarac[carac1][1]);
							effetGribouillages[i] += '<br/>' + ajouteMiseEnForme(carac2 + epaisseur*uniteCarac[carac2][0] + uniteCarac[carac2][1]);
							effetTotal[carac1] += (epaisseur+1)*uniteCarac[carac1][0];
							effetTotal[carac2] -= epaisseur*uniteCarac[carac2][0];
						}
						else {
							infoGribouillages[i] += '<br/>&nbsp;&nbsp;(deux caractéristiques identiques s\'annulent)';
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme('Aucun changement');
							effetGribouillages[i] += ajouteMiseEnForme('Sans effet') + '<br/>&nbsp;';
						}
					}
					
					if (orientation == 1) {
						if (carac1 != carac2) {
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme(carac1 + (epaisseur+1)*uniteCarac[carac1][0] + uniteCarac[carac1][1]);
							infoGribouillages[i] += ' | ' + ajouteMiseEnForme(carac2 + epaisseur*uniteCarac[carac2][0] + uniteCarac[carac2][1]);
							effetGribouillages[i] += ajouteMiseEnForme(carac1 + (-1*(epaisseur+1)*uniteCarac[carac1][0]) + uniteCarac[carac1][1]);
							effetGribouillages[i] += '<br/>' + ajouteMiseEnForme(carac2 + (-1*epaisseur*uniteCarac[carac2][0]) + uniteCarac[carac2][1]);
							effetTotal[carac1] += (epaisseur+1)*uniteCarac[carac1][0];
							effetTotal[carac2] += epaisseur*uniteCarac[carac2][0];
						}
						else {
							infoGribouillages[i] += '<br/>&nbsp;&nbsp;(deux caractéristiques identiques s\'annulent)';
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme('Aucun changement');
							effetGribouillages[i] += ajouteMiseEnForme('Sans effet') + '<br/>&nbsp;';
						}
					}

					if (orientation == 2) {
						if (carac1 != carac2) {
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>\t' + ajouteMiseEnForme(carac1 + (-1*(epaisseur+1)*uniteCarac[carac1][0]) + uniteCarac[carac1][1]);
							infoGribouillages[i] += ' | ' + ajouteMiseEnForme(carac2 + epaisseur*uniteCarac[carac2][0] + uniteCarac[carac2][1]);
							effetGribouillages[i] += ajouteMiseEnForme(carac1 + (epaisseur+1)*uniteCarac[carac1][0] + uniteCarac[carac1][1]);
							effetGribouillages[i] += '<br/>' + ajouteMiseEnForme(carac2 + (-1*epaisseur*uniteCarac[carac2][0]) + uniteCarac[carac2][1]);
							effetTotal[carac1] -= (epaisseur+1)*uniteCarac[carac1][0];
							effetTotal[carac2] += epaisseur*uniteCarac[carac2][0];
						}
						else {
							infoGribouillages[i] += '<br/>&nbsp;&nbsp;(deux caractéristiques identiques s\'annulent)';
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme('Aucun changement');
							effetGribouillages[i] += ajouteMiseEnForme('Sans effet') + '<br/>&nbsp;';
						}
					}	

					if (orientation == 3) {
						if (carac1 != carac2) {
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>\t' + ajouteMiseEnForme(carac1 + (-1*(epaisseur+1)*uniteCarac[carac1][0]) + uniteCarac[carac1][1]);
							infoGribouillages[i] += ' | ' + ajouteMiseEnForme(carac2 + (-1*epaisseur*uniteCarac[carac2][0]) + uniteCarac[carac2][1]);
							effetGribouillages[i] += ajouteMiseEnForme(carac1 + (epaisseur+1)*uniteCarac[carac1][0] + uniteCarac[carac1][1]);
							effetGribouillages[i] += '<br/>' + ajouteMiseEnForme(carac2 + epaisseur*uniteCarac[carac2][0] + uniteCarac[carac2][1]);
							effetTotal[carac1] -= (epaisseur+1)*uniteCarac[carac1][0];
							effetTotal[carac2] -= epaisseur*uniteCarac[carac2][0];
						}
						else {
							infoGribouillages[i] += '<br/>&nbsp;&nbsp;(deux caractéristiques identiques s\'annulent)';
							infoGribouillages[i] += '<hr/><i>Résultat du Grattage</i> :<br/>&nbsp;&nbsp;' + ajouteMiseEnForme('Aucun changement');
							effetGribouillages[i] += ajouteMiseEnForme('Sans effet') + '<br/>&nbsp;';
						}
					}
					
				}
				
			}
			
		}
		
		for (var i=0;i<caracteristiques.length;i++) {
			if (effetTotal[caracteristiques[i]] != 0 || caracteristiques[i] == caracteristiques[9]) {
				if (caracteristiques[i] == caracteristiques[8]) {
					if (effetTotal[caracteristiques[i]] < 0) {
						effetParchemin += ajouteMiseEnForme(caracteristiques[8]).replace(' : ','') + ' | ';
					}
				}
				else {
					effetParchemin += ajouteMiseEnForme(caracteristiques[i] + (-1*effetTotal[caracteristiques[i]]) + uniteCarac[caracteristiques[i]][1], 'effetTotal') + ' | ';	
				}
			}
		}
		effetParchemin = effetParchemin.substring(0, effetParchemin.length - 3);
		
		resultatAnalyse['infoGribouillages'] = infoGribouillages;
		resultatAnalyse['effetGribouillages'] = effetGribouillages;
		resultatAnalyse['effetParchemin'] = effetParchemin;
		return resultatAnalyse;
	}
	catch (e) {
		alert('analyseGribouillages() : ' + e.message);
	}
}


// *** Met en forme la chaîne de caractères passée en paramètre, en fonction de son contenu et du type de mise en forme passé en deuxième paramètre ***
function ajouteMiseEnForme(chaineATraiter, typeMiseEnForme) {
	try {
		// traitement des chaînes de caractères de type caractéristique
		if (chaineATraiter.indexOf(' : ') != -1) {
			// récupération de la caractéristique, de sa valeur et de l'unité 
			var caracteristique = chaineATraiter.substring(0, chaineATraiter.indexOf(' : ')+3);
			var autres = chaineATraiter.substring(chaineATraiter.indexOf(' : ')+3, chaineATraiter.length);
			var valeur = 0;
			var unite = '';
			if (autres.indexOf(' ') == -1) {
				valeur = autres.substring(0, autres.length);		
			}
			else {
				valeur = autres.substring(0, autres.indexOf(' ')+1);
				unite = autres.substring(autres.indexOf(' ')+1, autres.length)
			}
			
			// traitements de la chaîne de caractères en fonction de la caractéristique
			var chaineTraitee = '';
			// cas spécifique de la caractéristique 'Durée : '
			if (caracteristique == 'Durée : ') {
				if (valeur > 0) {
					chaineTraitee = '<b><font color = "' + couleurAutre + '">' + caracteristique;
					// pas de '+' devant le nombre de Tours dans l'effet total du parchemin
					if(typeMiseEnForme != 'effetTotal') {
						chaineTraitee += '+';
					}
					chaineTraitee += valeur + unite;
				}
				else {
					// pas de nombre de Tours négatif dans l'effet total du parchemin
					if(typeMiseEnForme == 'effetTotal') {
						chaineTraitee = '<b><font color = "' + couleurAutre + '">' + 'Durée : 0 Tour';
						valeur = 0;
					}
					else {
						chaineTraitee = '<b><font color = "' + couleurAutre + '">' + chaineATraiter;
					}
				}
				// gestion du singulier/pluriel
				if (valeur < -1 || valeur > 1) {
					chaineTraitee += 's</font></b>';
				}
				else {
					chaineTraitee += '</font></b>'
				}
			}
			// cas spécifique de la caractéristique 'Effet de Zone : '
			else if (caracteristique == 'Effet de Zone : ') {
				if (valeur > 0) {
					chaineTraitee = '<font color = "' + couleurAutre + '">' + caracteristique + '+' + valeur + unite + '</font>';
				}
				else {
					chaineTraitee = '<font color = "' + couleurAutre + '">' + chaineATraiter + '</font>';
				}
			}
			// cas spécifique de la caractéristique 'TOUR : '
			else if (caracteristique == 'TOUR : ') { 
				if (valeur > 0) {
					chaineTraitee = '<b><font color = "' + couleurMalus + '">' + caracteristique + '+' + valeur + unite + '</font></b>';
				}
				else {
					chaineTraitee = '<b><font color = "' + couleurBonus + '">' + caracteristique + valeur + unite + '</font></b>';
				}
			}
			// cas des autres caractéristiques
			else {
				if (valeur > 0) {
					chaineTraitee = '<b><font color = "' + couleurBonus + '">' + caracteristique + '+' + valeur + unite + '</font></b>';
				}
				else {
					chaineTraitee = '<b><font color = "' + couleurMalus + '">' + caracteristique + valeur + unite + '</font></b>';
				}
			}
			return chaineTraitee;
		}
		// traitement des chaînes de caractères autres que de type caractéristique
		else {
			return '<font color = "' + couleurSansEffet + '">' +chaineATraiter + '</font>';
		}
	}
	catch (e) {
		alert('ajouteMiseEnForme() : ' + e.message);
	}
}


// *** Gère la sélection de n'importe quel gribouillage ***
function cliqueGribouillage() {
	try {
		// si le gribouillage est sélectionné alors il est atténué
		if (this.checked) {
			this.parentNode.childNodes[2].style.opacity = 0.1;
			this.parentNode.childNodes[3].style.opacity = 0;
			this.parentNode.childNodes[3].title = '';
		}
		// si le gribouillage n'est pas sélectionné alors il est rétabli
		else {
			this.parentNode.childNodes[2].style.opacity = 1;
			this.parentNode.childNodes[3].style.opacity = 1;
			this.parentNode.childNodes[3].title = 'Effet du gribouillage';
		}
		
		// décompte du nombre de gribouillages sélectionnés
		var casesCochees = 0;
		var parcheminGratte = ''
		for (var i=0;i<l_grib1.length;i++) {
			casesCochees += gribouillages[i].childNodes[0].checked;
			if (gribouillages[i].childNodes[0].checked) {
				// inactivation du numéro du gribouillage sélectionné dans la suite de numéros définissant le parchemin
				parcheminGratte += '0 ';
			}	
			else {
				parcheminGratte += idGribouillages[i] + ' ';
			}
		}
		
		// si il y a au moins un gribouillage sélectionné alors le parchemin "virtuellement gratté" est analysé et le résultat est indiqué en dessous de l'effet actuel du parchemin
		if (casesCochees > 0) {
			form.childNodes[7].innerHTML = effetParchemin + '</br>Effet Théorique après Grattage = ' + analyseGribouillages(parcheminGratte.replace(/\s+$/g,''))['effetParchemin'] + '</br>&nbsp;';
		}
		else {
			form.childNodes[7].innerHTML = effetParchemin + '</br></br>&nbsp;';
		}
	}
	catch (e) {
		alert('cliqueGribouillage() : ' + e.message);
	}
}


// *** Création de la fenêtre d'informations, qui apparaîtra au survol d'un gribouillage ***
function creerInfos() {
	popup = document.createElement('div');
	popup.className = 'mh_tdpage';
	popup.setAttribute('style', 'position: absolute; border: 1px solid #000000; visibility: hidden; display: inline; z-index: 3; padding: 5px;');
	document.body.appendChild(popup);
}


// *** Renseigne le contenu de la fenêtre d'informations en fonction du gribouillage survolé et la rend visible ***
function afficheInfos(evt) {
	popup.innerHTML = infoGribouillages[this.getAttribute('id')];
	popup.style.left = Math.min(evt.pageX + 15, window.innerWidth - 400) + 'px';
	popup.style.top = evt.pageY + 15 + 'px';
	popup.style.visibility = 'visible';
}


// *** Rend invisible la fenêtre d'informations ***
function cacheInfos() {
	popup.style.visibility = 'hidden';
}