/////////////////////////////////////////////////
// Menu Conrol                                  //
/////////////////////////////////////////////////

// Object definition
function block(name, ref, color) {
	this.name = name;
	this.ref = ref;
	this.color = color;
}
function row(name, ref) {
	this.name = name;
	this.ref = ref;
}
// Alphabet
var alphabet = ["A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","V","W","X","Y","Z"];

// Block array definition (A-H)
var blockArray = new Array();
// Row array definition
for(i=0;i<4;i++) {
	tmp = alphabet[i];
	self['rowArray_Block'+tmp] = new Array();
}
seatArray_BlockA_RowA  = new Array();
seatArray_BlockA_RowB  = new Array();
seatArray_BlockA_RowC  = new Array();
seatArray_BlockA_RowD  = new Array();
seatArray_BlockA_RowE  = new Array();
seatArray_BlockA_RowF  = new Array();
seatArray_BlockA_RowG  = new Array();
seatArray_BlockA_RowH  = new Array();
seatArray_BlockA_RowJ  = new Array();
seatArray_BlockA_RowK  = new Array();
seatArray_BlockA_RowL  = new Array();seatArray_BlockA_RowM  = new Array();seatArray_BlockA_RowN  = new Array();seatArray_BlockA_RowP  = new Array();seatArray_BlockA_RowQ  = new Array();seatArray_BlockB_RowA  = new Array();seatArray_BlockB_RowB  = new Array();seatArray_BlockB_RowC  = new Array();seatArray_BlockB_RowD  = new Array();seatArray_BlockB_RowE  = new Array();seatArray_BlockB_RowF  = new Array();seatArray_BlockB_RowG  = new Array();seatArray_BlockB_RowH  = new Array();seatArray_BlockC_RowA  = new Array();seatArray_BlockC_RowB  = new Array();seatArray_BlockC_RowC  = new Array();seatArray_BlockC_RowD  = new Array();seatArray_BlockC_RowE  = new Array();seatArray_BlockC_RowF  = new Array();seatArray_BlockC_RowG  = new Array();seatArray_BlockC_RowH  = new Array();seatArray_BlockC_RowJ  = new Array();seatArray_BlockC_RowK  = new Array();seatArray_BlockD_RowA  = new Array();

blockArray[0] = new block('Stalls','A','#FFFFFF');
blockArray[1] = new block('Mezzanine','B','#FFFFFF');
blockArray[2] = new block('Balcony','C','#FFFFFF');
blockArray[3] = new block('Side Balconies','D','#FFFFFF');

// Rows
function populateRows(block) {
	switch(block) {case 'A':
	rowArray_BlockA[0] = new row('A','A');
		rowArray_BlockA[1] = new row('B','B');
		rowArray_BlockA[2] = new row('C','C');
		rowArray_BlockA[3] = new row('D','D');
		rowArray_BlockA[4] = new row('E','E');
		rowArray_BlockA[5] = new row('F','F');
		rowArray_BlockA[6] = new row('G','G');
		rowArray_BlockA[7] = new row('H','H');
		rowArray_BlockA[8] = new row('J','J');
		rowArray_BlockA[9] = new row('K','K');
		rowArray_BlockA[10] = new row('L','L');
		rowArray_BlockA[11] = new row('M','M');
		rowArray_BlockA[12] = new row('N','N');
		rowArray_BlockA[13] = new row('P','P');
		rowArray_BlockA[14] = new row('R','Q');
		break
case 'B':
	rowArray_BlockB[0] = new row('A','A');
		rowArray_BlockB[1] = new row('BB','B');
		rowArray_BlockB[2] = new row('CC','C');
		rowArray_BlockB[3] = new row('DD','D');
		rowArray_BlockB[4] = new row('EE','E');
		rowArray_BlockB[5] = new row('FF','F');
		rowArray_BlockB[6] = new row('GG','G');
		rowArray_BlockB[7] = new row('HH','H');
		break
case 'C':
	rowArray_BlockC[0] = new row('A','A');
		rowArray_BlockC[1] = new row('B','B');
		rowArray_BlockC[2] = new row('C','C');
		rowArray_BlockC[3] = new row('D','D');
		rowArray_BlockC[4] = new row('E','E');
		rowArray_BlockC[5] = new row('F','F');
		rowArray_BlockC[6] = new row('G','G');
		rowArray_BlockC[7] = new row('H','H');
		rowArray_BlockC[8] = new row('J','J');
		rowArray_BlockC[9] = new row('K','K');
		break
case 'D':
	rowArray_BlockD[0] = new row('All Seats','A');
		break
}
}
function populateSeatArrays() {
seatArray_BlockA_RowA = ['08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35'];seatArray_BlockA_RowB = ['08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35'];seatArray_BlockA_RowC = ['09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34'];seatArray_BlockA_RowD = ['10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33'];seatArray_BlockA_RowE = ['01','02','03','04','05','06','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40'];seatArray_BlockA_RowF = ['01','02','03','04','05','06','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40'];seatArray_BlockA_RowG = ['01','02','03','04','05','06','07','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41'];seatArray_BlockA_RowH = ['01','02','03','04','05','06','07','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41'];seatArray_BlockA_RowJ = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockA_RowK = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockA_RowL = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockA_RowM = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockA_RowN = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockA_RowP = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockA_RowQ = ['01','02','03','04','05','06','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','35','36','37','38','39','40'];seatArray_BlockB_RowA = ['10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33'];seatArray_BlockB_RowB = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockB_RowC = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockB_RowD = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockB_RowE = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockB_RowF = ['01','02','03','04','05','06','07','08','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockB_RowG = ['01','02','03','04','05','06','07','08','10','11','12','31','32','33','35','36','37','38','39','40','41','42'];seatArray_BlockB_RowH = ['01','02','03','04','05','06','07','08','35','36','37','38','39','40','41','42'];seatArray_BlockC_RowA = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowB = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowC = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowD = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowE = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowF = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowG = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowH = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowJ = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockC_RowK = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38'];seatArray_BlockD_RowA = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40'];}
function setStyle(objId, style, value) {
	document.getElementById(objId).style[style] = value;
}

// Populate Lists
function populateBlockList() {
	document.forms.form.blockSelect.length = 0;
	document.forms.form.blockSelect.options[0] = new Option("Please select","none");
	for(var i=0; i<blockArray.length; i++) {
		document.forms.form.blockSelect.options[i+1] = new Option(blockArray[i].name,blockArray[i].ref);
		document.forms.form.blockSelect.options[i+1].id = 'optBlock'+i;
		setStyle('optBlock'+i,'background',blockArray[i].color);
	}
}

function getRows() {
	clearList('rowSelect');
	clearList('seatSelect');
	enableSelect('rowSelect');
	disableSelect('seatSelect');	
	populateRows(document.forms.form.blockSelect.value);
	arrayToUse = self['rowArray_Block'+document.forms.form.blockSelect.value];
	populate_Block(arrayToUse);
	
	
	//window.status = document.forms.form.blockSelect.value;
}

function getRowsClick(block,row,seat) {
	for(i=0;i<blockArray.length;i++) {
		if(blockArray[i].ref==block) {
			selectedOpt=i;
		}
	}
	document.forms.form.blockSelect.options[selectedOpt+1].selected = true;
	clearList('rowSelect');
	clearList('seatSelect');
	enableSelect('rowSelect');
	enableSelect('seatSelect');
	populateRows(block);
	arrayToUse = self['rowArray_Block'+block];
	populate_Block(arrayToUse);
	
	for(i=0;i<arrayToUse.length;i++) {
		if(arrayToUse[i].ref==row) {
			selectedOpt=i;
		}
	}
	document.forms.form.rowSelect.options[selectedOpt+1].selected = true;	
	
	populateSeatArrays();
	arrayToUse = self['seatArray_Block'+block+'_Row'+row];
	populate_Seats(arrayToUse);	
	for(i=0;i<arrayToUse.length;i++) {
		if(arrayToUse[i]==seat) {
			selectedOpt=i;
		}
	}
	document.forms.form.seatSelect.options[selectedOpt+1].selected = true;		
}

function getSeats() {
	clearList('seatSelect');
	enableSelect('seatSelect');
	populateSeatArrays();
	arrayToUse = self['seatArray_Block'+document.forms.form.blockSelect.value+'_Row'+document.forms.form.rowSelect.value];
	populate_Seats(arrayToUse);
	//window.status = document.forms.form.rowSelect.value;	

}

function populate_Block(blockArray) {
	document.forms.form.rowSelect.options[0] = new Option("Please select","none");
	for(var i=0; i<blockArray.length; i++) {
		document.forms.form.rowSelect.options[i+1] = new Option(blockArray[i].name,blockArray[i].ref);
		document.forms.form.rowSelect.options[i].id = 'optRow'+i;
	}
}

function populate_Seats(rowArray) {
	document.forms.form.seatSelect.options[0] = new Option("Please select","none");
	for(var i=0; i<rowArray.length; i++) {
		seatValue = rowArray[i].substr(0,2);
		document.forms.form.seatSelect.options[i+1] = new Option(rowArray[i],seatValue);
		document.forms.form.seatSelect.options[i].id = 'optSeat'+i;
	}
}	

function clearList(selectControl) {
	var theControl = document.getElementById(selectControl);
	var listLength = theControl.length;
	for(var i=0; i<listLength; i++) {
		theControl.options[0] = null;
	}
	theControl.options[0] = new Option("Please select","none");
}

function disableSelect(selectControl) {
	var theControl = document.getElementById(selectControl);
	theControl.disabled = true;
}
	
function enableSelect(selectControl) {
	var theControl = document.getElementById(selectControl);
	theControl.disabled = false;
}	

function init() {
	populateBlockList();

	clearList('rowSelect');
	clearList('seatSelect');
	document.forms.form.blockSelect.disabled = true;
	document.forms.form.rowSelect.disabled = true;
	document.forms.form.seatSelect.disabled = true;		
}

/////////////////////////////////////////////////
// TT Conrol                                  //
/////////////////////////////////////////////////

var ie4 = (document.all && !document.getElementById);
var ie5 = (document.all && document.getElementById);
var ns6 = (!document.all && document.getElementById);

var g_PrevSel = ""
var g_Dest_Seat = ""

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 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()
{
	element("TNTCtrl").focus();
	// load textures marked as external with their default textures
	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 + '")');
		}
	}
	document.forms.form.blockSelect.disabled = false;
	window.status = "VenueViewer Ready";	
}

function OnClick( obj )
{
	g_Dest_Seat = obj;
	GoToSeat("NA","NA","NA");
}

function OnMouseEnter( obj )
{
	TNTDoCommand('SceneGraph.Objects(' + obj + ').SetDiffuseColor(#FF0000)');
	////window.status = "Mouse Entered: " + obj;	
}

function OnMouseExit( obj )
{
	TNTDoCommand('SceneGraph.Objects(' + obj + ').SetDiffuseColor(#0000FF)');
	////window.status = "Mouse Exited: " + obj;	
}

function OnZoneEnter( zone, physics )
{
	////window.status = "Zone Entered: " + zone + ", by physics object: " + physics;	
}

function OnZoneExit( zone, physics )
{
	//window.status = "Zone Exited: " + zone + ", by physics object: " + physics;	
}

function Restart()
{
	TNTDoCommand('SceneGraph.Physics.Reset()');
	TNTDoCommand('SceneGraph.Objects(*).StopAnimation()');
	TNTDoCommand('SceneGraph.Objects(*).SetFrame(0)');
	TNTDoCommand('CameraCtrl.SetCurrent("Camera01*")');
}

function ChangeCamera()
{
	
	xPos = TNTDoCommand('SceneGraph.Objects("Camera01").GetPositionWorldX()'); 
	yPos = TNTDoCommand('SceneGraph.Objects("Camera01").GetPositionWorldY()'); 
	zPos = TNTDoCommand('SceneGraph.Objects("Camera01").GetPositionWorldZ()');

		
}

function viewSeat() {
	GoToSeat(document.forms.form.blockSelect.value, document.forms.form.rowSelect.value, document.forms.form.seatSelect.value);
}

function GoToSeat(v_Block, v_Row, v_Num){
	
	//cont = document.getElementById('currentSeat');
	//cont.value = 'Block: '+v_Block+' Row: '+v_Row+' Seat: '+v_Num;
	//This enables the previously selected seat after the user has clicked on a new one	
	TNTDoCommand('SceneGraph.Objects("' + g_PrevSel + '").SetEnable(true)');
	g_PrevSel = g_Dest_Seat
	TNTDoCommand('SceneGraph.Objects("' + g_Dest_Seat + '").SetEnable(false)');	//disables selection of the current seat, allowing the user to pick another seat
	
	//Seat String generated from variables unless Not Applicable (NA)
	if (v_Block != "NA"){
		g_Dest_Seat = "REF_" + v_Block + "_" + v_Row + "_" + v_Num
	}
	
	//alert(g_Dest_Seat);
	//This variable represents the position of the camera that moves around the scene
	var Dest_xPos = TNTDoCommand('SceneGraph.Objects(' + g_Dest_Seat + ').GetPositionWorldX()'); 
	var Dest_yPos = TNTDoCommand('SceneGraph.Objects(' + g_Dest_Seat + ').GetPositionWorldY()'); 
	var Dest_zPos = TNTDoCommand('SceneGraph.Objects(' + g_Dest_Seat + ').GetPositionWorldZ()');

	//Sets the position co-ords for the camera to integers
	Dest_xPos = Math.ceil(Dest_xPos)
	Dest_yPos = Math.ceil(Dest_yPos)
	Dest_zPos = Math.ceil(Dest_zPos)
	
	Dest_zPos += 3	//Raises height from middle of seat to 300 units higher

	//Target is constant(Does not move) and on stage
	var Tar_xPos = TNTDoCommand('SceneGraph.Objects("Dummy01").GetPositionWorldX()');
	var Tar_yPos = TNTDoCommand('SceneGraph.Objects("Dummy01").GetPositionWorldY()');
	var Tar_zPos = TNTDoCommand('SceneGraph.Objects("Dummy01").GetPositionWorldZ()');
	
	//Sets the target co-ords for the camera to integers
	Tar_xPos = Math.ceil(Tar_xPos)
	Tar_yPos = Math.ceil(Tar_yPos)
	Tar_zPos = Math.ceil(Tar_zPos)
	
	//defining vector _a_ -- This is the vector that is measured against to find the horizontal position... hence no ak or z vector(2 dimensional)
	var ai = -100
	var aj = 0
	
	//defining vector b	-- This is the vector from the camera to the stage.
	var bi = Tar_xPos - Dest_xPos
	var bj = Tar_yPos - Dest_yPos
	var bk = Tar_zPos - Dest_zPos
	
	//RotHoriz is worked out using a vector Dot product method. 
	var rotHoriz =(((Math.acos(((ai * bi) + (aj * bj)) /  ((Math.sqrt(ai*ai + aj*aj)) * (Math.sqrt(bi*bi + bj*bj))))) / 6.283) * 360)
	//rotVert is worked out based upon the intial vector calculations and the use of trig.
	var rotVert =((Math.atan (bk / Math.sqrt(bi*bi + bj*bj)) / 6.283) * 360) + 90
	
	//This flips the angle for rotHoriz for the other side of the hall.
	if (Dest_yPos < Tar_yPos){
		rotHoriz *= (-1)
	}

	//this sets the position of Camera02 -- Note the user is still viewing through Camera01
	TNTDoCommand('SceneGraph.Objects("Camera02").SetPosition('+Dest_xPos+','+Dest_yPos+','+Dest_zPos+')');
	TNTDoCommand('SceneGraph.Objects("Camera02").SetRotationWorld(,'+rotVert+','+rotHoriz+')');
	//Camera01 now matches to Camera02
	TNTDoCommand('CameraCtrl.Match("Camera02",2000)')
	
	if(g_Dest_Seat != "STAGE_VIEW") {
	theBlock = g_Dest_Seat.substr(4,1);
	theRow = g_Dest_Seat.substr(6,1);
	theSeat = g_Dest_Seat.substr(8,2);
	if(v_Block=="NA") {
		getRowsClick(theBlock,theRow,theSeat);
	}
	//window.status = "Object clicked: " + g_Dest_Seat + " : "+theBlock+"/"+theRow+"/"+theSeat;
	}
}
function viewStage() {
	g_Dest_Seat = "STAGE_VIEW";
	GoToSeat("NA","NA","NA");
	populateBlockArray();	
	populateBlockList();
	setStyle('rowSelect','background','#FFFFFF');
	setStyle('seatSelect','background','#FFFFFF');		
	clearList('rowSelect');
	clearList('seatSelect');
	document.forms.form.rowSelect.disabled = true;
	document.forms.form.seatSelect.disabled = true;		
}
function mapSelect(block,row,seat) {
	GoToSeat(block,row,seat);
	getRowsClick(block,row,seat);
}


