/*******************************************************************
*
* 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;
