// Template specefic script

/*
----------------------------------------------------------------------------------
						Template for TurnToolBox2008
----------------------------------------------------------------------------------
	Template Name: 		default
	Template Arthour: 	TurnTool ApS
	Template Date: 		04-07-2006
	Last Update:		11-05-2008
	Template Version:	1.0
	Template Contact:	info@turntool.com

	Template maunal: Look in manual.txt
	
	Template files:
		-index.html		-	start page
		-turntool.tnt	-	your TNT file
		-skin.css		-	CSS file for page
		-files			-	folder with files used in template
		-

	
	----------------------------------------------------------------------------------
*/
function OnReady()
{
	loadExternalTextures();
	makeCameraButtons();
	makeAnimationButton();
	makeTextureButton();
	focus();
	window.status = "TurnTool Ready";	
}

function HideShowObject(id,boxValue)
{
	var objname = TNTDoCommand('SceneGraph.Mesh('+ id + ').GetName()');
	var checkboxEl = element('showHideChkBox' + id).checked;
	TNTDoCommand('Objects("' + objname + '").SetVisible('+!(checkboxEl)+')');
}

var objectListIndex = 0; //First object curently shown...
var objectListMaxItem = 50; // Number of objects in list 
function makeObjectList()
{
	element('LevelTable').innerHTML = 'Please wait!';
	var objectCount = TNTDoCommand('SceneGraph.GetMeshCount()');
	var objectEnd = objectListIndex+objectListMaxItem;
	if (objectEnd>objectCount) {
		objectEnd=objectCount;
	}
	var rs = '<div id="objectListHolder"><div id="objectListHeader">Check to hide object</div>';
	rs += '<div id="objectList">';
	rs += makeObjectListItems(objectListIndex,objectListMaxItem);
	rs += '</div><div id="objectListLess" class="objectListMoreLessHidden" onclick="objectListMoreLess(-1)">Prev page</div><div id="objectListMore" class="objectListMoreLessHidden" onclick="objectListMoreLess(1)">Next page</div>';
	rs += '</div>';
	element('LevelTable').innerHTML = rs;
	objectListMoreLessUpdate(objectEnd,objectCount);
}

function makeObjectListItems(startIndex2,num)
{
	var objectCount = TNTDoCommand('SceneGraph.GetMeshCount()');
	var maxPage = objectListIndex+num;
	var rs = '\n';
	for(var m = objectListIndex; m < maxPage && m < objectCount; m++)
	{
		var objName = TNTDoCommand('SceneGraph.Mesh(' + m + ').GetName()');
		if(m%2 == 0)
			var objClass = ' class="objListEven"';
		else
			var objClass = ' class="objListOdd"';
		rs += '<div '+objClass+' onclick="HideShowObject('+m+');" ><input type="checkbox" id="showHideChkBox' + m + '" />'+m+' '+objName+'</div>';
	}
	return rs;
}

function objectListMoreLessUpdate(num, objectCount)
{
	if (objectListIndex+objectListMaxItem < objectCount)
		element('objectListMore').className = 'objectListMore';
	else
		element('objectListMore').className = 'objectListMoreLessHidden';
	if(objectListIndex >= objectListMaxItem)
		element('objectListLess').className = 'objectListLess';
	else
		element('objectListLess').className = 'objectListMoreLessHidden';
}

function objectListMoreLess(orgNum)
{
	var num = orgNum*objectListMaxItem;
	var objectCount = TNTDoCommand('SceneGraph.GetMeshCount()');
	var objectEnd = objectListIndex+objectListMaxItem;
	if (objectEnd>objectCount) 
		objectEnd=objectCount;
	if(objectListIndex < 0)
		objectListIndex = 0;
	objectListIndex = objectListIndex+num;
	var m = makeObjectListItems(objectListIndex+num,Math.abs(num));
	if(m != '') {
		element('objectList').innerHTML = m;
		objectListMoreLessUpdate(objectEnd,objectCount);
	}
}

function changeCamera(newCamera)
{
	var currentCamera = TNTDoCommand('CameraCtrl.GetCurrent()');
	var srcParentNodeIdx = TNTDoCommand('Objects('+currentCamera+').GetParentNodeIndex()');
	var desParentNodeIdx = TNTDoCommand('Objects('+newCamera+').GetParentNodeIndex()');
	if (srcParentNodeIdx == desParentNodeIdx)
	{
		var frameCount = TNTDoCommand('Objects('+newCamera+').GetFrameCount()');
		if (frameCount>1)
		{
			TNTDoCommand('Objects(*).PlayAnimation(0,'+frameCount+')');	
			TNTDoCommand('CameraCtrl.SetCurrent("'+newCamera+'")');	
			element('PlayButton').value = "Play Backward";			
		}
		else
		{
			TNTDoCommand('CameraCtrl.Match("'+newCamera+'",2000)');
		}
	}
	else
	{
		TNTDoCommand('SceneGraph.Physics.Reset()');	
		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="camera" onclick="changeCamera(\''+cameraName+'\')">';
	}
	element('CameraCell').innerHTML = html;
}

function playAnimation()
{
	if(TNTDoCommand('Objects(*).GetStopFrame()')!=tntMaxFrameCount)
	{
		TNTDoCommand('Objects(*).PlayAnimation(,'+tntMaxFrameCount+')');
		element('PlayButton').value = "Play Backward";
	}
	else
	{	TNTDoCommand('Objects(*).PlayAnimation(,0)');
		element('PlayButton').value = "Play Forward";
	}
}

function makeAnimationButton()
{
	frameCount = TNTDoCommand('SceneGraph.GetFrameCount()');
	if(frameCount > 1)
	{	
		element('AnimationCell').innerHTML +='<input type="button" id="PlayButton" value="Play Forward" class="button" onclick="playAnimation()">';
	}
}

function makeTextureButton()
{
	var texcnt = 0;
	texcnt = TNTDoCommand('SceneGraph.GetBitmapCount()');
	if(texcnt > 0)
	{
		var html = 'Select a texture <select id="TextureSelection">';
		for( var i=0; i<texcnt; i++ )
		{
			var name = TNTDoCommand('SceneGraph.Bitmap(' + i + ').GetName()');
			html += '<option value="'+name+'">'+name+'</option>';
		}
		html += '</select> browse for file <input id="texturebrowser" type="file" size="15" value="" onkeypress="changeImageCheck()" onchange="changeImage()" >';
		element('TextureCell').innerHTML = html;
	}
}

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 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 thisDate = new Date();
	var year = thisDate.getFullYear();
	var month = thisDate.getMonth();
	var day = thisDate.getDate();
	var hours = thisDate.getHours();
	var minutes = thisDate.getMinutes();
	var seconds = thisDate.getSeconds();
	var milliseconds = thisDate.getMilliseconds();
	var sessionID = year+""+(month+1)+""+day+""+hours+""+minutes+""+seconds+""+milliseconds;	
	var index = element("ImageSize").selectedIndex;
	var desktopPath = TNTDoCommand('Core.GetDesktopPath()');
	TNTDoCommand('Renderer.SaveImage("'+desktopPath+'ScreenShot'+sessionID+'.bmp",'+index+')')
}

function changeImage()
{
	var command1 = 'SceneGraph.Bitmap("'+element('TextureSelection').options[element('TextureSelection').selectedIndex].value+'").Load("'+element('texturebrowser').value+'")';
	TNTDoCommand(command1);
}

function changeImageCheck()
{
	if(window.event.keyCode==13)
	{
		changeImage()
	}
}
