// Copyright (C) 2008 by Fabian Schlieper - nicht entfernen
// Schnee v1.1
// http://www.fabi.me/

var s_area_id = 'schnee';
var s_flake_count = 50;
var s_colors = new Array('#aaaacc','#ddddff','#ccccdd','#f3f3f3','#f0ffff');
var s_fonts  = new Array('Arial Black', 'Arial Narrow', 'Times', 'Comic Sans MS');
var s_char = '*';
var s_gravity = 0.8;
var s_max_size = 24;
var s_min_size = 8;
var sflock = new Array();
var s_area_el = null;

function make_flock()
{ var style = 'position:absolute; top:-' + s_max_size + 'px; z-index:99;';
  for (var i = 0; i <= s_flake_count; i++)
    document.write('<sp' + 'an id="snwflk' + i + '" style="' + style + '">' + s_char + '</sp' + 'an>');
}

function rnd(range)
{ return Math.floor(Math.random() * range);
}

function init_flock()
{ s_area_el = document.getElementById(s_area_id);

  if(!s_area_el)
  { window.setTimeout('init_flock()', 50);
    return;
  }

  s_area_el.style.position = 'relative';


  for (var i = 0; i <= s_flake_count; i++)
  { sflock[i] = document.getElementById('snwflk' + i);

    sflock[i].size = (rnd(s_max_size - s_min_size) + s_min_size);
    sflock[i].posx = -sflock[i].size;
    sflock[i].posy = -sflock[i].size;
    sflock[i].sink = (s_gravity * sflock[i].size / s_min_size);
    sflock[i].wobamp = (Math.random() * (sflock[i].size));
    sflock[i].wob = 0.0;
    sflock[i].wobspeed = (0.03 + Math.random() / 10.0);

    sflock[i].style.fontFamily = s_fonts[rnd(s_fonts.length)];
    sflock[i].style.fontSize = sflock[i].size + 'px';
    sflock[i].style.color = s_colors[rnd(s_colors.length)];
  }

  window.setInterval('next_flock()', 50);
}

function next_flock()
{ var bl = s_area_el.offsetLeft;
  var bt = s_area_el.offsetTop;
  var bw = s_area_el.offsetWidth;
  var bh = s_area_el.offsetHeight;	
  var br = bl + bw;	
  var bb = bt + bh;	

  for (var i = 0; i <= s_flake_count; i++)
  { sflock[i].wob += sflock[i].wobspeed;
    var x = sflock[i].posx + (sflock[i].wobamp * Math.sin(sflock[i].wob));		
    sflock[i].posy += sflock[i].sink;

    sflock[i].style.left = Math.round(x) + 'px';
    sflock[i].style.top = Math.round(sflock[i].posy) + 'px';

    var s = sflock[i].size;		
    if (sflock[i].posy > (bb - s) || x < bl || x  > (br - s))
    { sflock[i].posx = bl + s + rnd(bw - (3 * s));

      if(sflock[i].posy < 0)
        sflock[i].posy = bt + rnd(bh - 2 * s);
      else
        sflock[i].posy = bt;
    }
  }
}

make_flock();	
init_flock();

