// JavaScript Document
//T2L Loader------------------------------------------



function createT2L(width, height, file, color, transparent)
{
	var DownloadText = "Downloading True2Life Resource";
	var CoreDownloadText = "True2Life Viewer Update Downloading";
	var SetLogo = "None";

  if (ie4||ie5)
  {
  	T2LObject = '<object id="TNTCtrl" width="'+width+'" height="'+height+'" classid="CLSID:402ee96e-2ce8-482d-ada5-ceceea07e16d" codebase="http://www.true2life.co.uk/ViewerInstall.exe#version=2,12,0,8"><param name="transparent" value="'+transparent+'"><param name="ctrl_color" value="'+color+'"><param name="tnt_back_color" value="'+color+'"><param name="src" value="'+file+'"> <param name="script" value="ProgressBar.SetDownloadText(\''+DownloadText+'\');ProgressBar.SetCoreDownloadText(\''+CoreDownloadText+'\');TNTCtrl.SetLogo(\''+SetLogo+'\')"></OBJECT>';
  }
  else
  {
	T2LObject = '<embed id="TNTCtrl" script="ProgressBar.SetDownloadText(\''+DownloadText+'\');ProgressBar.SetCoreDownloadText(\''+CoreDownloadText+'\');TNTCtrl.SetLogo(\''+SetLogo+'\')" width="'+width+'" height="'+height+'" src="'+file+'" transparent="'+transparent+'" tnt_back_color="'+color+'" pluginspage="http://www.true2life.co.uk/ViewerInstall.xpi" type="application/tntfile"></embed>';
  }
  element('True2Life').innerHTML = T2LObject;
}

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 initT2L(width, height, file, color, transparent)
{
	var DownloadText = "Downloading True2Life Resource";
	var CoreDownloadText = "True2Life Viewer Update Downloading";
	var SetLogo = "None";
	
	var t2lInstalled = isT2LInstalled();
	if (t2lInstalled==false)
	{
		element('InstallTag').innerHTML = '<CENTER><INPUT TYPE=button VALUE="Install True2Life Viewer" onClick="installT2L();"></CENTER>';
		createT2L(width, height, file, color, transparent);
		checkRefresh();
	}
	else
	{
		createT2L(width, height, file, color, transparent);
		
	}	
}

function isT2LInstalled()
{
	var t2lInstalled = false;
	if (ie4||ie5)
	{
		try
		{
			var xObj = new ActiveXObject("TNT.TNTCtrl");
			if (xObj)
			{
				t2lInstalled = true;
			}
		}
		catch (e)
		{
		}
	}
	else
	{
		if(navigator.plugins.namedItem("TurnTool XPCOM Plugin"))
		{
			t2lInstalled = true;
		}
	}
	return t2lInstalled;
}

function installT2L() 
{
	if (ie4||ie5)
	{
		window.location.href = "http://www.true2life.co.uk/OfflineInstall.exe";
	}
	else
	{
		var xpi = {'True2life Viewer Installation':'http://www.true2life.co.uk/ViewerInstall.xpi'};
		InstallTrigger.install(xpi,installFinish);
	}
}

function installFinish(url, result)
{
	window.location.href = window.location;
}

function saveImage()
{
	alert('A screenshot will now be saved on the desktop entitled ScreenShot.bmp')
	TNTDoCommand('Renderer.SaveImage("ScreenShot.bmp",0)')
}

function Cb(source,target)
{
	TNTDoCommand('SceneGraph.Bitmap("' + source + '").Load("' + target + '")');
}

function focus()
{
	if (!ns6)
	{
		element("TNTCtrl").focus();
	}
}

function onDoCommandKeypress()
{
	if(window.event.keyCode==13) // if return key was pressed
		doCommand();
}

//----------------------------------------------------


var bMenuOpen=false;
var bLightOn=false;
var iNumLC=-1;
var iNumWood=3;


function lightColorSw(index)
{
	iNumLC=index;
	switch(index)
	{
		case 0:
			TNTDoCommand('Objects("InsertRoom").ResetMaterial()');
			TNTDoCommand('Objects("InsertRoom").SetDiffuseColor(#993333)');
			TNTDoCommand('Objects("Win_in").SetDiffuseColor(#993333)');
		break;
		case 1:
			TNTDoCommand('Objects("InsertRoom").ResetMaterial()');
			TNTDoCommand('Objects("InsertRoom").SetDiffuseColor(#999933)');
			TNTDoCommand('Objects("Win_in").SetDiffuseColor(#999933)');
		break;
		case 2:
			TNTDoCommand('Objects("InsertRoom").ResetMaterial()');
			TNTDoCommand('Objects("Win_in").SetDiffuseColor(#909090)');
		break;
		case 3:
			TNTDoCommand('Objects("InsertRoom").ResetMaterial()');
			TNTDoCommand('Objects("InsertRoom").SetDiffuseColor(#33AA33)');
			TNTDoCommand('Objects("Win_in").SetDiffuseColor(#33AA33)');
		break;
		case 4:
			TNTDoCommand('Objects("InsertRoom").ResetMaterial()');
			TNTDoCommand('Objects("InsertRoom").SetDiffuseColor(#3333AA)');
			TNTDoCommand('Objects("Win_in").SetDiffuseColor(#3333AA)');
		break;
	
	}

}

function Lightswitch(lightSw)
{
	bLightOn=lightSw;
	if(lightSw)
	{
		if(bMenuOpen) showLayer("LightC");
		lightColorSw(iNumLC);
		Cb('InsertRoomOffMap1.jpg','InsertRoomDiffuseMap1.jpg');
		TNTDoCommand('Objects("Win_in").SetDiffuseColor(#909090)');
	}else
	{
		hideLayer("LightC");
		iNumLC=-1;
		TNTDoCommand('Objects("InsertRoom").ResetMaterial()');
		Cb('InsertRoomOffMap1.jpg','InsertRoomOffMap1.jpg');
		TNTDoCommand('Objects("Win_in").SetDiffuseColor(#323232)');
	}
}

function OpenMenu()
{
	bMenuOpen=!bMenuOpen;
	if(bMenuOpen)
	{
		showLayer("WoodC");
		showLayer("LightS");
		if(bLightOn) showLayer("LightC");
	}else
	{
		hideLayer("WoodC");
		hideLayer("LightS");
		hideLayer("LightC");
	}
	window.status = bMenuOpen;	
}


function OnClick( obj )
{
	if(obj=="But0")
	{
		if(iNumLC==0)	//off light
		{
			Lightswitch(false);
		}else{
			lightColorSw(0);
			Lightswitch(true);
		}
	}
	else if(obj=="But1")
	{
		if(iNumLC==1)	//off light
		{
			Lightswitch(false);
		}else{
			lightColorSw(1);
			Lightswitch(true);
		}
	}
	else if(obj=="But2")
	{
		if(iNumLC==2)	//off light
		{
			Lightswitch(false);			
		}else{
			lightColorSw(2);
			Lightswitch(true);
		}
	}	
}

function ChangeWood(index)
{
	switch(index){
		case 0:
			ChangeTexture("homewood13.bmp","wood_800.png");
		break;
		case 1:
			ChangeTexture("homewood13.bmp","wood_200.png");
		break;
		case 2:
			//TNTDoCommand('Objects(*).ResetMaterial()');
			ChangeTexture("homewood13.bmp","homewood13in.png");
			
		break;
	}
}

function OnReady()
{
//	TNTDoCommand('SceneGraph.Objects(Pan_Handle).SetVisible(false)');
//	 TNTDoCommand('ObjectTree("[LOGOANI]").PlayAnimation(,400)');	//play logo animation
//	 setTimeout("TNTDoCommand('CameraCtrl.SetControllable(true)');ActiveMenu=true; hideLayer(\"MenuMask\");",13500);
//	 TNTDoCommand('Objects(shadowf).SetVisible(1)');
	loadExternalTextures();

	element("TNTCtrl").focus();
	
	hideLayer("WoodC");
	hideLayer("LightS");
	hideLayer("LightC");
	TNTDoCommand('Objects(*).ResetMaterial()');
	//window.status = "True2Life Resource Ready";	
}


function OnMouseEnter( obj )
{

	TNTDoCommand('Objects(' + obj + ').SetDiffuseColor(#111111)');
	window.status = "Mouse Entered: " + obj;
	window.status = "Mouse Entered: " + obj;
}

function OnMouseExit( obj )
{
	TNTDoCommand('Objects(' + obj + ').ResetMaterial()');
	window.status = "Mouse Exited: " + obj;	
	window.status = "Mouse Exited: " + obj;	
}

function OnZoneEnter( zone, physics )
{
	element("TNTCtrl").focus();
	if(zone=="Trigger01")
	{
		TNTDoCommand('Objects("door").PlayAnimation(,30)');
	}
	
	window.status = "Zone Entered: " + zone + ", by physics object: " + physics;
}

function OnZoneExit( zone, physics )
{
	element("TNTCtrl").focus();
	if(zone=="Trigger01")
	{
		TNTDoCommand('Objects("door").PlayAnimation(,0)');
	}
	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 Messageshow(msg)
{
	window.status='+msg+';
}

function Restart()
{

	hideLayer("WoodC");
	hideLayer("LightS");
	hideLayer("LightC");
	bMenuOpen=false;
	bLightOn=false;
	iNumLC=-1;
	iNumWood=3;
	Lightswitch(0);
	
	TNTDoCommand('SceneGraph.Physics.Reset()');
	TNTDoCommand('Objects(*).StopAnimation()');
	TNTDoCommand('Objects(*).SetFrame(0)');
	cameraName = TNTDoCommand('SceneGraph.Camera(0).GetName()');
	TNTDoCommand('CameraCtrl.SetCurrent("'+ cameraName+'")');
	TNTDoCommand('Objects(*).ResetMaterial()');
	
}




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 playAnimation()
{
	if(TNTDoCommand('Objects(*).GetStopFrame()')!=100)
	{
		TNTDoCommand('Objects(*).PlayAnimation(,100)');
		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 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 TNTDoCommand(string)
{
	var control = element("TNTCtrl");
	if(control && control.ready)
		return control.TNTDoCommand(string);
	return "";
}

function ChangeTexture(source,target)
{
	TNTDoCommand('SceneGraph.Bitmap("' + source + '").Load("' + target + '")');
}















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_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_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 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 InitResource()
{
	MM_preloadImages('res/br00.png','res/br11.png','res/br12.png','res/br13.png','res/br14.png',
					 'res/br21.png','res/br210.png','res/br211.png','res/br212.png','res/br213.png',
					 'res/br214.png','res/br215.png','res/br216.png','res/br217.png','res/br22.png',
					 'res/br23.png','res/br24.png','res/br25.png','res/br26.png','res/br27.png',
					 'res/br28.png','res/br29.png','res/br31.png','res/br32.png','res/br33.png',
					 'res/br34.png','res/br35.png','res/br41.png','res/br410.png','res/br42.png',
					 'res/br43.png','res/br44.png','res/br45.png','res/br46.png','res/br47.png',
					 'res/br48.png','res/br49.png');
	
}


