function toggleDisplay(toggle, id) {
	getStyleObject(id).display = toggle.checked ? "block" : "none";
}
function displayToggled(name) {
	getStyleObject(name+'Input').display = (document.forms.compoundSearch[name+'Toggle'].checked) ? "block" : "none";
}
function showCheckedElements() {
	displayToggled("category");
	displayToggled("engineer");
	displayToggled("period");
	displayToggled("location");
	displayToggled("keyword");
}
function resetCompoundForm() {
	var f = document.forms.compoundSearch;
	f.categoryToggle.checked = true;
	f.category.selectedIndex = 0;
	f.categoryX.value="N";
	f.engineerToggle.checked = false;
	f.engineer.selectedIndex = 0;
	f.engineerX.value = "N";
	f.engineerName.value = "";
	f.periodToggle.checked = false;
	f.period.selectedIndex = 0;
	f.periodX.value = "N";
	f.dateRangeFrom.value = "";
	f.dateRangeTo.value = "";
	f.dateFrom.value = "";
	f.dateTo.value = "";
	f.dateRangeX.value = "N";
	f.locationToggle.checked = false;
	f.region.selectedIndex = 0;
	f.regionX.value = "N";
	f.town.value = "";
	f.townX.value = "N";
	f.OS.value = "";
	f.OSX.value = "N";
	f.keywordToggle.checked = false;
	f.keywords.value = "";
	showCheckedElements();
}
function getRadioGroupMode(r) {
	var i;
	for (i = 0; i < r.length; i++)
		if (r[i].checked)
			return r[i].value;
	return "";
}
function setRadioGroupMode(r, name) {
	var i;
	for (i = 0; i < r.length; i++)
		if (r[i].value == name)
			r[i].checked = true;
}
function setEngineerMode(name) {
	setRadioGroupMode(document.forms.compoundSearch.engineerMode, name);
}
function setLocationMode(name) {
	setRadioGroupMode(document.forms.compoundSearch.locationMode, name);
}
function setPeriodMode(name) {
	setRadioGroupMode(document.forms.compoundSearch.periodMode, name);
}
function isPrefix(str, prefix) {
	if (prefix.length > str.length) return false;
	return str.substring(0,prefix.length) == prefix;
}
function submitCompoundSearch() {
	var criteria = false;
	var f = document.forms.compoundSearch;
	if (f.categoryToggle.checked && f.category.selectedIndex != -1) {
		f.categoryX.value = "Y";
		criteria = true;
		}
	else {
		f.categoryX.value = "N"	
		}
	if (f.engineerToggle.checked) {
		if (getRadioGroupMode(document.forms.compoundSearch.engineerMode) == 'byName') {
			var name = document.forms.compoundSearch.engineerName.value;
			if (name == "") {
				alert("Please enter an engineer name\nor select from the list");
				return;
				}
			var matchingEngineers = new Array();
			var sel = document.forms.compoundSearch.engineer;
			sel.selectedIndex = -1;
			var opts = sel.options;
			var i;
			for (i = 0; i < opts.length; i++) {
				if (isPrefix(opts[i].text.toLowerCase(),name.toLowerCase())) {
					opts[i].selected = true;
					matchingEngineers[matchingEngineers.length] = i;
					}
				}
			var totalMatching = matchingEngineers.length;
			if (totalMatching == 0) {
				alert("Sorry, no engineers match the name '" + name + "'");
				return;
				}
			else {
				f.engineerX.value = "Y";
				criteria = true;
				}
			}
		else if (f.engineer.selectedIndex != -1) {
			f.engineerX.value = "Y";
			criteria = true;
			}
		}
	else {
		f.engineerX.value = "N";	
		}
	if (f.periodToggle.checked) {
		if (getRadioGroupMode(document.forms.compoundSearch.periodMode) == 'byEra') {
			if (f.period.selectedIndex == -1) {
				alert("Please select an era");
				return;
				}
			else {
				f.periodX.value = "Y";
				criteria = true;
				}
			}
		else {
			var dr1 = new DateRange(f.dateRangeFrom.value);
			var dr2 = new DateRange(f.dateRangeTo.value);
			if (dr1.error && dr2.error) {
				alert("Please enter a valid date range");
				return;
				}
			else if (dr1.error)
				dr1 = dr2;
			else if (!dr2.error)
				dr1.mergeWith(dr2);
			var dates = dr1.asSortDates();
			f.dateFrom.value = dates[0];
			f.dateTo.value = dates[1];
			f.dateRangeX.value = "Y";
			criteria = true;
			}
		}
	else {
		f.periodX.value="N";
		f.dateRangeX.value = "N";
		}
	if (f.locationToggle.checked) {
		if (getRadioGroupMode(document.forms.compoundSearch.locationMode) == 'byTown') {
			if (f.town.value == "") {
				alert("Please enter a town name");
				return;
				}
			else {
				f.townX.value = "Y"
				f.regionX.value = "N"
				f.OSX.value = "N"
				criteria = true;			
				}
			}
		else if (getRadioGroupMode(document.forms.compoundSearch.locationMode) == 'byRegion') {
			if (f.region.selectedIndex == -1) {
				alert("Please select a region");
				return;
				}
			else {
				f.regionX.value = "Y"
				f.townX.value = "N"
				f.OSX.value = "N"
				criteria = true;
				}
			}
			
		else {
			if (f.OS.value == "") {
				alert("Please enter an OS grid reference");
				return;
				}
			else {
				f.OSX.value = "Y"
				f.townX.value = "N"
				f.regionX.value = "N"
				criteria = true;			
				}		
			}
	
		}
	else {
		f.townX.value="N";
		f.regionX.value="N";
		f.OSX.value="N";
		}
	if (f.keywordToggle.checked && f.keywords.value != "") {
		f.keywordsX.value = "Y"
		criteria = true;
		}
	else {
		f.keywordsX.value="N";
		}
	if (criteria)
		f.submit();
	else
		alert("Please select your search criteria");
}
