//////////////////////////////////////////////////////////////////////////
//
// Wobbles.js script for generic multi-image wobbling up or down
// the screen. Can be used for any rising or falling images,
// like autumn leaves, or rising bubbles.
//
// Script based on "Autumn leaves- by Kurt Grigg (kurt.grigg@virgin.net)"
// Modified by Dynamic Drive for NS6 functionality
// Modified by Craig Taverner (craig at amanzi.com) for configurability

// These settings are defaulted to good values for falling autumn leaves
// Change them to use for other objects that fall differently
Amount=8;		// Number of images to place on screen
			// Smoothness depends on image file size,
			// the smaller the size the more you can use!
BaseSpeed=3;		// larger numbers increase speed of object movement
SpeedRange=5;		// larger numbers increase range of different speeds
Amplitude=1.0;		// ratio of x-wobble to y-speed
BaseWobble=0.05;	// larger numbers give tighter wobble
WobbleRange=0.1;	// larger numbers give wider wobble range
TimeGap=20;		// time to wait between redraws (larger number slows animation)
Rise=0;			// set to 0 for falling, and 1 for rising

// Initialize internal arrays
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;

// Pre-load your image below!
graphics=new Array()
WinHeight=(ns||ns6)?window.innerHeight-30:window.document.body.clientHeight-30;
WinWidth=(ns||ns6)?window.innerWidth-70:window.document.body.clientWidth;
hscrll=(ns||ns6)?window.pageYOffset:document.body.scrollTop;
wscrll=(ns||ns6)?window.pageXOffset:document.body.scrollLeft;

// Add a new image to the array of loaded images
function addImage(imageURL){
	var arraySize=graphics.length;
	var ImageBuf=new Image();
	ImageBuf.src=graphics[arraySize]=imageURL;
}

// Animate images
function runAnimation(){
	// animate the images
	for(i=0;i<Amount;i++){
		sy = Speed[i]*Math.sin(90*Math.PI/180);
		sx = Amplitude*Speed[i]*Math.cos(Cstep[i]);
		if(Rise) Ypos[i]-=sy;
		else Ypos[i]+=sy;
		Xpos[i]+=sx;
		if(Ypos[i]>WinHeight){
			Ypos[i]=-60;
			Xpos[i]=Math.round(Math.random()*WinWidth);
			Speed[i]=Math.random()*SpeedRange+BaseSpeed;
		}else if(Ypos[i]<-70){
			Ypos[i]=+WinHeight;
			Xpos[i]=Math.round(Math.random()*WinWidth);
			Speed[i]=Math.random()*SpeedRange+BaseSpeed;
		}
		if(document.layers){
			document.layers['sn'+i].left=Xpos[i];
			document.layers['sn'+i].top=Ypos[i]+hscrll;
		}else if(document.getElementById&&!document.all){
			document.getElementById("si"+i).style.left=Math.min(WinWidth,Xpos[i]);
			document.getElementById("si"+i).style.top=Ypos[i]+hscrll;
		}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('runAnimation()',TimeGap);
}

// Place images in HTML
function initAnimation(inAmount,inBaseSpeed,inSpeedRange,inAmplitude,inBaseWobble,inWobbleRange,inTimeGap,inRise){
	Amount=inAmount;		// Number of images to place on screen
	BaseSpeed=inBaseSpeed;		// larger numbers increase speed of object movement
	SpeedRange=inSpeedRange;	// larger numbers increase range of different speeds
	Amplitude=inAmplitude;		// ratio of x-wobble to y-speed
	BaseWobble=inBaseWobble;0;	// larger numbers give tighter wobble
	WobbleRange=inWobbleRange;1	// larger numbers give wider wobble range
	TimeGap=inTimeGap;		// time to wait between redraws (larger number slows animation)
	Rise=inRise;			// set to 0 for falling, and 1 for rising
	// Initial image positions
	for(i=0;i<Amount;i++){
		Ypos[i] = Math.round(Math.random()*WinHeight);
		Xpos[i] = Math.round(Math.random()*WinWidth);
		Speed[i]= Math.random()*SpeedRange+BaseSpeed;
		Cstep[i]=0;
		Step[i]=Math.random()*WobbleRange+BaseWobble;
	}
	// Place images in HTML document in <DIV> or <LAYER> tags
	if(document.layers){
		for(i=0;i<Amount;i++){
			var P=Math.floor(Math.random()*graphics.length);
			rndPic=graphics[P];
			document.write("<LAYER NAME='sn"+i+"' LEFT=0 TOP=0><img src="+rndPic+"></LAYER>");
		}
	}else{
		document.write('<div style="position:absolute;top:0px;left:0px"><div style="position:relative">');
		for(i=0;i<Amount;i++){
			var P=Math.floor(Math.random()*graphics.length);
			rndPic=graphics[P];
			document.write('<img id="si'+i+'" src="'+rndPic+'" style="position:absolute;top:0px;left:0px">');
		}
		document.write('</div></div>');
	}
}

// Put this in your HTML head or body
//<script language="JavaScript1.2" src="Wobbles.js"></script>
// Put this in your HTML body
//<script>
//	addImage("al.gif");
//	addImage("bl.gif");
//	addImage("cl.gif");
//	addImage("dl.gif");
//	addImage("el.gif");
//	addImage("fl.gif");
//	initAnimation(8,3,5,1.0,0.05,0.1,20,0);	// example good for falling autumn leaves
//	window.onload=runAnimation;
//</script>
