/*** convertisseur decimal->hexadecimal - voir www.aidejavascript.com ***/
Number.prototype.hexa = function() {
  if (isNaN(this)) return null;
  // pour l'instruction suivante, voir min_max_int() plus bas
  // elle vérifie que le nombre est dans les limites acceptées par votre système,
  // (elle est inutile, si ce risque est nul)
  if ((this > Number.MAXINT) || (this < Number.MININT)) return null;
  if (arguments.length) var lim = parseInt(arguments[0]);
  else var lim = 0;
  var ch_hexa = "0123456789ABCDEF";
  var result = "";
  var nombre = this;
  var i = 0;
  while (nombre) {
     if (lim && (lim == i++)) break;
     result = ch_hexa.charAt(nombre & 15) + result;
     nombre >>= 4;
  }
  if (lim) {
     while (result.length < lim) result = "0" + result;
  }
  return result;
}

// fonction colorer : convertit le tableau de couleurs TSL en chaine #RVB -- merci wikipedia
function colorer(TSL) {
    var T=TSL[0];
    var S=TSL[1];
    var L=TSL[2];

    if(S==0) return '#'+Math.floor(L*256).hex(2)+Math.floor(L*256).hex(2)+Math.floor(L*256).hex(2);
    
    if(L<0.5) var temp2=L*(1+S);
    else var temp2=L+S-(L*S);
    var temp1=2*L-temp2;
    var Ttemp=T/360;
    var temp3=new Array(Ttemp+1/3,Ttemp,Ttemp-1/3);
    for(var i=0;i<3;i++) {
        if(temp3[i]<0) temp3[i]=temp3[i]+1;
        else if(temp3[i]>1) temp3[i]=temp3[i]-1;
    }
    var couleur=new Array(0,0,0);
    for(var i=0;i<3;i++) {
        if(temp3[i]<1/6) couleur[i]=temp1+((temp2-temp1)*6*temp3[i]);
        else if(temp3[i]<1/2) couleur[i]=temp2;
        else if(temp3[i]<2/3) couleur[i]=temp1+((temp2-temp1)*((2/3)-temp3[i])*6);
        else couleur[i]=temp1;
    }
    return '#'+Math.floor(couleur[0]*256).hexa(2)+Math.floor(couleur[1]*256).hexa(2)+Math.floor(couleur[2]*256).hexa(2);
}

function modulo(n,mod) {
    while(n>=mod) n=n-mod;
    return n;
}

function changerCouleurs(nombre,nbCarresParLigne) {
    nombre=Math.round(nombre);
    if(nombre<2) nombre=2;

    var teinte = (Math.floor(Math.random()*360)+1);
    var saturation = Math.random();
    var lumiere = Math.random();

    var base = new Array(teinte,saturation,lumiere);
    var texte = '<div class="couleur" style="background:'+colorer(base)+';">&nbsp;</div>';

    for(var i=2;i<=nombre;i++) {
        var couleur=new Array(modulo(base[0]+Math.round((i-1)*360/nombre)),base[1],base[2]);
        texte+= '<div class="couleur" style="background:'+colorer(couleur)+';">&nbsp;</div>';
        if(Math.floor(i/nbCarresParLigne)==i/nbCarresParLigne) texte+= '<br /><br /><br /><br /><br /><br />';
    }
    
    document.getElementById('couleurs').innerHTML=texte+'<br /><br /><br /><br /><br /><br />';
}

changerCouleurs(3,5);