//Autumn leaves- by Kurt Grigg (kurt.grigg@virgin.net)
//Modified by Dynamic Drive for NS6 functionality
//visit http://www.dynamicdrive.com for this script
// Modified by akt for readability and compatability with FireFox when DOCTYPE specified
// also does snowflakes (thanks, snogirl!) instead of leaves

//Pre-load your image below!
grphcs=new Array(3);
Image0=new Image();
Image0.src=grphcs[0]="snowflake-micro.gif";
Image1=new Image();
Image1.src=grphcs[1]="snowflake-mini.gif";
Image2=new Image();
Image2.src=grphcs[2]="snowflake-sm.gif";
//Image3=new Image();
//Image3.src=grphcs[3]="snowflake-micro.gif";
//Image4=new Image();
//Image4.src=grphcs[4]="snowflake-mini.gif";
//Image5=new Image();
//Image5.src=grphcs[5]="snowflake-sm.gif"; 

NumberLeavesOnScreen=8; //Smoothness depends on image file size, the smaller the size the more you can use!
Ypos=new Array();
Xpos=new Array();
Speed=new Array();
Step=new Array();
Cstep=new Array();
ns=(document.layers)?1:0;
ns6=(document.getElementById&&!document.all)?1:0;

// This section of code assigns a particular, random, image to each image on screen
if (ns) // for Netscape < 6 (Layers interface)
	{
	for (i = 0; i < NumberLeavesOnScreen; i++)
		{
		var P=Math.floor(Math.random()*grphcs.length);
		rndPic=grphcs[P];
		document.write("<LAYER NAME='sn"+i+"' LEFT=0 TOP=0><img src="+rndPic+"></LAYER>");
		}
	}
else // or Everyone Else
	{
	document.write('<div style="position:absolute;top:0px;left:0px"><div style="position:relative">');
	for (i = 0; i < NumberLeavesOnScreen; i++)
		{
		var P=Math.floor(Math.random()*grphcs.length);
		rndPic=grphcs[P];
		document.write('<img id="si'+i+'" src="'+rndPic+'" style="position:absolute;top:0px;left:0px">');
		}
	document.write('</div></div>');
	}

WinHeight=(ns||ns6)?window.innerHeight:window.document.body.clientHeight;
WinWidth=(ns||ns6)?window.innerWidth-70:window.document.body.clientWidth;

// This assigns initial location, initial step length(?), and speed to each "Leaf" on screen
for (i=0; i < NumberLeavesOnScreen; i++)
	{
	Ypos[i] = Math.round(Math.random()*WinHeight);
	Xpos[i] = Math.round(Math.random()*WinWidth);
	Speed[i]= (Math.random()*2+1);
	Cstep[i]=0;
	Step[i]=Math.random()*0.1+0.05;
	}

function fall()
	{
	var WinHeight=(ns||ns6)?window.innerHeight:window.document.body.clientHeight;
	WinHeight -= 51; // keep scrollbar from appearing - akt
	var WinWidth=(ns||ns6)?window.innerWidth-70:window.document.body.clientWidth;
	var hscrll=(ns||ns6)?window.pageYOffset:document.body.scrollTop;
	var wscrll=(ns||ns6)?window.pageXOffset:document.body.scrollLeft;
	for (i=0; i < NumberLeavesOnScreen; i++)
		{
		sy = Speed[i];// *Math.sin(90*Math.PI/180); // code trapped between comment marks equals "1"
		sx = Speed[i]*Math.cos(Cstep[i]);
		Ypos[i]+=sy;
		Xpos[i]+=sx;
		var myDiv = document.getElementById("debug_string");
//		myDiv.replaceChild(document.createTextNode((ns||ns6)?'Netscape':'DOM DOM DOM'), myDiv.childNodes[0]);
//		myDiv.replaceChild(document.createTextNode('('+Speed[i]+','+Cstep[i]+')'), myDiv.childNodes[0]);
		if (Ypos[i] > WinHeight) // leaf is at bottom of window -- move to top, get new speed, randomize x position
			{
			Ypos[i]=-52;
			Xpos[i]=Math.round(Math.random()*WinWidth);
			Speed[i]=Math.random()*2+1;
			}
		if (ns)
			{
//		myDiv.replaceChild(document.createTextNode('Netscape'), myDiv.childNodes[0]);
			document.layers['sn'+i].left=Xpos[i];
			document.layers['sn'+i].top=Ypos[i]+hscrll;
			}
		else if (ns6)
			{
			document.getElementById("si"+i).style.left=Math.min(WinWidth,Xpos[i])+'px';
			document.getElementById("si"+i).style.top=Ypos[i]+hscrll+'px';
//		myDiv.replaceChild(document.createTextNode('Netscape6 '+i), myDiv.childNodes[0]);
// bottom scroll bar appearsl with this			document.getElementById("si"+i).style.left=Xpos[i];
			}
		else
			{
			eval("document.all.si"+i).style.left=Xpos[i];
			eval("document.all.si"+i).style.top=Ypos[i]+hscrll;
			} 
		Cstep[i]+=Step[i];
		}
	setTimeout('fall()',30);
	}

window.onload=fall