/*--------------------*\
||   Initialisation   ||
\*--------------------*/
/*
  = Ajout du script sur votre site =

   <script type="text/javascript" src="http://www.valdun.net/neige.js"></script>


  = Déclenchement de la neige =
Une fois le script inséré, la neige se déclenche avec ce code :

  <script type="text/javascript">
    if (window.innerHeight || document.documentElement.clientHeight) window.onload = function() { new Neige() };
  </script>


  = Modifier les flocons =
L'apparence des flocons est personnalisable en ajoutant des paramètres à la neige.
Tous les paramètres sont optionnels.

  <script type="text/javascript">
    if (window.innerHeight || document.documentElement.clientHeight) window.onload = function() {
      new Neige({
        quantite: 30, // Il est déconseillé de monter au-dessus de 40
        vitesse: 0.7,
        zone: 1, // 1: partout, 2: à gauche, 3: au centre, 4: à droite
        tailleMax: 22,
        tailleMin: 8,
        couleurs: ['white', 'grey', 'pink'],
        polices: ['Arial Black', 'Impact', 'Trebuchet MS']
      })};
  </script>



*/
/*--------------------*\
||       Script       ||
\*--------------------*/
var flocon = [], marginBottom, marginRight, mvt_x = [], crds = [], lftrght = [];

function $(id) { return document.getElementById(id) }
function nbAleatoire(range) { return Math.floor(range*Math.random()) }
function Neige(flocons)
{
  var _self = this;
  this.flocons = {
    quantite: 30,
    vitesse: 0.7,
    zone: 1, // 1: partout, 2: à gauche, 3: au centre, 4: à droite
    tailleMax: 22,
    tailleMin: 8,
    couleurs: ['#aaaacc', '#ddddff', '#ccccdd'/*, '#109dd0', 'red'*/],
    polices: ['Arial Black', 'Arial Narrow', 'Times', 'Comic Sans MS', 'Impact', 'Segoe UI', 'Trebuchet MS']
  }

  this.__construct = function (flocons)
  {
    if (flocons) for (param in flocons) this.flocons[param] = flocons[param]; // Ajustement des params
    if (window.innerHeight) {
      marginBottom = window.innerHeight; marginRight = window.innerWidth;
    } else {
      marginBottom = document.documentElement.clientHeight; marginRight = document.documentElement.clientWidth;
    }
    for (i = 0; i <= this.flocons.quantite; i++) {
      crds[i] = 0; mvt_x[i] = 0.03 + Math.random()/10; lftrght[i] = Math.random()*15; // Déplacement sur X
      flocon[i] = {};
      flocon[i].taille = nbAleatoire(this.flocons.tailleMax-this.flocons.tailleMin) + this.flocons.tailleMin;
      flocon[i].vitesse = this.flocons.vitesse * flocon[i].taille /5;
      flocon[i].posy = nbAleatoire(marginBottom - 2*flocon[i].taille);
      if (this.flocons.zone == 1) flocon[i].posx = nbAleatoire(marginRight-flocon[i].taille);
      else if (this.flocons.zone == 2) flocon[i].posx = nbAleatoire(marginRight/2-flocon[i].taille);
      else if (this.flocons.zone == 3) flocon[i].posx = nbAleatoire(marginRight/2-flocon[i].taille)+marginRight/4;
      else if (this.flocons.zone == 4) flocon[i].posx = nbAleatoire(marginRight/2-flocon[i].taille)+marginRight/2;
    }
    var node_txt = ''; for (i = 0; i <= this.flocons.quantite; i++) {
      node_txt +=
        '<span id="flocon'+i+'" style="position:absolute;'+
        ' left: '+flocon[i].posx+'px;'+
        ' top: '+flocon[i].posy+'px;'+
        ' font-size: '+flocon[i].taille+'px;'+
        ' font-family: '+this.flocons.polices[nbAleatoire(this.flocons.polices.length)]+';'+
        ' color: '+this.flocons.couleurs[nbAleatoire(this.flocons.couleurs.length)]+';'+
        '">*</span>';
    }
    var node = document.createElement('div'); node.setAttribute('style', 'z-index: 10000; width: 100%; position: fixed; top: 0; left: 0;'); node.innerHTML = node_txt; document.body.appendChild(node);
    this.animer();
  }

  this.animer = function()
  {
    for (i = 0; i <= this.flocons.quantite; i++) {
      crds[i] += mvt_x[i];
      flocon[i].posy += flocon[i].vitesse;
      $('flocon'+i).style.left = flocon[i].posx+lftrght[i]*Math.sin(crds[i]) +'px';
      $('flocon'+i).style.top = flocon[i].posy +'px';

      if (flocon[i].posy >= marginBottom - 2*flocon[i].taille || parseInt($('flocon'+i).style.left)>(marginRight-3*lftrght[i])) {
        flocon[i].posy = 0;
        if (this.flocons.zone == 1) flocon[i].posx = nbAleatoire(marginRight-flocon[i].taille);
        else if (this.flocons.zone == 2) flocon[i].posx = nbAleatoire(marginRight/2-flocon[i].taille);
        else if (this.flocons.zone == 3) flocon[i].posx = nbAleatoire(marginRight/2-flocon[i].taille)+marginRight/4;
        else if (this.flocons.zone == 4) flocon[i].posx = nbAleatoire(marginRight/2-flocon[i].taille)+marginRight/2;
      }
    }
    window.setTimeout(function() { _self.animer() }, 50);
  }

  this.__construct(flocons);
}

