// TURNTOOL CONTROL
var ie4 = (document.all && !document.getElementById);
var ie5 = (document.all && document.getElementById);
var ns6 = (!document.all && document.getElementById);

function element(id)
{
	if(ie4)	// Explorer 4
		return document.all[id];
	else	// Explorer 5+ Netscape 6+ and Mozilla and Firefox
		return document.getElementById(id);
}

function initTurnTool()
{
	var tntInstalled = isTurnToolInstalled();
	if (tntInstalled==false)
	{
		element('InstallTag').innerHTML = '<CENTER><INPUT TYPE=button VALUE="Install TurnTool Viewer" onClick="installTurnTool();"></CENTER>';
		checkRefresh();
	}
	else
	{
		if (!(ie4||ie5))
		{
			element('TurnTool').innerHTML = '<embed id="TNTCtrl" width="640" height="480" src="assets/tnt/oxford_road.tnt" transparent="0" ctrl_color="#FFFFFF" pluginspage="http://www.turntool.com/download/" type="application/tntfile"></embed>';
		}
	}	
}

function isTurnToolInstalled()
{
	var tntInstalled = false;
	if (ie4||ie5)
	{
		try
		{
			var xObj = new ActiveXObject("TNT.TNTCtrl");
			if (xObj)
			{
				tntInstalled = true;
			}
		}
		catch (e)
		{
		}
	}
	else
	{
		if(navigator.plugins.namedItem("TurnTool XPCOM Plugin"))
		{
			tntInstalled = true;
		}
	}
	return tntInstalled;
}

function installTurnTool() 
{
	if (ie4||ie5)
	{
		window.location.href = "http://www.turntool.com/ViewerInstall.exe";
	}
	else
	{
		var xpi = {'TurnTool Viewer Installation':'http://www.turntool.com/ViewerInstall.xpi'};
		InstallTrigger.install(xpi,installFinish);
	}
}

function installFinish(url, result)
{
	window.location.href = window.location;
}

var checkCounter = 0;
function checkRefresh()
{
	var tntInstalled = isTurnToolInstalled();
	if(tntInstalled==false)
	{
		checkCounter++;
		if (checkCounter>20)
		{
			checkCounter=0;
			installTurnTool();
		}
		setTimeout('checkRefresh()',500);
	}
	else
	{
		window.location.href = window.location;
	}
}

function TNTDoCommand(string)
{
	var control = element("TNTCtrl");
	if(control && control.ready)
		return control.TNTDoCommand(string);
	return "";
}

function doCommand()
{
	var retval = TNTDoCommand( element("doCommandEdit").value );
	if(retval)
		element("returnval").innerHTML = 'Return Value = "' + retval + '"';
	else
		element("returnval").innerHTML = "";
}

function onDoCommandKeypress()
{
	if(window.event.keyCode==13) // if return key was pressed
		doCommand();
}

function OnReady()
{
	element("TNTCtrl").focus();
	// load textures marked as external with their default textures
	var texcnt = 0;
	texcnt = TNTDoCommand('SceneGraph.GetBitmapCount()');
	var bExternal = 64;
	var bHasAlpha = 32;
	for( var i=0; i<texcnt; i++ )
	{
		var props = 0;
		props = TNTDoCommand('SceneGraph.Bitmap(' + i + ').GetProperties()');
		if(props & bExternal)
		{
			var name = TNTDoCommand('SceneGraph.Bitmap(' + i + ').GetName()');
			if(props & bHasAlpha)
			{
				name += '.png'; // alpha textures are exported as png
			}
			else
			{
				name += '.jpg'; // non-alpha textures are exported as jpg
			}
			TNTDoCommand('SceneGraph.Bitmap(' + i + ').Load("' + name + '")');
		}
	}
	window.status = "Ready";	
}

function OnClick( obj )
{
	if(TNTDoCommand('Objects(' + obj + ').GetStopFrame()')!=1)
		TNTDoCommand('Objects(' + obj + ').PlayAnimation(,1)');
	else
		TNTDoCommand('Objects(' + obj + ').PlayAnimation(,0)');
	window.status = "Object clicked: " + obj;	
}

function OnMouseExit( obj )
{
	TNTDoCommand('Objects(' + obj + ').ResetMaterial()');
	window.status = "Mouse Exited: " + obj;	
}


function OnZoneExit( zone, physics )
{
	element("TNTCtrl").focus();
	window.status = "Zone Exited: " + zone + ", by physics object: " + physics;	
}

function OnKeyPress( keyCode, ascii )
{
	window.status = "KeyPress: KeyCode=" + keyCode + " Ascii=" + ascii;
}

function OnKeyRelease( keyCode, ascii )
{
	window.status = "KeyRelease: KeyCode=" + keyCode + " Ascii=" + ascii;
}

function Restart()
{
	TNTDoCommand('SceneGraph.Physics.Reset()');
	TNTDoCommand('Objects(*).StopAnimation()');
	TNTDoCommand('Objects(*).SetFrame(0)');
	cameraName = TNTDoCommand('SceneGraph.Camera(0).GetName()');
	TNTDoCommand('CameraCtrl.SetCurrent("'+ cameraName+'")');
}

function HideShowObject(id)
{
	var checkboxEl = document.getElementById('checkbox0' + id + '');
	objname = TNTDoCommand('SceneGraph.Mesh('+ id + ').GetName()');
	TNTDoCommand('Objects(' + objname + ').SetVisible('+(!checkboxEl.checked)+')');
}

function getObjects()
{
	var rs = '<br/>';
	objectCount = TNTDoCommand('SceneGraph.GetMeshCount()');
	rs += '<table class="box" width="200" border="0" cellspacing="0" cellpadding="0"><tr><td valign="top">';
	rs += '<table width="200" border="0" cellspacing="0" cellpadding="0"><tr bgcolor="#BCC2C4"><td>';
	rs += '<p><b>Objects:</b></p></td><td><p><b>Hide:</b></p></td>';
	var i = 0;
	while(i < objectCount)
	{
		objectName = TNTDoCommand('SceneGraph.Mesh(' + i + ').GetName()');
		if(i%2 == 0)
			rs += '<tr bgcolor="#EEEEEE"><td><p>';
		else
			rs += '<tr bgcolor="FFFFFF"><td><p>';
		rs += objectName;
		rs += '</p></td><td align="right">';
		rs += '<input type="checkbox" id="checkbox0' + i + '" onClick="JavaScript:HideShowObject(' + i + ');" notab><br/>';
		rs += '</td></tr>';
		i++;
	}
	rs += '</table><center>';
	rs += '<img src="tnt_mouse_help.gif" alt="Left mousebutton: Rotate\r\nRight mousebutton: Zoom\r\nBoth mousebuttons: Pan">';
	rs += '</center></td></tr></table>';	
	LevelTable.innerHTML = rs;
}

function cameraButtons()
{
	cameraCount = TNTDoCommand('SceneGraph.GetCameraCount()');
	var j=0;
	while(j<cameraCount)
	{
		cameraName = TNTDoCommand('SceneGraph.Camera(' +j+ ').GetName()');
		CameraCell.innerHTML +='<INPUT TYPE=button VALUE=' +cameraName+ ' class=\"button\" onClick=TNTDoCommand(\'CameraCtrl.Match(\"' +cameraName+ '\",2000)\')>';
		j++;
	}
}

function playAnimation()
{
	if(TNTDoCommand('Objects(*).GetStopFrame()')!=1)
	{
		TNTDoCommand('Objects(*).PlayAnimation(,1)');
		element('PlayButton').value = "Play Backward";
	}
	else
	{	TNTDoCommand('Objects(*).PlayAnimation(,0)');
		element('PlayButton').value = "Play Forward";
	}
}

function animationButton()
{
	frameCount = TNTDoCommand('SceneGraph.GetFrameCount()');
	if(frameCount > 1)
	{	
		AnimationCell.innerHTML +='<INPUT TYPE=button ID="PlayButton" VALUE="Play Forward" class="button" onClick=playAnimation()>';
	}
}

// Custom Functions

function jumpTo(theCamera, markerX, markerY) {
	// send current camera to destination
	TNTDoCommand('CameraCtrl.SetCurrent("' +theCamera+ '")');	
	currentCamera = theCamera;
	targetSphere = theCamera+'S';
	targetPositionX = TNTDoCommand('Objects("' +targetSphere+ '").GetPositionWorldX()');
	targetPositionY = TNTDoCommand('Objects("' +targetSphere+ '").GetPositionWorldY()');
	targetPositionZ = TNTDoCommand('Objects("' +targetSphere+ '").GetPositionWorldZ()');
	targetPositionXRot = TNTDoCommand('Objects("' +targetSphere+ '").GetRotationWorldX()');
	targetPositionYRot = TNTDoCommand('Objects("' +targetSphere+ '").GetRotationWorldY()');
	targetPositionZRot = TNTDoCommand('Objects("' +targetSphere+ '").GetRotationWorldZ()');	
	TNTDoCommand('Objects("Sphere38").SetRotationWorld('+targetPositionXRot+','+targetPositionYRot+','+targetPositionZRot+')');			
	TNTDoCommand('Objects("Sphere38").SetPositionWorld('+targetPositionX+','+targetPositionY+','+targetPositionZ+')');
	P7_Snap('largeMap','mapMarker',markerX,markerY);
}

function walkAround() {
	TNTDoCommand('CameraCtrl.SetCurrent("Camera01")');
}
function fly() {
	TNTDoCommand('CameraCtrl.SetCurrent("Camera_Anim")');	
	TNTDoCommand('Objects("*").PlayAnimation(0,600,true,25)');	
}

function OnMouseEnter( obj )
{
	window.status = "Mouse Entered: " + obj;	
}

// LAYER CONTROL

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function P7_Snap() { //v2.65 by PVII
 var x,y,ox,bx,oy,p,tx,a,b,k,d,da,e,el,tw,q0,xx,yy,w1,pa='px',args=P7_Snap.arguments;a=parseInt(a);
 if(document.layers||window.opera){pa='';}for(k=0;k<(args.length);k+=4){
 if((g=MM_findObj(args[k]))!=null){if((el=MM_findObj(args[k+1]))!=null){
 a=parseInt(args[k+2]);b=parseInt(args[k+3]);x=0;y=0;ox=0;oy=0;p="";tx=1;
 da="document.all['"+args[k]+"']";if(document.getElementById){
 d="document.getElementsByName('"+args[k]+"')[0]";if(!eval(d)){
 d="document.getElementById('"+args[k]+"')";if(!eval(d)){d=da;}}
 }else if(document.all){d=da;}if(document.all||document.getElementById){while(tx==1){
 p+=".offsetParent";if(eval(d+p)){x+=parseInt(eval(d+p+".offsetLeft"));y+=parseInt(eval(d+p+".offsetTop"));
 }else{tx=0;}}ox=parseInt(g.offsetLeft);oy=parseInt(g.offsetTop);tw=x+ox+y+oy;
 if(tw==0||(navigator.appVersion.indexOf("MSIE 4")>-1&&navigator.appVersion.indexOf("Mac")>-1)){
  ox=0;oy=0;if(g.style.left){x=parseInt(g.style.left);y=parseInt(g.style.top);}else{
  w1=parseInt(el.style.width);bx=(a<0)?-5-w1:-10;a=(Math.abs(a)<1000)?0:a;b=(Math.abs(b)<1000)?0:b;
  x=document.body.scrollLeft+event.clientX+bx;y=document.body.scrollTop+event.clientY;}}
 }else if(document.layers){x=g.x;y=g.y;q0=document.layers,dd="";for(var s=0;s<q0.length;s++){
  dd='document.'+q0[s].name;if(eval(dd+'.document.'+args[k])){x+=eval(dd+'.left');y+=eval(dd+'.top');
  break;}}}e=(document.layers)?el:el.style;xx=parseInt(x+ox+a),yy=parseInt(y+oy+b);
 if(navigator.appVersion.indexOf("MSIE 5")>-1 && navigator.appVersion.indexOf("Mac")>-1){
  xx+=parseInt(document.body.leftMargin);yy+=parseInt(document.body.topMargin);}
 e.left=xx+pa;e.top=yy+pa;}}}
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function OnZoneEnter( zone, physics )
{
	element("TNTCtrl").focus();
	doMove = false;
	switch(zone) {
		case 'Z01':
		x = '71';
		y = '73';
		doMove = true;	
		break
		case 'Z02':
		x = '82';
		y = '93';
		doMove = true;	
		break
		case 'Z03':
		x = '93';
		y = '112';
		doMove = true;	
		break
		case 'Z04':
		x = '105';
		y = '134';
		doMove = true;	
		break				
		case 'Z05':
		x = '117';
		y = '154';
		doMove = true;	
		break		
		case 'Z06':
		x = '129';
		y = '175';
		doMove = true;	
		break		
		case 'Z07':
		x = '141';
		y = '198';
		doMove = true;	
		break		
		case 'Z08':
		x = '154';
		y = '220';
		doMove = true;	
		break		
		case 'Z09':
		x = '165';
		y = '241';
		doMove = true;			
		break		
		case 'Z10':
		x = '174';
		y = '263';
		doMove = true;					
		break
		// 11 - 18
		case 'Z11':
		x = '183';
		y = '284';
		doMove = true;					
		break
		case 'Z12':
		x = '194';
		y = '301';
		doMove = true;					
		break
		case 'Z13':
		x = '204';
		y = '319';
		doMove = true;					
		break
		case 'Z14':
		x = '214';
		y = '339';
		doMove = true;					
		break
		case 'Z15':
		x = '226';
		y = '358';
		doMove = true;					
		break
		case 'Z16':
		x = '237';
		y = '377';
		doMove = true;					
		break
		case 'Z17':
		x = '247';
		y = '395';
		doMove = true;					
		break
		case 'Z18':
		x = '257';
		y = '412';
		doMove = true;					
		break
		case 'Z26':
		x = '212';
		y = '290';
		doMove = true;					
		break
		case 'Z19':
		x = '172';
		y = '300';
		doMove = true;					
		break
		case 'Z22':
		x = '156';
		y = '304';
		doMove = true;					
		break
		case 'Z24':
		x = '138';
		y = '310';
		doMove = true;					
		break
	}
	if(doMove) {
		P7_Snap('largeMap','mapMarker',x,y);	
	}	
}

function viewHigh() {
	document.location.href = 'high.htm';
}
function viewLow() {
	document.location.href = 'low.htm';
}
function focusTNT() {
	element("TNTCtrl").focus();
}