


window.onload = getFile;

	// only gets file once, on window load
	// prepares global variable xsteps once
	// thereafter (as click on steps) no more HTTP request
	// instead just accesses prepared global variable


// global variables

var xhr = false;		// the XMLHttpRequest object

var xsteps;			

	// the parsed XML as a collection of steps
	// xsteps = xml.getElementsByTagName("continuerun");




function msgStatus ( string )		// normal text
{
 document.getElementById("msgs").innerHTML = string;
}


function msgError ( string )		// maybe not error, but at least highlighted
{
 var s = "<font style='background-color:#ffff66'>" + string + "</font>";

 document.getElementById("msgs").innerHTML = s;
}






function getFile() 
{
 	  msgError  ("Downloading and parsing XML. Please wait." );
	makeRequest("test.ajax.wwm.xml");		 
	return false;					// don't load new web page
}




function makeRequest(url) 
{
	if (window.XMLHttpRequest) 	 
	{
		xhr = new XMLHttpRequest();
	}

	if (xhr) 
	{
		xhr.onreadystatechange = gotFile;
		xhr.open("GET", url, true);

		// no caching:

		xhr.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2005 00:00:00 GMT");
		xhr.setRequestHeader( "Cache-Control", "no-cache" );
		xhr.setRequestHeader( "Cache-Control", "must-revalidate" );
		xhr.setRequestHeader( "Cache-Control", "no-store" );
		xhr.setRequestHeader( "Pragma", "no-cache" );
		xhr.setRequestHeader( "Expires", "0" );
	 
		xhr.send(null);
	}
	else 
	{
		msgError  ( "Error: Browser does not support XMLHttpRequest." );
	}
}




function gotFile() 
{
 if ( xhr.readyState == 4 ) 	// xhr finished
 {
  if ( xhr.status == 200 ) 	// HTTP code 200
   extractit();
  else 
   msgError ( "Error: Status " + xhr.status );
 }
}




function extractit()
{
 if ( xhr.responseXML )					 
 {
  if ( xhr.responseXML.documentElement )		 
  {
	  parseit ( xhr.responseXML );	 	 
	  msgStatus ( "&nbsp;" );			// Clear the box of any messages
	  return;
  }
 }
													 
 msgError ( "Error: No XML returned, or your browser does not parse it. "  );
}




	
/*

// Ignore this - old experiments 

	if ( xhr.responseXML.xml )			// IE only
	{
	  parseit ( xhr.responseXML );	 	// structured XML object
	}

	else if ( xhr.responseText )			// other browsers
	{		
//	  alert ( xhr.responseText );	  	// the XML text, not a structured XML object

	var xmlobject = (new DOMParser()).parseFromString( xhr.responseText, "text/xml");

	  parseit ( xmlobject  );	
	}
*/
 




function NodeContents ( n )
// <tag>X</tag>
// <tag value="X"/>
// in either case, return X
{
 if ( n.text )  				// IE
  return n.text;

 else if ( n.textContent )		// non-IE
  return n.textContent;

 else
  return n.attributes.getNamedItem("value").value;
}




function displayStep ( i )
{
 	slist = xsteps[i].getElementsByTagName("score");		// will only be one of them
 	document.getElementById("score").innerHTML = NodeContents ( slist[0] );

   	xlist = xsteps[i].getElementsByTagName("state"); 	  	 
 	document.getElementById("state").innerHTML = NodeContents ( xlist[0] );

   	alist = xsteps[i].getElementsByTagName("action"); 	 
 	document.getElementById("action").innerHTML = NodeContents ( alist[0] );

   	tlist = xsteps[i].getElementsByTagName("timestep"); 	 
 	document.getElementById("timestep").innerHTML = NodeContents ( tlist[0] );
}



function parseit ( xml )
{
 xsteps = xml.getElementsByTagName("continuerun");		// set up global variable

 var s = "  <font face='Arial,Verdana,Sans-serif'  color=navy size=+2 > <b> ";

 for ( var i=0; i < xsteps.length; i++ )		
 // each step i is a link you can click to call displayStep(i)
 // <a without any href=""
 {
  s = s + "<a class=reverseAnchor onClick='displayStep(" + i + ");' 	style='cursor: pointer; cursor: hand;'	>" + i + "</a> &nbsp; ";
 }

 s = s + " </b> </font>  ";
 document.getElementById("timesteplist").innerHTML = s;

 displayStep ( xsteps.length - 1 );
 //	displayStep ( 0 );
}





