/*******************************************************************
*
* 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.
*
* Requires	: xLayer.js - for layer creation, movement
*		: xMouse.js - to track the mouse x,y coordinates
*
* History
* Date         Version        Description
*
* 2000-06-17	1.0		Initial version
* 2000-10-15	1.1		Used xMouse for mouse tracking
***********************************************************************/
var m = new xMouse();

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("X", 100, 100, 10);
	this.currAngle 	= 0;
	this.step		= 0;
	this.x		= 100;
	this.y		= 100;
	return (this);
}

/*** Choose a random pinwheel configuration ***/
function restart()
{
	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=m.X;
		s.y=m.Y;
	}

	for(i=0;i<NumStars;i++)
		StarObject[i].layer.show();

	setTimeout("restart()", 10000);
}
var ow ;
function start()
{
	if(document.layers)
		ow = outerWidth;

	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 ***/
	setTimeout("restart()", 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=m.X;
	s.y=m.Y;
}
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 handle_resize()
{
	if(document.layers)
		if(outerWidth != ow)
			location.reload();
}

window.onresize=handle_resize;
window.onload=start;
