
//################## Autocomplete #######################

var autocompleteSelectedRow = "";
var autocompleteLastDisplay = new Array();
var autocompleteCurrentFieldName = "";

function setAutocompleteResult() {
	$("tr[@id^=autocomplete_row_]").mouseover(function (e) {
		var target;
		if (e.target)
			target = e.target;
		else
			target = e.srcElement;
		
			
		$("#" + autocompleteSelectedRow).removeClass("highlightRowHover");
		
		autocompleteSelectedRow = this.id;
		
		$("#" + autocompleteSelectedRow).addClass("highlightRowHover");	
		
	});
	
	$("tr[@id^=autocomplete_row_]").mouseout(function (e) {
		$("#" + autocompleteSelectedRow).addClass("highlightRowHover");
	});
}

function setAutocompleteField(moduleName, fieldName, allowEmptySearchBool, allowEmptyValue) {
	//Check util.js for document wide onmousedown event
	
	$("#" + fieldName + "AcField").mouseup(function (e) {
		var module = moduleName;
		var name = fieldName;
		var allowEmptySearch = allowEmptySearchBool;
		var lastVal = $("#" + name + "AcField").val();
		
		doSearch(lastVal, module, name, allowEmptySearch);
	});
	
	$("#" + fieldName + "AcField").select(function (e) {
		var module = moduleName;
		var name = fieldName;
		var allowEmptySearch = allowEmptySearchBool;
		var lastVal = $("#" + name + "AcField").val();
		
		doSearch(lastVal, module, name, allowEmptySearch);
	});
	
	$("#" + fieldName + "AcField").focus(function (e) {
		var module = moduleName;
		var name = fieldName;
		var allowEmptySearch = allowEmptySearchBool;
		var lastVal = $("#" + name + "AcField").val();
		
		doSearch(lastVal, module, name, allowEmptySearch);
	});
	
	$("#" + fieldName + "AcField").keypress(function (e) {
		
		if (window.event)
			var keyCode = window.event.keyCode;
		else
			var keyCode = e.keyCode;
			
		if (keyCode == 13 || keyCode == 38 || keyCode == 40) {
			e.preventDefault();
			e.stopPropagation();
			return false;
		}
		else
			if (keyCode == 9) {
				$("#" + autocompleteSelectedRow).trigger('mousedown');
				$("#autoComplete").remove();
			}
		
	});
	
	// on key up listener
	$("#" + fieldName + "AcField").keyup(function (e) {
		
		// get keyCode (window.event is for IE)
		var module = moduleName;
		var name = fieldName;
		var allowEmptySearch = allowEmptySearchBool;
		var lastVal = $("#" + name + "AcField").val();
		
		if (window.event)
			var keyCode = window.event.keyCode;
		else
			var keyCode = e.keyCode;

		switch(keyCode) {
			case 38:
			case 40:
				var currRow = document.getElementById(autocompleteSelectedRow);
				
				if (currRow) {
					switch(keyCode) {
						case 38:
							newRow = previousObject(currRow);
							break;
						
						case 40:
							newRow = nextObject(currRow);
							break;
					}
					
					if (newRow) {
						currRow.className = "";
						newRow.className = "highlightRowHover";
						autocompleteSelectedRow = newRow.id;
					}
				}
				break;
			
			//ENTER	
			case 13:
				$("#" + autocompleteSelectedRow).trigger('mousedown');
				$("#autoComplete").remove();
				break;
			
			case 27: //ESC
				autocompleteRevertField();
			
				/*
				if (autocompleteLastDisplay[name] != "") {
					$("#" + name + "AcField").val(autocompleteLastDisplay[name]);
				}
				else {
					$("#" + name).removeAttr("value");
					$("#" + name + "AcField").removeAttr("value");
				}
					
				$("#autoComplete").remove();
				*/
				break;
			
			default:
				doSearch(lastVal, module, name, allowEmptySearch);
				break;
		}
	
		e.preventDefault();
		e.stopPropagation();
		return false;
	});
}

function doSearch(lastVal, module, name, allowEmptySearch) {
	setPositionObj(name + "AcField");
				
	toolsOrdered.autocompleteSearch(lastVal, module, name, coordX, coordY, objWidth, objHeight, allowEmptySearch);
}

function autocompleteRevertField(id) {
	if (id == undefined || id == "") {
		id = autocompleteCurrentFieldName;
	}
	
	if (autocompleteLastDisplay[id] != undefined && autocompleteLastDisplay[id] != "") {
		$("#" + id + "AcField").val(autocompleteLastDisplay[id]);
		
		autocompleteSetDelete(true, id);
	}
	else {
		$("#" + id).removeAttr("value");
		$("#" + id + "AcField").removeAttr("value");
		
		autocompleteSetDelete(false, id);
	}
	
	$("#autoComplete").remove();
}

function autocompleteSetDelete(toggle, id) {
	if (id == undefined || id == "") {
		id = autocompleteCurrentFieldName;
	}
	
	var srcDelete = $("#" + id + "AcFieldDelete").attr('src');
	
	if (srcDelete) {
		srcDelete = srcDelete.substring(0, srcDelete.indexOf('inputDelete')) + "inputDelete";
		
		if (toggle)
			srcDelete += ".png";
		else
			srcDelete += "Off.png";
		
		$("#" + id + "AcFieldDelete").attr('src', srcDelete);
	}
}

function autocompleteSetSelection(id, realValue, fakeValue) {
	var objReal = document.getElementById(id);
	var objFake = document.getElementById(id + "AcField");
	var objAutocomplete = document.getElementById("autoComplete");
	
	if (objReal && objFake && objAutocomplete) {
		objReal.value = realValue;
		objFake.value = autocompleteLastDisplay[id] = fakeValue;
		objAutocomplete.parentNode.removeChild(objAutocomplete);
		
		autocompleteSetDelete(true);
		
		eval("if (typeof " + id + "Changed==\"function\"){" + id + "Changed('" + id + "');}");
	}
}