//Copyright TurnTool ApS - 1998 - 2008 - All Right Reserved.
//You are NOT allowed to use this HTML document for derivative work including parts here of without the written permission from TurnTool.
//This HTML document may not be redistributed in any form.

var inactiveuser = true;
var timerIDEnableWalk = -1;
var timerIDInActiveUser = -1;

function CancelTimeouts()
{
	if (timerIDEnableWalk!=-1)
	{
		clearTimeout(timerIDEnableWalk);
		timerIDEnableWalk = -1;
	}
	if (timerIDInActiveUser!=-1)
	{
		clearTimeout(timerIDInActiveUser);
		timerIDInActiveUser = -1;
	}
}

var mesMode = 0;
var floorChangeInProgress = true;

function changeFloor(zone)
{
	if(zone.search(/^#StairUp|^#StairDown/) != -1 && floorChangeInProgress == false)
	{
		CancelTimeouts();
		floorChangeInProgress = zone;
		if(zone.search(/^#StairUp/i)!= -1)
		{
			level++;	
		}
		else
		{
			level--;
		}
		createFilePath(level);
		var _elm = element('floorselectorlist'); 
		for(var m = 0; m < _elm.options.length; m++)
		{
			_elm.options[m].selected = (_elm.options[m].value == level);
		}	
		resetZoneObjArray();
		currNavMode = -1;
		element('TNTCtrl').src = filepath + 'turntool.tnt';
	}
}

function newFloorSelected(who)
{
	CancelTimeouts();
	var zone = '#Stair';
	if(who[who.selectedIndex].value > level)
		zone+='Up';
	else if(who[who.selectedIndex].value < level)
		zone+='Down';
	else
		return false;
	zone+='_00';
	floorChangeInProgress = zone;
	currNavMode = -1;
	level = who[who.selectedIndex].value;
	createFilePath(level);
	resetZoneObjArray();
	if(TNTsupportedPlatform()==true)
		element('TNTCtrl').src = filepath + 'turntool.tnt';
	else 
	{
		// Linux and Mac stuff
		element('TurnTool').innerHTML = createJavaObject(tntWidth, tntHeight);
		menuSetActive(element('menu_nav_vinkel1'));
		helpSetActive(element('help_nav_angle1'));
	}	
}

var zoneObjStatusArray = new Array();

function resetZoneObjArray()
{
	var zoneObjCount = Number(TNTDoCommand('Objects(#ZoneSphere*).GetObjectCount()'));
	for (var zIdx=0; zIdx<zoneObjCount; zIdx++)
	{
		zoneObjStatusArray[zIdx] = 0;
	}
}

function updateAllZoneObjs()
{
	var zoneObjCount = Number(TNTDoCommand('Objects(#ZoneSphere*).GetObjectCount()'));
	for (var zIdx=0; zIdx<zoneObjCount; zIdx++)
	{
		if (zoneObjStatusArray[zIdx] == 1)
		{
			TNTDoCommand('ObjectTree(#ZoneSphere'+zIdx+').PlayAnimation(,200,false,100)');
		}
		else
		{
			TNTDoCommand('ObjectTree(#ZoneSphere'+zIdx+').PlayAnimation(,0,false,100)');
		}
	}
}

function openAllZoneObjs()
{
	var zoneObjCount = Number(TNTDoCommand('Objects(#ZoneSphere*).GetObjectCount()'));
	for (var zIdx=0; zIdx<zoneObjCount; zIdx++)
	{
		TNTDoCommand('ObjectTree(#ZoneSphere'+zIdx+').PlayAnimation(,200,false,100)');
	}
}

function OnZoneEnter( zone, physics )
{
	if (zone.substring(0,11) == "#ZoneSphere")
	{
		var zIdx = Number(zone.substring(11,zone.length));
		zoneObjStatusArray[zIdx] = 1;
		if (currNavMode == 0)
		{
			TNTDoCommand('ObjectTree(#ZoneSphere'+zIdx+').PlayAnimation(,200,false,100)');
		}
	}
	if(zone.search(/^#Stair/i)!= -1 && !moving)
	{
		changeFloor(zone);
	}
}

function OnZoneExit( zone, physics )
{
	if (zone.substring(0,11) == "#ZoneSphere")
	{
		var zIdx = Number(zone.substring(11,zone.length));
		zoneObjStatusArray[zIdx] = 0;
		if (currNavMode == 0)
		{
			TNTDoCommand('ObjectTree(#ZoneSphere'+zIdx+').PlayAnimation(,0,false,100)');
		}
	}
}

// NavMode = -1 //Something else
// NavMode = 0	//WalkInside
// NavMode = 1	//GuideTour
// NavMode = 2	//GotoAngle1
// NavMode = 3	//GotoAngle2
// NavMode = 4	//GotoOverview
// NavMode = 5	//Measure
// NavMode = 6	//Move

function changeNavMode(newNavMode)
{
	CancelTimeouts();
	if (currNavMode != newNavMode)
	{
		oldNavMode = currNavMode;
		currNavMode = newNavMode;
		reclickCounter = 0;
		if(floorChangeInProgress == false)
		{
			// Avoid floorchange on NavModeChange when camera is located on top of stair.
			floorChangeInProgress = true;
			window.setTimeout("floorChangeInProgress = false;",1000);
		}
		// ---- Exit NavMode ----
		if (oldNavMode==0)
		{
			TNTDoCommand('SceneGraph.Physics.Reset()');
			TNTDoCommand('Objects(PhysicsSphere).SetEnable(false)');
			TNTDoCommand('Objects(*_Text).SetVisible(true)');
		}
		if (oldNavMode==5)
		{
			TNTDoCommand('CameraCtrl.SetIgnoreInput(0)');
			setMeasurementMode(0);
		}
		if (oldNavMode==6)
		{
			TNTDoCommand('CameraCtrl.SetIgnoreInput(0)');
			TNTDoCommand('Objects(*#A*).SetEnable(false)');
			TNTDoCommand('Objects(*).SetSelected(0)');
			TNTDoCommand('Objects(*).SetMouseOverEvent(0)');
			TNTDoCommand('Objects(*).SetOcclusion(0)');	
		}
		// ---- Init NavMode ----
		if (currNavMode==0)
		{
			WalkInside();
			updateAllZoneObjs();
		}
		if (currNavMode==1)
		{
			GuideTour();
			openAllZoneObjs();
		}
		if (currNavMode==2)
		{
			GotoAngle1();
		}
		if (currNavMode==3)
		{
			GotoAngle2();
		}
		if (currNavMode==4)
		{
			GotoOverview();
			openAllZoneObjs();
		}
		if (currNavMode==5)
		{
			setMeasurementMode(1);	
		}
		if (currNavMode==6)
		{
			initMove();
			openAllZoneObjs();
		}
		if (oldNavMode==1)
		{
			TNTDoCommand('Objects("Camera02").StopAnimation()');
		}
	}
	else
	{
		reclickCounter++;
		if (currNavMode==0)
		{
			if (reclickCounter>0)
			{
				TNTDoCommand('SceneGraph.Physics.Reset()');
			}
			WalkInside();
		}
		if (currNavMode==1)
		{
			var tmpstr = ['play','pause'];
			var newPlaytext = lanObj.GetString('w_tourstop');
			if (reclickCounter%2)
			{
				TNTDoCommand('CameraCtrl.SetControlable(true)');
				TNTDoCommand('Objects("Camera02").StopAnimation()');
				TNTDoCommand('CameraCtrl.SetRotationSpeedX(0.007)')
				TNTDoCommand('CameraCtrl.SetRotationSpeedY(0.007)')
				TNTDoCommand('CameraCtrl.SetMaxHorizontalAngle(3.14)');
				TNTDoCommand('CameraCtrl.SetMinHorizontalAngle(0.0)');
				TNTDoCommand('CameraCtrl.SetMinVerticalAngle(-1000.0)');
				TNTDoCommand('CameraCtrl.SetMaxVerticalAngle(1000.0)');
			}
			else
			{
				TNTDoCommand('Objects(Camera02).StartAnimation()');
				TNTDoCommand('CameraCtrl.SetControlable(false)');
				tmpstr.reverse();
				newPlaytext = lanObj.GetString('w_tourplaying');
			}
			var elm = element('link_misc_playpause');
			elm.innerHTML = elm.innerHTML.replace('kamera_tour_'+tmpstr[0]+'.gif','kamera_tour_'+tmpstr[1]+'.gif');
			element('camtour_replace').innerHTML = newPlaytext;
		}
		if (currNavMode==4)
		{
			if (reclickCounter%2)
			{
				TNTDoCommand('Objects(*#ShowIfReclicked*).SetVisible(true)');
				TNTDoCommand('Objects(*#HideIfReclicked*).SetVisible(false)');
			}
			else
			{
				TNTDoCommand('Objects(*#ShowIfReclicked*).SetVisible(false)');
				TNTDoCommand('Objects(*#HideIfReclicked*).SetVisible(true)');
			}
		}
	}
}

function carpetClicked(_sponsor, nCarpet, sType)
{
	var mapfile = planedit_sponsor_path + '/1/floormaps/' + floorArray[_sponsor][nCarpet][1];
	var _objName = sType;
	
	TNTDoCommand('SceneGraph.Bitmap("Floor_'+_objName+'").Load("' + mapfile + '.jpg")');
	var cnt = parseInt(TNTDoCommand('Objects(*'+_objName+'*).GetObjectCount()'));
	for(var c=0; c<cnt; c++)
	{
		var n = c.toString();
		if(n.length == 1)
			n = '0'+n;
		var xSize = TNTDoCommand('Objects(*#'+_objName+n+').GetGeometrySizeX()');
		var ySize = TNTDoCommand('Objects(*#'+_objName+n+').GetGeometrySizeY()'); 
		var mapSizeU = floorArray[_sponsor][nCarpet][2][0];
		var mapSizeV = floorArray[_sponsor][nCarpet][2][1];
		var tilingU = ySize / mapSizeU;
		var tilingV = xSize / mapSizeV;
		TNTDoCommand('Objects(*#'+_objName+n+').SetTilingU(' + tilingU + ')');
		TNTDoCommand('Objects(*#'+_objName+n+').SetTilingV(' + tilingV + ')');
	}
	focus();
}

var measureMode = 1;

function setMeasurementMode(mesMode)
{
	if (mesMode>0)
	{
		var elm0 = element('link_misc_movemeassure').getElementsByTagName('img')[0];//.firstChild;
		var elm1 = element('meassurereplace');
		if (mesMode==1)
		{
			measureMode=2;
			elm0.src = elm0.src.replace('help_measurement','help_pan')
			var tmpstr = lanObj.GetString('s_rotate');
			elm1.innerHTML = tmpstr;
			TNTDoCommand('Objects(*).SetOcclusion(0)');
			TNTDoCommand('Objects(Collision*).SetOcclusion(1)');
			TNTDoCommand('Objects(Floor*).SetOcclusion(1)');
			TNTDoCommand('Measurement.SetLineSize(150)');
			TNTDoCommand('CameraCtrl.SetIgnoreInput(1)');
			TNTDoCommand('Measurement.SetMode(1)');	
			if (currCamera!='Camera06')
			{
				TNTDoCommand('ObjectTree(Camera*).SetEnable(false)');
				TNTDoCommand('CameraCtrl.SetCurrent("Camera06")');
				currCamera = 'Camera06';
				TNTDoCommand('ObjectTree("Camera06").SetEnable(true)');
			}
		}
		else
		{
			measureMode=1;
			elm0.src = elm0.src.replace('help_pan','help_measurement');;
			var tmpstr = lanObj.GetString('w_meassure');
			elm1.innerHTML = tmpstr;
			TNTDoCommand('SceneGraph.Objects(*).SetOcclusion(0)');
			TNTDoCommand('CameraCtrl.SetIgnoreInput(0)');	
			TNTDoCommand('Measurement.SetMode(2)');	
		}
	}
	else
	{
		TNTDoCommand('SceneGraph.Objects(*).SetOcclusion(0)');
		TNTDoCommand('CameraCtrl.SetIgnoreInput(0)');	
		TNTDoCommand('Measurement.SetMode(0)');
		distance = "0";
		OnMeasureUpdate(distance);
	}
}

var distance = "0";

function OnMeasureUpdate(distance)
{
	var dst = distance - distance % 5;	// only every 5 cm
	element('measurementtext').innerHTML = dst;
}

