// CREDITS:
// Written by: Peter Gehrig.
// Modified by: Stephane Mahaux
// Distributed by: http://www.hypergurl.com

// CONFIGURATION
// Set the number of snowflakes (more than 30 - 40 not recommended)
var snowmax=35
// Set the colors for the snow. Add as many colors as you like
var snowcolor=new Array("#aaaacc","#ddddFF","#ccccDD")
// Set the fonts, that create the snowflakes. Add as many fonts as you like
var snowtype=new Array("Arial Black","Arial Narrow","Times","Comic Sans MS")
// Set the letter that creates your snowflake (recommended:*)
var snowletter="*"
// Set the speed of sinking (recommended values range from 0.3 to 2)
var sinkspeed=0.6
// Set the maximal-size of your snowflaxes
var snowmaxsize=22
// Set the minimal-size of your snowflaxes
var snowminsize=8
// Set the snowing-zone:
//   value <=1 in percent
//   value >1  in pixels
var zone_offset=490
var zone_width=.9

// IMPLEMENTATION
var snow=new Array()
var marginbottom
var marginright
var timer
var i_snow=0
var x_mv=new Array();
var crds=new Array();
var lftrght=new Array();
var browserinfos=navigator.userAgent 
var ie5=document.all && document.getElementById && ! browserinfos.match(/Opera/)
var ns6=document.getElementById && ! document.all
var opera=browserinfos.match(/Opera/) 
var browserok=ie5||ns6||opera

function randommaker(range) 
{ 
 rand=Math.floor(range * Math.random())
 return rand
}

function initsnow() 
{
 if (ie5 || opera) 
 {
  marginbottom = document.body.clientHeight
  marginright = document.body.clientWidth
 }
 else if (ns6) 
 {
  marginbottom = window.innerHeight
  marginright = window.innerWidth
 }
 if ( zone_offset > 1 ) 
 {
  zone_offset = zone_offset / marginright 
 }
 if ( zone_width > 1 ) 
 {
  zone_width  = zone_width / marginright 
 }

 var snowsizerange=snowmaxsize-snowminsize

 for (i=0;i<=snowmax;i++) 
 {
  crds[i] = 0; 
  lftrght[i]               = Math.random() * 15; 
  x_mv[i]                  = 0.03 + Math.random() / 10;
  snow[i]                  = document.getElementById("s"+i)
  snow[i].style.fontFamily = snowtype[randommaker(snowtype.length)]
  snow[i].size             = randommaker(snowsizerange) + snowminsize
  snow[i].style.fontSize   = snow[i].size
  snow[i].style.color      = snowcolor[randommaker(snowcolor.length)]
  snow[i].sink             = sinkspeed * snow[i].size / 5
  snow[i].posy             = randommaker(6 * marginbottom - marginbottom - 6 * snow[i].size)
  snow[i].posx             = randommaker((marginright - snow[i].size) * zone_width) + (marginright * zone_offset)
  if( (snow[i].posx + snow[i].size) >= marginright )
  {
    snow[i].posx = marginright - snow[i].size - 1
  }

  // Draw flake.
  snow[i].style.left       = snow[i].posx
  snow[i].style.top        = snow[i].posy
 }//for
 movesnow()
}//initsnow()


function movesnow() 
{
 for (i=0;i<=snowmax;i++) 
 {
  crds[i]      += x_mv[i];
  snow[i].posy += snow[i].sink
  var left      = snow[i].posx + lftrght[i] * Math.sin(crds[i]);
  if( (left + snow[i].size + 1) >= marginright )
  // If flake goes off the right margin.
  {
    snow[i].posx = randommaker((marginright - snow[i].size) * zone_width) + (marginright * zone_offset)
    if( (snow[i].posx + snow[i].size) >= marginright )
    {
      snow[i].posx = marginright - snow[i].size - 1
    }
    left = snow[i].posx
    snow[i].posy = 0
  }

  // Draw flake.
  snow[i].style.left = left;
  snow[i].style.top  = snow[i].posy

  if (snow[i].posy >= marginbottom - 6 * snow[i].size || parseInt(snow[i].style.left) > (marginright - 3 * lftrght[i]))
  // If flake reaches bottom.
  {
    // Re-position randomly at top.
    snow[i].posx = randommaker((marginright - snow[i].size) * zone_width) + (marginright * zone_offset)
    snow[i].posy = 0
  }
 }//for
 var timer=setTimeout("movesnow()",50)
}//movesnow()


for (i=0;i<=snowmax;i++) 
{
 document.write("<span id='s"+i+"' style='position:absolute;top:-"+snowmaxsize+";z-index:5'>"+snowletter+"</span>")
}//for
if (browserok) 
{
 window.onload=initsnow
}

