		var scheduleSet;
		var allScheduleDataArray = new Array();	// all available schedule data
		var displayData = new Array();			// all displayed schedule data
		var startPosition = -1;
		var has9Pnode = false;

		function scheduleDataObserver (notificationType, dataSet, data) {
			// handle data loading error
			if (notificationType == "onLoadError") {
				document.getElementById("writeTest").innerHTML += "Error: Schedule data is temporarily unavailable.";
			}

			// if the data has loaded
			if (notificationType == "onPostLoad") {
				// clear the observer
				scheduleSet.removeObserver(scheduleDataObserver);
				
				// assign the imported data to an array
				allScheduleDataArray = scheduleSet.getData();
				// find the start position in the array; 8p or the position immediately before it
				for (i = 0; i < allScheduleDataArray.length; i++) {
					if (allScheduleDataArray[i]["@military"] <= "20:00") {
						startPosition = i;
					}
					if (allScheduleDataArray[i]["@military"] == "21:00") {
						has9Pnode = true;
					}
				}

				// find all positions between the start position and the frist 9p node
				// push those positions to a new array
				var nextArrayMember = 0;
				var currentDataPosition = startPosition;
				for (i = startPosition; i < allScheduleDataArray.length; i++) {
					if (allScheduleDataArray[i]["@military"] < "21:00") {
						displayData[nextArrayMember] = new Array();
						displayData[nextArrayMember][0] = allScheduleDataArray[i]["@time"].replace(/\sp.m./gi, "p");
						displayData[nextArrayMember][1] = allScheduleDataArray[i]["@title"];
						displayData[nextArrayMember][2] = allScheduleDataArray[i]["@path"];
						displayData[nextArrayMember][3] = allScheduleDataArray[i]["@military"];
						nextArrayMember += 1;
						currentDataPosition += 1;
					}
				}

				// fix time if for missing 8pm node, if there is one
				if (displayData[0][3] < "20:00") {
					displayData[0][0] = "8:00p";
				}
				// if no 8:30 node, add one
				var temp8Pos = displayData.length;
				var temp8PosMinus1 = displayData.length - 1;
				if (displayData.length < 2) {
					displayData[temp8Pos] = new Array();
					displayData[temp8Pos][0] = "8:30p";
					displayData[temp8Pos][1] = displayData[temp8PosMinus1][1];
					displayData[temp8Pos][2] = displayData[temp8PosMinus1][2];
					displayData[temp8Pos][3] = displayData[temp8PosMinus1][3];
					nextArrayMember += 1;
				}

				// if no 9:00 node, add one
				var temp9Pos = displayData.length;
				var temp9PosMinus1 = displayData.length - 1;
				if (!(has9Pnode)) {
					displayData[temp9Pos] = new Array();
					displayData[temp9Pos][0] = "9:00p";
					displayData[temp9Pos][1] = displayData[temp9PosMinus1][1];
					displayData[temp9Pos][2] = displayData[temp9PosMinus1][2];
					displayData[temp9Pos][3] = displayData[temp9PosMinus1][3];
					nextArrayMember += 1;
				}

				// loop through to add any remaining 9:pm nodes
				for (i = currentDataPosition; i < allScheduleDataArray.length; i++) {
					if (allScheduleDataArray[i]["@military"] < "22:00") {
						displayData[nextArrayMember] = new Array();
						displayData[nextArrayMember][0] = allScheduleDataArray[i]["@time"].replace(/\sp.m./gi, "p");
						displayData[nextArrayMember][1] = allScheduleDataArray[i]["@title"];
						displayData[nextArrayMember][2] = allScheduleDataArray[i]["@path"];
						displayData[nextArrayMember][3] = allScheduleDataArray[i]["@military"];
						nextArrayMember += 1;
					}
				}

				// if no 9:30 node, add one
				var temp95Pos = displayData.length;
				var temp95PosMinus1 = displayData.length - 1;
				if (displayData.length < 4) {
					displayData[temp95Pos] = new Array();
					displayData[temp95Pos][0] = "9:30p";
					displayData[temp95Pos][1] = displayData[temp95PosMinus1][1];
					displayData[temp95Pos][2] = displayData[temp95PosMinus1][2];
					displayData[temp95Pos][3] = displayData[temp95PosMinus1][3];
					nextArrayMember += 1;
				}

				for (i = 0; i < 4; i++) {
					if (displayData[i][2] != "") {
						document.getElementById("scheduleContent").innerHTML += '<div class="scheduleLine"><div class="scheduleTxtTime">'+displayData[i][0] + '</div> <a href=' + displayData[i][2] + '><div class="scheduleTxtTitleLink">' + displayData[i][1] + "</div></a></div>";
					} else {
						document.getElementById("scheduleContent").innerHTML += '<div class="scheduleLine"><div class="scheduleTxtTime">'+displayData[i][0] + '</div> <div class="scheduleTxtTitle">' + displayData[i][1] + "</div></div>";
					}
				}
			}
			
			
		}

		scheduleSet = new Spry.Data.XMLDataSet("/cnschedule/xmlServices/" + tdate + ".EST.xml", "allshows/show[@military >= '06:00']");
		scheduleSet.addObserver(scheduleDataObserver);
		scheduleSet.loadData();
