//---------------------------------------------------------------------------------------------
// Konfiguration
//---------------------------------------------------------------------------------------------

// ID des HTML-Elements (in dem der Schnee fallen soll)
var IdSchneeBereich = 'winter';

// Maximale Anzahl an Schneeflocken
var AnzSchneeflocken = 50;

// Farben, welche die Schneeflocken haben können
var ArrFlockenFarben = new Array('#AAAACC','#DDDDFF','#CCCCDD','#F3F3F3','#F0FFFF');

// Schriftarten, die zum Zeichnen der Schneeflocken genutzt werden
var ArrFlockenSchriften  = new Array('Arial Black', 'Arial Narrow', 'Times', 'Comic Sans MS');

// Zeichen, welches als Schneeflocke genutzt wird
var ChrSchneeZeichen = '*';

// Schnelligkeit, mit der die Schneeflocken fallen
var DecSchneeGeschwindigkeit = 0.8;

// Maximale Schriftgröße der Schneeflocken
var IntSchneeMax = 22;

// Minimale Schriftgröße der Schneeflocken
var IntSchneeMin = 10;

// Verzögerungszeit in Millisekunden, bevor es anfängt zu schneien
var IntSchneeVerzoegZeit = 50;


//---------------------------------------------------------------------------------------------
// Skript
//---------------------------------------------------------------------------------------------

var divSchneeBereich = null;
var intSchneeZeitzaehler = 0;
var ArrSchneeflocken = new Array();

function int_Zufallszahl(pintBereich) { return Math.floor(Math.random() * pintBereich); }

function proc_ErstelleSchneeflocke()
{
	var strStyle = 'position:absolute; top:-' + IntSchneeMax + 'px; z-index:99;';
	for (var i = 0; i <= AnzSchneeflocken; i++)
		document.write('<sp' + 'an id="snwflk' + i + '" style="' + strStyle + '">' + ChrSchneeZeichen + '</sp' + 'an>');
}

function initSnow()
{	
	divSchneeBereich = document.getElementById(IdSchneeBereich);
	
	if(!divSchneeBereich || divSchneeBereich.offsetWidth <= IntSchneeMax || divSchneeBereich.offsetHeight <= IntSchneeMax) {
		// Pause aller 5 Sekunden
		if(intSchneeZeitzaehler < 5000)
			window.setTimeout('initSnow()', 50);
			
		intSchneeZeitzaehler += 50;
		return;
	}
	
	divSchneeBereich.style.position = 'relative';	
			
	for (var i = 0; i <= AnzSchneeflocken; i++)
	{	
		ArrSchneeflocken[i] = document.getElementById('snwflk' + i);
		
		ArrSchneeflocken[i].size = (int_Zufallszahl(IntSchneeMax - IntSchneeMin) + IntSchneeMin);		
		ArrSchneeflocken[i].posx = -ArrSchneeflocken[i].size;
		ArrSchneeflocken[i].posy = -ArrSchneeflocken[i].size;
		ArrSchneeflocken[i].sink = (DecSchneeGeschwindigkeit * ArrSchneeflocken[i].size / IntSchneeMin);
		ArrSchneeflocken[i].wobamp = (Math.random() * (ArrSchneeflocken[i].size));
		ArrSchneeflocken[i].wob = 0.0;
		ArrSchneeflocken[i].wobspeed = (0.03 + Math.random() / 10.0);
		
		ArrSchneeflocken[i].style.fontFamily = ArrFlockenSchriften[int_Zufallszahl(ArrFlockenSchriften.length)];
		ArrSchneeflocken[i].style.fontSize = ArrSchneeflocken[i].size + 'px';
		ArrSchneeflocken[i].style.color = ArrFlockenFarben[int_Zufallszahl(ArrFlockenFarben.length)];
	}
	
	window.setInterval('proc_SchneeflockeAktualisieren()', 50);
}

function proc_SchneeflockeAktualisieren()
{
	var bl = divSchneeBereich.offsetLeft;
	var bt = divSchneeBereich.offsetTop;
	var bw = divSchneeBereich.offsetWidth;
	var bh = divSchneeBereich.offsetHeight;	
	var br = bl + bw;	
	var bb = bt + bh;	
		
	for (var i = 0; i <= AnzSchneeflocken; i++)
	{
		ArrSchneeflocken[i].wob += ArrSchneeflocken[i].wobspeed;
		var x = ArrSchneeflocken[i].posx + (ArrSchneeflocken[i].wobamp * Math.sin(ArrSchneeflocken[i].wob));		
		ArrSchneeflocken[i].posy += ArrSchneeflocken[i].sink;
		
		ArrSchneeflocken[i].style.left = Math.round(x) + 'px';
		ArrSchneeflocken[i].style.top = Math.round(ArrSchneeflocken[i].posy) + 'px';
		
		var s = ArrSchneeflocken[i].size;		
		if (ArrSchneeflocken[i].posy > (bb - s) || x < bl || x  > (br - s))
		{
			ArrSchneeflocken[i].posx = bl + s + int_Zufallszahl(bw - (3 * s));
			
			if(ArrSchneeflocken[i].posy < 0)
				ArrSchneeflocken[i].posy = bt + int_Zufallszahl(bh - 2 * s);
			else
				ArrSchneeflocken[i].posy = bt;
		}
	}
}

// Schneefall starten
proc_ErstelleSchneeflocke();
window.setTimeout('initSnow()', Math.max(50, IntSchneeVerzoegZeit));
