var number;
var interval;
var minAmpl;
var maxAmpl;
var minLife;
var maxLife;
var minSpeed;
var maxSpeed;
var flakes = new Array();
var browserWindowSize;
//var windowSize = getClientSize();


function Snowflake(amplitude, life, speed){
  this.amplitude = amplitude;
  this.damp = 10;
  this.camp = amplitude;
  this.life = life;
  this.flife = life;
  this.speed = speed;
  this.sx = 0;
  this.sy = 0;
  this.death = false;
  this.size = Math.round(Math.random()*10)+8;
  
  this.image = new Image();
  this.image.src = "javascripts/flake.gif";
  this.image.style.width = this.size
  this.image.style.height = this.size;
  this.image.style.display = "block";
  this.image.style.position = "absolute";
  document.getElementById("body").appendChild(this.image);
  //methods
  this.fall=Snowfalke_fall;
  this.repaint = Snowfalke_repaint;
  this.kill = Snowfalke_kill;
  this.reinit = Snowfalke_reinit;
  //alert("flake constructor");
}

function Snowfalke_reinit(amplitude, life, speed){
  this.amplitude = amplitude;
  this.damp = 10;
  this.camp = amplitude;
  this.life = life;
  this.flife = life;
  this.speed = speed;
  this.death = false;
  this.sx = Math.round(Math.random()*(browserWindowSize[0]-70))+70;
  this.sy = 0;
  this.image.style.display = "block";
  this.size = Math.round(Math.random()*10)+8;
  this.image.style.width = this.size;
  this.image.style.height = this.size; 
  this.image.style.filter = "alpha(opacity=100)";
  this.repaint(); 
}

function Snowfalke_kill(){
  this.death = true;
  this.image.style.display = "none";
  
}

function Snowfalke_fall(){
  //alert("fall");
  this.sy += this.speed;
  this.sx += Math.round(Math.cos(this.camp+this.damp));
  this.life--;
  this.opacity = Math.round((this.life / this.flife)*100);
  if(this.life<=0)
    this.kill();
  this.repaint();
}

function Snowfalke_repaint(){
 
  //document.getElementById("help").innerText = aplhaval;
  this.image.style.left = Math.round(this.sx);
  this.image.style.top =  Math.round(this.sy);
  
  if(this.life < 20){
    aplhaval = "alpha(opacity="+Math.round((this.life / 20)*100)+")"; 
    this.image.style.filter = aplhaval;
  }
}

function startSnow(num, minAmpll, maxAmpll, minLifee, maxLifee, minSpeedd, maxSpeedd, intervallen){
  number = num;
  interval = intervallen;
  minAmpl = minAmpll;
  maxAmpl = maxAmpll;
  minLife = minLifee;
  maxLife = maxLifee;
  minSpeed = minSpeedd;
  maxSpeed = maxSpeedd;
  browserWindowSize = getClientSize();
  
  for(var i=0; i<number; i++){
    createSnow(minAmpl, maxAmpl, minLife, maxLife, minSpeed, maxSpeed, interval);
  }
  snowing(); 
}


function createSnow(minAmpl, maxAmpl, minLife, maxLife, minSpeed, maxSpeed, interval){
    var flake = new Snowflake(0, 0, 0)
    //alert(flake);
    flakes.push(flake); 
    initFlake(flake, minLife, maxLife, minSpeed, maxSpeed);
}

function initFlake(flake, minLife, maxLife, minSpeed, maxSpeed){
     
    var ampl = Math.round(Math.random());
    var live = Math.round(Math.random()*maxLife)+minLife;
    var speed = Math.round(Math.random()*maxSpeed)+minSpeed;
    
    flake.reinit(ampl, live, speed);
} 
function snowing(){
    for(var i=0; i< flakes.length; i++){
      flakes[i].fall();
      if(flakes[i].death){
        initFlake(flakes[i], minLife, maxLife, minSpeed, maxSpeed);
      }
    }
    setTimeout("snowing()",interval);
}

