// JavaScript Document

var AutoComplete;
if (!AutoComplete) AutoComplete = {};

AutoComplete = function(textboxID, parentID, tableSelectID, url, callback, callbackArgs)
{
	this.parentID = parentID;
	this.tableSelectID = tableSelectID;
	this.scrolling = false;
	this.textbox = document.getElementById(textboxID);
	this.parent = document.getElementById(parentID);
	this.AJAXurl = url;
	
	if (callback) this.callback = callback;
	if (callbackArgs) this.callbackArgs = callbackArgs;

	var self = this;
	if (this.textbox) {
		this.textbox.setAttribute('autocomplete', 'off');
		this.textbox.onblur = function(e) { self.AJAXClick(e); }
		this.textbox.onkeydown = function(e) { self.checkKey(e); }
		this.textbox.onkeyup = function(e) { self.getList(e); }
	}
	if (this.parent) this.parent.onchange = function(e) { self.getList(e); }
	
	this.scrolling = false;
	this.selectedValue = "";
	this.selectedIndex = -1;
}

AutoComplete.prototype.getList = function()
{
	if (!this.scrolling)
	{
		if (this.parent)
			var typeText = "&type=" + this.parent.value;
		
		this.selectedIndex = -1;
		this.selectedValue = "";
		
		var url = this.AJAXurl + "?text=" + this.textbox.value + "&table=" + this.tableSelectID;
		if (typeText)
			url += typeText;

		var self = this;
		getAJAX(url, null, null, function(obj, xml){self.showList(obj, xml)});
	}
}

AutoComplete.prototype.showList = function(obj, xmlhttp)
{
	this.removeDiv();

	if (!xmlhttp || !xmlhttp.responseText || xmlhttp.responseText == "")
		return;
	
	var div = document.createElement('div');
	div.innerHTML = xmlhttp.responseText;
	document.body.appendChild(div);
	
	var table = document.getElementById(this.tableSelectID);
	if (!table)
		return;
	
	table.style.left = findPos(this.textbox).left + "px";
	table.style.top = findPos(this.textbox).top + this.textbox.offsetHeight + "px";
	table.style.width = this.textbox.offsetWidth + "px";
	
	var self = this;
	for (var i = 0; i < table.rows.length; i++)
	{
		table.rows[i].cells[0].onmouseover = function() { self.selectOption(this); }
	}
}

AutoComplete.prototype.checkKey = function(event)
{
	var key;
	if (window.event)
		key = window.event.keyCode;
	else if (event)
		key = event.which;
	
	if (key == 38)
		this.scrollAC(-1);
	else if (key == 40)
		this.scrollAC(1);
	else if (key == 13)
	{
		this.AJAXClick();
		return false;
	}
	else
		this.scrolling = false;
}

AutoComplete.prototype.scrollAC = function(dir)
{
	this.scrolling = true;
	var index;
	var tableSelect = document.getElementById(this.tableSelectID);
	var size = tableSelect.rows.length;

	var oldIndex = this.selectedIndex;
	index = this.selectedIndex + dir;
	if (index < 0)
		index = size - 1;
	else if (index >= size)
		index = 0;
	
	this.selectOption(tableSelect.rows[index].cells[0]);
	
}

AutoComplete.prototype.selectOption = function(tdElem)
{
	var tableSelect = document.getElementById(this.tableSelectID);
	this.selectedIndex = tdElem.parentNode.rowIndex;
	this.selectedValue = tdElem.innerHTML;
	tdElem.className = "ajax_selected";
	for (var i = 0; i < tableSelect.rows.length; i++)
	{
		if (i != this.selectedIndex)
			this.removeSelect(tableSelect.rows[i].cells[0]);
	}
}

AutoComplete.prototype.removeSelect = function(tdElem)
{
	tdElem.className = "ajax_unselected";
}

AutoComplete.prototype.AJAXClick = function()
{
	if (document.getElementById(this.tableSelectID))
	{
		this.textbox.value = this.selectedValue;
		if (this.callback)
		{
			var tableSelect = document.getElementById(this.tableSelectID);
			var arg = tableSelect.rows[this.selectedIndex].cells[0].attributes.value.value;
			
			if (!this.callbackArgs)
				this.callback(arg);
			else
				this.callback(arg, this.callbackArgs);
		}
		this.removeDiv();
	}
	else if (document.location.href.indexOf('mail') != -1)
	{
		if (this.callback)
		{
			var arg = this.textbox.value;
			
			if (!this.callbackArgs)
				this.callback(arg);
			else
				this.callback(arg, this.callbackArgs);
		}
	}
		
}

AutoComplete.prototype.removeDiv = function()
{
	var table = document.getElementById(this.tableSelectID);
	if (table)
	{
		if (!table.parentNode.parentNode)
			table.parentNode.removeChild(table);
		else
			table.parentNode.parentNode.removeChild(table.parentNode);
	}
	
	this.selectedValue = '';
	this.selectedIndex = -1;
}

function getMemberID(memberID, memberIDInput)
{
	document.getElementById(memberIDInput).value = memberID;	
}

function getMemberIDs(memberID, memberIDInput)
{
	var input = $(memberIDInput);
	if ( memberID != "") {
		if (input.value == "")
			input.value = memberID;	
		else
			input.value += "," + memberID
			
		var text = $('rcptName');
		$('AutoCompleteInputBox').innerHTML += " <span id=\"MemberName" + memberID + "\">" + text.value + "&nbsp;<a href=\"javascript: removeMailRcpt('" + memberID + "');\">[X]</a></span>";
		$('rcptName').value = '';
		window.setTimeout("$('rcptName').focus();", 50);
	}
}

function removeMailRcpt(memberID)
{
	var input = $('rcptID');
	var inputArray = input.value.split(',');
	var newInput = [];
	for (var i = 0; i < inputArray.length; i++)
		if (inputArray[i] != memberID)
			newInput[newInput.length] = inputArray[i];
	input.value = newInput.join(',');
	
	var name = $('MemberName' + memberID);
	name.parentNode.removeChild(name);
}

function reportRedirect(memberID, url)
{
	document.location.href = url + memberID;
}