// ---------------------------- //
//----------- GLOBALS --------- //
// ---------------------------- //
var updateInterval 		= 60 * 1000; 		// msec till page gets updated normally
var updateErrorInterval = 30 * 1000;		// msec till error page gets updated
var errorMessage = "<p>Unable to retrieve an update on system status details. The server may be under heavy load and experiencing delays on updating the status. This page will attempt to get the latest update every 30 seconds.</p>";
var claimDetails 		= new Array();
var xmlSystemTestValues = new Array();
var xmlSystemTestTagNames = new Array("resources", "JDBC", "CORBA", "MQ", "webMethodsBroker", "CICSwebMethods", "MainframeDB2webMethods", "StateDB2webMethods", "HTTP");

// Common HTML for service tables
var resultHTMLStartString =   "<table width=\"721px\">\n"
							+ "	<tbody>\n"
							+ "		<tr>\n"
							+ "			<th>Status</th>\n"
							+ "			<th width=\"33%\">Service Name</th>\n"
							+ "			<th>Status</th>\n"
							+ "			<th width=\"33%\">Service Name</th>\n"
							+ "			<th>Status</th>\n"
							+ "			<th width=\"33%\">Service Name</th>\n"
							+ "		</tr>\n		<tr>\n";
// Common HTML for fund tables
var healthFundHTMLStartString =   "<table width=\"721px\">\n"
							+ "	<tbody>\n"
							+ "		<tr>\n"
							+ "			<th>Status</th>\n"
							+ "			<th width=\"33%\">Health Fund Name</th>\n"
							+ "			<th>Status</th>\n"
							+ "			<th width=\"33%\">Health Fund Name</th>\n"
							+ "			<th>Status</th>\n"
							+ "			<th width=\"33%\">Health Fund Name</th>\n"
							+ "		</tr>\n		<tr>\n";
var resultHTMLEndString = "		</tr>\n"
						+ "	</tbody>\n"
						+ "</table>\n";					
var statusUpHTML = "			<td align=\"center\"><a href=\"#up\">\n" 
				 + "			    <img height=16 alt=\"service is available\" src=\"common/images/up.gif\" width=19></a></td>\n"
				 + "			<td>";
var statusDownHTML = "			<td align=\"center\"><a href=\"#down\">\n" 
				   + "			    <img height=16 alt=\"service is not available\" src=\"common/images/down.gif\" width=19></a></td>\n"
				   + "			<td>";							
var statusMaintenaceHTML = "			<td align=\"center\"><a href=\"#maintenance\">\n" 
					     + "			    <img height=16 alt=\"service is not available due to maintenance\" src=\"common/images/maintenance.gif\" width=19></a></td>\n"
				   		 + "			<td>";	
var statusInvestigationHTML =  "			<td align=\"center\"><a href=\"#investigation\">\n" 
						     + "			    <img height=16 alt=\"service status is not unavailable\" src=\"common/images/investigation.gif\" width=19></a></td>\n"
						     + "			<td>";		   							
claimDetails[claimDetails.length] = new addClaimDetails("GEN", "ACIR General", "2,4", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("HST", "ACIR History", "2,4", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("NDD", "ACIR Next Due Date", "2,4", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("DBS", "Bulk Bill Claim", "2,4", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("DPR", "Bulk Bill Processing Report", "2", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("DPY", "Bulk Bill Payment Report", "2", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("BIR", "Bulk Bill Integrated Report", "2", "Release 6", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("PCI", "Patient Claim (Interactive)", "2,3", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("SDD", "Patient Claim Same Day Delete", "2,3", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("PCS", "Patient Claim (Store & Forward)", "2", "Release 2", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("DVA", "DVA Claim - Classic", "1,2,4", "Release 2", "DVA");
claimDetails[claimDetails.length] = new addClaimDetails("DVR", "DVA Processing Report ", "2", "Release 2", "DVA");
claimDetails[claimDetails.length] = new addClaimDetails("DVY", "DVA Payment Report", "2", "Release 2", "DVA");
claimDetails[claimDetails.length] = new addClaimDetails("PVM", "Online Patient Verification", "2,6", "Release 3", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("IMC", "In-Patient Medical Claiming", "2,5,6,7,8,9", "Release 3", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("TW", "Two Way", "2,5,7,8,9", "Release 5", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("IHC", "In-Hospital Claiming", "2,5,8,9", "Release 6", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("ERA", "Eclipse Remittance Advice", "2,5,9", "Release 4", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("STS", "Status Report", "2,5,7", "Release 3", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("RTV", "Retrieve Report", "2", "Release 3", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("GPR", "Get Participants Report", "2", "Release 3", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("DVA", "DVA Claim - Paperless", "1,2,4", "Release 5", "DVA");
claimDetails[claimDetails.length] = new addClaimDetails("EPV", "Enterprise Patient Verification", "2,5,6,7,8", "Release 5", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("EPV", "Enterprise Patient Verification", "2,5,6,7,8,9", "Release 5", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("EVV", "Enterprise Veteran Verification", "2,5,6,7,8", "Release 5", "DVA");
claimDetails[claimDetails.length] = new addClaimDetails("OVV", "Online Veteran Verification", "2,3,5,6,7,8", "Release 5", "DVA");
claimDetails[claimDetails.length] = new addClaimDetails("IHC", "DVA In-Hospital Claiming", "2,5,7,8,9", "Release 6", "DVA");
claimDetails[claimDetails.length] = new addClaimDetails("VAA", "DVA Allied Health ", "1,2,4", "Release 6", "DVA");
claimDetails[claimDetails.length] = new addClaimDetails("PVF", "Online Patient Verification", "2,5,7,9", "Release 3", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("ECF", "Online Eligibility Check", "2,5,6,7,8,9", "Release 5", "ECLIPSE");
claimDetails[claimDetails.length] = new addClaimDetails("STS", "Status Report<br \>Enterprise Patient Verification", "2,5,7", "Release 3", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("RTV", "Retrieve Report<br \>Enterprise Patient Verification", "2", "Release 3", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("ECM", "Online Eligibility Check", "2,5,6,7,8", "Release 5", "Medicare");
claimDetails[claimDetails.length] = new addClaimDetails("OVS", "Overseas Medical Claiming", "2,5,7,8,9", "Release 6", "ECLIPSE");
var url = "xml";

var  XML_APP_NAMESPACE = "ApplicationStatus";
var  XML_APP_NAME = "name";
var  XML_APP_HOSTNAME = "hostname";
var  XML_APP_VERSION = "version";
var  XML_APP_LASTUPDATED = "lastUpdated";
var  XML_AD_ANNOUNCEMENT = "announcement";

var  XML_TEST_SECTION = "SystemTests";
var  XML_TEST_TEST = "test";
var  XML_TEST_NAME = "name";
var  XML_TEST_STATUS = "status";
var  XML_TEST_COMMENT = "comment";
var  XML_TEST_EXCEPTION = "exception";

var XML_FUND_SECTION = "HealthFunds";
var XML_FUND_FUNDS = "fund";

//-------------------Functions-----------------------------------------------------------------------------

// builds any array object containing all claim details - claimDetails
function addClaimDetails(tla, name, dependency, release, category) {
	this.tla = tla;
	this.name = name;
	this.dependency = dependency;
	this.release = release;
	this.category = category;
}//--------------------------------------------------------------------------------------------------------

// builds any array object containing business function details - xmlSystemTestValues
function addBusinessFunctionDetails(id, name, status, exception, comments) {
	this.id = id;
	this.name = name;
	this.status = status;
	this.exception = exception;
	this.comments = comments;
}//--------------------------------------------------------------------------------------------------------

// return boolean on error, maintenance or investigation match found in array
function findMatchingError(matchArray, targetString) {
	for (var i = 0; i < matchArray.length; i++) {
		if (targetString.indexOf(matchArray[i]) >= 0) 
			return true;
	} //for
	return false;
}//--------------------------------------------------------------------------------------------------------

// get dependency names from array list
function getClaimDependency(dependency) {
	var splitArray = dependency.split(",");
	var translatedString = "";
	var tempInt = 0;
	for (var i = 0; i < splitArray.length; i++) {
		tempInt = parseInt(splitArray[i]);
		if (!isNaN(parseInt(tempInt))) {
			translatedString += xmlSystemTestTagNames[tempInt - 1] + " ";
		} //if
	} //for
	return translatedString;
}//--------------------------------------------------------------------------------------------------------

function foundResponseErrors(response, rootHubStatusTagName) {
	try {
		responseMsg = response.getElementsByTagName(rootHubStatusTagName)[0].getElementsByTagName(XML_APP_HOSTNAME)[0].firstChild.nodeValue;;
		if (responseMsg == "unknown") {
			return true;
		} //if
	} catch (e) {
	} //try
	return false;
}//--------------------------------------------------------------------------------------------------------

function loadXMLDoc(url) {
	//clean up found business function holder
	xmlSystemTestValues = new Array();

	var rootHubStatusTagName = "";
	if (document.all) {
		rootHubStatusTagName = "ns1:" + XML_APP_NAMESPACE; // IE
	} else {
		rootHubStatusTagName = XML_APP_NAMESPACE; // Others
	} //if
	
	new Ajax.Request(url,  {
	    method: 'get',
	    onSuccess: function(transport){
			// get Response
	    	var response = transport.responseXML;
	    	
			if (!foundResponseErrors(response, rootHubStatusTagName)) {		
		    	// Display Last Updated and announcment message
				if (response.getElementsByTagName(rootHubStatusTagName).length == 0) {
				// fix ff3 ns change from previous versions
					rootHubStatusTagName = "ns1:" + XML_APP_NAMESPACE;
				}
				displayLastedUpdated(response.getElementsByTagName(rootHubStatusTagName));
				displayAnnouncementMessage(response.getElementsByTagName(rootHubStatusTagName));
				// Process BusinessFunction Details
				setBusinessFunctionDetails(response.getElementsByTagName(XML_TEST_TEST));
				// Process PingStatus Details
				setPingStatusDetails(response.getElementsByTagName(XML_FUND_FUNDS));
				// reload this function 
				window.setTimeout('loadXMLDoc(url)', updateInterval);
			} else {
				// Error occurred
	    		displayErrorMessage();
	    		window.setTimeout('loadXMLDoc(url)', updateErrorInterval); 
			}// if
	    },
	    onFailure: function(){ 
	    	displayErrorMessage();
	    	window.setTimeout('loadXMLDoc(url)', updateErrorInterval); 	
	    }
	});
}//--------------------------------------------------------------------------------------------------------

function setBusinessFunctionDetails(nodes) {
	// iterate through BusinessFunction items
	for (i=0; i < nodes.length; i++) {
		// iterate through individual nodes in each BusinessFunction
	
		// create a temp array for storing values
		var tempArray = new Array(nodes.item(i).childNodes.length);
		
		//
		///
		///  ID  not being picked up get it from parent
		/// uncoment alert
		
    	// loop through inner values
    	for(j=0; j < nodes.item(i).childNodes.length; j++){
			// node values
			tempArray[j] = nodes.item(i).childNodes[j].firstChild.nodeValue;
			//alert(tempArray[j]);
			//childNodes[j].firstChild.nodeValue);

    	} // for 
		// do eval on setting xmlSystemTestValues
		// id, name, pass, exception, comments
		// [2] & [3] in tempArray are both undefinded
		eval("xmlSystemTestValues[xmlSystemTestValues.length] = new addBusinessFunctionDetails(xmlSystemTestTagNames[i],\"" + tempArray[0] + "\",\"" + tempArray[1] + "\",\"" + tempArray[2] + "\",\"" + tempArray[3] + "\");"); 
    } //for  
    displayCliamDependency();
}//--------------------------------------------------------------------------------------------------------
	
function setPingStatusDetails(nodes) {
	var pingCols = 0;			   
	var pingHTMLString = "";
	
	// Iterate through individual nodes in each PingStatus Detail
	for (var i = 0; i < nodes.length; i++) {
		// add table row tags to each line
		if (pingCols != 0 && pingCols % 3 == 0) {
			pingHTMLString += "		</tr>\n		<tr>\n";
		} //if
		pingCols++;

  		if ((nodes[i].childNodes[1].firstChild.nodeValue) != "up" &&
	  		nodes[i].childNodes[5].childNodes.length != 0 &&
  			(nodes[i].childNodes[5].firstChild.nodeValue).toLowerCase().indexOf("maintenance") >= 0) {
			pingHTMLString += formatStatusHTML("maintenance", "Return code: " +  nodes[i].childNodes[3].firstChild.nodeValue
														+ "\nSame State: " + nodes[i].childNodes[2].firstChild.nodeValue
														+ "\nMessage: " + nodes[i].childNodes[5].firstChild.nodeValue
														+ "\nTimestamp: " + nodes[i].childNodes[4].firstChild.nodeValue)
			 			   								+ nodes[i].childNodes[0].firstChild.nodeValue;
			 			   								+ "</td>\n";		    
						   
		} else if ((nodes[i].childNodes[1].firstChild.nodeValue) == "up") {
			pingHTMLString += formatStatusHTML("up", "Same State: " + nodes[i].childNodes[2].firstChild.nodeValue
														+ "\nTimestamp:" + nodes[i].childNodes[4].firstChild.nodeValue)
			 			   								+ nodes[i].childNodes[0].firstChild.nodeValue;
			 			   								+ "</td>\n";	
		} else {
			var msgText = (nodes[i].childNodes[5].childNodes.length > 0) ? nodes[i].childNodes[5].firstChild.nodeValue : "";
			
			pingHTMLString += formatStatusHTML("down", "Return code: " +  nodes[i].childNodes[3].firstChild.nodeValue
														+ "\nSame State: " + nodes[i].childNodes[2].firstChild.nodeValue
														+ "\nMessage: " + msgText
														+ "\nTimestamp: " + nodes[i].childNodes[4].firstChild.nodeValue)
			 			   								+ nodes[i].childNodes[0].firstChild.nodeValue;
			 			   								+ "</td>\n";	
		} // if
    } //for  

    var pingStatus=document.getElementById("fundStatus");
	pingStatus.innerHTML = healthFundHTMLStartString
						 + pingHTMLString
						 + addHTMLColumns(pingCols)
						 + "		</tr>\n"
						 + "	</tbody>\n"
						 + "</table>\n";
}//--------------------------------------------------------------------------------------------------------

function displayCliamDependency() {
	var medicareHTMLString = "";
	var dvaHTMLString = "";
	var eclipseHTMLString = "";
	var errorMatch = new Array();
	var maintenaceMatch = new Array();
	var investigationMatch = new Array();
	var medicareColumns = 0;
	var dvaColumns = 0;
	var eclipseColumns = 0;
	
	// create array holders for functions that with a status of maintenance or not true
	for (var i = 0; i < xmlSystemTestValues.length; i++) {
		if (xmlSystemTestValues[i].status == "maintenance") {
			maintenaceMatch[maintenaceMatch.length] = xmlSystemTestValues[i].id;
		} else if (xmlSystemTestValues[i].status == "investigation") {
			investigationMatch[investigationMatch.length] = xmlSystemTestValues[i].id;							
		} else if (xmlSystemTestValues[i].status != "up") {
			errorMatch[errorMatch.length] = xmlSystemTestValues[i].id;
		} //if
	} //for 
	
	// get string of claim dependencies (DB2, CICS etc)
	for (var i = 0; i < claimDetails.length; i++) {
		cliamDependency = getClaimDependency(claimDetails[i].dependency);
 
		// Medicare only
		if (claimDetails[i].category == "Medicare") {
			// add table row tags to each line
			if (medicareColumns != 0 && medicareColumns % 3 == 0) {
				medicareHTMLString += "		</tr>\n		<tr>\n";
			}//if
			medicareColumns++;
			
			// check if fault or maintenance flag found for the following function
			if (findMatchingError(errorMatch, cliamDependency)) { 
				medicareHTMLString += statusDownHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";	
			} else if (findMatchingError(maintenaceMatch, cliamDependency)) {
				medicareHTMLString += statusMaintenaceHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";
			} else if (findMatchingError(investigationMatch, cliamDependency)) {
				medicareHTMLString += statusInvestigationHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";						 
			} else {
				medicareHTMLString += statusUpHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";		
			} //if
		} //if

		// DVA only
		if (claimDetails[i].category == "DVA") {
			// add table row tags to each line
			if (dvaColumns != 0 && dvaColumns % 3 == 0) {
				dvaHTMLString += "		</tr>\n		<tr>\n";
			}//if
			dvaColumns++;
			
			if (findMatchingError(errorMatch, cliamDependency)) { 
				dvaHTMLString += statusDownHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";
			} else if (findMatchingError(maintenaceMatch, cliamDependency)) {
				dvaHTMLString += statusMaintenaceHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";			
			} else if (findMatchingError(investigationMatch, cliamDependency)) {
				dvaHTMLString += statusInvestigationHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";						 			 
			} else {
				dvaHTMLString += statusUpHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";		
			} //if
		} //if

		// ECLIPSE only
		if (claimDetails[i].category == "ECLIPSE") {
			// add table row tags to each line
			if (eclipseColumns != 0 && eclipseColumns % 3 == 0) {
				eclipseHTMLString += "		</tr>\n		<tr>\n";
			}//if
			eclipseColumns++;
			
			if (findMatchingError(errorMatch, cliamDependency)) { 
				eclipseHTMLString += statusDownHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";	
			} else if (findMatchingError(maintenaceMatch, cliamDependency)) {
				eclipseHTMLString += statusMaintenaceHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";
			} else if (findMatchingError(investigationMatch, cliamDependency)) {
				eclipseHTMLString += statusInvestigationHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";					 		 
			} else {
				eclipseHTMLString += statusUpHTML
		 			 + claimDetails[i].name 
					 + "</td>\n";		
			} //if
		} //if
	} //for

	//"<textarea name=\"textarea\" cols=\"80\" rows=\"50\">\n"	//+ "</textarea>";
	$("medicareStatus").innerHTML = resultHTMLStartString
							 + medicareHTMLString
							 + addHTMLColumns(medicareColumns)
							 + resultHTMLEndString;

	$("dvaStatus").innerHTML = resultHTMLStartString
						 + dvaHTMLString
						 + addHTMLColumns(dvaColumns)
						 + resultHTMLEndString;

	$("eclipseStatus").innerHTML = resultHTMLStartString
							 + eclipseHTMLString	
							 + addHTMLColumns(eclipseColumns)
							 + resultHTMLEndString;	 					 
}//--------------------------------------------------------------------------------------------------------

function formatStatusHTML(available, message) {
	return "			<td align=\"center\"><a href=\"#" + available + "\">\n" 
		 + "			    <img height=16 alt=\"" + message + "\" src=\"common/images/" + available + ".gif\" width=19></a></td>\n"
		 + "			<td>";	
}//--------------------------------------------------------------------------------------------------------

function addHTMLColumns(cols) {
    if (cols % 3 == 1) {
    	return    "			<td>&nbsp;</td>\n"	
				+ "			<td>&nbsp;</td>\n"
				+ "			<td>&nbsp;</td>\n"
				+ "			<td>&nbsp;</td>\n";			 						 
    } else if (cols % 3 == 2) {
    	return    "			<td>&nbsp;</td>\n"	
				+ "			<td>&nbsp;</td>\n";	  	
    } else {
    	return "";
    }// if
}//--------------------------------------------------------------------------------------------------------

function displayAnnouncementMessage(nodes) {
	var message = "";

	try {
		 message = nodes[0].getElementsByTagName(XML_AD_ANNOUNCEMENT)[0].firstChild.nodeValue;
		$("serviceAnnouncements").innerHTML = "<p>" + message + ".</p>";
	} catch (e) {
	 	// do nothing
	} // try
}//--------------------------------------------------------------------------------------------------------

function displayLastedUpdated(nodes) {
	var lastUpdated = "";
	
	try {
		lastUpdated = nodes[0].getElementsByTagName(XML_APP_LASTUPDATED)[0].firstChild.nodeValue;
		$("lastUpdated").innerHTML = "<h2>Status current at " + lastUpdated + "</h2>";
	} catch (e) {
		displayErrorMessage();
	}
}//--------------------------------------------------------------------------------------------------------

function displayErrorMessage() {
	var date = new Date();
	var dateString = date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getYear();

	var hours=date.getHours();
	var minutes=date.getMinutes();
	var days=date.getDays();
	var month=date.getMonths();
	
	if (hours<=9) hours="0"+hours;
	if (minutes<=9) minutes="0"+minutes;
	if (days<=9) days="0"+days;
	if (month<=9) month="0"+month;
	
	var timeString = hours + ":" + minutes;

	$("lastUpdated").innerHTML = "<H2>Error retrieving status details at " + dateString + " " + timeString + "</H2>"
	$("medicareStatus").innerHTML = errorMessage;
	$("dvaStatus").innerHTML = errorMessage;
	$("eclipseStatus").innerHTML = errorMessage;
	$("fundStatus").innerHTML = errorMessage;
}//--------------------------------------------------------------------------------------------------------
//Javascript: debugXMLSystemTestValues();
function debugXMLSystemTestValues() {
	var resultsTableStart = "<table><tr><th>ID</th><th>Name</th><th>Status</th><th>Comments</th><th>Exception</th></tr>";
	var resultsTableEnd   = "</table>";
	var resultsBody 	  = "";
	
	for (var i = 0; i < xmlSystemTestValues.length; i++) {
		resultsBody += "\n<tr><th>" + xmlSystemTestValues[i].id + "</th>" + 
					  "<th align=\"left\">" + xmlSystemTestValues[i].name + "</th>" +
					  "<td>" + xmlSystemTestValues[i].status + "</td>" +
					  "<td>" + xmlSystemTestValues[i].comments + "</td>" +
					  "<td>" + xmlSystemTestValues[i].exception + "</td></tr>";
	} // for
	$("medicareStatus").innerHTML += "<br />" + resultsTableStart + resultsBody + resultsTableEnd;
}//--------------------------------------------------------------------------------------------------------
//Javascript: debugFunctionAvailabilityValues();
function debugFunctionAvailabilityValues() {
	var resultsTableStart = "<table><tr><th>Function Name</th><th>Status</th></tr>";
	var resultsTableEnd   = "</table>";
	var resultsBody 	  = "";

	var errorMatch = new Array();
	var maintenanceMatch = new Array();
	var unavailableMatch = new Array();
	var investigationMatch = new Array();	
	
	// create array holders for System Tests that with a status of maintenance or not 'up'
	for (var i = 0; i < xmlSystemTestValues.length; i++) {
		if (xmlSystemTestValues[i].status == "maintenance") {
			maintenanceMatch[maintenanceMatch.length] = xmlSystemTestValues[i].id;
		} else if (xmlSystemTestValues[i].status == "down") {
			errorMatch[errorMatch.length] = xmlSystemTestValues[i].id;
		} else if (xmlSystemTestValues[i].status == "investigation") {
			investigationMatch[investigationMatch.length] = xmlSystemTestValues[i].id;					
		} else if (xmlSystemTestValues[i].status != "up") {
			unavailableMatch[unavailableMatch.length] = xmlSystemTestValues[i].id;			
		} //if
	} //for 
	
	for (var i = 0; i < claimDetails.length; i++) {
		resultsBody += "\n<tr><th align=\"left\">" + claimDetails[i].name + "</th>"
		if (foundInArray(claimDetails[i].dependency.split(","), errorMatch)) {
			resultsBody += "<td>Error</td>";
		} else if (foundInArray(claimDetails[i].dependency.split(","), maintenanceMatch)) {
			resultsBody += "<td>Maintenance</td>";		
		} else if (foundInArray(claimDetails[i].dependency.split(","), investigationMatch)) {
			resultsBody += "<td>Investigation</td>";				
		} else if (foundInArray(claimDetails[i].dependency.split(","), unavailableMatch)) {
			resultsBody += "<td>Unavailable</td>";				
		} else {
			resultsBody += "<td>Working</td>";
		} // if
	} // for
	$("medicareStatus").innerHTML += "<br />" + resultsTableStart + resultsBody + resultsTableEnd;
}//--------------------------------------------------------------------------------------------------------

function foundInArray(searchArray, targetArray) {
	// check search and target array contains values
	if (targetArray.length == 0) return false;
	if (searchArray.length == 0) return false;

	// loop through function details array to find a matching value in target array
	for (var i = 0; i < searchArray.length; i++) {
		for (var j = 0; j < targetArray.length; j++) {
			if (targetArray[j] == searchArray[i]) return true;
		} // for
	} // for
	return false;
}//--------------------------------------------------------------------------------------------------------
function domCollapse(which){
	if (document.getElementById && document.createTextNode){
		if (which=="dispall") {domCollapseAll(1);}
		else if (which=="hideall") {domCollapseAll(0);}
		else {
			xm=document.getElementById("menu");
			trig=xm.getElementsByTagName("div").item(which).style.display;
			xt=xm.getElementsByTagName("h6").item(which);
			xh=xt.getElementsByTagName("a").item(0).firstChild;
			if (trig=="block") trig="none";
			else if (trig=="" || trig=="none") trig="block";
			if (trig=="none"){
				xh.nodeValue=xh.nodeValue.replace('-','+');
			}
			else {
				xh.nodeValue=xh.nodeValue.replace('+','-');
			}
		xm.getElementsByTagName("div").item(which).style.display=trig;
		}
	}
}//--------------------------------------------------------------------------------------------------------
	
function domCollapseAll(show){
	if (document.getElementById && document.createTextNode){
		xm=document.getElementById("menu");
	for (i=0;i<xm.getElementsByTagName("div").length;i++){
			xt=xm.getElementsByTagName("h6").item(i);
			xh=xt.getElementsByTagName("a").item(0).firstChild;
			if (show==1){
				xh.nodeValue=xh.nodeValue.replace('+','-');
				xm.getElementsByTagName("div").item(i).style.display="block";
			}
			else {
				xh.nodeValue=xh.nodeValue.replace('-','+');
				xm.getElementsByTagName("div").item(i).style.display="none";
			}
		}
	}
}//--------------------------------------------------------------------------------------------------------
	
// Adding 4s compatibility
if (document.getElementById && document.createTextNode){
	document.write('<style type="text/css">#menu div{display:none;}</style>')
}//--------------------------------------------------------------------------------------------------------
/* ##################
Scripts for showing and hiding areas, including tabs,
plus/minus style menu and content area hiders
################## */
// add the functions to any existing onload events
addLoadEvent(function(){loadListeners();})
// load all listeners
function loadListeners() {
 // search for and initiate left nav
 if (window.leftNav) {startLeftNav(leftNav)} else {startLeftNav("appsnav")};
 //search for tabs and other show hides
 for (i = 1; (ele("tab"+i) || ele("hideButton"+i)); i++) {
  //activate tab click listeners
  startTabs("tabPane"+i, "tab"+i);
  // activate hide click listeners
  startHides("hideArea"+i, "hideButton"+i, null);
}
 // show the first tab, hide accessibility fallbacks
 if (ele("tabBar")) ele("tabBar").style.display = "block"; //tab bar
 if (ele("tabPane1")) {
  var startTabEle = ele("tabPane1");
  startTabEle.style.display = "block";
  ele("tab1").className = "activeTab";//show tab pane
} }
//tabs core scripts
function hideTabs() {
 for (i = 1; ele("tabPane"+i); i++) {
  ele("tabPane"+i).style.display = "none";
  ele("tab"+i).className = "";
} }
function startTabs(paneID, tabID) {
  var pane = ele(paneID);
  var tab = ele(tabID);
  if (pane == null || tab == null) return;
 pane.style.display = "none"; //hide all the panes to start with
 tab.onclick = function() {
  hideTabs();
  pane.style.display = "block";
  tab.className = "activeTab";
  return false;
} }
// left nav calling script
function startLeftNav(id) {if (ele(id)) traverseLeftNav(ele(id), 0, false);}
// left nav tree traverse script
function traverseLeftNav(currentElement, idNum, pathItem) {
 if (currentElement.tagName) {
  //traverse the children bottom to top
  for (var i = currentElement.childNodes.length - 1; i >= 0; i--) { 
   if (currentElement.childNodes[i].tagName) {
    var currentElementChild = currentElement.childNodes[i];
    var results = traverseLeftNav(currentElementChild, idNum, false);
    idNum = results[0];
    if (currentElementChild.className == "current" || results[1]) 
		pathItem = true;
  } }
  //add button to hideable list areas
  if (currentElement.tagName == "UL"
	  && currentElement.parentNode.tagName == "LI") {
   idNum++;
   currentElement.id = "fold"+idNum;
   makeButton(currentElement.parentNode, idNum);
   if (currentElement.parentNode.className == "current") pathItem=true;
   startHides("fold"+idNum, "foldButton"+idNum, pathItem);
 } }
 return new Array(idNum, pathItem);
}
// make a button
function makeButton(parent, idNum) {
 button = document.createElement("A");
 currenttext=document.createTextNode("\u00a0");
 button.appendChild(currenttext);
 button.setAttribute("href", "javascript:;");
 button.className = "actuatorclosed";
 button.id = "foldButton"+idNum;
 parent.insertBefore(button, parent.childNodes[0]);
 parent.style.background = "none";
}
// listeners for tabs and show hides
function startHides(areaID, buttonID, pathItem) {
 var area = ele(areaID);
 var button = ele(buttonID);
 if (area == null || button == null) return;
 button.onclick = function() {
  area.style.display = (area.style.display == "none") ? "block" : "none";
  button.className = (button.className == "actuatorclosed") ?
   "actuator" : "actuatorclosed";
  return false;
 }
 if ((pathItem) || button.className == "actuator") {
  area.style.display = "block";
  button.className = "actuator";
 } else {
  area.style.display = "none";
  button.className = "actuatorclosed"
} }
//reduce code weight
function ele(id) { return document.getElementById(id); }
//addloadevent unobtrusive onload script
function addLoadEvent(func) {
 var oldonload = window.onload;
 if (typeof window.onload != "function") {
  window.onload = func;
 } else {
  window.onload = function() {
   oldonload();
   func();
} } }
