//number of snowflakes (more snowflakes, more cpu usage)
var snowmax = 25;
//colors array for snow
var snowcolor = new Array("#aaaacc", "#ddddFF", "#ccccDD");
//fonts array for snowflakes
var snowtype = new Array("Arial Black", "Arial Narrow", "Times", "Comic Sans MS", "Verdana");
//snowflake letter
var snowletter="*"
//speed of sinking (0.3 - 1.5)
var sinkspeed=0.9
//max snowflake size
var snowmaxsize=22
//min snowflake size
var snowminsize=8
//set snowing-zone
//1 all-over-snowing, 2 left-side-snowing 
//3 center-snowing, 4 right-side-snowing
var snowingzone=1

//main
var snow = new Array();
var marginbottom;
var marginright;
var timer;
var i_snow = 0;
var x_mv = new Array();
var crds = new Array();
var lftrght = new Array();
var browserinfos = navigator.userAgent.toLowerCase();
var ie = /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
var ns6 = document.getElementById && !document.all;
var opera = browserinfos.indexOf('opera') > -1;
var chrome = browserinfos.indexOf('chrome') > -1;
var firefox = browserinfos.indexOf('firefox') > -1;
var browserok = (ie || ns6 || opera || chrome || firefox);

//returns random number
function randommaker(range) {		
	rand = Math.floor(range * Math.random());
    return rand;
}

//moving the snowflakes around
function moveSnowFlake() {    

    //loop trought snowflake
	for (i=0; i <= snowmax; i++) {
		crds[i] += x_mv[i];
		snow[i].posy += snow[i].sink;
		
		//change position
	    snow[i].style.left = (snow[i].posx + lftrght[i] * Math.sin(crds[i])).toFixed(0) + 'px';
		snow[i].style.top = snow[i].posy.toFixed(0) + 'px';

		//if snowflake reaches bottom of page, then we reset it's position
		if (snow[i].posy >= marginbottom - 6 * snow[i].size || parseInt(snow[i].style.left) > (marginright - 3 * lftrght[i])){
			if (snowingzone == 1) { snow[i].posx = randommaker(marginright - snow[i].size); }
			else if (snowingzone == 2) { snow[i].posx = randommaker(marginright / 2 - snow[i].size); }
			else if (snowingzone == 3) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) + marginright / 4; }
			else if (snowingzone == 4) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) + marginright / 2; }
			snow[i].posy = 0;
		}
	}
	
	setTimeout("moveSnowFlake()", 75);
}

//add snow flake to page
function createSnowFlake(id) {
    //new snowflake
    var snowelement;
    
    //snow flake properties
    snowelement = document.createElement('span');
    snowelement.id = 'snowflake' + id;
    snowelement.style.display = 'none';
    snowelement.style.top = '-' + snowmaxsize;
	snowelement.style.position = 'absolute';
	snowelement.style.zIndex = 100;
	snowelement.posy = 0;
	snowelement.posx = 0;
	snowelement.size = 0;
    snowelement.innerHTML = snowletter;
    
    //add to body of page
    document.body.appendChild(snowelement);
    
    //dispose
    snowelement = null;
}

//starts snow flakes
function initsnow() {

	//get height and width from IE and  Opera
	if (ie || opera) {
		marginbottom = document.body.clientHeight;
		marginright = document.body.clientWidth;
	}
	//get height and width from Netscape, FireFox and Chrome
	else if (ns6 || firefox || chrome) {
		marginbottom = window.innerHeight;
		marginright = window.innerWidth;
	}

	//set snow size range
	var snowsizerange = snowmaxsize - snowminsize;
	
	//loop trought snowflakes
	for (i=0; i <= snowmax; i++) {
	    //create snowflake
	    createSnowFlake(i);
	    
	    //properties for each snow flake
		crds[i] = 0;                      
    	lftrght[i] = Math.random() * 15;      
    	x_mv[i] = 0.03 + Math.random() / 10;
		snow[i] = document.getElementById('snowflake' + i);
		snow[i].style.fontFamily = snowtype[randommaker(snowtype.length)];
		snow[i].size = randommaker(snowsizerange) + snowminsize;
		snow[i].style.fontSize = snow[i].size;
		snow[i].style.color = snowcolor[randommaker(snowcolor.length)];
		snow[i].style.display = 'block';
		snow[i].sink = sinkspeed * snow[i].size / 5;
		if (snowingzone == 1) { snow[i].posx = randommaker(marginright - snow[i].size); }
		else if (snowingzone == 2) { snow[i].posx = randommaker(marginright / 2 - snow[i].size); }
		else if (snowingzone == 3) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) + marginright / 4; }
		else if (snowingzone == 4) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) + marginright / 2; }
		snow[i].posy = randommaker(6 * marginbottom - marginbottom - 6 * snow[i].size);
		
		//change position
        snow[i].style.left = snow[i].posx.toFixed(0) + 'px';
		snow[i].style.top = snow[i].posy.toFixed(0) + 'px';	
	}
	
	//move snow flake
	setTimeout("moveSnowFlake()", 100);
}

if (browserok) {    
	//init snow flakes
	window.onload = initsnow;
}
