$.fn.jSnow=function(g){
  var h=$.extend({},$.fn.jSnow.defaults,g);
  var j=window.innerWidth||document.documentElement.clientWidth;
  var k=window.innerHeight||document.documentElement.clientHeight;
  var l=h.flakes;
  var m=h.flakeCode;
  var n=h.flakeColor;
  var o=h.flakeMinSize;
  var p=h.flakeMaxSize;
  var q=h.fallingSpeedMin;
  var r=h.fallingSpeedMax;
  var s=$("<div><\/div>");
  window.onload=function(){
    s.css({width:j+"px",width:k+"px",display:"block",position:"absolute",top:"0px",left:"0px"});
    $("body").prepend(s);
    $("html").css({"overflow-x":"hidden","overflow-y":"scroll"})
  };
  var t=Array();
  generateFlake(l,false);
  setInterval(animateFlakes,50);
  window.onresize=function(){
    j=window.innerWidth||document.documentElement.clientWidth;
    k=window.innerHeight||document.documentElement.clientHeight
  };
  window.onscroll=function(){s.animate({top:$("html").scrollTop()+"px"},150)};
  function generateFlake(a,b){
    a=a||1;
    b=b||false;
    var i=0;
    for(i=0;i<a;i++){
      var c=$("<span><\/span>");
      var d=o+Math.floor(Math.random()*p);
      c.html(m[Math.floor(Math.random()*m.length)]).css({color:n[Math.floor(Math.random()*n.length)],fontSize:d+"px",display:"block",position:"absolute",cursor:"default"});
      $(s).append(c);
      f_left=Math.floor(Math.random()*(j-c.width()-50))+25;
      f_top=(b)?-1*c.height():Math.floor(Math.random()*(k-50));
      var e=50+Math.floor(Math.random()*150);
      c.data("posData",{top:f_top,left:f_left,rad:Math.random()*50,i:Math.ceil(q+Math.random()*(r-q)),swingRange:e});
      c.css({top:f_top+"px",left:f_left+"px"});
      c.css('z-index', '10000');
      t.push(c)
    }
  };
  function generateFlakes(){
    if(t.length<l){
      if(Math.random()>0.1){
        generateFlake(1,true)
      }
    }
  };
  function animateFlakes(){
    generateFlakes();
    var i=0;
    var a=Array();
    for(i=0;i<t.length;i++){
      var f=t[i];
      var b=f.data("posData");
      b.top+=b.i;
      var c=Number();
      c=Math.cos((b.rad/180)*Math.PI);
      b.rad+=2;
      var X=b.left-c*b.swingRange;
      f.css({top:b.top+"px",left:X+"px"});
      if(b.top+f.height()>=k){
        jQuery.removeData(f);
        f.remove();
        a.push(i)
      }
    }
    if(a.length>0){
      removeArrayItems(t,a);
      generateFlake(1,true)
    }
  };
  function removeArrayItems(A,a){
    for(i=a.length-1;i>=0;i-=1){
      A.splice(a[i],1)
    }
    a=Array()
  };
  return this
};
$.fn.jSnow.defaults={flakes:50,fallingSpeedMin:1,fallingSpeedMax:3,flakeMaxSize:20,flakeMinSize:10,flakeCode:["*"],flakeColor:["#fff"]}


