zogre / ColoreMarchand

// ==UserScript==
// @name        ColoreMarchand
// @namespace   thaanis-luxe-merch.com
// @description Thaanis-Luxe : script pourafficher dans le tableau marchand les objets luxe (Contactez Ulysse in game)
// @include    http://www.monde-de-thaanis.com/jeu/perso/entrer.php?idbat=70
// @include    http://www.monde-de-thaanis.com/jeu/perso/entrer.php?idbat=53
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// @version     1.2.1
// @downloadURL https://openuserjs.org/install/zogre/ColoreMarchand.user.js
// @grant none
// ==/UserScript==

var childrenbr;
var childrentd = document.getElementsByTagName('td');
var tmp = '';
var used = '';
var lienmenu = 0;
var tabLux = new Array();


//Tête 
var BAN = {match: "Bandeau (", Poids: "3", ARM: "3", Vue: "1"};
var BDM = {match: "Bandeau de magie", Poids: "10", ARM: "1", PM: "9", Vue: "0"};
var CAC = {match: "Casque à cornes", Poids: "15", ATT: "-1", DEF: "-2", DEG: "7", ARM: "9", Vue: "-2"};
var CDC = {match: "Casque de chevalier", Poids: "15", ARM: "13", Vue: "-5", Cycle: "5"};
var CEC = {match: "Casque en cuir", Poids: "5", ARM: "6", Vue: "-1", Cycle: "2"};
var CEM = {match: "Casque en métal", Poids: "10", ARM: "9", Vue: "-2", Cycle: "2"};
var CAO = {match: "Casque en os", Poids: "15", ATT: "7", DEF: "-2", ARM: "7", Vue: "-1"};
var CDM = {match: "Chapeau de mage", Poids: "10", ATT: "-2", DEF: "1", PM: "8", DM: "6", Vue: "-2"};
var HTC = {match: "Heaume à tête de crapaud", Poids: "26", DEF: "-5", ARM: "15", Vue: "-5"};
var JUM = {match: "Jumelles", Poids: "5", ATT: "0", DEF: "-1", Vue: "4"};

//Cou
var PLM = {match: "Amulette \"pare-la-mort\"", Poids: "3", PM: "-2", DM: "-1", Comp: "-2", Magie: "-5"};
var ATT = {match: "Amulette terre à terre", Poids: "2", PM: "-2", DM: "-2", Comp: "3", Magie: "-1"};
var COL = {match: "Colletin (", Poids: "5", ARM: "3"};
var CRE = {match: "Colletin renforcé", Poids: "8", ATT: "-1", DEF: "-1", ARM: "5"};
var CAN = {match: "Collier anticyclownique", Poids: "2", PM: "-2", DM: "0", Comp: "-1", Magie: "-1"};
var CPS = {match: "Collier psychique", Poids: "5", ARM: "-2", PM: "5", DM: "5"};
var TAL = {match: "Talisman", Poids: "3", PM: "3", DM: "3"};

//Bras droit
var DAG = {match: "Dague", Poids: "7", ATT: "2", DEF: "2", ARM: "0", DEG: "3"};
var ECO = {match: "Epée courte", Poids: "20", ATT: "-5", DEF: "2", DEG: "12"};
var ELO = {match: "Epée longue", Poids: "25", ATT: "-15", DEF: "-4", DEG: "20"};
var FLE = {match: "Fleuret", Poids: "15", ATT: "9", DEF: "9", DEG: "-8", ARM: "-1"};
var GAN = {match: "Gantelet", Poids: "14", ATT: "-5", DEF: "6", DEG: "3", ARM: "6", Comp: "-1"};
var HCT = {match: "Hachette", Poids: "20", ATT: "5", DEF: "-5", DEG: "10"};
var LEV = {match: "Levantine", Poids: "14", ATT: "4", DEF: "4", DEG: "4"};
var RAP = {match: "Rapière", Poids: "20", ATT: "-8", DEF: "0", DEG: "15"};
var SIC = {match: "Sica", Poids: "10", ATT: "1", DEF: "2", DEG: "5"};

//Bras gauche
var ASP = {match: "Aspis", Poids: "35", ATT: "-5", DEF: "-1", DEG: "-8", ARM: "20"};
var BNO = {match: "Bouclier normand", Poids: "20", ATT: "-7", DEF: "5", DEG: "-5", ARM: "12"};
var ECU = {match: "Ecu", Poids: "10", ATT: "-2", DEF: "2", DEG: "2", ARM: "3"};
var KDP = {match: "Kit du piégeur", Poids: "10"};
var KDR = {match: "Kit du réparateur", Poids: "10"};
var MGA = {match: "Main-gauche", Poids: "5", ATT: "3", DEF: "3", DEG: "3", ARM: "-4"};
var PAV = {match: "Pavois", Poids: "25", ATT: "-7", DEF: "-7", ARM: "15"};
var RON = {match: "Rondache", Poids: "12", ATT: "-4", DEF: "4", DEG: "-3", ARM: "7"};
var TAR = {match: "Targe", Poids: "4", DEF: "5"};

//Bras droit et gauche
var BEC = {match: "Banc en chêne", Poids: "80", ATT: "-20", DEF: "-20", DEG: "45", ARM: "7", Vue: "0"};
var BAT = {match: "Bâton magique", Poids: "20", ATT: "-8", DEF: "5", DM: "8",PM: "12",DEG: "-8",ARM: "5"}; 
var CLA = {match: "Claymore", Poids: "35", ATT: "-15", DEF: "-7", DEG: "25"};
var GJU = {match: "Griffes jumelles", Poids: "17", ATT: "7", DEF: "-5", DEG: "7", ARM: "-4"};
var GUI = {match: "Guisarme", Poids: "50", ATT: "-20", DEF: "-10", DEG: "35"};
var HAC = {match: "Hache", Poids: "40", ATT: "-20", DEF: "-5", DEG: "30"};
var TGP = {match: "Très grand pavois", Poids: "50", ATT: "-16", DEF: "6", DEG: "-16", ARM: "30", Vue: "0"};

//Corps
var ADC = {match: "Armure de cuir", Poids: "20", ATT: "1", DEF: "-10", ARM: "10"};
var ACB = {match: "Armure de cuir bouilli", Poids: "9", ATT: "-6", DEF: "2", ARM: "5"};
var ADP = {match: "Armure de plates", Poids: "60", ATT: "-20", DEF: "-20", ARM: "35"};
var AET = {match: "Armure éthérée", Poids: "1", ATT: "-6", DEF: "-6", DEG: "-6", ARM: "-6", PM: "13", DM: "13", Cycle: "-15", Reg: "-6"};
var ASY = {match: "Armure symbiotique", Poids: "30", PM: "15", DM: "10"};
var BRI = {match: "Brigantine", Poids: "30", ATT: "0", DEF: "-12", ARM: "15"};
var CUI = {match: "Cuirasse", Poids: "50", ATT: "-16", DEF: "-16", ARM: "30"};
var HAM = {match: "Hamata", Poids: "35", ATT: "-10", DEF: "-10", ARM: "20"};
var HAU = {match: "Haubert", Poids: "40", ATT: "-13", DEF: "-13", ARM: "26"};
var JAQ = {match: "Jaque", Poids: "9", ATT: "2", DEF: "-6", ARM: "5"};
var RMB = {match: "Robe de mage balancé", Poids: "10", PM: "5", DM: "5"};
var RMP = {match: "Robe de mage prudent", Poids: "10", PM: "-6", DM: "13"};
var RMT = {match: "Robe de mage téméraire", Poids: "10", PM: "12", DM: "-6"};
var TDM = {match: "Tunique de mailles", Poids: "30", ATT: "-12", DEF: "0", ARM: "15"};
var VES = {match: "Veste", Poids: "5", DEF: "2", ARM: "2"};

//Bijoux
var BACC = {match: "Bague à chaton creux", Poids: "1", Reg: "-2"};
var BAE = {match: "Bague d'Eau", Poids: "1", DEF: "6", DEG: "-5"};
var BAF = {match: "Bague de Feu", Poids: "1", DEG: "6", Reg: "-5"};
var BAM = {match: "Bague de mage", Poids: "1", ATT: "-2", DEG: "-2", PM: "3", DM: "3", Comp: "-1", Magie: "1"};
var BAR = {match: "Bague de Roc", Poids: "1", ARM: "6", Depla: "-2"};
var BAA = {match: "Bague en air", Poids: "1", ATT: "6", ARM: "-5"};
var ALL = {match: "Alliance", Poids: "1", PM: "-5"};
var BAG = {match: "Bague de guerrier", Poids: "1", ATT: "3", DEG: "3", PM: "-2", DM: "-2", Comp: "1", Magie: "-1"};

//Jambes 
var CEG = {match: "Cuissard et grève", Poids: "20", ATT: "-2", DEF: "-2", ARM: "10"};
var CUIS = {match: "Cuissot", Poids: "25", ATT: "-3", DEF: "-3", ARM: "12"};
var GAP = {match: "Genouillères à pointes", Poids: "5", ATT: "2", DEF: "-1", DEG: "2", ARM: "1"};
var JDM = {match: "Jambières de mailles", Poids: "10", DEF: "-1", ARM: "5"};
var JDP = {match: "Jambières de plates", Poids: "15", DEF: "-3", ARM: "7"};
var JCB = {match: "Jambières en cuir bouilli", Poids: "5", DEF: "1", ARM: "3"};
var PAN = {match: "Pantalon", Poids: "3", DEF: "2", ARM: "1"};

//Pieds
var BMA = {match: "Bottes de marche", Poids: "15", ATT: "0", DEF: "0", Cycle: "-10", Depla: "12"};
var CMA = {match: "Chausses de mailles", Poids: "8", ATT: "2", DEF: "2", ARM: "4", Cycle: "10"};
var CEL = {match: "Chaussettes en laine", Poids: "3", ATT: "-1", DEF: "-1", Cycle: "2", Reg: "5"};
var CHP = {match: "Chaussettes puantes", Poids: "3", ATT: "-3", DEF: "-3", Cycle: "8", Reg: "-17"};
var SAN = {match: "Sandales", Poids: "5", ATT: "2", DEF: "2", Reg: "-1"};
var SOL = {match: "Soleret", Poids: "20", ATT: "5", DEF: "5", ARM: "5", Cycle: "12"};


var lTab = tabLux.push(BAN,BDM,CAC,CDC,CEC,CEM,CAO,CDM,HTC,JUM,//Tête
                       PLM,ATT,COL,CRE,CAN,CPS,TAL,//Cou
                       DAG,ECO,ELO,FLE,GAN,HCT,LEV,RAP,SIC,//Bras droit
                       ASP,BNO,ECU,KDP,KDR,MGA,PAV,RON,TAR,//Bras gauche
                       BEC,BAT,CLA,GJU,GUI,HAC,TGP,//Bras droit et gauche
                       ADC,ACB,ADP,AET,ASY,BRI,CUI,HAM,HAU,JAQ,RMB,RMP,RMT,TDM,VES,//Corps
                       BACC,BAE,BAF,BAM,BAR,BAA,ALL,BAG,//Bijoux
                       CEG,CUIS,GAP,JDM,JDP,JCB,PAN,//Jambes
                       BMA,CMA,CEL,CHP,SAN,SOL);//Pied

//if (typeof tabLux[0].att != 'undefined'){
//alert(tabLux[0].att);
//}
var tabMatch = new Array();
var match = {
  ARM: '[Arm :',
  Vue: '[Vue :',
  REG: '[Rég :',
  DEF: '[Def :',
  ATT: '[Att :',
  PM: '[Puis Mag :',
  DM: '[Def Mag :',
  DEG: '[Deg :',
  CYC: '[Cycle :'
};
var MATCH_ARM = '[Arm :';
var MATCH_VUE = '[Vue :';
var MATCH_CYC = '[Cycle :';
var MATCH_DEP = '[Dépla :';
var MATCH_REG = '[Rég :';
var MATCH_DEF = '[Def :';
var MATCH_ATT = '[Att :';
var MATCH_PM = '[Puis Mag :';
var MATCH_DM = '[Def Mag :';
var MATCH_DEG = '[Deg :';
tabMatch.push(match);
// Coloration
var SUP_LUX = 'purple';
var EQ_LUX = 'blue';
var INF1_LUX = 'green'; // inferieur d'1 point
var INFX_LUX = 'red'; // inférieurs...
var tmp_val_lux;
/*--- Create a button in a container div.  It will be styled and
    positioned with CSS.
*/
var zNode = document.createElement('div');
zNode.innerHTML = '<button id="myButton" type="button">'
+ 'COLORE LUXE</button>'
;
zNode.setAttribute('id', 'myContainer');
document.body.appendChild(zNode);
//--- Activate the newly added button.
document.getElementById('myButton').addEventListener('click', truc, false
);
function ButtonClickAction(zEvent) {
  /*--- For our dummy action, we'll just add a line of text to the top
        of the screen.
    */
  var zNode = document.createElement('p');
  zNode.innerHTML = 'The button was clicked.';
  document.getElementById('myContainer').appendChild(zNode);
}
//--- Style our newly added elements using CSS.

GM_addStyle(multilineStr(function () { /*!
    #myContainer {
        position:               absolute;
        top:                    0;
        left:                   0;
        font-size:              20px;
        background:             black;
        border:                 3px outset black;
        margin:                 5px;
        opacity:                0.9;
        z-index:                222;
        padding:                5px 20px;
    }
    #myButton {
        cursor:                 pointer;
        width:                  300px;
    }
    #myContainer p {
        color:                  red;
        background:             white;
    }
*/
}));
function multilineStr(dummyFunc) {
  var str = dummyFunc.toString();
  str = str.replace(/^[^\/]+\/\*!?/, '') // Strip function () { /*!
  .replace(/\s*\*\/\s*\}\s*$/, '') // Strip */ }
  .replace(/\/\/.+$/gm, '') // Double-slash comments wreck CSS. Strip them.
  ;
  return str;
}
function truc() {
  //alert('new truc');
  // récupération de la table  
  var tabMarchand = document.getElementById('table_marchand');
  var cellules;
  var j,
  k;
  // parcours des lignes. Init à 1 pour sauter le header
  for (j = 1; j < tabMarchand.rows.length; j++) {
   // alert(tabMarchand.rows[j].cells[2].textContent);
    //alert('toto2');
    for (k = 0; k < lTab; k++) {
      // GENERIQUE
      if (tabMarchand.rows[j].cells[2].textContent.toUpperCase() == tabLux[k].match.toUpperCase()) {
        checkItem(tabMarchand, j, k);
      }
    }
   

  }
}
//TabMarchand : le tableau HTML
// Ligne : numéro de la ligne du tableau traitée
// item : numéro du tableau d'objet catalogue

function checkItem(tabMarchand, ligne, item) {
  
  var tmp_val_luxe = 0;
  var j,
  k;
  var inverse;
  // parcours des colonnes de 6 à 18 - emplacements des valeurs objets
  for (j = 6; j <= 18; j++) {
    if (tabMarchand.rows[ligne].cells[j].textContent != '')
    {
      inverse = 0;
      var attribut = tabMarchand.rows[0].cells[j].textContent;
      switch (attribut) {
        case 'ATT':
          tmp_val_luxe = tabLux[item].ATT;
          //  alert ('case ATT '+tmp_val_luxe);
          break;
        case 'DEF':
          tmp_val_luxe = tabLux[item].DEF;
          break;
        case 'DEG':
          tmp_val_luxe = tabLux[item].DEG;
          break;
        case 'ARM':
          tmp_val_luxe = tabLux[item].ARM;
          break;
        case 'PMA':
          tmp_val_luxe = tabLux[item].PM;
          break;
        case 'DMA':
          tmp_val_luxe = tabLux[item].DM;
          break;
        case 'COMP':
          tmp_val_luxe = tabLux[item].Comp;
          break;
        case 'MA':
          tmp_val_luxe = tabLux[item].Magie;
          break;
        case 'DEP':
          tmp_val_luxe = tabLux[item].Depla;
          break;
        case 'REG':
          tmp_val_luxe = tabLux[item].Reg;
          break;
        case 'CYC':
          tmp_val_luxe = tabLux[item].Cycle;
          inverse = 1;
          break;
        case 'VUE':
          tmp_val_luxe = tabLux[item].Vue;
          break;
        case 'POIDS':
          tmp_val_luxe = tabLux[item].Poids;
          inverse = 1;
          break;
        default:
          tmp_val_luxe = 0;
      }
      // alert(tmp_val_luxe);

      var valeur = tabMarchand.rows[ligne].cells[j].textContent;
      valeur = valeur.replace(' %', '');
      var couleur = checkColor(tmp_val_luxe, valeur, inverse);
      tabMarchand.rows[ligne].cells[j].innerHTML = '<font color="' + couleur + '">' + tabMarchand.rows[ligne].cells[j].textContent + '</font>';
      //alert('couleur : '+couleur);
    }
  }
}
function checkColor(valeurLuxe, valeur, inverse) {
  if (inverse == 0) //comparaison normale
  {
    if (eval(valeur) == eval(valeurLuxe)) {
      return EQ_LUX;
    } 
    else if (eval(valeur) + 1 == eval(valeurLuxe)) {
      return INF1_LUX;
    } 
    else if (eval(valeur) + 1 < eval(valeurLuxe)) {
      return INFX_LUX;
    } 
    else {
      return SUP_LUX;
    }
  } 
  else { //comparaison inversée
        if (eval(valeur) == eval(valeurLuxe)) {
      return EQ_LUX;
    } 
    else if (eval(valeur) - 1 == eval(valeurLuxe)) {
      return INF1_LUX;
    } 
    else if (eval(valeur) - 1 > eval(valeurLuxe)) {
      return INFX_LUX;
    } 
    else {
      return SUP_LUX;
    }
  }
}