var w = 230;
var h = 300;
var c = null; // canvas
var b = null; // buffer
var pi2 = Math.PI*2;

var mp = 30; // maxparticles
var p = new Array(mp); // particles

function r(n) { return Math.round(n*Math.random()); }
function fr(n) { return n*Math.random(); }
function sn(a) { return Math.sin(a); }

function setup() {
  c = document.getElementById('snow').getContext('2d');
  for (var i=0; i<mp; i++) {
    p[i]=new Array(fr(w),fr(h),1+fr(4));
  }
}

var a = 0;
function update() {
  a+=0.01;
  var s=sn(a);
  for (var i=0; i<mp; i++) {
    var pn=p[i];
    var s2 = sn(4*a+i);
    pn[1]+=pn[2]/2+(1+s2);
    pn[0]+=6*(s+(s2/2))/(10/pn[2]);
    if ((pn[1]>h+10)||(pn[0]>w+10)||(pn[0]<-10)) {
      p[i]=(i%3>0)?(Array(fr(w),-10,pn[2])):((s>0)?(Array(-5,fr(h),pn[2])):(Array(w+5,fr(h),pn[2])));
    }
  }  
}

function draw() {
  c.fillStyle = "#8a0d07";
  c.fillRect(0,0,w,h);
  c.fillStyle = "rgba(255,255,255,0.8)";
  c.strokeStyle="none";
  c.beginPath();
  for (var i=0; i<mp; i++) {
    c.moveTo(p[i][0],p[i][1]);
    c.arc(p[i][0],p[i][1],p[i][2],0,pi2,true);
  }
  c.fill();
  update();
}

