var p = new Array();
var orbitNum =9;
var mouseX =200;
var mouseY =200;
var centerX = 300;
var centerY = 300;
var dx;
var dy;
var desire = 1;
var dDesire=0;
var ddDesire;
var dSpeed =0;
var speed = 1.2;
var xBound =60;
var yBound = 60;
var px =new Array();
var py =new Array();
var pdx=new Array();
var pdy=new Array(); 
var pFX=new Array();
var pFY=new Array();
var trig = true;
var stopWandering = false;
var starter = 4000;
var step=0.2;
var twoPI = 2*Math.PI;
var smotherFactor = 0.00008;
var n = (document.layers) ? 1:0;
var theUrl="";
var theTarget=0;

function setup()  {
	if (n) {
		document.captureEvents(Event.MOUSEMOVE)  
	}
	document.onmousemove=mmove;
	window.onfocus=goBackToTrig;

	if (document.layers){
		yBound = window.innerHeight/10 ;
		xBound = window.innerWidth/15;
		for (i=1; i<=orbitNum; i++)  {
			p[i]  = eval("document.planet"+i);
		}
	} 
	else if (document.all) {
		for (i=1; i<=orbitNum; i++)  {
			p[i] = eval("planet"+i +".style");
		}
	}
	for (i =1; i<=orbitNum;  i++)  {
		px[i] = 0;
		py[i] = 0;
		pdx[i] = pdy[i] = 0;
	}
	for (i=1; i<=orbitNum; i++)  {
		pFX[i] = pFY[i] =0;
	}
}

function adjustAngle()  {
	ddDesire = (Math.random()-0.5)/50;
	if ((  (dDesire >0.04)&& (ddDesire>0) ) ||  (  (dDesire < -0.04) &&(ddDesire <0) ) )   {
		ddDesire = -2*ddDesire;
	}
	dDesire = dDesire + ddDesire;
	desire = desire + dDesire;
}

function go()  {
	if (stopWandering == false)  {
		adjustAngle();
	  dx =     (speed*Math.cos(desire) )  + (mouseX-centerX)*Math.abs(mouseX-centerX)*smotherFactor;
		dy =     (speed*Math.sin(desire) )  + (mouseY -centerY)*Math.abs(mouseY-centerY)*smotherFactor;
		centerX += dx;
		centerY += dy;
	}
  for (i=1; i<=orbitNum;  i++)  {
    p[i].left= Math.round(centerX + px[i] );
		p[i].top = Math.round(centerY + py[i]);
  }
	adjustOrbits();
	setTimeout("go()", 20);
}

function adjustOrbits()  {
  if (trig)  {
		xDist =	(mouseX-centerX)
		yDist	= (mouseY-centerY)
    tempSin = Math.sin(starter/80)
    tempCos = Math.sqrt(1- tempSin*tempSin);
		straightDist = (xDist*xDist)+(yDist*yDist)
		for ( i=1; i<=orbitNum;  i++)  {	
			innerCos = Math.cos(starter/(50+i));  

// These are the two lines to change. Quite a fun puzzle.
		  px[i] =(straightDist)*Math.sin((tempSin*innerCos)+ (i+4)*starter/(67+i))*xBound*(1-tempSin*tempCos)/90000;
			py[i] =(straightDist)*Math.sin((tempCos*innerCos )+ (i+4)*starter/(70+i))*yBound* ( 1-tempCos*tempSin)/90000;     
//old	version 	px[i] =(straightDist)*Math.sin((tempSin*innerCos)+(i+10)*starter/(200+i))*xBound/90000;
//old	version 	py[i] =(straightDist)*Math.cos((tempCos*innerCos )+(i+16)*starter/(200+i))*yBound/90000; 

			starter=starter+step;  
		}
	}
	else {
	  for ( i=1; i<=orbitNum;  i++)  {
			hypo  = ( Math.sqrt((px[i])*(px[i]) + (py[i])*(py[i]) )  );
			angle = Math.asin((py[i])/hypo);
			if (hypo >2) {	
				if (px[i] < 0 ) {
					angle =((Math.PI)-angle)	;			
				}
				pFX[i] = (-80) * Math.cos(angle)/(hypo*hypo);
				pFY[i] = (-80) * Math.sin(angle)/(hypo*hypo);
			}
			pdx[i] += pFX[i];
			pdy[i] += pFY[i];
			px[i] +=pdx[i];
			py[i] +=pdy[i];
		}
	}
}

function mmove(e){
	mouseX=(n)?e.pageX:event.x
  mouseY=(n)?e.pageY:event.y
}

function stopThisCrazyThing()  {
	stopWandering=true;
	trig=false;
	for (i=0; i<orbitNum; i++)  {
		pdy[i] = px[i]/20;
		pdx[i] = -py[i]/20;
	}
}

function goBackToTrig()  {
	trig=true;
	stopWandering = false;
}

function movePageToNewUrl() {
	if (theTarget==0) {	
		window.location.href=theUrl;
	}
	else {
		newWindow=window.open(theUrl,theTarget);
	}
}

function linkOut(newUrl, giveTarget)  {
	stopThisCrazyThing();
	theUrl = newUrl;
	theTarget = giveTarget;
	setTimeout("movePageToNewUrl()", 1500) ; 
}


