// pass url to process and callback function
var sgReq = null;
function runUpdate(url, runCallBack, errMsg) { 

	if (errMsg == null || typeof errMsg == 'undefined') {
		errMsg = 'There is a problem getting additional information.  Please try back later.';
	}

	if (url == null || typeof url == 'undefined') {
		alert(errMsg + ' [u]');
		return;
	}

	if (window.XMLHttpRequest) {
		// Firefox, Opera 8.0+, Safari
		try {
			sgReq = new XMLHttpRequest();
		}
		catch (e) {
			alert(errMsg + ' [ff]');
			return;
		}
	}
	else if (window.ActiveXObject) {
		// Internet Explorer
		try {
			sgReq = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e) {
			try {
				sgReq = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e) {
				alert(errMsg + ' [ie]');
				return;
			}
		}
	}
	else {
		alert(errMsg + ' [req]');
		return;
	}

	if (sgReq != null && typeof sgReq != 'undefined') {
		sgReq.open("GET", url, true);
		if (runCallBack != null && typeof runCallBack != 'undefined') {
			sgReq.onreadystatechange = runCallBack;
		}
		sgReq.send(null);
	}
	else {
		alert(errMsg);
	}
}

var showSchools = function() {
        var success = false;
	var errMsg = 'We are unable to update schools at this time.  Please try back later.';

	try {
		if (sgReq.readyState==4) {
			if (sgReq.status==200) {
				var obj = eval("(" + sgReq.responseText + ')');
				if (obj.Response.Status != 0) {
					errMsg = obj.Response.Message;
				}
				else {
					if (obj.Response.Payload.schools.count == 0) {
						errMsg = 'There are no schools for that zip code.';
					}
					else {
						var schoolIdObj = document.getElementById("schoolId");
						if (schoolIdObj == null || typeof schoolIdObj == 'undefined') {
							errMsg += ' [c]';
						}
						else {
							success = true;

							for (i = schoolIdObj.options.length; i >= 1; i--) {
								schoolIdObj.options[i] = null; 
							}

							z=1; // start at 1 because we have 0 as default items
							for (var i = 0; i < obj.Response.Payload.schools.count; i++) {
								var school = obj.Response.Payload.schools.school[i];
								schoolIdObj.options[z] = new Option(school.name,school.id);
								z++;
							}
							$("#schoolId").removeAttr("disabled");
							$("#schoolDisplay").fadeTo("normal",1);
						}
					}
				}
			}
			else {	
				errMsg += ' [s]';
			}
		}
		else {
			success = true;
		}
	}
	catch (e) {
		errMsg += ' [e]';
		success = false;
	}

	if (!success) {
		alert(errMsg);
	}
}

function getSchools() {
	
	var errMsg = 'We are unable to update schools at this time.';
	var schoolZipObj = document.getElementById("schoolZip");
	if (schoolZipObj == null || typeof schoolZipObj == 'undefined') {
		alert(errMsg + ' [cz]');
		return;
	}

	var schoolIdObj = document.getElementById("schoolId");
	if (schoolIdObj == null || typeof schoolIdObj == 'undefined') {
		errMsg += ' [czl]';
		return;
	}

	for (i = schoolIdObj.options.length; i >= 1; i--) {
		schoolIdObj.options[i] = null; 
	}

	var schoolZip = schoolZipObj.value;
	if (schoolZip == null || typeof schoolZip == 'undefined' ||
	    schoolZip.length < 5) {
		alert('Please enter a valid school zip code.');
		return;
	}

	var zipPattern = /^\d{5}(\-\d{4})?$/;
	if (!zipPattern.test(schoolZip)) {
		alert('Please enter a valid school zip code.');
		return;
	}

	runUpdate('/getSchools.do?zip=' + schoolZip, showSchools, errMsg)
	$("#schoolDisplay").show();
}

