CircleHeight=20;
CircleWidth=20;
CircleFromMouseY=0;
CircleFromMouseX=30;

col=new Array("GOLD","POWDERBLUE","HOTPINK","MEDIUMSLATEBLUE","WHEAT","LIGHTSKYBLUE","ROYALBLUE");
font='Arial';
size=1;
speed=0.3;
n = 30;		//number of bubbles

ns=(document.layers);
ie=(document.all);
dom=(document.getElementById&&!document.all);
//if (dom) { alert("dom");}
a=size*7;
ymouse=0;
xmouse=0;
scrll=0;
step=0.3;
bubble="o";

y=new Array();x=new Array();Y=new Array();X=new Array();
colour=new Array();fSize=new Array();
amp=new Array();period=new Array();reflect=new Array();
currX=new Array();

for (i=0;i<n;i++){
	y[i]=0;
	x[i]=0;
	Y[i]=0;
	X[i]=0;
	setNewBubble(i);
}	
if (ns){
for (i=0; i < n; i++)
document.write('<layer name="nsBubble'+i+'" top=0 left=0 height='+a+'width='+a+'><font face='+font+' size='+fSize[i]+' color='+col[colour[i]]+'><b>'+bubble+'</b></font></layer>');
}
if (ie){
document.write('<div id="allBubbles" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
for (i=0; i < n; i++)
	document.write('<div id="ieBubble" style="position:absolute;top:0px;left:0;height:'+a+';width:'+a+';text-align:center"><font face='+font+' size='+fSize[i]+' color='+col[colour[i]]+'><b>'+bubble+'</b></font></div>');
if (ie)
document.write('</div></div>');
}
if (dom){
for (i=0;i<n;i++)
	document.write('<div id="ieBubble'+i+'" style="position:absolute;top:0px;left:0;height:'+a+';width:'+a+';text-align:center"><font face='+font+' size='+fSize[i]+' color='+col[colour[i]]+'><b>'+bubble+'</b></font></div>');
}
(ns||dom)?window.captureEvents(Event.MOUSEMOVE):0;
function Mouse(evnt){
ymouse = (ns||dom)?evnt.pageY+CircleFromMouseY-(window.pageYOffset):event.y+CircleFromMouseY;
xmouse = (ns||dom)?evnt.pageX+CircleFromMouseX:event.x+CircleFromMouseX;
}
(ns)?window.onMouseMove=Mouse:document.onmousemove=Mouse;
function assign(){
	if (ie){
		allBubbles.style.top=window.document.body.scrollTop;
	}
	for(i=0;i<n;i++){
		var bub = "ieBubble" + i;
		if (ns) {var F=document.layers['nsBubble'+i];}
		if (ie) {var F=ieBubble[i].style;}
		if (dom) {var F=document.getElementById(bub).style};
		//alert("in assign() element = "+bub);
		var tempLayer;
		var xCoord=currX[i];
		var yCoord=amp[i]*Math.sin(period[i]*xCoord);
		var d=Math.sqrt(xCoord*xCoord+yCoord*yCoord);

		if (d>CircleWidth){
			setNewBubble(i);
			xCoord=0;
			yCoord=amp[i]*Math.sin(period[i]*xCoord);
			var cont="<font face="+font+" size="+fSize[i]+" color="+col[colour[i]]+"><b>"+bubble+"</b></font>";
			if (ns) {
				tempLayer=document.layers['nsBubble'+i];
				tempLayer.document.write(cont);
			}
			if(ie){
				tempLayer=ieBubble[i];
				tempLayer.innerHTML=cont;
			}
			if(dom){//!ie && document.getElementById){
				//thisbrowser=NN6;
				tempLayer = document.getElementById(bub);//'nsBubble'+i);
				tempLayer.innerHTML=cont;
			}
		}
		F.top=y[i]+yCoord+scrll;
		F.left=x[i]+xCoord;
		//alert ("F.top=" +F.top+ " F.left=" +F.left +" y[i]="+y[i]+" x[i]="+x[i]+" Y[i]="+Y[i]+" X[i]="+X[i]);
		if (reflect[i]) currX[i]-=step;
		else currX[i]+=step;
	}
}
function delay(){
	scrll=(ns||dom)?window.pageYOffset:0;

	y[0]=Math.round(Y[0]+=((ymouse)-Y[0])*speed);
	x[0]=Math.round(X[0]+=((xmouse)-X[0])*speed);
	for (i=1; i < n; i++) {
		y[i]=Math.round(Y[i]+=(y[i-1]-Y[i])*speed);
		x[i]=Math.round(X[i]+=(x[i-1]-X[i])*speed);
	}
	assign();
	setTimeout('delay()',40);
}
if (ns||ie||dom){window.onload=delay;}
function setNewBubble(i){
	colour[i]=rColour();
	fSize[i]=rSize();
	amp[i]=rAmp();
	period[i]=rPeriod();
	reflect[i]=rReflect();
	currX[i]=0;
	//alert("colour="+colour[i]+" size="+fSize[i]+" Amp="+amp[i]+" Period="+period[i]+" reflect="+reflect[i]+" bubble="+bubble)
}

function rColour(){
	r=Math.floor(Math.random()*6+0.49);
	return r;
}
function rSize(){
	var r=Math.floor(Math.random()*4+0.49);
	return r;
}
function rNum(){
	var r=Math.floor(Math.random()+0.49);
	return r;
}
function rAmp(){
	var a=Math.random()*2*CircleHeight;
	return a;
}
function rPeriod(){
	per=new Array(0.1,0.2,0.25,0.3,0.4)
	var p=Math.floor(Math.random()*(per.length-1)+0.49);
	return per[p];
} 
function rReflect(){
	var r=Math.floor(Math.random()+0.49)
	if (r==1) return true;
	else return false;
	//return r;
}
