/*******************************************************************

*

* File    : pinwheel.js

*

* Created : 2000/06/17

*

* Author  : Roy Whittle  (Roy@Whittle.com) www.Roy.Whittle.com

*

* Purpose : To create a pinwheel firework that follows the cursor.

*

* History

* Date         Version        Description

*

* 2000-06-17	1.0		Initial version

***********************************************************************/

var theTimer=null;

var mouseX = 100;

var mouseY = 100;



var oneDeg=(2*Math.PI)/360;



/*** Pinwheel type 1 ***/

var Radius = 5;

var NumStars=32;

var NumSteps=16;

var StepAngle=(25)*oneDeg;



/*** Pinwheel type 2 ***/

//var Radius = 10;

//var NumStars=16;

//var NumSteps=8;

//var StepAngle=(22.5)*oneDeg;



/*** Pinwheel type 3 ***/

//var Radius = 5;

//var NumStars=16;

//var NumSteps=16;

//var StepAngle=(22.5)*oneDeg;



/*** Pinwheel type 4 ***/

//var Radius = 10;

//var NumStars=32;

//var NumSteps=16;

//var StepAngle=(11.25)*oneDeg;



var StarObject=new Array();



var hexDigit=new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");

function dec2hex(dec)

{

	return(hexDigit[dec>>4]+hexDigit[dec&15]);

}

function hex2dec(hex)

{

	return(parseInt(hex,16))

}



function CreateStar()

{



	this.layer 		= new xLayer(" ", 100, 100, 10);

	this.currAngle 	= 0;

	this.step		= 0;

	this.x		= 100;

	this.y		= 100;

	return (this);

}



function restart()

{

	for(i=0;i<NumStars;i++)

	{

		StarObject[i].currAngle = (StepAngle*i);

		StarObject[i].step = (i%NumSteps);

		StarObject[i].x = mouseX;

		StarObject[i].y = mouseY;

		StarObject[i].layer.moveTo(mouseX, mouseY);

		StarObject[i].layer.show();

	}

}

/*** Choose a random pinwheel configuration ***/

function next_random()

{

	var num=Math.floor(Math.random()*4);

	

	for(i=0;i<NumStars;i++)

		StarObject[i].layer.hide();



	if(num==0){

		Radius = 5;

		NumStars=32;

		NumSteps=16;

		StepAngle=(25)*oneDeg;

	}

	else

	if(num==1){

		Radius = 10;

		NumStars=16;

		NumSteps=8;

		StepAngle=(22.5)*oneDeg;

	}

	else

	if(num==2){

		Radius = 5;

		NumStars=16;

		NumSteps=16;

		StepAngle=(22.5)*oneDeg;

	}

	else{

		Radius = 10;

		NumStars=32;

		NumSteps=16;

		StepAngle=(11.25)*oneDeg;

	}





	for(i=0 ; i<NumStars; i++)

	{

		var s=StarObject[i];

		s.currAngle = (StepAngle*i);

		s.step = (i%NumSteps);

		s.x=mouseX;

		s.y=mouseY;

	}



	restart();



	theTimer=setTimeout("next_random()", 10000);

}

function start()

{

if (document.all)

	document.onmousemove = IE_MouseMove;



if (document.layers) {

	window.captureEvents(Event.MOUSEMOVE);

	window.onmousemove = NS_MouseMove;

}



	for(i=0 ; i<NumStars; i++)

	{

		StarObject[i]=new CreateStar();

		StarObject[i].currAngle = (StepAngle*i);

		StarObject[i].step = (i%NumSteps);

		StarObject[i].layer.clip(0,0,2,2);

		StarObject[i].layer.setBgColor("red");

	}



	for(i=0 ; i<NumStars ; i++)

		StarObject[i].layer.show();



	/*** Remove this if you only 1 type of pinwheel ***/

	theTimer=setTimeout("next_random()", 10000);



	Rotate();

}



function changeColour(s)

{

	var colour="";



	r2= Math.floor(Math.random()*2)*255;

	g2= Math.floor(Math.random()*2)*255;

	b2= Math.floor(Math.random()*2)*255;



	if(r2==0 && g2==0 && b2==0)

		r2=255;



	colour = "#" + dec2hex(r2) + dec2hex(g2) + dec2hex(b2);

	s.layer.setBgColor(colour);



	s.x=mouseX;

	s.y=mouseY;

}

function Rotate() 

{

	var x;

	var y;

	for (i = 0 ; i < NumStars ; i++ ) {

		var s=StarObject[i];

		

		if(s.step==0)

			changeColour(s);



		var angle = s.currAngle;

		var rad   = s.step*Radius + 10;

		x = s.x + rad*Math.cos(angle);

		y = s.y + rad*Math.sin(angle);



		s.layer.moveTo(x,y);



		s.step = (s.step+1)%NumSteps;

	}



	setTimeout("Rotate()", 30);

}





function IE_MouseMove()

{

	mouseX = document.body.scrollLeft+event.x;

	mouseY = document.body.scrollTop+event.y;

}

function NS_MouseMove(evnt) {

	mouseX = evnt.pageX;

	mouseY = evnt.pageY;

}



function handle_resize()

{

	if(document.layers)

		start();

}



window.onresize=handle_resize;

window.onload=start;


