// JavaScript Document

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="944" height="510" src="focus.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/OfflineInstall.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 = 100;
function checkRefresh()
{
	var tntInstalled = isTurnToolInstalled();
	if(tntInstalled==false)
	{
		checkCounter++;
		if (checkCounter>120)
		{
			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()
{
	loadExternalTextures();
	//makeCameraButtons();
	//makeAnimationButton();
	changeColour('orange');
	element("TNTCtrl").focus();
	window.status = "TurnTool Ready";	
}

function OnMouseEnter( obj )
{
	TNTDoCommand('Objects(' + obj + ').SetDiffuseColor(#FF0000)');
	window.status = "Mouse Entered: " + obj;	
}

function OnMouseExit( obj )
{
	TNTDoCommand('Objects(' + obj + ').ResetMaterial()');
	window.status = "Mouse Exited: " + obj;	
}

function OnZoneEnter( zone, physics )
{
	element("TNTCtrl").focus();
	window.status = "Zone Entered: " + zone + ", by physics object: " + physics;	
}

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 objname = TNTDoCommand('SceneGraph.Mesh('+ id + ').GetName()');
	var checkboxEl = element('checkbox' + id);
	TNTDoCommand('Objects(' + objname + ').SetVisible('+(!checkboxEl.checked)+')');
}

var objectIndex=0;
function makeObjectList()
{
	var rs = '<br/>';
	var 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 objectStart = objectIndex;
	var objectEnd = objectIndex+24;
	if (objectEnd>objectCount)
		objectEnd=objectCount;
	for (var i=objectIndex; i<objectEnd; i++)
	{
		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="checkbox' + i + '" onClick="JavaScript:HideShowObject(' + i + ');" notab>';
		rs += '</td></tr>';
	}
	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 changeCamera(newCamera)
{
	var currentCamera = TNTDoCommand('CameraCtrl.GetCurrent()');
	var srcParentNodeIdx = TNTDoCommand('Objects('+currentCamera+').GetParentNodeIndex()');
	var desParentNodeIdx = TNTDoCommand('Objects('+newCamera+').GetParentNodeIndex()');
	if (srcParentNodeIdx == desParentNodeIdx)
		TNTDoCommand('CameraCtrl.Match("'+newCamera+'",2000)');
	else
		TNTDoCommand('CameraCtrl.SetCurrent("'+newCamera+'")');
}

function makeCameraButtons()
{
	var cameraCount = TNTDoCommand('SceneGraph.GetCameraCount()');
	var html = '';
	for (var j=0; j<cameraCount; j++)
	{
		var cameraName = TNTDoCommand('SceneGraph.Camera('+j+').GetName()');
		html += '<INPUT TYPE=button VALUE='+cameraName+' class=\"button\" onClick=changeCamera("'+cameraName+'")>';
	}
	CameraCell.innerHTML = html;
}

function playAnimation()
{
	if(TNTDoCommand('Objects(*).GetStopFrame()')!=800)
	{
		TNTDoCommand('Objects(*).PlayAnimation(,800)');
		element('PlayButton').value = "Play Backward";
	}
	else
	{	TNTDoCommand('Objects(*).PlayAnimation(,0)');
		element('PlayButton').value = "Play Forward";
	}
}

function makeAnimationButton()
{
	frameCount = TNTDoCommand('SceneGraph.GetFrameCount()');
	if(frameCount > 1)
	{	
		AnimationCell.innerHTML +='<INPUT TYPE=button ID="PlayButton" VALUE="Play Forward" class="button" onClick=playAnimation()>';
	}
}

function loadExternalTextures()
{
	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 + '")');
		}
	}
}

function saveImage()
{
	var index = element("ImageSize").selectedIndex;
	TNTDoCommand('Renderer.SaveImage("ScreenShot.bmp",'+index+')');
}


function changeColour(theColour) {
	switch(theColour) {
		case 'orange':
			TNTDoCommand('SceneGraph.Bitmap("orange").Load("tnt/orange.bmp")');
			TNTDoCommand('SceneGraph.Bitmap("seat fabric orange").Load("tnt/seatorange.bmp")');			
		break
		case 'blue':
			TNTDoCommand('SceneGraph.Bitmap("orange").Load("tnt/blue.bmp")');	
			TNTDoCommand('SceneGraph.Bitmap("seat fabric orange").Load("tnt/seatblue.bmp")');					
		break	
		case 'red':
			TNTDoCommand('SceneGraph.Bitmap("orange").Load("tnt/red.bmp")');	
			TNTDoCommand('SceneGraph.Bitmap("seat fabric orange").Load("tnt/seatred.bmp")');					
		break
		case 'black':
			TNTDoCommand('SceneGraph.Bitmap("orange").Load("tnt/black.bmp")');	
			TNTDoCommand('SceneGraph.Bitmap("seat fabric orange").Load("tnt/seatblack.bmp")');					
		break
		case 'grey':
			TNTDoCommand('SceneGraph.Bitmap("orange").Load("tnt/grey.bmp")');	
			TNTDoCommand('SceneGraph.Bitmap("seat fabric orange").Load("tnt/seatgrey.bmp")');					
		break			
	}
}
var currentCam = '';
var lighting = '';
var time = 'day';
function doView(theView) {
	TNTDoCommand('ObjectTree("Sphere05").SetVisible(false)');			
	// switch off submarine lighting
	TNTDoCommand('Objects("submarine01").SetFrame(0)');			
	TNTDoCommand('Objects("submarine02").SetFrame(0');
	if(currentCam=='voodoo') {
		TNTDoCommand('CameraCtrl.SetCurrent("Camera01")')	
		TNTDoCommand('Objects("Camera13").SetFrame(0');		
		currentCam='';
	}
	if(currentCam=='spin') {
		TNTDoCommand('CameraCtrl.SetCurrent("Camera01")')	
		TNTDoCommand('Objects("Camera10").SetFrame(0');		
		currentCam='';
	}
	if(lighting == 'submarine') {
		if(time == 'day') {
			TNTDoCommand('Objects("*").PlayAnimation(803,802,false,30)');	
		}
		lighting = '';
	}
	switch(theView) {
		case '01':
			TNTDoCommand('CameraCtrl.Match("Camera05",1000)');
		break;
		case '02':
			TNTDoCommand('CameraCtrl.Match("Camera04",1000)');
		break;	
		case '03':
			TNTDoCommand('CameraCtrl.Match("Camera02",1000)');
		break;	
		case '04':
			TNTDoCommand('CameraCtrl.Match("Camera03",1000)');
		break;	
		case '05':
			setTimeout("showLandscape()",1000);		
			TNTDoCommand('CameraCtrl.Match("Camera09",1000)');
		break;	
		case '06':
			TNTDoCommand('CameraCtrl.Match("Camera06",1000)');
		break;	
		case '07':
			TNTDoCommand('CameraCtrl.Match("Camera07",1000)');
		break;	
		case '08':
			TNTDoCommand('CameraCtrl.Match("Camera08",1000)');
		break;	
		case '09':
			lighting = 'submarine';		
			TNTDoCommand('CameraCtrl.Match("Camera12",1000)');
			TNTDoCommand('Objects("*").PlayAnimation(802,803,false,30)');				
			TNTDoCommand('Objects("submarine01").PlayAnimation(802,803,false,30)');			
			TNTDoCommand('Objects("submarine02").PlayAnimation(802,803,false,30)');						
		break;	
		case '11':
			TNTDoCommand('CameraCtrl.Match("Camera01",1000)');
		break;			
	}
}
function showLandscape() {
	TNTDoCommand('ObjectTree("Sphere05").SetVisible(true)');						
}
var door1Status = false;
var door2Status = false;
var door3Status = false;
function playVoodoo() {
	currentCam = 'voodoo';
	TNTDoCommand('Objects("Camera13").StopAnimation()');	
	TNTDoCommand('Objects("Camera13").SetFrame(0');		
	//TNTDoCommand('CameraCtrl.Match("Camera13",2000)');	
	TNTDoCommand('CameraCtrl.SetCurrent("Camera13")');		
	TNTDoCommand('Objects("Camera13").PlayAnimation(0,800,true,30)');		
}
function spinCam() {
	currentCam = 'spin';	
	TNTDoCommand('Objects("Camera10").StopAnimation()');	
	TNTDoCommand('Objects("Camera10").SetFrame(0');		
	TNTDoCommand('CameraCtrl.SetCurrent("Camera10")');		
	TNTDoCommand('Objects("Camera10").PlayAnimation(0,400,true,30)');		
}
function daytime() {
	door1Status = false;
	door2Status = false;	
	if(time == 'night') {
	time = 'day';	
	TNTDoCommand('Objects("[door01]").StopAnimation()');	
	TNTDoCommand('Objects("[door01]").SetFrame(0)');		
	TNTDoCommand('Objects("[door02]").StopAnimation()');	
	TNTDoCommand('Objects("[door02]").SetFrame(0)');															   
	//TNTDoCommand('CameraCtrl.SetCurrent("Camera01")');		
	TNTDoCommand('Objects("*").PlayAnimation(803,802,false,30)');	
	}
}
function nighttime() {
	door1Status = false;
	door2Status = false;	
	time = 'night';
	TNTDoCommand('Objects("[door01]").StopAnimation()');	
	TNTDoCommand('Objects("[door01]").SetFrame(0)');		
	TNTDoCommand('Objects("[door02]").StopAnimation()');	
	TNTDoCommand('Objects("[door02]").SetFrame(0)');			

	//TNTDoCommand('CameraCtrl.SetCurrent("Camera01")');		
	TNTDoCommand('Objects("*").PlayAnimation(802,803,false,30)');	
}
function OnClick( obj )
{
	switch(obj) {
		case 'door01':
			if(door2Status==false) {
				door2Status=true;
				TNTDoCommand('Objects("[door02]").PlayAnimation(802,865,false,30)');
			} else {
				door2Status=false;								
				TNTDoCommand('Objects("[door02]").PlayAnimation(865,802,false,30)');
			}
		break
		case 'door02':
			if(door1Status==false) {
				door1Status=true;
				TNTDoCommand('Objects("[door01]").PlayAnimation(867,927,false,30)');
			} else {
				door1Status=false;				
				TNTDoCommand('Objects("[door01]").PlayAnimation(927,867,false,30)');
			}
		break			
		case 'door03':
			if(door3Status==false) {
				door3Status=true;
				TNTDoCommand('Objects("Line04").PlayAnimation(928,988,false,30)');
				TNTDoCommand('Objects("[boot]").PlayAnimation(928,988,false,30)');
				TNTDoCommand('Objects("[Group10]").PlayAnimation(928,988,false,30)');
				TNTDoCommand('Objects("[Group11]").PlayAnimation(928,988,false,30)');				
			} else {
				door3Status=false;				
				TNTDoCommand('Objects("Line04").PlayAnimation(988,928,false,30)');
				TNTDoCommand('Objects("[boot]").PlayAnimation(988,928,false,30)');
				TNTDoCommand('Objects("[Group10]").PlayAnimation(988,928,false,30)');
				TNTDoCommand('Objects("[Group11]").PlayAnimation(988,928,false,30)');	
			}
		break			

	}

window.status = "Object clicked: " + obj;		
}
