// JScript File
//----------------------------------------------------------------------------------
// Tony Phipps - author

var xmlDoc;															// the xml doc for traversing nodes

// numerous variables for arrays, counters, and data output
var chart = new Array(); 								//xml chart 
var chartData = new Array();  					//xml chart chartdata
var row = new Array(); 									//xml chart chartdata row
var stringDescription = new Array();  	//string entries from xml
var numberData = new Array();						//number entries from xml
var numberDataRow = new Array();				//number of specific number data rows
var chartType;													//identify for horizontal chart
var t;																	//write to page
var scoring;														//how are we scoring the data: higher is better/lower is better

// write table or error message
function writeTable(xmlFile) {

	if (document.implementation && document.implementation.createDocument) { // Firefox, Mozilla
		xmlDoc = document.implementation.createDocument("", "", null);
	} else if (window.ActiveXObject) { // IE
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	}	else	{ // other
		return;
	}


	xmlDoc.async=false;

	// try to instantiate an xmlDoc and report error if not
	try {
		xmlDoc.load(xmlFile);
	} catch(e) {
		document.write("<p>Your browser does not support this functionality.</p>");
		return;
	}


	t = "";  // reset t for writing table
	var xItem = xmlDoc.getElementsByTagName("chart")[0].getElementsByTagName("chart_data")[0].getElementsByTagName("row");  //returns an array of all xml rows
	var xItemCnt = xItem.length-1;   //loop counter for xml rows
	var numberItem = xmlDoc.getElementsByTagName("chart")[0].getElementsByTagName("chart_data")[0].getElementsByTagName("row")[1].getElementsByTagName("number");	// returns an array of all xml numbers
	var numberItemCnt = numberItem.length-1;	//loop counter for xml numbers
	var chartType = xmlDoc.getElementsByTagName("chart")[0].getElementsByTagName("chart_type")[0];	// check for horizontal chart
	var j=0;	// counter for creating arrays
	
	//create sub arrays table content
	for (j=0;j<=numberItemCnt;j++) {
		stringDescription[j] = new Array(); //string description either test or product
		numberData[j] = new Array();  //data point numbers
	}
	
	var z = 0; //counter for second loop of data points
	var y = 0; //counter for array enumeration
	
	//loops through data points array
	for(z=0;z<=numberItemCnt;z++) {

		//loops through xml list
		for (i=0; i<=xItemCnt; i++) {

			//build all the content arrays
			numberData[z][y] = null;
			if (xItem[i].childNodes[1].nodeName == "string" && !is_ie) {
				numberData[z][y] = xItem[i].getElementsByTagName("number")[z].childNodes[0].nodeValue;
			}
			if (xItem[i].childNodes[1].nodeName == "number" && is_ie) {
				numberData[z][y] = xItem[i].getElementsByTagName("number")[z].childNodes[0].nodeValue;
			}
	
			// horizontal chart gets title from elsewhere
			if ((chartType)&&(i==0)) {
				stringDescription[z][y] = xmlDoc.getElementsByTagName("chart")[0].getElementsByTagName("draw")[0].getElementsByTagName("text")[1].childNodes[0].nodeValue;
			} else {
				// title
				if ((xItem[i].childNodes[1].nodeName == "string" && !is_ie)||(xItem[i].childNodes[1].nodeName == "number" && is_ie)) {
					stringDescription[z][y] = xItem[i].getElementsByTagName("string")[0].childNodes[0].nodeValue;
	
					// column heading
				} else {
					stringDescription[z][y] = xItem[i].getElementsByTagName("string")[z].childNodes[0].nodeValue;
				}
			}
			y = y + 1;
		}
		y = 0;
	}
	// get what is better
	scoring = xmlDoc.getElementsByTagName("chart")[0].getElementsByTagName("draw")[0].getElementsByTagName("text")[0].childNodes[0].nodeValue;


	// write structured table while iterating through the arrays.
	t = t + "<table width=\"100%\" summary=\"Feature Comparison\" cellspacing=\"0\" class=\"arc spec-chart\">";
	t = t + "<tr class=\"colhead\" valign=\"top\">";
	i = 0;
	z = 0;
	for (i=0; i<=xItemCnt; i++) {
//		if (numberData[z][i] != null) {
		if (i != 0) {
			t = t + "<th scope=\"col\">";
			t = t + stringDescription[z][i];
			t = t + "</th>";
		} else {
			t = t + "<th scope=\"col\" class=\"data-first-cell\">";
			t = t  + scoring;
			t = t + "</th>";
		}
	}
	t = t + "</tr>";
	t = t + "<tr valign=\"top\">";
	i = 0;
	z = 0;
	for(z=0;z<=numberItemCnt;z++) {
		for (i=0; i<=xItemCnt; i++) {
			if (numberData[z][i] != null) {
				if(i==xItemCnt) {
					t = t + "<td class=\"data-last-cell\">";
				} else {
						t = t + "<td>";
				}
					t = t  + numberData[z][i];
					t = t + "</td>";
			} else {
					t = t + "<th scope=\"row\" class=\"data-first-cell\">";
					t = t  + stringDescription[z][i];
					t = t + "</th>";
			}
		}
		t = t + "</tr>";
	}
	i = 0;

	y = y + 1;

	t = t + "</table>";

	//write table to html
	document.write(t);

}
