// Written by Ian Henderson in 2005.  Copy and modify freely, as long as this line is present and unmodified.

var key_delete = 8;
var key_leftarrow = 37;
var key_uparrow = 38;
var key_rightarrow = 39;
var key_downarrow = 40;

var possibleTopics = new Array();
var topicIndex = 0;
var topicField = null;
var selectedLength = 0;

function nextTopic()
{
	topicIndex++;
	if (topicIndex >= possibleTopics.length) {
		topicIndex = 0;
	}
	completeTopic();
}

function prevTopic()
{
	topicIndex--;
	if (topicIndex < 0) {
		topicIndex = possibleTopics.length-1;
	}
	completeTopic();
}

function partialTopic()
{
	var topics = topicField.value.split(" ");
	return topics[topics.length-1];
}

function canUseAutocomplete()
{
	if (!topicField) {
		return false;
	} else if (topicField.setSelectionRange) {
		return true;
	} else if (topicField.createTextRange) {
		return true;
	}
	return false;
}

function safeSetSelectionRange(field, start, end)
{
	if (field.setSelectionRange) {
		field.setSelectionRange(start, end);
	} else if (field.createTextRange) {
		range = field.createTextRange();
		range.moveEnd("character", end);
		range.moveStart("character", start);
		range.select();
	}
}

function completeTopic()
{
	if (!canUseAutocomplete()) {
		return;
	}
	var partial = partialTopic();
	var completion = possibleTopics[topicIndex];
	if (!completion) {
		selectedLength = 0;
		return;
	}
	var lengthExceptLast = topicField.value.length - partial.length;
	completion = completion.substring(partial.length, completion.length);
	originalLength = topicField.value.length - completion.length;
	topicField.value += completion;
	safeSetSelectionRange(topicField, lengthExceptLast + partial.length, lengthExceptLast + topicField.value.length);
	selectedLength = completion.length;
}

function generatePossibleTopics(text)
{
	possibleTopics = eval(text);
	if (topicIndex >= possibleTopics.length) {
		topicIndex = 0;
	}
	completeTopic();
}

function clearCompletedSelection()
{
	var topics = topicField.value;
	topicField.value = topics.substring(0, topics.length-selectedLength);
	selectedLength=0;
	safeSetSelectionRange(topicField, topicField.value.length, topicField.value.length);
}

function topicKeyUp(event)
{
	topicField = objectOfEvent(event);
	if (!_canUseXMLHttp || !canUseAutocomplete()) {
		return;
	}
	var keyCode = event.keyCode;
	if (keyCode == key_uparrow) {
		nextTopic();
	} else if (keyCode == key_downarrow) {
		prevTopic();
	} else if (keyCode == key_delete) {
		// do nothin
	} else {
		if (loading()) {
			dropQueuedHttpRequests();
		}
		xmlHttpRequestPage("topics.php", {partial:partialTopic()}, "GET", "generatePossibleTopics", false);
	}
}

function topicKeyDown(event)
{
	topicField = objectOfEvent(event);
	if (!_canUseXMLHttp || !canUseAutocomplete()) {
		return;
	}
	var keyCode = event.keyCode;
	if (keyCode == key_uparrow || keyCode == key_downarrow || keyCode == key_delete) {
		clearCompletedSelection();
	}
}
