function htmlEncode(str) {
	str = str.replace('&','&amp;');
	str = str.replace('<','&lt;');
	str = str.replace('>','&gt;');
	str = str.replace('"','&quot;');
	return str;
}

function sortByFirstName(a, b) {
	var x = a.firstName.toLowerCase();
	var y = b.firstName.toLowerCase();
	return ((x < y) ? -1 : ((x > y) ? 1 : sortByMiddleName(a, b)));
}

function sortByMiddleName(a, b) {
	var x = a.middleName.toLowerCase();
	var y = b.middleName.toLowerCase();
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function sortByLastName(a, b) {
	var x = a.lastName.toLowerCase();
	var y = b.lastName.toLowerCase();
	return ((x < y) ? -1 : ((x > y) ? 1 : sortByFirstName(a, b)));
}

function sortPeople() {
	people.sort(sortByLastName);
}

sortPeople();	// sort people by last name, first name, middle name

function searchMatch(record) {
	var matchHtml = "";
	matchHtml += '<tr>\n';
	matchHtml += '<td><img src="/images/bullet_arrow2.gif" border="0"  height="16" width="9" /></td>\n';
	matchHtml += '<td><a href="' + 
		htmlEncode(record.bio) + '"><b>' + 
		htmlEncode(record.firstName) + " " + 
		(record.middleName.length == 1 ? htmlEncode(record.middleName) + "." : htmlEncode(record.middleName))  + " " + 
		htmlEncode(record.lastName) + '</b></a></td>\n';
	matchHtml += '<td align="center"><a href="' + 
		htmlEncode(record.vcard) + '"><img src="/images/vcard.gif" border="0" title="Download V-Card" alt="V-Card"  height="14" width="14" /></a></td>\n';
	matchHtml += '<td><a href="mailto:' + 
		htmlEncode(record.email) + '">' + 
		htmlEncode(record.email) + '</a></td>\n';
	matchHtml += '</tr>\n';
	return matchHtml;
}

function searchResults(matches) {
	var resultsHtml = "";
	resultsHtml += '<table cellpadding="3" cellspacing="0" class="results">';
	resultsHtml += '<tr>\n';
	resultsHtml += '<th>&nbsp;</th>\n';
	resultsHtml += '<th align="left">NAME &amp; BIO</th>\n';
	resultsHtml += '<th align="center">VCARD</th>\n';
	resultsHtml += '<th align="left">EMAIL</th>\n';
	resultsHtml += '</tr>\n';
	resultsHtml += matches;
	resultsHtml += '</table><br />';
	return resultsHtml;
}

function peopleSearch(elm) {
	
	var errorMsg = "";
	
	var resultsDiv = document.getElementById("search_results");
	resultsDiv.innerHTML = "";	// clear results
	
	var errorDiv = document.getElementById("error_msg");
	errorDiv.innerHTML = "";	// clear errors
	
	for (var i = 0; i < elm.form.length; i++) {
		if (elm.form[i].id != elm.id) {
			if (elm.form[i].type == "select-one") {
				// select list
				elm.form[i].selectedIndex = -1;		
			}
			else {
				// text input
				elm.form[i].value = "";	
			}
		}
	}

	if (elm.id == "range") {
		var range = elm.options[elm.selectedIndex].value;
		if (range != "") {
			// get letter range
			var letters = range.match(/([A-Z])-([A-Z])/i);
			var minLetter = letters[1];
			var maxletter = letters[2];
	
			var matches = "";
			for (var i = 0; i < people.length; i++) {
				var firstLetter = people[i].lastName.substr(0,1);
				if (firstLetter >= minLetter && firstLetter <= maxletter) {
					matches += searchMatch(people[i]);
				}
			}
	
			if (matches != "") {
				resultsDiv.innerHTML = searchResults(matches);
			}
			else {
				errorMsg = 'There were no matches found with a last name between ' + htmlEncode(range) + '. Please try again.';
			}
		}
	}

	if (elm.id == "position") {
		var position = elm.options[elm.selectedIndex].value.toLowerCase();
		if (position != "") {
			var matches = "";
			for (var i = 0; i < people.length; i++) {
				if (position == people[i].position.toLowerCase()) {
					matches += searchMatch(people[i]);
				}
			}
	
			if (matches != "") {
				resultsDiv.innerHTML = searchResults(matches);
			}
			else {
				errorMsg = 'There were no ' + htmlEncode(position) + 's found. Please try again.';
			}
		}
	}

	if (elm.id == "first_name") {
		var firstName = elm.value;
		if (firstName != "") {
			// build search regular expression
			var regex = new RegExp("^" + firstName, "i");
	
			var matches = "";
			for (var i = 0; i < people.length; i++) {
				if (people[i].firstName.search(regex) != -1) {
					matches += searchMatch(people[i]);
				}
			}
	
			if (matches != "") {
				resultsDiv.innerHTML = searchResults(matches);
			}
			else {
				errorMsg = 'There were no matches found with a first name starting with "' + htmlEncode(firstName) + '." Please try again.';
			}
		}
	}

	if (elm.id == "last_name") {
		var lastName = elm.value;
		if (lastName != "") {
			// build search regular expression
			var regex = new RegExp("^" + lastName, "i");
	
			var matches = "";
			for (var i = 0; i < people.length; i++) {
				if (people[i].lastName.search(regex) != -1) {
					matches += searchMatch(people[i]);
				}
			}
	
			if (matches != "") {
				resultsDiv.innerHTML = searchResults(matches);
			}
			else {
				errorMsg = 'There were no matches found with a last name starting with "' + htmlEncode(lastName) + '." Please try again.';
			}
		}
	}

	if (errorDiv) {
		errorDiv.innerHTML = errorMsg;
	}

	return false;
}