/*** 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).hexa(2)+Math.floor(L*256).hexa(2)+Math.floor(L*256).hexa(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() {

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

    var base = new Array(teinte,saturation,lumiere);
    var complementaire = new Array(modulo(teinte+180,360),saturation,lumiere);
    var quadra1 = new Array(modulo(teinte+90,360),saturation,lumiere);
    var quadra2 = new Array(modulo(teinte+270,360),saturation,lumiere);

    var couleurs=new Array(base,complementaire,quadra1,quadra2);
    var valeursAleat=new Array(0,0,0,0);
    var valeursTirees=new Array(0,0,0,0);
    for(var i=0;i<=3;i++) {
        hasard=Math.floor(Math.random()*4);
        if(valeursTirees[hasard]==0) {
            valeursTirees[hasard]=1;
            valeursAleat[i]=hasard;
        } else i--;
    }

    var liens=document.getElementsByTagName('a');
    var nliens=liens.length;
    for(var i=0;i<nliens;i++) {
        liens[i].style.color=colorer(couleurs[valeursAleat[0]]);
    }

    document.getElementById('top').getElementsByTagName('h1')[0].getElementsByTagName('a')[0].style.color=colorer(couleurs[valeursAleat[1]]);

    var titres=document.getElementById('sidebar').getElementsByTagName('h2');
    var ntitres=titres.length;
    for(var i=0;i<ntitres;i++) {
        titres[i].style.color=colorer(couleurs[valeursAleat[2]]);
    }

    var titres=document.getElementById('content').getElementsByTagName('h2');
    var ntitres=titres.length;
    for(var i=0;i<ntitres;i++) {
        titres[i].getElementsByTagName('a')[0].style.color=colorer(couleurs[valeursAleat[3]]);
    }
    var cases=document.getElementById('calendar').getElementsByTagName('a');
    var ncases=cases.length;
    for(var i=0;i<ncases;i++) {
        cases[i].style.background=colorer(couleurs[valeursAleat[3]]);
    }
}

timer = '';

function arcenciel(ciel,nuages,soleil) {

    var liens = document.getElementsByTagName('a');
    var titres = document.getElementsByTagName('h2');
    var cases = document.getElementById('calendar').getElementsByTagName('a');
    var nliens = liens.length;
    var ntitres = titres.length;
    var ncases = cases.length;

    var arc = Math.floor(Math.random()*(nliens+ntitres+ncases));
    //var azur = '#'+Math.floor(Math.random()*256).hexa(2)+Math.floor(Math.random()*256).hexa(2)+Math.floor(Math.random()*256).hexa(2);
    if(ciel>360 || nuages==0 || soleil==0) {
        ciel = modulo(ciel,360);
        nuages = Math.random()*0.7+0.3;
        soleil = Math.random()*0.6+0.2;
    }
    var azur = new Array(ciel,nuages,soleil);

    if(arc>=nliens+ntitres) {
        cases[arc-nliens-ntitres].style.background=colorer(azur);
    } else if(arc >=nliens) {
        titres[arc-nliens].style.color=colorer(azur);
    } else {
        liens[arc].style.color=colorer(azur);
    }

    timer = setTimeout(function() { arcenciel(ciel+1,nuages,soleil); }, 30);
}

function joie() {

    var liens = document.getElementsByTagName('a');
    var titres = document.getElementsByTagName('h2');
    var cases = document.getElementById('calendar').getElementsByTagName('a');
    var nliens = liens.length;
    var ntitres = titres.length;
    var ncases = cases.length;

    var toile = Math.floor(Math.random()*(nliens+ntitres+ncases));
    var peinture = '#'+Math.floor(Math.random()*256).hexa(2)+Math.floor(Math.random()*256).hexa(2)+Math.floor(Math.random()*256).hexa(2);

    if(toile>=nliens+ntitres) {
        cases[toile-nliens-ntitres].style.background=peinture;
    } else if(toile >=nliens) {
        titres[toile-nliens].style.color=peinture;
    } else {
        liens[toile].style.color=peinture;
    }

    timer = setTimeout(joie, 30);
}

function ternir() {
    if(timer) clearTimeout(timer);
}