// global vars
var xmlPSADoc; //, oldXMLDoc;	// xml response
var reqpsa;	// xml request
var psa_system;
var psa_interval;

function load_psas(system)
{	
	onLoadPSA(system);		
}

function remove_psas()
{		
	clearInterval(psa_interval);
	getPSAEmergency();
	psa_interval = setInterval("getPSAEmergency();", 5000);
}

function onLoadPSA(system)
{
	psa_system = system;
	
	getPSA(system);	
	clearInterval(psa_interval);
	psa_interval = setInterval("getPSA();", 5000);
}

function getPSA(system)
{
	if(system == null){
		system = psa_system;
	}	
		
	var time = parseInt((new Date()).getTime() / 1000);
	loadXMLDocJson("../systems/" + system + "/psa_feed.js?time=" + time, "status");
	
	return;
}


function getPSAEmergency(system)
{
	if(system == null){
		system = psa_system;
	}	
	
	var time = parseInt((new Date()).getTime() / 1000);
	loadXMLDocJson("../systems/" + system + "/psa_feed.js?time=" + time, "emergency");
	
	return;
}


function reqJson(url)
{
	var jsonDoc;
	if(window.XMLHttpRequest)
	{
		jsonDoc = new window.XMLHttpRequest();
		jsonDoc.open("GET", url, false);
		jsonDoc.send("");
		return jsonDoc.responseText;
	}
	else if(ActiveXObject("Microsoft.XMLDOM"))
	{
		jsonDoc = new ActiveXObject("Microsoft.XMLDOM");
		jsonDoc.open("POST", url, false);
		jsonDoc.async = false;
		jsonDoc.load(url);
		return jsonDoc;
	}
	alert("Error loading document");
	return null;
}


function loadXMLDocJson(url, type)
{
	var resp = reqJson(url);
	if(resp != null)
	{
		var obj = eval('(' + resp + ')');
		var statusMessageCount = obj.statuscount;
		var emergencyMessageCount = obj.emergencycount;
			
		var statusMessageList = new Array();
		var statusColorList = new Array();
		
		var emergencyMessageList = new Array();
		var emergencyColorList = new Array();
		
		psaContainer = document.createElement('DIV');		
		document.getElementById("psaContainer").innerHTML = psaContainer;
		
		if(emergencyMessageCount > 0)
		{
			var emergencyHeader = document.createElement("h1");
			emergencyHeader.innerHTML = "EMERGENCY UPDATES:";
			psaContainer.appendChild(emergencyHeader);
			
			for(var i = 0; i < emergencyMessageCount; i++)
			{
				var message = obj.emergencyMessages[i];
				if(message.visibility)
				{
					emergencyMessageList[i] = message.body;
					emergencyColorList[i] = message.text_color;
				}
			}
		}		
		
		var psaListE = document.createElement("ul");
		psaListE.setAttribute("class", "psaList");		
		for(i = 0; i < emergencyMessageList.length; i++)
		{
			messageListText = document.createTextNode(emergencyMessageList[i]);
			var new_message = document.createElement("font");
			new_message.color = emergencyColorList[i];
			new_message.appendChild(messageListText);

			psaListLI = document.createElement("li");
			psaListLI.appendChild(new_message);
			psaListE.appendChild(psaListLI);
		}
		
		if(emergencyMessageList.length)
		{
			psaContainer.appendChild(psaListE);
		}
		
		if(type == "status")
		{
			// populate the list of psas
			if(statusMessageCount > 0)
			{	
				var statusHeader = document.createElement("h1");
				statusHeader.innerHTML = "Status Updates";
				psaContainer.appendChild(statusHeader);	
			
				for(var i = 0; i < statusMessageCount; i++)
				{
					var message = obj.statusMessages[i];
					if(message.visibility)
					{
						statusMessageList[i] = message.body;
						statusColorList[i] = message.text_color;
					}
				}	
			}
			
			var psaListS = document.createElement("ul");
			psaListS.setAttribute("class", "psaList");		
			for(i = 0; i < statusMessageList.length; i++)
			{
				messageListText = document.createTextNode(statusMessageList[i]);
				var new_message = document.createElement("font");
				new_message.color = statusMessageList[i];
				new_message.appendChild(messageListText);

				psaListLI = document.createElement("li");
				psaListLI.appendChild(new_message);
				psaListS.appendChild(psaListLI);
			}
		
			if(statusMessageList.length)
			{
				psaContainer.appendChild(psaListS);
			}	
		}
		
		if(statusMessageCount > 0)
		{
			if(type == "status")
			{
				document.getElementById('psaContainer').innerHTML = psaContainer.innerHTML + '<a href = "javascript:take_down_psas()">Hide Status Updates</a>';
			}
			else
			{
				document.getElementById('psaContainer').innerHTML = psaContainer.innerHTML + '<a href = "javascript:set_up_psas()">Show Status Updates</a>';
			}
		}
		else
		{
			if(emergencyMessageCount == 0)
			{
				document.getElementById('psaContainer').innerHTML = "";	
			}	
		}
	}
}


function loadXMLDocPSA(url) 
{
// branch for native XMLHttpRequest object
	if (window.XMLHttpRequest)
	{
		reqpsa = new XMLHttpRequest();
		reqpsa.onreadystatechange = processPSAXML;
		reqpsa.open("GET", url, true);
		//req.setRequestHeader("If-Modified-Since","Sat, 1 Jan 2000");
		reqpsa.setRequestHeader("Cache-Control", "no-cache");
		reqpsa.send(null);
	// branch for IE/Windows ActiveX version
	}
	else if (window.ActiveXObject)
	{
		isIE = true;
		reqpsa = new ActiveXObject("Microsoft.XMLHTTP");
		if (reqpsa) {
		reqpsa.onreadystatechange = processPSAXML;
		reqpsa.open("GET", url, true);
		reqpsa.setRequestHeader("If-Modified-Since","Sat, 1 Jan 2000");
		reqpsa.send();
		}
	}
}
var psaContainer;

function processPSAXML()
{	// only if req shows "complete"
	//alert(reqpsa.readyState + " " + reqpsa.status);
	if (reqpsa.readyState == 4)
	{
		// only if "OK"
		if (reqpsa.status == 200)
		{

			xmlPSADoc = reqpsa.responseXML;
			
				// only if the XML document is well formed
				if(xmlPSADoc.documentElement)
				{
					message = xmlPSADoc.documentElement.getElementsByTagName("message");
					var messagecount = xmlPSADoc.documentElement.getElementsByTagName("messagecount")[0].childNodes[0].nodeValue;

					// make overall container (for IE)
					psaContainer = document.createElement('DIV');
					
					if (document.getElementById("headContainer").hasChildNodes())
					{
						//document.removeChildNodes(document.getElementById("headContainer"));
					}
					
					buildPSAElement(message, messagecount);
					
				}
				
		}
		else
		{
			//alert("There was a problem retrieving the XML data:\n" + req.statusText);
		}
	}
	else
	{
		//alert("readyState is " + req.readyState + ".");
	}
	return;
}

function buildPSAElement(message, messageCount)
{
	if(messageCount == 0)
	{
		//var noMessageText = document.createTextNode("No messages at this time.");
		//var noMessage = document.createElement("p");
		//noMessage.appendChild(noMessageText);
		//psaContainer.appendChild(noMessage);
	}
	else
	{
		// list operating routes and non-operating routes
		// routeList is all routes we deal with
		// var routeList = ["Commuter Northbound", "Commuter Southbound", "Northwood", "Northwood Express", "Bursley-Baits", "Bursley Express"];
		var messageList = new Array();
		var colorList = new Array();
		// populate the list of running routes
		for(i = 0; i < messageCount; i++)
		{
			messageList[i] = message[i].getElementsByTagName("body")[0].childNodes[0].nodeValue;
			colorList[i] = message[i].getElementsByTagName("text_color")[0].childNodes[0].nodeValue;
		}
		
		//psaListsDiv = document.createElement("div");
		//psaListsDiv.setAttribute("class", "psaList");
		
		// Tell users what routes are NOT running
		//var psaP = document.createElement("p");
		//psaP.setAttribute("class", "psaList");

		//psaText = "These are the following PSAs: "
		//psaTextTextNode = document.createTextNode(psaText);
		//psaP.appendChild(psaTextTextNode);
		var psaListUL = document.createElement("ul");
		psaListUL.setAttribute("class", "psaList");
		for(i = 0; i < messageList.length; i++)
		{
			
					
			messageListText = document.createTextNode(messageList[i]);
			var new_message = document.createElement("font");
			new_message.color = colorList[i];
			new_message.appendChild(messageListText);

			/*if(messageList.length == 1)
			{
				messageListText = document.createTextNode(messageList[i]);
			}
			else if(i != messageList.length - 1)
			{
				messageListText = document.createTextNode(messageList[i] + ", ");
			}
			else
			{
				messageListText = document.createTextNode("and " + messageList[i]);
			}*/
			psaListLI = document.createElement("li");
			psaListLI.appendChild(new_message);
			psaListUL.appendChild(psaListLI);
			//psaP.appendChild(messageListText);
		}
		

		//psaP.appendChild(psaListUL);
		//psaListsDiv.appendChild(psaP);
		
		if(messageList.length)
		{
			psaContainer.appendChild(psaListUL);
		}
		
	}
	document.getElementById('psaContainer').innerHTML = psaContainer.innerHTML + '<a href = "javascript:take_down_psas()">Remove Announcements</a>';;
}


