/*

  coded by Imagician / BionFX for Knuddels.com

  http://www.bionfx.de

  successfully tested with: IE4.0, IE5.0, NN4.5, NN6.0

*/


var numOfDivs = 21;
var fallSpeed = new Array(numOfDivs);
var sideMargin = 0;
var xP = new Array(numOfDivs);
var yP = new Array(numOfDivs);
var vP = 0;
var vPO = -1;
var ampli = 4;
var sinus = new Array(16);
var counter = 0;
var dreiundachtzig = false;

function printUnsupp()
{
  window.status = 'UNSUPPORTED BROWSER! SOME JS WONT WORK, SORRY.';
  return true;
}

function setVis(name, visi)
{
  obj = (document.layers)? document.layers[name] : (document.all)? document.all.tags("div")[name].style : (document.getElementById)? document.getElementById(name).style : 'null';
  if (obj != 'null') obj.visibility = (visi) ? 'visible':'hidden';
  else printUnsupp();
}

function setPos(name, x, y)
{
  if (document.layers)
  {
    document.layers[name].left = x;
    document.layers[name].top  = y;
  }
  else if (document.all)
  {
    document.all.tags("div")[name].style.pixelLeft = x;
    document.all.tags("div")[name].style.pixelTop  = y;
  }
  else if (document.getElementById)
  {
    document.getElementById(name).style.left = x;
    document.getElementById(name).style.top  = y;  
  }
  else printUnsupp();
  
}

function fBreite()
{
  if (!document.all)
    xx = window.innerWidth - sideMargin; //supported by NN4+ and NN6
  else
    xx = document.body.clientWidth  - sideMargin;

  return xx;
}

function vScrolled()
{
  if (!document.all) return window.pageYOffset; //supported by NN4+ and NN6
  else return document.body.scrollTop;
}


function fHoehe()
{
  if (!document.all)
    yy = window.innerHeight; //supported by NN4+ and NN6
  else
    yy = document.body.clientHeight;
  return yy;
}


function lowerFlakes()
{
  fH = fHoehe();

  for (n = 0; n <= (numOfDivs - 1); n++)
  {
    yP[n] += fallSpeed[n];
    
    if ( (yP[n] >= fH) || (yP[n] < -30) )
    {
      yP[n] = -30;
      xP[n]= Math.round( Math.random() * fBreite() );
      fallSpeed[n] = 1.42 + Math.random() * 5.83;

      if (n == (numOfDivs -1 )) setVis('flake'+n, (Math.random()>0.7)?true:false);
    }
  }
}

function putFlakes()
{
  vP = vScrolled();
  counter ++;

  if (vP != vPO)  for (n = 0; n <= (numOfDivs - 1); n++) yP[n] -= (vP - vPO)

  for (n = 0; n <= (numOfDivs - 1); n++)
    setPos('flake'+n, xP[n] + sinus[(counter + n)%sinus.length], yP[n] + vP);

  vPO = vP;
}

function timerInt()
{
  lowerFlakes()
  putFlakes();
}

var gimmick = true;

function init()
{
  sideMargin = 35 + ampli;

  for (n = 0; n <= (numOfDivs - 1); n++)
  {
    xP[n] = Math.round( Math.random() * fBreite() );
    yP[n] = Math.round( Math.random() * fHoehe() );

    fallSpeed[n] = 1.42 + Math.random() * 5.83;
  }

  for (n = 0; n <= (sinus.length - 1); n++)
    sinus[n] = (Math.sin( (n/sinus.length) * 2*Math.PI  ) * (ampli*2)) - ampli;

  putFlakes();
  for (n = 0; n <= (numOfDivs - 2); n++) setVis('flake'+n,true);
  window.setInterval('timerInt()',125);

}
