//Snow - http://www.btinternet.com/~kurt.grigg/javascript
if((document.getElementById) && window.addEventListener || window.attachEvent){
   (function(){

    //Configure here.

    snowsrc = new Array();
    snowsrc[0] = "xmas/snowflake1.gif";
    snowsrc[1] = "xmas/snowflake2.gif";

    //End.

    var y = [];
    var x = [];
    var fall = [];
    var theFlakes = [];
    var sfs = [];
    var step = [];
    var currStep = [];
    var h,w,r;
    var d = document;
    var pix = "px";
    var domWw = (typeof window.innerWidth == "number");
    var domSy = (typeof window.pageYOffset == "number");
    var idx = d.getElementsByTagName('div').length;

    var num = (typeof window.innerWidth == "number") ? Math.round(5 + Math.random() * 50) : 10;   //10 Number of flakes
    var timer = (typeof window.innerWidth == "number") ? Math.round(15 + Math.random() * 60) : 30; //30 setTimeout speed. Varies on different comps
    var sizex = (typeof window.innerWidth == "number") ? 20 : 8;
    var enableinNS6 = 1 //Enable script in NS6/Mozilla? Snow animation could be slow in those browsers. (1=yes, 0=no).

    if(d.documentElement.style && typeof d.documentElement.style.MozOpacity == "string"){
       num = 12; //12
    }

    for(i = 0; i < num; i++){
        sfs[i] = Math.round(1 + Math.random() * sizex);
        rsn = Math.round(Math.random()* (snowsrc.length-1));
        snsrc = snowsrc[rsn];  // set image

        document.write('<div id="flake'+(idx+i)+'" style="Z-INDEX: '+ Math.round(1000+i) +'; position:absolute; top:0px; left:0px; width:'+sfs[i]+'px; height:'+sfs[i]+'px; background-color:transparent; font-size:'+sfs[i]+'px"><img height="' + sfs[i] + 'px" width="' + sfs[i] + 'px" src="' + snsrc + '" border="0"><\/div>');

        currStep[i] = 0;
        fall[i] = (sfs[i] == 1) ? Math.round(2 + Math.random() * 2) : Math.round(3 + Math.random() * 2);
        step[i] = (sfs[i] == 1) ? 0.05 + Math.random() * 0.1 : 0.05 + Math.random() * 0.05 ;
    }

    if(domWw){
       r = window;
       var screendwn = parseFloat(r.window.innerHeight)-50; // define bottom of snowfall
    }else{
          var screendwn = (parseFloat(window.screen.Height)-25)-200; // define bottom of snowfall
          if(d.documentElement && typeof d.documentElement.clientWidth == "number" && d.documentElement.clientWidth != 0){
             r = d.documentElement;
          }else{
                if(d.body && typeof d.body.clientWidth == "number"){
                   r = d.body;
                }
          }
    }


    function winsize(){
         var oh,sy,ow,sx,rh,rw;
         if(domWw){
             if(d.documentElement && d.defaultView && typeof d.defaultView.scrollMaxY == "number"){
                oh = d.documentElement.offsetHeight;
                sy = d.defaultView.scrollMaxY;
                ow = d.documentElement.offsetWidth;
                sx = d.defaultView.scrollMaxX;
                rh = oh-sy;
                rw = ow-sx;
             }else{
                   rh = r.innerHeight;
                   rw = r.innerWidth;
             }
             //h = rh - 2;
             //h = 246;
             h = screendwn;
             //alert(h);
             w = rw - 22;
         }else{
               //h = r.clientHeight - 2;
               //h = 246
               h = screendwn;
               w = r.clientWidth - 22;
         }
    }


    function scrl(yx){
         var y,x;
         if(domSy){
            y = r.pageYOffset;
            x = r.pageXOffset;
         }else{
               y = r.scrollTop;
               x = r.scrollLeft;
         }
         return (yx == 0) ? y : x;
    }


    function snow(){
         var dy,dx;

         for(i = 0; i < num; i++){
              dy = fall[i];
              dx = fall[i] * Math.cos(currStep[i]);

              y[i]+=dy;
              x[i]+=dx;

              if(x[i] >= w || y[i] >= h){
                 y[i] = -10;
                 x[i] = Math.round(Math.random() * w);
                 fall[i] = (sfs[i] == 1) ? Math.round(2 + Math.random() * 2) : Math.round(3 + Math.random() * 2);
                 step[i] = (sfs[i] == 1) ? 0.05 + Math.random() * 0.1 : 0.05 + Math.random() * 0.05 ;
              }

              theFlakes[i].top = y[i] + scrl(0) + pix;
              theFlakes[i].left = x[i] + scrl(1) + pix;

              currStep[i]+=step[i];
         }
         setTimeout(snow,timer);
    }


    function init(){
         winsize();
         for(i = 0; i < num; i++){
              theFlakes[i] = document.getElementById("flake"+(idx+i)).style;
              y[i] = Math.round(Math.random()*h);
              x[i] = Math.round(Math.random()*w);
         }
         snow();
    }


    if(window.addEventListener){
       window.addEventListener("resize",winsize,false);
       window.addEventListener("load",init,false);
    }else{
          if(window.attachEvent){
             window.attachEvent("onresize",winsize);
             window.attachEvent("onload",init);
          }
    }
   })();
}
