/*
    Snowfall script
    Created by : Jeremy Crapsey
    http://www.jeremycrapsey.com/
*/
(function(){var a;var f;if(window.addEventListener){a=function(g){window.addEventListener("DOMContentLoaded",g,false);window.addEventListener("load",g,false)};f=function(g){window.removeEventListener("DOMContentLoaded",g,false);window.removeEventListener("load",g,false)}}else{if(document.attachEvent){a=function(g){document.attachEvent("onreadystatechange",g);document.attachEvent("load",g)};f=function(g){document.detachEvent("onreadystatechange",g);document.detachEvent("load",g)}}}var e=null;var b=false;function d(){b=true;f(d);if(!e){return}for(var g=0;g<e.length;g++){e[g]()}e=null}function c(g){if(b){g();return}if(!e){e=[];a(d)}e.push(g)}window.OnReady=c})();

var snowFlake = function(target){
    //Create Div
    var  div = document.createElement('div')
        ,random = Math.random()
        ,even = Math.floor(random*(2))
        ,image = (target.id  === "front_snow")?even+1:even+3;
    
    //default styles
    div.style.position = "absolute";
    div.style.background = "url('snow_flake01.png') no-repeat center";
    div.style.width = "15px";
    div.style.height = "15px";
    div.style.top = "-15px"
    
    //default settings
    div.x = 0;
    div.y = -15;
    div.speed = 10000;
    div.layer = 1; // layers 1-4
    div.drift_speed = 7000+random*(1000);
    div.fall_speed = (target.id  === "front_snow")?4000+random*(1000):10000+random*(1000);
            
    div.update = function(){
        div.style.left = div.x+"px";
        div.style.top = div.y+"px";
    }
    
    div.setImage = function(image){
        div.style.backgroundImage = "url('/media/snow_flake0"+image+".png')";
    }
    
    div.reset = function(){
        div.y = -15;
    }
    
    div.setImage(image);
    target.appendChild(div);
    
    return div
}

var renderSnow = function(density,target,repeat){
    for(var i = 0;i<= density.count;i++){
        flake = new snowFlake(target);

        xPos = flake.x = Math.random()*(736);
        fallSpeed = flake.fall_speed;
        driftSpeed = flake.drift_speed;
        
        floatDown = new TWEEN.Tween(flake)
            .to( {y:250}, fallSpeed)
            .onUpdate(flake.update);

        floatLeft = new TWEEN.Tween(flake)
            .to({x:xPos-30},driftSpeed);
        
        floatRight = new TWEEN.Tween(flake)
            .to({x:xPos+30},driftSpeed);
            
        floatDown.delay(i*density.delay).onComplete(flake.reset);
        
        floatLeft.chain(floatRight);
        floatRight.chain(floatLeft);
        floatDown.chain(floatDown);
  
        floatDown.start();
        if(Math.floor(i%2)==0){floatLeft.start();}else{floatRight.start();} 
    }
}

OnReady(function(){ 
    var frontSnow = document.getElementById("front_snow");
    var backSnow = document.getElementById("back_snow");
    
    renderSnow({count:18,delay:300},frontSnow);
    renderSnow({count:40,delay:250},backSnow);
    
    (function tick(){
        TWEEN.update();
        setTimeout(tick,1000/30);
    }());
});

