function getFormValue(elem) {
	return $F(elem);
}

function getMdrOptions(mdr_select_elem, mdrListStr, prompt) {

	for (i = mdr_select_elem.options.length - 1; i >= 0; i--) {
		mdr_select_elem.remove(i);
	}

	if (mdrListStr == "") {
		mdr_select_elem.disabled = true;
		return;
	} else {
		mdr_select_elem.disabled = false;
	}

	var mdrs = new Array();
	addOption(mdr_select_elem, prompt, "");
	mdrs = mdrListStr.split(";;;");
	for (i = 0; i < mdrs.length - 1; i++) {
		var optionEntry = new Array();
		optionEntry = mdrs[i].split("|");
		addOption(mdr_select_elem, optionEntry[0], optionEntry[1]);
	}
}

function addOption(selectbox, text, value) {
	var optn = document.createElement("option");
	selectbox.options[selectbox.options.length] = new Option(text, value);
}

function changeSelection(selectbox, value) {
	for (i = selectbox.options.length - 1; i >= 0; i--) {
		if (selectbox.options[i].value == value) {
			selectbox.options[i].selected = true;
		} else {
			selectbox.options[i].selected = false;
		}
	}
}

function changeState(states_elem, districts_elem, schools_elem, freeform_elem,
		public_elem, private_elem, org_elem, use_mdr_elem) {
	cleanupOrganization(freeform_elem, org_elem);
	setUseMdr(use_mdr_elem, 'true');
	var is_private = findPrivatePublicValue(public_elem, private_elem);
	var state_id = getFormValue(states_elem);
	if (state_id >= 65) {
		cleanupDistricts(districts_elem, schools_elem);
		toggleFreeFormOrg(freeform_elem, org_elem, 'on', use_mdr_elem);
	} else if (state_id == 0) {
		cleanupDistricts(districts_elem, schools_elem);
		toggleFreeFormOrg(freeform_elem, org_elem, 'off', use_mdr_elem);
	} else {
		new Ajax.Request('/mdrweb/mdr.do',
				{
					parameters : {
						method :'getDistricts',
						stateId :state_id,
						privateSchool :is_private
					},
					method :'get',
					asynchronous :false,
					onSuccess : function(transport) {
						getMdrOptions(districts_elem, transport.responseText,
								"-- Select a District --");
						cleanupSchools(schools_elem);
						cleanupOrganization(freeform_elem, org_elem);
						setUseMdr(use_mdr_elem, 'true', use_mdr_elem);
						toggleFreeFormOrg(freeform_elem, org_elem, 'off',
								use_mdr_elem);
					}
				});
	}
}

function changeDistrict(districts_elem, schools_elem, freeform_elem,
		public_elem, private_elem, org_elem, use_mdr_elem) {
	cleanupOrganization(freeform_elem, org_elem);
	setUseMdr(use_mdr_elem, 'true');
	var district_mdr_pid = getFormValue(districts_elem);
	if (district_mdr_pid == 'notfound') {
		toggleFreeFormOrg(freeform_elem, org_elem, 'on', use_mdr_elem);
		cleanupSchools(schools_elem);
	} else if (district_mdr_pid == '') {
		cleanupSchools(schools_elem);
		toggleFreeFormOrg(freeform_elem, org_elem, 'off', use_mdr_elem);
	} else {
		toggleFreeFormOrg(freeform_elem, org_elem, 'off', use_mdr_elem);
		new Ajax.Request('/mdrweb/mdr.do',
				{
					parameters : {
						method :'getSchools',
						districtId :district_mdr_pid
					},
					method :'get',
					asynchronous :false,
					onSuccess : function(transport) {
						getMdrOptions(schools_elem, transport.responseText,
								"-- Select a School --");
						cleanupOrganization(freeform_elem, org_elem);
						setUseMdr(use_mdr_elem, 'true');
						toggleFreeFormOrg(freeform_elem, org_elem, 'off',
								use_mdr_elem);
					}
				});
	}
}

function changeSchool(districts_elem, schools_elem, freeform_elem, public_elem,
		private_elem, org_elem, use_mdr_elem) {
	var school_mdr_pid = getFormValue(schools_elem);
	cleanupOrganization(org_elem, org_elem);
	setUseMdr(use_mdr_elem, 'true');
	if (school_mdr_pid == 'notfound') {
		toggleFreeFormOrg(freeform_elem, org_elem, 'on', use_mdr_elem);
	} else if (school_mdr_pid != '') {
		toggleFreeFormOrg(freeform_elem, org_elem, 'off', use_mdr_elem);
		for ( var i = 0; i < schools_elem.options.length; i++) {
			if (schools_elem.options[i].value == school_mdr_pid) {
				setOrganization(org_elem, districts_elem,
						schools_elem.options[i].text, findPrivatePublicValue(
								public_elem, private_elem), school_mdr_pid);
				break;
			}
		}
	} else {
		toggleFreeFormOrg(freeform_elem, org_elem, 'off', use_mdr_elem);
	}
}

function setOrganization(org_elem, districts_elem, orgName, isPrivate,
		schoolMdrPid) {
	if (orgName == '-- District --') {
		for ( var i = 0; i < districts_elem.options.length; i++) {
			if (districts_elem.options[i].value == schoolMdrPid) {
				orgName = districts_elem.options[i].text;
				break;
			}
		}
	} else if (isPrivate) {
		var pos = orgName.lastIndexOf("(");
		orgName = orgName.substring(0, pos - 1);
	}
	org_elem.value = orgName;
}

function setOrganizationFromFreeFormOrg(org_elem, value) {
	org_elem.value = value;
}

function cleanupOrganization(freeform_elem, org_elem) {
	freeform_elem.value = '';
	org_elem.value = '';
}

function turnOnPublic(states_elem, districts_elem, schools_elem,freeform_elem,
		public_elem, org_elem, use_mdr_elem, private_elem) {
	 
	togglePublicPrivate(states_elem, districts_elem, schools_elem,
			freeform_elem, org_elem, use_mdr_elem, false);
}

function turnOnPrivate(states_elem, districts_elem, schools_elem,freeform_elem, 
		private_elem, org_elem, use_mdr_elem, public_elem) {
	togglePublicPrivate(states_elem, districts_elem, schools_elem,
			freeform_elem, org_elem, use_mdr_elem, true);
}

function togglePublicPrivate(states_elem, districts_elem, schools_elem,
		freeform_elem, org_elem, use_mdr_elem, is_private) {
	cleanupOrganization(freeform_elem, org_elem);
	org_elem.value = "";
	var state_id = getFormValue(states_elem);
	setUseMdr(use_mdr_elem, 'true');
	toggleFreeFormOrg(freeform_elem, org_elem, 'off', use_mdr_elem);
	if (state_id > 0 && state_id < 65) {
		new Ajax.Request('/mdrweb/mdr.do',
				{
					parameters : {
						method :'getDistricts',
						stateId :state_id,
						privateSchool :is_private
					},
					method :'get',
					asynchronous :false,
					onSuccess : function(transport) {
						getMdrOptions(districts_elem, transport.responseText,
								"-- Select a District --");
						cleanupSchools(schools_elem);
						cleanupOrganization(freeform_elem, org_elem);
						setUseMdr(use_mdr_elem, 'true');
						toggleFreeFormOrg(freeform_elem, org_elem, 'off',
								use_mdr_elem);
					}
				});
	} else if (state_id >= 65) {
		toggleFreeFormOrg(freeform_elem, org_elem, 'on', use_mdr_elem);
	}
}

function toggleFreeFormOrg(freeform_elem, org_elem, value, use_mdr_elem) {
	if (value == 'on') {
		cleanupOrganization(freeform_elem, org_elem);
		setUseMdr(use_mdr_elem, 'false');
		freeform_elem.disabled = false;
	} else {
		setUseMdr(use_mdr_elem, 'true');
		freeform_elem.value = '';
		freeform_elem.disabled = true;
	}
}

function setUseMdr(use_mdr_elem, value) {
	use_mdr_elem.value = value;
}

function changeContactState(contact_provinces_elem, states_elem,
		districts_elem, schools_elem, freeform_elem, public_elem, private_elem,
		org_elem, use_mdr_elem) {
	var contact_state_value = getFormValue(contact_provinces_elem);
	for ( var i = 0; i < states_elem.options.length; i++) {
		if (states_elem.options[i].value == contact_state_value) {
			states_elem.options[i].selected = true;
		}
	}
	changeState(states_elem, districts_elem, schools_elem, freeform_elem,
			public_elem, private_elem, org_elem, use_mdr_elem);
}

function getFormElement(element_id) {
	var contact_form = $('longForm');
	return contact_form[element_id];
}

function findPrivatePublicValue(public_elem, private_elem) {
	var is_private = false;
	if (private_elem.checked) {
		is_private = true;
	}
	return is_private;
}

function prepareFreeForm(use_mdr, numOfDistrict, numOfSchool) {
	try {
		if (numOfDistrict == 0)
			getFormElement('mdrQuery.districtId').disabled = true;
		if (numOfSchool == 0)
			getFormElement('mdrQuery.schoolId').disabled = true;
		if (use_mdr) {
			getFormElement('mdrQuery.freeFormOrgName').disabled = true;
		}
	} catch (e) {
	}
}

function applyZip(zip_elem, states_elem, districts_elem, schools_elem,
		freeform_elem, public_elem, private_elem, org_elem, use_mdr_elem) {
	var zip_value = getFormValue(zip_elem);

	new Ajax.Request('/mdrweb/mdr.do', {
		parameters : {
			method :'getZipMdrInfo',
			zipcode :zip_value
		},
		method :'get',
		asynchronous :false,
		onSuccess : function(transport) {
			applyMdrForZip(transport.responseText, states_elem, districts_elem,
					schools_elem, freeform_elem, public_elem, private_elem,
					org_elem, use_mdr_elem);
		}
	});
}

function applyMdrForZip(mdrInfo, states_elem, districts_elem, schools_elem,
		freeform_elem, public_elem, private_elem, org_elem, use_mdr_elem) {
	if (mdrInfo != '') {
		public_elem.checked = true;
		private_elem.checked = false;

		cleanupOrganization(freeform_elem, org_elem);
		setUseMdr(use_mdr_elem, 'true');
		toggleFreeFormOrg(freeform_elem, org_elem, 'off', use_mdr_elem);

		var mdrs = new Array();
		mdrs = mdrInfo.split("|||");
		changeSelection(states_elem, mdrs[0]);
		getMdrOptions(districts_elem, mdrs[2], "-- Select a District --");
		changeSelection(districts_elem, mdrs[1]);
		getMdrOptions(schools_elem, mdrs[3], "-- Select a School --");
	}
}

function cleanupSchools(schools_elem) {
	getMdrOptions(schools_elem, "", "");
}

function cleanupDistricts(districts_elem, schools_elem) {
	getMdrOptions(districts_elem, "", "");
	cleanupSchools(schools_elem);
}
