var AUTOCOMPLETE_DATA = [];
var AUTOCOMPLETE_SELECTED = -1;

function hookAutoComplete(acFormName, acFieldName, acPageName)
{
	var acField = document[acFormName][acFieldName];
	
	if (!acField)
	{
		return false;
	}
	
	acField.setAttribute('autocomplete', 'off');
	acField.setAttribute('acPageName', acPageName);
	acField.setAttribute('onkeyup', 'AutoCompleteRequest(event, this, "' + acFormName + '");');
}

function AutoCompleteRequest(event, acField, acFormName)
{	
	if(window.event)
	{
		keyAscii = e.keyCode;
	}
	else if(event.which)
	{
		keyAscii = event.which;
	}
	
	if (keyAscii == KEY_ASCII_LEFT || keyAscii == KEY_ASCII_RIGHT)
	{
		return false;
	}
	
	if (keyAscii == KEY_ASCII_DOWN)
	{
		AutoCompleteMoveDown(acField.name);
		return true;
	}
	
	if (keyAscii == KEY_ASCII_UP)
	{
		AutoCompleteMoveUp(acField.name);
		return true;
	}
	
	if (keyAscii == KEY_ASCII_ENTER)
	{
		AutoCompleteSelect(acField);
		return true;
	}
	
	if (keyAscii == KEY_ASCII_ESC)
	{
		AutoCompleteHide(acField.name);
		return true;
	}
	
	if (acField.value.length >= 3)
	{
		AutoCompleteEmptyData();
		
		var req = new AJAX.Request(acField.getAttribute('acPageName') + '?' + 'action=api_autocomplete_' + acField.name + '&lang=' + CURRENT_LANG,
			{
				method: 'POST',
				parameters: ['value=' + acField.value, 'field=' + acField.name, 'form=' + acFormName],
				onComplete: function(e) { ajax_eval(e.responseText); }
			}
		);
	}
	else
	{
		AutoCompleteHide(acField.name);
	}
}

function AutoCompleteShow(acFormName, acFieldName)
{	
	if (AUTOCOMPLETE_DATA.length == 0)
	{
		AutoCompleteHide(acFieldName);
		return false;
	}
	
	var acField = document[acFormName][acFieldName];
	
	if ($(acFieldName + '_' + 'autocomplete'))
	{
		var acDiv = $(acFieldName + '_' + 'autocomplete');
		acDiv.innerHTML = '';
	}
	else
	{
		var acDiv = document.createElement('div');
		acDiv.id = acFieldName + '_' + 'autocomplete';
		acDiv.className = 'acPopup';	
	}
	
	for(acItemId = 0; acItemId < AUTOCOMPLETE_DATA.length; acItemId++)
	{/*
		var acItem = document.createElement('div');
		acItem.className = 'acItem';
		acItem.innerHTML = AUTOCOMPLETE_DATA[acItemId];
		acItem.setAttribute('onclick', 'AutoCompleteSelectClick("' + acFormName + '", "' + acFieldName + '", ' + acItemId + ')');
		acDiv.appendChild(acItem);
	*/

		var acItem = document.createElement('div');
		acItem.className = 'acItem';
		//acItem.innerHTML = AUTOCOMPLETE_DATA[acItemId];
		acItem.innerHTML = '<a class="acItem" style="font-weight:normal;text-decoration:none" href="javascript:AutoCompleteSelectClick(\'' + acFormName + '\', \'' + acFieldName + '\', ' + acItemId + ')">' + AUTOCOMPLETE_DATA[acItemId] + '</a>';
		//acItem.setAttribute('onclick', 'AutoCompleteSelectClick("' + acFormName + '", "' + acFieldName + '", ' + acItemId + ')');
		acDiv.appendChild(acItem);

	}
	
	acField.parentNode.insertBefore(acDiv,acField)
//	acField.parentNode.appendChild(acDiv);

}

function AutoCompleteHide(acFieldName)
{
	var acDiv = $(acFieldName + '_' + 'autocomplete');
	
	if (acDiv)
	{
		acDiv.parentNode.removeChild(acDiv);
	}
	
	AutoCompleteEmptyData();
}

function AutoCompleteItem(value)
{
	value = decode64(value);
	AUTOCOMPLETE_DATA.push(value);
}

function AutoCompleteEmptyData()
{
	AUTOCOMPLETE_DATA = [];
	AUTOCOMPLETE_SELECTED = -1;
}

function AutoCompleteMoveUp(acFieldName)
{
	if (AUTOCOMPLETE_SELECTED <= 0)
	{
		AUTOCOMPLETE_SELECTED = AUTOCOMPLETE_DATA.length - 1;
	}
	else
	{
		AUTOCOMPLETE_SELECTED--;
	}
	
	AutoCompleteOver(acFieldName, AUTOCOMPLETE_SELECTED);
}

function AutoCompleteMoveDown(acFieldName)
{
	AUTOCOMPLETE_SELECTED++;
	
	if (AUTOCOMPLETE_SELECTED > (AUTOCOMPLETE_DATA.length - 1))
	{
		AUTOCOMPLETE_SELECTED = 0;
	}
	
	AutoCompleteOver(acFieldName, AUTOCOMPLETE_SELECTED);
}

function AutoCompleteSelect(acField)
{
	if (typeof(AUTOCOMPLETE_DATA[AUTOCOMPLETE_SELECTED]) != 'undefined')
	{
		acField.value = AUTOCOMPLETE_DATA[AUTOCOMPLETE_SELECTED];
	}
	
	AutoCompleteHide(acField.name);
}

function AutoCompleteSelectClick(acFormName, acFieldName, acKey)
{
	if($(acFieldName))
	{
		var acField = $(acFieldName)
	}
	else
	{
		var acField = document[acFormName][acFieldName];
	}
	
	acField.value = AUTOCOMPLETE_DATA[acKey];
	AutoCompleteHide(acFieldName);
}

function remove_autocomplete(field)
{
	var suffix = '_autocomplete';
	
	if($(field.id + suffix))
	{
		$(field.id + suffix).parentNode.removeChild($(field.id + suffix));
	}
}

function remove_autocompleteby_id(field_id)
{
	var suffix = '_autocomplete';
	
	if($(field_id + suffix))
	{
		$(field_id + suffix).parentNode.removeChild($(field_id + suffix));
	}
}

function AutoCompleteOver(acFieldName, acKey)
{
	var acDiv = $(acFieldName + '_' + 'autocomplete');
	
	if (!acDiv)
	{
		return false;
	}
	
	elDivs = acDiv.getElementsByTagName('div');
	
	if (elDivs.length > 0)
	{
		for(elId = 0; elId < elDivs.length; elId++)
		{
			if (elId == acKey)
			{
				elDivs[elId].className = 'acItem acItemOver';
			}
			else
			{
				elDivs[elId].className = 'acItem';
			}
		}
	}
}
