	var groups = new Array(5);
	groups[0] = new Array("Male","Female");
	groups[1] = new Array("Black","Hispanic","White","Asian","Am. Indian","Other Race");
	groups[2] = new Array("F/R Lunch","Full Price");

function format(data) {
	//This function formats the data-text before display.
	//Currently, it only makes sure the data is not null (substituting a dash);
	if (data) return data;
	return "-";
}


function simClick(arr,index) {
	arr[index].click();
}


function err() {
   alert("An error occured.  Make sure all the files are correctly placed.");
	window.close();
}


function parse(uri, xmldocument) {
   xmldocument.async = false;
   xmldocument.load(uri);

   if (xmldocument.parseError.errorCode != 0)
      alert(xmldocument.parseError.reason);

   return xmldocument;
} 


function unSelAll (selObj) {
	for (var i=0;i<selObj.length;i++) {
		if (selObj[i].checked) selObj[i].click();
	}
}


function selAll(selObj) {
   for (var i=0;i<selObj.length;i++) { 
      if (!selObj[i].checked) selObj[i].click(); 
   }
}

function vTable() {

d = "";
//table sorted by column
var Document = dsoByContent.documentElement;
var resultTable = "";
var i;var h; var k;
var j = Document.childNodes.length;
//var j = 30;
var inc = Math.ceil(j/5);
resultTable += "<tr>";

for (i=0;i<5;i++) {
   resultTable += "<td valign=\"top\"><table>";
   for (h=i*inc;h<(i+1)*inc;h++) {
			if (Document.childNodes[h]) {
				var x = Document.childNodes[h].childNodes[1].attributes.getNamedItem("DISTRICT");
				var dist = (x) ? x.text : "";
				if (dist != d) {
					d = dist;
					resultTable += "<tr><td class=\"distGroup\">" + d + "</td></tr>";
				}
    	  resultTable += "<tr><td onClick=\"simClick(frm.SDistrict," + h + ")\" class=\"selector\"><input type=\"checkbox\" name=\"SDistrict\" value=\"" 
                  + Document.childNodes[h].childNodes[0].text + "\">" + Document.childNodes[h].childNodes[1].text 
                  + "</td></tr>";
			}	else {
				resultTable +="<tr><td>&nbsp</td></tr>";
			}
   }
   resultTable += "</table></td>";
}

resultTable += "</tr>";
return resultTable;

}



function hTable() {
// table sorted by row generation script
var Document = dsoByContent.documentElement;
var resultTable = "";
var i;
var k;
var j = Document.childNodes.length;
for (i=0;i<=j-1;i+=5) {
   resultTable += "<tr>";
   for (k=0;k<=4;k++) {
      resultTable += (Document.childNodes[i+k]) ? "<td><input name=SDistrict type=\"checkbox\" value=\"" 
                  + Document.childNodes[k+i].childNodes[0].text + "\">" 
                  + Document.childNodes[k+i].childNodes[1].text + "</td>" : "<td>&nbsp</td>";
   }
   resultTable += "</tr>";
}
return resultTable;
}
/* 
function changeCriteria(n) {
	with (frm) {
	if (selCriteria[n].selectedIndex == 0) {
		selCriteria2[n].style.display = "none";
		selCriteria3[n].style.display = "none";
		selCriteria4[n].style.display = "none";
	} else {
		selCriteria2[n].style.display = "inline";
		selCriteria3[n].style.display = "inline";
		selCriteria4[n].style.display = "inline";
	}
	}
}

function changeSort() {
	with (frm) {
	if (sortVar.selectedIndex == 0) {
		sortOrder.style.display = "none";
	} else {
		sortOrder.style.display = "inline";
	}
	}
}
*/

/**main engine************************************/

function doChart(frm) {

	var yearStr;
	for (var i=0;i<frm.selYear.length;i++) {
		if (frm.selYear[i].checked) yearStr = frm.selYear[i].value;
	}

	var dataURI = "data/data" + yearStr + ".xml";
	parse(dataURI,xmlData);
	Document = xmlData.documentElement;

	var ResultHTML = "<html><head><title>Search Results</title><link rel=\"stylesheet\" href=\"styles/chart.css\">";
	ResultHTML += "<script src=\"scripts/chart.js\"></script>";
	ResultHTML += "</head><body>";
	ResultHTML += "<div id=\"popupLabel\"></div>";
	ResultHTML += "<div class=\"chartTitle\">" + chartTitle + yearStr + "</div><br>";
	ResultHTML += "<table border=\"1\" bordercolor=\"#000000\" cellspacing=\"0\" class=\"bodyTable\">";
	ResultHTML += "<tr><td class=\"topHeader\" rowspan=\"3\" valign=\"bottom\">Group</td>";
	
	var dataParent = new Array(Document.childNodes.length);
	var dataLength = assembleData(frm,dataParent,dataLength);
	
	if (dataLength == 0) {
		alert("No group matched your search!");
		return;
	}

	ResultHTML += readStats(frm);

	/* 
	sortVar = getSortVar();
	if (sortVar != "none") {
		if (frm.sortOrder.value == "F") descending = false;
		else descending = true;
		sortp(dataParent,0,dataLength-1);
	}
	*/
	var i = 0;
//	d = "";
	
	while (dataParent[i]) {
		ResultHTML += writeDist(dataParent[i],frm);
		i++;
	}

	

   ResultHTML += "</table>";
   ResultHTML += "<span class=\"footnote\">-Results are not presented for groups fewer than 20.";

// adding new footnotes by scale: each scale is in one <td>

   ResultHTML += "<br><table border=0 cellpadding=0 cellspacing=0 width=600>";
   ResultHTML += "<tr>";

// Communication Scale
	if (n[0] > 0) {
   ResultHTML += " <td class=\"footnote\" align=left width=210 valign=top>";
   ResultHTML += " <br><b>Communication Scale</b>";
   ResultHTML += " <br><br>Total Score Scale: 75-225";
   ResultHTML += " <br>Independent (Level 3): 188-225";
   ResultHTML += " <br>Proficient (Level 2): 150-187";
   ResultHTML += " <br>Basic (Level 1): 75-149";
   ResultHTML += " <br><br>Content Strands:";
   ResultHTML += " <br>1. Receptive: 15-45";
   ResultHTML += " <br>2. Expressive: 15-45";
   ResultHTML += " <br>3. Social Interactive: 15-45";
   ResultHTML += " <br>4. Literacy - Reading: 15-45";
   ResultHTML += " <br>5. Literacy - Writing: 15-45";
   ResultHTML += " </td>";
	}
//Quantitative Scale
	if (n[1] > 0) {
   ResultHTML += " <td class=\"footnote\" align=left width=210 valign=top>";
   ResultHTML += " <br><b>Quantitative Scale </b>";
   ResultHTML += " <br><br>Total Score Scale: 60-180";
   ResultHTML += " <br>Independent (Level 3): 150-180";
   ResultHTML += " <br>Proficient (Level 2): 120-149";
   ResultHTML += " <br>Basic (Level 1): 60-119";
   ResultHTML += " <br><br>Content Strands:";
   ResultHTML += " <br> 1. Spatial Relationships: 15-45";
   ResultHTML += " <br> 2. Number Sense: 15-45";
   ResultHTML += " <br> 3. Operations: 15-45";
   ResultHTML += " <br> 4. Measurement: 15-45";
   ResultHTML += "</td>";
	}
//Science Scale
	if (n[2] > 0) {
   ResultHTML += "  <td class=\"footnote\" align=left width=210 valign=top>";
   ResultHTML += "  <br><b>Science Scale </b>";
   ResultHTML += " <br><br>Total Score Scale: 10-30";
   ResultHTML += " <br>Independent (Level 3): 25-30";
   ResultHTML += " <br>Proficient (Level 2): 20-24";
   ResultHTML += " <br>Basic (Level 1): 10-19";
   ResultHTML += " </td>";
	}
   ResultHTML += " </tr>";
   ResultHTML += "</table>"; 
   ResultHTML += "</body></html>";

/*    var newWin = frm.NewWindow;
   if (newWin.checked) {

			var resWin = open("about:blank");
      resWin.document.write(ResultHTML);
      resWin.focus();
			resWin = null;

   }
   else { ResultDIV.innerHTML = ResultHTML; }
*/
	top.setReport(ResultHTML);
}

function makeText(frm) {

	var ResultHTML = "<html><head><title>Search Results</title>";
	ResultHTML += "</head><body>" + chartTitle + ": <br>";
	ResultHTML += " Group ";

	var dataParent = new Array(Document.childNodes.length);
	var dataLength = assembleData(frm,dataParent,dataLength);
	if (dataLength == 0) {
		alert("No districts matched your search!");
		return;
	}
	ResultHTML += readTxtStats(frm);

/* 
	sortVar = getSortVar();
	if (sortVar != "none") {
		if (frm.sortOrder.value == "F") descending = false;
		sortp(dataParent,0,dataLength-1);
	}
*/
	var i = 0;
	while (dataParent[i]) {
		ResultHTML += writeTxtDist(dataParent[i],frm);
		i++;
	}

	ResultHTML += "</body></html>";

   /* var newWin = frm.NewWindow;
   if (newWin.checked) {

			var resWin = open("about:blank");
      resWin.document.write(ResultHTML);
      resWin.focus();
			resWin = null;

   }
   else { ResultDIV.innerHTML = ResultHTML; }
   */
	top.setReport(ResultHTML);

}
/**sub engines************************************/

function writeTxtDist(oDist,frm) {
	var ResultHTML = "";
  ResultHTML += oDist.name; 
	var j = 0;

	while (dataRef[j] != null) {
		z = oDist.noAggr.childNodes[0].childNodes[dataRef[j]];
		ResultHTML += ", " + ((z) ? format(z.text) : "-") + " ";
		j++;
	}

	ResultHTML += "<br>";

	for (var i=0;i<frm.subGroup.length;i++) {

		if (frm.subGroup[i].checked) {

			for (var k=0;k<groups[i].length;k++) {
				if (i==1 && k >= 4 && year == "2005") continue; //Skip "Other Race" for 2005 data
				ResultHTML += " " + groups[i][k] + " ";
				j = 0;

				while (dataRef[j] != null) {
					z = oDist.groups[i].childNodes[k].childNodes[dataRef[j]];
					ResultHTML += ", " + ((z) ? format(z.text) : "-") + " ";
					j++;
				}
				
				ResultHTML += "<br>";
			}

		}

	}

	return ResultHTML;

}


function writeDist(oDist,frm) {

	var ResultHTML = "";
	var z;

	//print group name
	ResultHTML += "<tr><td class=\"district\"><b>" + oDist.name + "</b></td>"; 

	var j = 0;

	while (dataRef[j] != null) {
		z = oDist.noAggr.childNodes[0].childNodes[dataRef[j]];
		ResultHTML += "<td class=\"data\" align=\"center\">" + ((z) ? format(z.text) : "-") + "</td>";
		j++;
	}

	ResultHTML += "</tr>";

	for (var i=0;i<frm.subGroup.length;i++) {

		if (frm.subGroup[i].checked) {

			for (var k=0;k<groups[i].length;k++) {
				if (i==1 && k >= 4 && year == "2005") continue; //Skip "Other Race" and "Am Indian" for 2005 data
				ResultHTML += "<tr><td class=\"subGroup\">" + groups[i][k] + "</td>";
				j = 0;
				while (dataRef[j] != null) {
					z = oDist.groups[i].childNodes[k].childNodes[dataRef[j]];
					ResultHTML += "<td class=\"data\" align=\"center\">" + ((z) ? format(z.text) : "-") + "</td>";
					j++;
				}
				
				ResultHTML += "</tr>";
			}

		}
	}
	return ResultHTML;
}

/* 
function checkCriteria(node) {
	var b = true;
	for (var i=0;i<frm.selCriteria.length;i++) {
		if (frm.selCriteria[i].selectedIndex != 0) {
			var index = getCritIndex(i);
			if (node.childNodes[index]) {
				var t = node.childNodes[index].text;
			  if (!eval("parseFloat(t) " + frm.selCriteria2[i].value + " " + "parseFloat(" + frm.selCriteria3[i].value + ")")) {
					b = false;
				} 
			} else {
				b = false;
			}
		}
	}
	return b;
}
*/

function assembleData(frm,dataParent,dataLength) {

	var j = 0;
	for (var i=0;i<frm.SDistrict.length;i++) {
		if (frm.SDistrict[i].checked) {
			dataParent[j++] = new oDistrict(Document.childNodes[i]);
		}
	}
	return j;
}

function oDistrict(node) {  /*Object that stores district node*/
	this.children = node.childNodes;
	this.name = this.children[1].text;
	this.erg = this.children[0].text;
	this.noAggr = this.children[2];
	this.groups = new Array(this.children[3],this.children[4],this.children[5]);
}
