var freezeImg = new Image();
freezeImg.src = "img/freeze.gif";
var thawImg = new Image();
thawImg.src = "img/thaw.gif";
var lightonImg = new Image();
lightonImg.src = "img/lighton.gif";
var lightoffImg = new Image();
lightoffImg.src = "img/lightoff.gif";

function Point(valX, valY,valZ)
{
	this.X = valX;
	this.Y = valY;
	this.Z = valZ;
}
function Point.prototype.Add(pt)
{
	this.X += pt.X;
	this.Y += pt.Y;
	this.Z += pt.Z;
}
function Point.prototype.Sub(pt)
{
	this.X -= pt.X;
	this.Y -= pt.Y;
	this.Z -= pt.Z;
}

var ptOffset = null;

var curCamera = "";
var curCamDiv = null;
function document.oncontextmenu()
{
	var s = event.srcElement.tagName;
	// For Selection Ranges, s will be UNDEFINED
	if (s && s != "INPUT" && s != "TEXTAREA" || event.srcElement.disabled || document.selection.createRange().text.length == 0)
	{
		event.returnValue = false;
	}
}
function document.onselectstart()
{
	var s = event.srcElement.tagName;
	if (s != "INPUT" && s != "TEXTAREA") event.returnValue = false;
}

var ie4 = (document.all && !document.getElementById);
var ie5 = (document.all && document.getElementById);
var ns6 = (!document.all && document.getElementById);

function element(id)
{
	if(ie5)			// Explorer 5+ 
		return document.getElementById(id);
	else if (ns6) 	// Netscape 6+ and Mozilla
	{	if (id == "TNTCtrl")
			id += "XP";
		return document.getElementById(id);
	}
	else if(ie4)	// Explorer 4
		return document.all[id];
	return null;
}

function loadskin()
{
	var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
	xmlDoc.async = false;
	if (!xmlDoc.load("scene.xml"))
		return;
	var xslDoc = new ActiveXObject("Msxml2.DOMDocument");
	xslDoc.async = false;
	if (!xslDoc.load("skin.xsl"))
		return;
	oContainer.innerHTML = xmlDoc.transformNode(xslDoc);
}

function DoCommand(string)
{
	var control = element("oViewCtrl");
	if(control)
	{
		return control.TNTDoCommand(string);
	}
	return "";
}

function switchCamera(id)
{
	var oDiv = element(id);
	if (oDiv == null)
		return;
	var camName=oDiv.innerText;
	if (camName == curCamera)
		return;
	oDiv.className = "selNameSelect";
	if (curCamDiv != null)
		curCamDiv.className	="selName";	
	var cmd = "CameraCtrl.SetCurrent('" + camName + "')";
	DoCommand(cmd);
	
	cmd = "SceneGraph.Objects('" + curCamera + "_Target').SetEnable(false)";
	DoCommand(cmd);
	cmd = "SceneGraph.Objects('" + camName + "_Target').SetEnable(true)";
	DoCommand(cmd);
	cmd = "SceneGraph.Objects('" + camName + "_Target').SetVisible(true)";
	DoCommand(cmd);
	curCamDiv = oDiv;
	curCamera = camName;
}

function switchLayer()
{
	var oDiv = event.srcElement;
	if (oDiv.tagName == "IMG")
		oDiv = oDiv.parentElement;
	var state;
	if (oDiv.state)
	{
		if (oDiv.state == "on")
			state = "off";
		else
			state = "on";
	}
	else
	{
		state = "off";
	}
	oDiv.state = state;

	var oImg = oDiv.children(0);
	var objName = oDiv.innerText;
	var cmd = "SceneGraph.Objects('" + objName + "*').SetEnable(";
	if (state == "on")
	{
		oImg.src = thawImg.src;
		cmd += "true)";
	}
	else
	{
		oImg.src = freezeImg.src;
		cmd += "false)";
	}
	DoCommand(cmd);
}

function switchLight()
{
	var oDiv = event.srcElement;
	if (oDiv.tagName == "IMG")
		oDiv = oDiv.parentElement;
	var state;
	if (oDiv.state)
	{
		if (oDiv.state == "on")
			state = "off";
		else
			state = "on";
	}
	else
	{
		state = "off";
	}
	oDiv.state = state;

	var oImg = oDiv.children(0);
	var objName = oDiv.innerText;
	var cmd = "SceneGraph.Objects('" + objName + "').SetEnable(";
	if (state == "on")
	{
		oImg.src = lightonImg.src;
		cmd += "true)";
	}
	else
	{
		oImg.src = lightoffImg.src;
		cmd += "false)";
	}
	DoCommand(cmd);
}
function SetViewFocus()
{
	var control = element("oViewCtrl");
	if(typeof(control)=="object")
		control.focus();
 updatePosition();
}


function OnReady()
{
	var oOffsetX = element("GlobalOffsetX");
	var oOffsetY = element("GlobalOffsetY");
	var oOffsetZ = element("GlobalOffsetZ");
	if (oOffsetX != null && oOffsetY != null && oOffsetZ != null)
	{
		var XPos = new Number(oOffsetX.value);
		var YPos = new Number(oOffsetY.value);
		var ZPos = new Number(oOffsetZ.value);
		ptOffset = new Point(XPos,YPos,ZPos);
	}
	var oStartCam = element("StartUpCamera");
	if (oStartCam != null)
	{
		var camID = "cam" + oStartCam.value;
		switchCamera(camID);
	}
	SetViewFocus();
}

function OnClick( obj )
{
}

function OnMouseEnter( obj )
{
}

function OnMouseExit( obj )
{
}

function OnZoneEnter( zone, physics )
{
}

function OnZoneExit( zone, physics )
{
}

function Restart()
{
}

function updatePosition()
{
	var cmdx;
	var cmdy;
	var cmdz;
	cmdx = "SceneGraph.Objects('"+curCamera+"').GetPositionX()";
	cmdy = "SceneGraph.Objects('"+curCamera+"').GetPositionY()";
	cmdz = "SceneGraph.Objects('"+curCamera+"').GetPositionZ()";
	var XPos = new Number(DoCommand(cmdx));
	var YPos = new Number(DoCommand(cmdy));
	var ZPos = new Number(DoCommand(cmdz));
	var camPt = new Point(XPos,YPos,ZPos);
	if (ptOffset != null)
		camPt.Add(ptOffset);

	var ospX = element("spEast");
	var ospY = element("spNorth");
	var ospZ = element("spElevation");

	ospX.innerText = camPt.X.toFixed(2);
	ospY.innerText = camPt.Y.toFixed(2);
	ospZ.innerText = camPt.Z.toFixed(2);
	setTimeout("updatePosition()",200);
}

function stopAnim()
{
	DoCommand("SceneGraph.Objects('*').StopAnimation()");
}

function startAnim()
{
	DoCommand("SceneGraph.Objects('*').StartAnimation()");
}
var printCount = 0;
function print(resolution)
{
	printCount++;
	var filePath = window.location.pathname;
	if (filePath.search("http://") != -1)
	{
		filePath = "C:\\RdvScreenshots\\";
	}
	else
	{
		filePath = filePath.replace("index.htm","");
		filePath = filePath.replace("/","");
	}
	filePath += "screenShot" + new String(printCount) + ".bmp";	
	filePath = unescape(filePath);
	var cmd = "Renderer.SaveImage('" + filePath + "'," + new String(resolution) + ")";
	DoCommand(cmd);	
	alert("Screen shot saved at: " + filePath);
}
