var debugging =	false;
var imgOn, imgOff, homeOn;
var version="veryplain";
var ready=false;
var launching=false;
var Pa =	1;
var lX =	1;
var lY =	1;
var Xoffs =	0;
var Xfact =	0;
var Yoffs =	0;
var lacc =	0.001;
var lvel =	0;
var speed=	0;
var dflt_speed= 3;
var projectile="right1";
var newphase="1";
var oldphase="X";
var mW=120;
var mH= 22;
var lW=120;
var lH=200;
var flyable=false;
var flying=false;
var foo=null;
var MenuInt=null;
var GameInt=null;
var thisgame=0;
var highlightColor="black";
var visitedColor="gray";
var tagged="";

function init(game) {
	thisgame=game;
	GetVersion();
	
	if (typeof(homeOn)=="undefined" 
	&& version!="veryplain" 
	&& version!="nostyle") { 

		Tstart=new Date();
		
		// assume all pages have same navbar, which is the case
		// different script version required for each directory level w.r.t. /gif
		homeOff= new Image(mW,mW);	homeOff.src= "gif/homeoff.gif";
		homeOn=  new Image(mW,mW);	homeOn.src=  "gif/homeon.gif";
		tradOff= new Image(mW,mH);	tradOff.src= "gif/tradoff.gif";
		tradOn=  new Image(mW,mH);	tradOn.src=  "gif/tradon.gif";
		planOff= new Image(mW,mH);	planOff.src= "gif/planoff.gif";
		planOn=  new Image(mW,mH);	planOn.src=  "gif/planon.gif";
		propOff= new Image(mW,mH);	propOff.src= "gif/propoff.gif";
		propOn=  new Image(mW,mH);	propOn.src=  "gif/propon.gif";
		linkOff= new Image(mW,mH);	linkOff.src= "gif/linkoff.gif";
		linkOn=  new Image(mW,mH);	linkOn.src=  "gif/linkon.gif";
		new1Off= new Image(mW,1);	new1Off.src= "gif/new1off.gif";
		new1On=  new Image(mW,1);	new1On.src=  "gif/new1on.gif";
		new2Off= new Image(mW,1);	new2Off.src= "gif/new2off.gif";
		new2On=  new Image(mW,1);	new2On.src=  "gif/new2on.gif";

		gameOff= new Image(mW,16);	gameOff.src= "gif/invisibl.gif";
		gameOn=  new Image(mW,16);	gameOn.src=  "gif/invisibl.gif";
		scoreOff=new Image(mW,mH);	scoreOff.src="gif/invisibl.gif";
		scoreOwn=new Image(mW,mH);	scoreOwn.src="gif/scoreown.gif";
		scoreYes=new Image(mW,mH);	scoreYes.src="gif/scoreyes.gif";
		
		menuX=	mW+10;	// pixels left of R edge - browser compromise
		menuY=	10;	// pixels down
		RefrT=	20;	// milliseconds
		if (MenuInt==null) {
			MenuInt = setInterval("MenuRefresh()",RefrT);
			Tnow= new Date();
			flyable=((Tnow - Tstart) < 80);		
		}
		speed=GetSpeed();
		if (window.location.search.indexOf("?g=0")>-1) {
			LinkSpeed(0,speed); //pass it on
		}
		else if (flyable) {
			LinkSpeed(1,speed);
			flying=true;
		}
		if (flyable && (game>0)) {

			right11=new Image(lW,lH);	right11.src ="gif/right11.gif";
			right12=new Image(lW,lH);	right12.src ="gif/right12.gif";
			right13=new Image(lW,lH);	right13.src ="gif/right13.gif";
			right14=new Image(lW,lH);	right14.src ="gif/right14.gif";
			right15=new Image(lW,lH);	right15.src ="gif/right15.gif";
			right16=new Image(lW,lH);	right16.src ="gif/right16.gif";
			
			wrong11=new Image(lW,lH);	wrong11.src ="gif/wrong11.gif";
			wrong12=new Image(lW,lH);	wrong12.src ="gif/wrong12.gif";
			wrong13=new Image(lW,lH);	wrong13.src ="gif/wrong13.gif";
			wrong14=new Image(lW,lH);	wrong14.src ="gif/wrong14.gif";
			wrong15=new Image(lW,lH);	wrong15.src ="gif/wrong15.gif";
			wrong16=new Image(lW,lH);	wrong16.src ="gif/wrong16.gif";
			
			if (flying) {
				gameOff.src= "gif/gameoff.gif";	//nb references in toggle()
				gameOn.src=  "gif/gameon.gif";
			}
			else {
				gameOff.src= "gif/game0off.gif";	
				gameOn.src=  "gif/game0on.gif";
			}
			setInterval("LaunchRefresh()",RefrT);
		}
		flyable=(flyable && (game>0)); //for use by toggle()
		ready=true;
		retreat("game");
	}// !loaded home && !veryplain
}//init(game)

function GetSpeed() {
var temp;
var s;
	temp=window.location.search;
	if (temp.indexOf("&s=")>-1) {
		temp=temp.slice(temp.indexOf("&s=")+3,temp.length);
		s=Number(temp);
		if (isNaN(s)) {
			s=dflt_speed;
		}
	}
	else{		
		s=dflt_speed;
	}
//	window.alert("'"+temp+"'="+s);
	return s;
}

function GetVersion() {
	vernum=navigator.appVersion.charAt(0);
	if (vernum >= "4") {
		if (navigator.appName == "Microsoft Internet Explorer") {
			if (navigator.appVersion.indexOf("MSIE 5") > 1) {
				version="IE5";
			}
			else {
				version="veryplain";
			}
		}
		else if (navigator.appName=="Netscape" && vernum=="4") {
			version="Nav4";
		}
		else {
			version="ECMA";
		}
	}
	if (version=="ECMA") {
		OperaPos=navigator.userAgent.indexOf("Opera");
		if ((OperaPos>=0) && (navigator.userAgent.substr(OperaPos+6,4)<"5.11")) {
			version="veryplain";
		}
		else if (typeof(document.getElementById("navbar").style)=="undefined") {
			version="nostyle";
		}
		else {
			window.onResize=resizer;
		}
	}
	else if (version=="Nav4") {
		if (typeof(document.navbar)=="undefined") {
			version="nostyle";
		}
		else {
			window.onResize=resizer;
		}
	}
	else if (version=="IE5") {
		if (typeof(document.all.navbar.style)=="undefined") {
			version="nostyle"; // can this happen? 
		}
		else {
			self.window.onresize=resizer;
		}
	}	
	GetWindowSize();  	
//	self.window.status="ver="+version+": '"+ navigator.appName+"|"+navigator.userAgent+"'";
}//GetVersion() 

function GetWindowSize () {
	if (version=="IE5") {
		Wwidth=document.body.scrollWidth;
		Wheight=document.body.scrollHeight;
	}
	else if (version=="Nav4" || version=="ECMA") {
		Wwidth=window.innerWidth;
		Wheight=window.innerHeight;
	}
	if (debugging) {window.alert("GetWindowSize\R"+Wwidth+" x "+Wheight);}
}

function resizer() {
	retreat("game");
	GetWindowSize();
}

function advance(thingy) {
	if (ready) {
		imgOn = eval(thingy+"On.src"); 
		if (version == "ECMA") { 
			document.getElementById(thingy).src=imgOn;
		}
		else if (version == "Nav4") {
			document.navbar.document.images[thingy].src=imgOn;
		}
		else if (version == "IE5") {
			document.images[thingy].src=imgOn;
		}
	}
}

function retreat(thingy) {
	if (ready) {
		imgOff = eval(thingy+"Off.src"); 
		if (version == "ECMA") { 
			document.getElementById(thingy).src=imgOff;
		}
		else if (version == "Nav4") {
			document.navbar.document.images[thingy].src=imgOff;
		}
		else if (version == "IE5") {
			document.images[thingy].src=imgOff;
		}
	}
}

function MenuRefresh() {
	if (version=="ECMA") {
		with (document.getElementById("navbar").style) {
			left 	= Wwidth-menuX;
			top 	= menuY + pageYOffset;
			}
	}
	else if (version=="Nav4") {
		with (document.navbar) {
			left	= Wwidth-menuX;
			top	= menuY + pageYOffset;
		}
	}
	else if (version=="IE5") {
		with (document.all.navbar.style) {
			left	= Wwidth-menuX;
			top	= menuY + document.body.scrollTop;
		}
	}
}

function getRandom() {
	return Math.random();
}

function intgr(r) {
	return Math.floor(r);
}

function exp(r) {
	return Math.exp(r);
}

function LaunchHide() {
	if (version=="ECMA") {
		with (document.getElementById("launch").style) {
			visibility="hidden";
		}
	}
	else if (version=="Nav4") {
		with (document.launch) {
			visibility="hide";
		}
	}
	else if (version=="IE5") {
		with (document.all.launch.style) {
			visibility="hidden";
		}
	}
}

function LinkSpeed(game,speed) {
	srchp=0;
	thisgame=game;
	if (version=="Nav4") {
		for (var i=0; i<document.navbar.document.links.length; i++) {
			with (document.navbar.document.links[i]) {
				if ((protocol=="http:" || protocol=="file:") && target<="") {
					search="?g="+game+"&s="+speed;
				}
			}
		}
	}
	for (var i=0; i<document.links.length; i++) {
		with (document.links[i]) {
			if ((protocol=="http:" || protocol=="file:") && target<="" && hash<"#") {
				if (hash>="#" && version=="Nav4") {
					search="";
					hash=hash.slice(2); // major NS.kluge
				}
				else {
					if (version=="ECMA") {
						srchp=href.indexOf(search);
						if (srchp<=0) srchp=href.length;
						href=href.substr(0,srchp)+"?g="+game+"&s="+speed;
					}
					else {
						search="?g="+game+"&s="+speed;
					}
				}
			}
		}
	}
}

function toggle() {
	if (ready && flyable) {
		if (flying) {
			LinkSpeed(0,speed);
			gameOff.src="gif/game0off.gif";
			gameOn.src="gif/game0on.gif";
			flying=false;
			LaunchHide();
		}
		else {
			LinkSpeed(1,speed);
			gameOff.src="gif/gameoff.gif";
			gameOn.src="gif/gameon.gif";
			flying=true;
		}
	retreat("game");
	}
}

function play() {
	if (ready && flying) {
		if (projectile.slice(0,5)=="right") {
			msg="Yes";
		}
		else {
			msg="Own";
		}
		imgOn = eval("score"+msg+".src");
		if (version == "ECMA") { 
			document.getElementById("score").src=imgOn;
		}
		else if (version == "Nav4") {
			document.navbar.document.images["score"].src=imgOn;
		}
		else if (version == "IE5") {
			document.images["score"].src=imgOn;
		}
	}
}

function score() {
	if (flyable && (thisgame>0)) {
		window.location="score.html?g="+thisgame+"&s="+speed;
	}
}

function LaunchRefresh() {
	if (ready && flying) {
		if (launching) {/*Motion.	lX: 1..-1= screen L to R;*
				 *		lY: 1.. 0= screen B to T */
			lvel =	lvel+lacc;			//accelerate
			lX =	lX-lvel;
			lY = 	lX*lX*Pa;	 		//the good bit: parabola equation
		}
		else {
			chance=getRandom();
			if (chance<RefrT/100) {		// launch now!
				launching=true;
				oldphase="X";
				lY=1;	//see Motion, above for coord frame
				lX=1;
				lvel=0;
				lacc=getRandom()/exp(12-speed)+0.000001;//acceleration
				Pa=getRandom()*4;			//parabola parameter: 0 .. 4
				chance=getRandom();
				if (chance<0.7) 		
					{projectile="right1"}
				else
 					{projectile="wrong1"}
				Xoffs=getRandom()*Wwidth/2;		//shift left
				Xfact=getRandom()+1;			//squash
				Yoffs=getRandom()*Wheight;		//shift up 
			}
			else {//idle
			}
		}
		if (lX < -2) {
			launching=false; // landed
			retreat("score");
			LaunchHide();
		}
		else {	// approximate slope
			if      (lX >  0.75)	{newphase="1"}
			else if (lX >  0.50) 	{newphase="2"}
			else if (lX >  0.25) 	{newphase="3"}
			else if (lX > -0.40) 	{newphase="4"} //why this far over? 
			else if (lX > -0.60) 	{newphase="5"}
			else 			{newphase="6"}
			tilt= (newphase != oldphase);
			oldphase=newphase;
			launchphase=eval(projectile+newphase+".src");
			// position on screen: multi-kluge
			lSX	= intgr(((Wwidth * (1-lX)/2) - Xoffs) / Xfact); 
			lSY	= intgr((Wheight * lY) - Yoffs);
			// browser compromise clipping
			if (lSX>-lW && lSY>-lH && lSX<(Wwidth-lW/2) && lSY<(Wheight-lH/2)) {
				//am on screen
				if (version=="ECMA") {
					if (tilt) {
						document.getElementById("launched").src=launchphase;
					}
					with (document.getElementById("launch").style) {
						visibility="visible";
						left 	= lSX;
						top 	= lSY;
					}
				}
				else if (version=="Nav4") {
					if (tilt) {
						document.launch.document.images["launched"].src=launchphase;
					}
					with (document.launch) {
						visibility="show";
						left	= lSX;
						top 	= lSY;
					}
				}
				else if (version=="IE5") {
					if (tilt) {
						document.images["launched"].src=launchphase;
					}
					with (document.all.launch.style) {
						visibility="visible";
						left	= lSX;
						top 	= lSY;
					}
				}
			}
			else {	//am off-screen 
				LaunchHide();
			}
		}
	}
}

function setCellBG(tag,what) {
	if (version=="ECMA") {
		document.getElementById(tag).style.background=what;
	}
	else if (version=="Nav4") { /* TO TEST! */
		document.tag.document.bgColor=what;
	}
	else { if (version=="IE5") {
		document.all[tag].style.backgroundColor = what;
		}
	}
};

function FlagTag(tag) {
	if (tagged > "") {
		setCellBG(tagged,visitedColor);
	}
	tag="z"+tag; /* broken IE5 restrictions - NB in HTML <TD id="zthing"><A NAME="thing">...! */
	setCellBG(tag,highlightColor);
	tagged=tag;
};

function FlagTarget() {
	tag=window.location.hash.slice(1,3);
	if (tag>"") {
		FlagTag(tag);
	}
};


//end of script