/******************************************************************************
	Title 		:		Atmosphere Brahms interface
	Filename	:		AtmosphereBrahms.js
	Programmer 	:		Peter Newman
	Creation Date	:	5th March 2003
	Version 	:		Release 3

	DM3D Studio's Ply Ltd.
	P.O. Box 278
	Maffra 3860, Victoria, Australia
	http://www.dm3ds.com
	enquiry@dm3ds.com

History:	Release 1	ISS PSA
			Release 2	ISS PSA & Astronaut
			Release 3	Added ability to use TEXTAREA textBrahms instead of 
						window.
			Release 4	Now sends a Brahms string to the server, rather then
						multiple variables
*******************************************************************************/


if( typeof(window.oHTTP) =='undefined' ) 
	window.oHTTP = new ActiveXObject('Microsoft.XMLHTTP');

if( typeof(window.funcOnBrahmsStringSent) != 'function' ) {
	window.brahmsPSAArea="projects.issvre.USLab.center";
	window.brahmsPSASearch = -1;
	// This variable indicates what to do next time the PSA is idle
	window.brahmsPSAIdleState = 0;	// 0 = Do nothing
									// 1 = Move to new loaction
									// 2 = Do search
									// 3 = Closer Loook
									// 4 = Recover from path failure
									// 5 = Return (to USLab)
									// 6 = Give report
									// 7 = Move to power point
									// 8 = Recharge

	window.brahmsAstroArea="projects.issvre.Bar0";
	window.brahmsAstro2Area="projects.issvre.USLab.Node2.left";
	window.brahmsAstro3Area="projects.issvre.USLab.Node2.right";
	aDests = [	"projects.issvre.USLab.center",
				"projects.issvre.Node2.center",
				"projects.issvre.CentrifugeAccomodation.center",
				"projects.issvre.ESALab.center",
				"projects.issvre.NASDALab.center",
				"projects.issvre.NASDASupport.center",
				"projects.issvre.USLab.center",
				"projects.issvre.Node1.center",
				"projects.issvre.Node3.center",
				"projects.issvre.HabModule.center",
				"projects.issvre.Cargo.Node1",
				"projects.issvre.Storage.center",
				"projects.issvre.Cargo.center",
				"projects.issvre.Cargo.Docking",
				"projects.issvre.Docking.center",
				"projects.issvre.Service.center"];

	window.funcOnBrahmsStringSent=function(){ 
		if(window.oHTTP.readystate==4) { 
/*			if( window.oHTTP.status == 200 ) {
				stringResponse = window.oHTTP.responsetext;
			} else */{
				var type, time, source, property, value, sBrahms, cline;
				var stringResponse = "\n";
				sBrahms = window.brahmsString/*.substr( window.brahmsString.search(/string=/)+7 )*/;
				cline=sBrahms.split("|");
				type=cline[1];
				time=cline[2];
				source=cline[3];
				property=cline[4];
				value=cline[5];
				if( source == "projects.issvre.PSA" )
				{
					if( property=="Idle" && value=="true" )
					{
BrahmsPSAIdleSwitch:	switch(window.brahmsPSAIdleState) {
						case 1:	// Move to new area
							if( ++window.brahmsPSASearch == aDests.length )
								window.brahmsPSASearch = 0;
							nextArea = aDests[window.brahmsPSASearch];
//							if( nextArea != window.brahmsPSAArea ) {
								stringResponse =	 "activity|move|" + (Number(time)+2) + "|-1"; 
								stringResponse +=	 "|" + source + "|Walk||" +window.brahmsPSAArea+ "|" + nextArea + "\n";
								window.brahmsPSAArea = nextArea;
//							}

							window.brahmsPSAIdleState = 2;	// Set so it will do the search next

							getObj("textMisc").innerText = time + " " +source+ " Moving to '" +nextArea+ "'\n" + getObj("textMisc").innerText;
							break;
						case 2:	// Search area
							stringResponse =	"interface|setDetectable|0|" +source+ "|Search|true\n";
							stringResponse +=	"activity|primitive|0|-1|" +source+ "|Search|\n";
							stringResponse +=	"interface|setDetectable|0|" +source+ "|Search|false\n";

							window.brahmsPSAIdleState = 1;	// Set so it will move next
							getObj("textMisc").innerText = time + " " +source+ " Performing Search\n" + getObj("textMisc").innerText;
							break;
						case 3:	// Look closer
//							window.brahmsPSASearching = false;
							getObj("togglePSASearchFound").innerHTML='<img src="skin/skin_led1.jpg" align=left>Search Found';
							stringResponse =	"interface|setSettable|0|projects.issvre.PSA|Watching|projects.issvre." +window.brahmsSearchFor+ "\n";
							stringResponse +=	"activity|move|0|-1|" + source + "|Walk||" +window.brahmsPSAArea+ "|" +source+ ".searchLookAt\n";
							getObj("PSAWatching").innerText = window.brahmsSearchFor;

							window.brahmsPSAIdleState = 5;	// Return after this
							getObj("textMisc").innerText = time + " " +source+ " Inspecting Tool\n" + getObj("textMisc").innerText;
							break;
						case 4:	// Recover from PathFailure
							stringResponse = "activity|move|0|-1|" + source + "|Walk||" +source+ ".PathFailure|" +window.brahmsPSAArea+ "\n";
							window.brahmsPSAIdleState = window.brahmsPSAIdleStatePathFailure;
							getObj("textMisc").innerText = time + " " +source+ " Requesting new Path\n" + getObj("textMisc").innerText;
							break;
						case 5:	// Return
							stringResponse =	"activity|move|" + (Number(time)+4) + "|-1|" + source + "|Walk||" +source+ ".searchLookAt|projects.issvre.USLab.center\n";
//							stringResponse +=	"activity|move|0|-1|" + source + "|Walk||" +window.brahmsPSAArea+ "|projects.issvre.USLab.center\n";
							window.brahmsPSAArea = "projects.issvre.USLab.center";
							window.brahmsPSASearch = -1;
//
							window.brahmsPSAIdleState = 6;	// Report after this
							getObj("textMisc").innerText = time + " " +source+ " Returning to report\n" + getObj("textMisc").innerText;
							break;
						case 6:	// Report
							stringResponse =	"activity|primitive|0|-1|projects.issvre.PSA|Report|\n";
							stringResponse +=	"interface|setSettable|0|projects.issvre.PSA|Watching|projects.issvre.Astro\n";
							getObj('PSAWatching').innerText='Astro';
							getObj("tglPSASearching").innerHTML="<img src=\"skin/skin_led0.jpg\" align=left>PSA Search";
							getObj("togglePSASearchFound").innerHTML='<img src="skin/skin_led0.jpg" align=left>Search Found';
							window.brahmsPSAIdleState = 0;	// Do nothing after this
							getObj("textMisc").innerText = time + " " +source+ " Reporting Search\n" + getObj("textMisc").innerText;
							break;
						case 7:	// Move to power point
							stringResponse =	 "activity|move|" + (Number(time)+2) + "|-1"; 
							stringResponse +=	 "|" + source + "|Walk||" +source+ ".PowerLevel|projects.issvre.power1.Use\n";
							window.brahmsPSAIdleState = 8;
							getObj("textMisc").innerText = time + " " +source+ " Moving to recharge\n" + getObj("textMisc").innerText;
							break;
						case 8:	// Recharge
							stringResponse = "activity|primitive|0|-1|" +source+ "|Recharge||";
							window.brahmsPSAIdleState = 9;
							getObj("textMisc").innerText = time + " " +source+ " Recharging\n" + getObj("textMisc").innerText;
							break;
						case 9:	// Return to pre-recharge location
							window.brahmsPSAArea = window.brahmsPSAAreaPowerAlert;
							stringResponse =	 "activity|move|" + (Number(time)+2) + "|-1"; 
							stringResponse +=	 "|" + source + "|Walk||projects.issvre.power1.Use|" +window.brahmsPSAArea+ "\n";
							if( window.brahmsPSAIdleStatePowerAlert == 0 )
								stringResponse += "interface|setSettable|0|" +source+ "|Watching|projects.issvre."+getObj("PSAWatching").innerText.replace(/[ \n\t]/, "")+"\n";
							else
								stringResponse += "interface|setSettable|0|" +source+ "|Watching|\n";
								stringResponse += "interface|setSettable|0|" +source+ "|SearchFor|projects.issvre."+getObj("PSASearchFor").innerText.replace(/[ \n\t]/, "")+"\n";
							getObj("textMisc").innerText = time + " " +source+ " Returning to '" +window.brahmsPSAArea+ "'\n" + getObj("textMisc").innerText;
							window.brahmsPSAIdleState = window.brahmsPSAIdleStatePowerAlert;
							break;
						case 0:	// Nothing
						default:
							getObj("textMisc").innerText = time + " " +source+ " Idling (Station Keeping)\n" + getObj("textMisc").innerText;
							break;
						}
						getObj("togglePSAIdle").innerHTML='<img src="skin/skin_led1.jpg" align=left>'+getObj("togglePSAIdle").innerText;
					} else if( property=="Idle" && value=="false" ) {
						getObj("togglePSAIdle").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("togglePSAIdle").innerText;

					} else if( property=="Search" && value=="true" ) {
						window.brahmsPSAIdleState=3;
					} else if( property=="PathFailure" ) {
						window.brahmsPSAIdleStatePathFailure = window.brahmsPSAIdleState;
						window.brahmsPSAIdleState = 4;
					} else if( property=="PowerLevel" ) {
						var iValue = Number(value);
						var sHTML = "";
						switch( iValue ) {
						case 0:
							sHTML = '<img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg">';
							break;
						case 1:
							if( !window.brahmsPSAPowerAlert ) {
								window.brahmsPSAAreaPowerAlert = window.brahmsPSAArea;
								window.brahmsPSAArea = "projects.issvre.power1.Use"
								window.brahmsPSAIdleStatePowerAlert = window.brahmsPSAIdleState;
								window.brahmsPSAIdleState = 7;
								stringResponse = "interface|setSettable|0|" +source+ "|Watching|projects.issvre.power1\n";	// Needs to be here to trip the Idle detectable
								window.brahmsPSAPowerAlert = true;
							}
							sHTML = '<img src="skin/skin_led1.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg">';
							break;
						case 2:
							window.brahmsPSAPowerAlert = false;
							sHTML = '<img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg">';
							break;
						case 3:
							sHTML = '<img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led0.jpg"><img src="skin/skin_led0.jpg">';
							break;
						case 4:
							sHTML = '<img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led0.jpg">';
							break;
						case 5:
							sHTML = '<img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg"><img src="skin/skin_led1.jpg">';
							break;
						}
						if( sHTML != "" )
							getObj("buttonPSAPowerLevel").innerHTML = sHTML;
					}

				} else if( source == "projects.issvre.Astro" )
				{
					if( property=="Idle" && value=="true" ) {
						do
						{
							switch( Math.round((Math.random() * 2) - 0.5) )
							{
							case 0:
								nextArea = "projects.issvre.Bar0";
								window.brahmsAstroFacing = "USLab.laptop2";
								break;
							case 1:
								nextArea = "projects.issvre.Bar1";
								window.brahmsAstroFacing = "USLab.laptop1";
								break;
							}
						} while (window.brahmsAstroArea == nextArea );
						var iDelay = 10;
						stringResponse =	"interface|setDetectable|" +(Number(time)+iDelay)+ "|" +source+ "|LOS.PSA|false\n";
						stringResponse +=	"activity|move|" + (Number(time)+iDelay+1) + "|-1"; 
						stringResponse +=	"|" + source + "|Walk||" + window.brahmsAstroArea + "|" + nextArea + "\n";
						window.brahmsAstroArea = nextArea;
						stringResponse +=	"interface|setSettable|-1|" +source+ "|Watching|projects.issvre." +window.brahmsAstroFacing+ "\n";
						stringResponse +=	"interface|setDetectable|0|" +source+ "|LOS.PSA|active\n";
						getObj("AstroWatching").innerText = window.brahmsAstroFacing;
						getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
						getObj("toggleAstroIdle").innerHTML='<img src="skin/skin_led1.jpg" align=left>'+getObj("toggleAstroIdle").innerText;
					} else if( property == "Idle" ) {
						getObj("toggleAstroIdle").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroIdle").innerText;
					} else if( property == "LOS.PSA" )
					{
						if( value=="true" ) {
							stringResponse =	"interface|setSettable|-1|projects.issvre.Astro|Watching|projects.issvre.PSA\n";
							getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led1.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
							getObj("AstroWatching").innerText = "PSA";
						} else {
							stringResponse =	"interface|setSettable|-1|projects.issvre.Astro|Watching|projects.issvre." +window.brahmsAstroFacing+ "\n";
							getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
							getObj("AstroWatching").innerText = window.brahmsAstroFacing;
						}
					}
				} else if( source == "projects.issvre.Astro2" )
				{
					if( property=="Idle" && value=="true" ) {
						do
						{
							switch( Math.round((Math.random() * 7) - 0.5) )
							{
							case 0:
								nextArea = "projects.issvre.USLab.Node2.left";
								window.brahmsAstro2Facing = "USLab.laptop2";
								break;
							case 1:
								nextArea = "projects.issvre.USLab.Node2.right";
								window.brahmsAstro2Facing = "USLab.laptop1";
								break;
							case 2:
								nextArea = "projects.issvre.NASDALab.Node2.left";
								window.brahmsAstro2Facing = "";
								break;
							case 3:
								nextArea = "projects.issvre.NASDALab.Node2.right";
								window.brahmsAstro2Facing = "";
								break;
							case 4:
								nextArea = "projects.issvre.NASDALab.NASDASupport.right";
								window.brahmsAstro2Facing = "";
								break;
							case 5:
								nextArea = "projects.issvre.CentrifugeAccomodation.Node2.right";
								window.brahmsAstro2Facing = "";
								break;
							case 6:
								nextArea = "projects.issvre.CentrifugeAccomodation.locker1";
								window.brahmsAstro2Facing = "";
								break;
							}
						} while (window.brahmsAstro2Area == nextArea );
						var iDelay = 10;
						stringResponse =	"interface|setDetectable|" +(Number(time)+iDelay)+ "|" +source+ "|LOS.PSA|false\n";
						stringResponse +=	"activity|move|" + (Number(time)+iDelay+1) + "|-1"; 
						stringResponse +=	"|" + source + "|Walk||" + window.brahmsAstro2Area + "|" + nextArea + "\n";
						window.brahmsAstro2Area = nextArea;
						stringResponse +=	"interface|setSettable|-1|" +source+ "|Watching|projects.issvre." +window.brahmsAstro2Facing+ "\n";
						stringResponse +=	"interface|setDetectable|0|" +source+ "|LOS.PSA|active\n";
//						getObj("AstroWatching").innerText = window.brahmsAstroFacing;
//						getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
//						getObj("toggleAstroIdle").innerHTML='<img src="skin/skin_led1.jpg" align=left>'+getObj("toggleAstroIdle").innerText;
					} else if( property == "Idle" ) {
//						getObj("toggleAstroIdle").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroIdle").innerText;
					} else if( property == "LOS.PSA" )
					{
						if( value=="true" ) {
							stringResponse =	"interface|setSettable|-1|" +source+ "|Watching|projects.issvre.PSA\n";
//							getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led1.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
//							getObj("AstroWatching").innerText = "PSA";
						} else {
							stringResponse =	"interface|setSettable|-1|" +source+ "|Watching|projects.issvre." +window.brahmsAstro2Facing+ "\n";
//							getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
//							getObj("AstroWatching").innerText = window.brahmsAstroFacing;
						}
					}
				} else if( source == "projects.issvre.Astro3" )
				{
					if( property=="Idle" && value=="true" ) {
						do
						{
							switch( Math.round((Math.random() * 7) - 0.5) )
							{
							case 0:
								nextArea = "projects.issvre.USLab.Node2.left";
								window.brahmsAstro3Facing = "Laptop2";
								break;
							case 1:
								nextArea = "projects.issvre.USLab.Node2.right";
								window.brahmsAstro3Facing = "Laptop1";
								break;
							case 2:
								nextArea = "projects.issvre.NASDALab.Node2.left";
								window.brahmsAstro3Facing = "";
								break;
							case 3:
								nextArea = "projects.issvre.NASDALab.Node2.right";
								window.brahmsAstro3Facing = "";
								break;
							case 4:
								nextArea = "projects.issvre.NASDALab.NASDASupport.right";
								window.brahmsAstro3Facing = "";
								break;
							case 5:
								nextArea = "projects.issvre.CentrifugeAccomodation.Node2.right";
								window.brahmsAstro3Facing = "";
								break;
							case 6:
								nextArea = "projects.issvre.CentrifugeAccomodation.locker1";
								window.brahmsAstro3Facing = "";
								break;
							}
						} while (window.brahmsAstro3Area == nextArea );
						var iDelay = 10;
						stringResponse =	"interface|setDetectable|" +(Number(time)+iDelay)+ "|" +source+ "|LOS.PSA|false\n";
						stringResponse +=	"activity|move|" + (Number(time)+iDelay+1) + "|-1"; 
						stringResponse +=	"|" + source + "|Walk||" + window.brahmsAstro3Area + "|" + nextArea + "\n";
						window.brahmsAstro3Area = nextArea;
						stringResponse +=	"interface|setSettable|-1|" +source+ "|Watching|projects.issvre." +window.brahmsAstro3Facing+ "\n";
						stringResponse +=	"interface|setDetectable|0|" +source+ "|LOS.PSA|active\n";
//						getObj("AstroWatching").innerText = window.brahmsAstroFacing;
//						getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
//						getObj("toggleAstroIdle").innerHTML='<img src="skin/skin_led1.jpg" align=left>'+getObj("toggleAstroIdle").innerText;
					} else if( property == "Idle" ) {
//						getObj("toggleAstroIdle").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroIdle").innerText;
					} else if( property == "LOS.PSA" )
					{
						if( value=="true" ) {
							stringResponse =	"interface|setSettable|-1|" +source+ "|Watching|projects.issvre.PSA\n";
//							getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led1.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
//							getObj("AstroWatching").innerText = "PSA";
						} else {
							stringResponse =	"interface|setSettable|-1|" +source+ "|Watching|projects.issvre." +window.brahmsAstro3Facing+ "\n";
//							getObj("toggleAstroLOSPSA").innerHTML='<img src="skin/skin_led0.jpg" align=left>'+getObj("toggleAstroLOSPSA").innerText;
//							getObj("AstroWatching").innerText = window.brahmsAstroFacing;
						}
					}
				}
			};
			window.oHTTP.abort();
			arrayLines=stringResponse.split('\n');
			var stringJS="";
			for( x in arrayLines) 
				stringJS+='ctrl.handleLine("'+arrayLines[x]+'");';
			vmp1.sendJS(stringJS);
			try {
				if( typeof(getObj('textBrahms')) == 'undefined' ) {
					if( typeof(window.wndBrahms) == 'undefined' ) {
						window.wndBrahms = window.open('','wndBrahms','height=200,resizable,scrollbars');
						window.wndBrahms.document.open('text/plain');
						window.wndBrahms.document.writeln(new Date());
					};
					window.wndBrahms.document.write('<');
					window.wndBrahms.document.writeln(stringResponse);
				} else {
					window.textBrahms = getObj('textBrahms');
					window.textBrahms.value = stringResponse +window.textBrahms.value;
					window.textBrahms.value = '<' + window.textBrahms.value;
				};
			} catch (e) {};
		};
	};
};

if( typeof(window.sendBrahmsString) != 'function' )
	window.sendBrahmsString=function( sBrahms ) {
		if (window.oHTTP.readystate == 0 ) {
			try {
				if( typeof(getObj('textBrahms')) == 'undefined' ) {
					if( typeof(window.wndBrahms) == 'undefined' ) {
						window.wndBrahms = window.open('','wndBrahms','height=200,resizable,scrollbars');
						window.wndBrahms.document.open('text/plain');
						window.wndBrahms.document.writeln(new Date());
					};
					window.wndBrahms.document.write('>');
					window.wndBrahms.document.writeln(sBrahms);
				} else {
					window.textBrahms = getObj('textBrahms');
					window.textBrahms.value = sBrahms +"\n" + window.textBrahms.value;
					window.textBrahms.value = '>' + window.textBrahms.value;
				};
			} catch (e) {};

			window.brahmsString = sBrahms;

			window.oHTTP.onreadystatechange=window.funcOnBrahmsStringSent;
			window.oHTTP.open('GET', 'brahms.php?string=' + sBrahms, true);
//			window.oHTTP.open('GET', 'http://192.168.0.1/content/atmosphere/2003/nasa/astro/alert.php?time=' + time + '&event=' + event + '&area=' + area + '&agent=' + agent, true);
			window.oHTTP.send();
		} else {
			window.setTimeout('window.sendBrahmsString( "' +sBrahms+'" );', 10);
		};
	}

