﻿function AutoComplete_TextBoxOnBlur(sAvailableOptionsComboID,sAutoCompleteTextBoxID)
{
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	var oAutoCompleteTextBox = document.getElementById(sAutoCompleteTextBoxID); 
	
	if (oAvailableOptionsCombo.selectedIndex > 0)
	{
		oAutoCompleteTextBox.value = oAvailableOptionsCombo[oAvailableOptionsCombo.selectedIndex].text; 
		FireTextBoxChange(sAutoCompleteTextBoxID);
	}
	
	setTimeout ( 'document.getElementById(\'' + sAvailableOptionsComboID + '\').style.display = \'none\'', 500 );
}

function AutoComplete_ComboBoxFocusLost(sAvailableOptionsComboID)
{
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	
	oAvailableOptionsCombo.style.display = "none";
}

function TextBoxFocusLost(sAvailableOptionsComboID)
{
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	
	oAvailableOptionsCombo.style.display = "none";
}

function AutoComplete_ListKeyDown(e,sAvailableOptionsComboID,sAutoCompleteTextBoxID)
{
	e = e || event ;
	var iCode = (e.keyCode || e.charCode);
	
	if(iCode == 9)
	{
		var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
		var oAutoCompleteTextBox = document.getElementById(sAutoCompleteTextBoxID); 
	
		if ( oAvailableOptionsCombo.selectedIndex != -1)
		{
			oAutoCompleteTextBox.value = oAvailableOptionsCombo[oAvailableOptionsCombo.selectedIndex].text; 
			FireTextBoxChange(sAutoCompleteTextBoxID);
		}
		else
		{
			oAutoCompleteTextBox.value = "";
			FireTextBoxChange(sAutoCompleteTextBoxID);
		}
		
		if (oAvailableOptionsCombo.style.display == "inline")
			oAvailableOptionsCombo.style.display = "none";
		return;
	}
}

function AutoComplete_TextBoxOnKeyDown(e,sAvailableOptionsComboID,sAutoCompleteTextBoxID)
{
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	var oAutoCompleteTextBox = document.getElementById(sAutoCompleteTextBoxID); 
		
	e = e || event ;
	var iCode = (e.keyCode || e.charCode);
	
	if(iCode == 9)
	{
		
		if ( oAvailableOptionsCombo.selectedIndex != -1)
		{
			oAutoCompleteTextBox.value = oAvailableOptionsCombo[oAvailableOptionsCombo.selectedIndex].text; 
			FireTextBoxChange(sAutoCompleteTextBoxID);
		}
		else
		{
			oAutoCompleteTextBox.value = "";
			FireTextBoxChange(sAutoCompleteTextBoxID);
		}
		if (oAvailableOptionsCombo.style.display == "inline")
			oAvailableOptionsCombo.style.display = "none";
		return;
	}
	
	if(iCode == 38 || iCode == 40) 
	{
		oAvailableOptionsCombo.focus();
	}
}

//add backspace , tab , escape , enter handling .
// handle empty value .
// handle not found situation.
//handle backspace , tab , escape , enter on list
//handle setform data , collect data , setfieldenum , setvalidation type .
function AutoComplete_AutoCompleteKeyUp(e,sAvailableOptionsComboID,sAutoCompleteTextBoxID)
{	
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	var oAutoCompleteTextBox = document.getElementById(sAutoCompleteTextBoxID); 
	
	e = e || event ;
	var iCode = (e.keyCode || e.charCode);
	
	if(iCode == 27)
	{
		if ( oAvailableOptionsCombo.selectedIndex != -1)
		{
			oAutoCompleteTextBox.value = oAvailableOptionsCombo[oAvailableOptionsCombo.selectedIndex].text; 
			FireTextBoxChange(sAutoCompleteTextBoxID);
		}
		else
		{
			oAutoCompleteTextBox.value = "";
			FireTextBoxChange(sAutoCompleteTextBoxID);
		}
		
		if (oAvailableOptionsCombo.style.display == "inline")
			oAvailableOptionsCombo.style.display = "none";
		return 
	}
	if(iCode == 13)
	{
		if ( oAvailableOptionsCombo.selectedIndex != -1)
		{
			oAutoCompleteTextBox.value = oAvailableOptionsCombo[oAvailableOptionsCombo.selectedIndex].text; 
			FireTextBoxChange(sAutoCompleteTextBoxID);
		}
		else
		{
			oAutoCompleteTextBox.value = "";
			FireTextBoxChange(sAutoCompleteTextBoxID);
		}
		
		if (oAvailableOptionsCombo.style.display == "inline")
			oAvailableOptionsCombo.style.display = "none";
		return 
	}
	
	
	if (oAvailableOptionsCombo.style.display == "none")
		oAvailableOptionsCombo.style.display = "inline";
	
	
	if (oAvailableOptionsCombo.style.display == "none")
		oAvailableOptionsCombo.style.display = "inline";
	
	autoComplete(oAutoCompleteTextBox, oAvailableOptionsCombo , 'text',true, iCode);
	FireTextBoxChange(sAutoCompleteTextBoxID);
	FireComboBoxChange(sAvailableOptionsComboID);
}

function AutoComplete_ListKeyUp(e,sAvailableOptionsComboID,sAutoCompleteTextBoxID)
{
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	var oAutoCompleteTextBox = document.getElementById(sAutoCompleteTextBoxID); 
	
	e = e || event ;
	var iCode = (e.keyCode || e.charCode);
	
	if(iCode == 38 || iCode == 40) 
	{
		oAutoCompleteTextBox.value = oAvailableOptionsCombo[oAvailableOptionsCombo.selectedIndex].text; 
	}
	if (iCode == 13)
	{
		AutoComplete_ForceValues(sAvailableOptionsComboID,sAutoCompleteTextBoxID);
	}
	else
	{
		FireTextBoxChange(sAutoCompleteTextBoxID);
	}
}

function AutoComplete_ListClick(sAvailableOptionsComboID,sAutoCompleteTextBoxID)
{
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	var oAutoCompleteTextBox = document.getElementById(sAutoCompleteTextBoxID); 
	
	oAutoCompleteTextBox.value = oAvailableOptionsCombo[oAvailableOptionsCombo.selectedIndex].text; 
	FireTextBoxChange(sAutoCompleteTextBoxID);
}
function AutoComplete_ForceValues(sAvailableOptionsComboID,sAutoCompleteTextBoxID)
{
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	var oAutoCompleteTextBox = document.getElementById(sAutoCompleteTextBoxID); 
	
	oAutoCompleteTextBox.value = oAvailableOptionsCombo[oAvailableOptionsCombo.selectedIndex].text; 
	FireTextBoxChange(sAutoCompleteTextBoxID);
	oAvailableOptionsCombo.style.display = "none" ;
}

function autoComplete (field, select, property, forcematch, iCode) 
{
	var found = false; 
	var cursorKeys =';8;46;37;38;39;40;33;34;35;36;45;'; 
	
	if(field.value.length==0) 
	{
		select.selectedIndex = 0;
		return; 
	}
	
	for (var i = 0; i < select.options.length; i++) 
	{
		if (select.options[i][property].toUpperCase().indexOf(field.value.toUpperCase()) == 0) 
		{
			found=true; 
			break; 
		}
	}
	
	if (found) 
	{ 
		select.selectedIndex = i; 
	} 
	else 
	{ 
		//select.selectedIndex = 0; 
	} 
	
	if (field.createTextRange) 
	{
		if (forcematch && !found) 
		{
			field.value=field.value.substring(0,field.value.length-1); 
			return; 
		}
	
	
		if (cursorKeys.indexOf(';'+ iCode +';') == -1) 
		{
			var r1 = field.createTextRange(); 
			var oldValue = r1.text; 
			var newValue = found ? select.options[i][property] : oldValue; 
			if (newValue != field.value) 
			{
					field.value = newValue; 
					var rNew = field.createTextRange(); 
					rNew.moveStart('character', oldValue.length); 
					rNew.select(); 
			}
		}
	}
}

function FireTextBoxChange(sAutoCompleteTextBoxID) 
{
	var oAutoCompleteTextBox = document.getElementById(sAutoCompleteTextBoxID); 
	
	//oAutoCompleteTextBox.fireEvent('onchange'); 
}
function FireComboBoxChange(sAvailableOptionsComboID)
{
	var oAvailableOptionsCombo = document.getElementById(sAvailableOptionsComboID); 
	
	//oAvailableOptionsCombo.fireEvent('onchange'); 
}