// ***************************************************************
//
//		GLOBAL VARS
//
// ***************************************************************

var KEY_BACKSPACE = 8;
var KEY_DELETE = 46;
var KEY_DOWN = 40;
var KEY_UP = 38;
var KEY_ENTER = 13;
var KEY_ESCAPE = 27;
var TYPEDWORD = "_typedWord";



// ***************************************************************
//
//		FUNCIONES AUXILIARES
//
// ***************************************************************

// Obtiene el array de opciones de selectFieldId
function getOptions(selectFieldId){
	return document.getElementById(selectFieldId).options;
}

function getSelectedIndex(selectFieldId)
{
	return document.getElementById(selectFieldId).selectedIndex;
}

function setSelectedIndex(selectFieldId, index)
{
	document.getElementById(selectFieldId).options[index].selected = true;
}

function getTypedWord(selectFieldId)
{
	return document.getElementById(selectFieldId + TYPEDWORD).value;
}

function clearTypedWord(selectFieldId)
{
	document.getElementById(selectFieldId + TYPEDWORD).value = "";
}

function updateTypedWord(selectFieldId, key)
{
	document.getElementById(selectFieldId + TYPEDWORD).value += String.fromCharCode(key);
}

// -----------------------------------------------------------------------------
// Busca el texto escrito en las opciones
// Si se encuentra se actualiza la cadena de caracteres escrita hasta el 
// momento.
// -----------------------------------------------------------------------------
function findOption(selectFieldId, key){

	// "i" -> ignoreCase
    var re = new RegExp("^" + getTypedWord(selectFieldId) + String.fromCharCode(key), "i");
    var options = getOptions(selectFieldId);
    
    for(var i=0; i<options.length; i++)
    {
        if(re.test(options[i].text))
        {
            setSelectedIndex(selectFieldId,i);
            updateTypedWord(selectFieldId, key);
            break;
        }
    }
    
    return false;

}

function getKey( keyCode, which )
{
	if (keyCode)	// IE
		return keyCode;
	else	// Reste
		return which;
}

/*
	Tab			  		  9
	Shift				 16
	Ctrl				 17
	Alt					 18
	Pause/Break			 19
	CapsLock			 20
	Page Up		 		 33
	Page Down		 	 34
	End			 		 35
	Home			 	 36
	LeftArrow		 	 37
	RightArrow		 	 39
	PrintScreen / Syst	 44
	Insert		 		 45
	F1					112
	F2					113
	F3					114
	F4					115
	F5					116
	F6					117
	F7					118
	F8					119
	F9					120
	F10					121
	F11					122
	F12					123
	NumLock				144
	ScrollLock			145	
*/
function isSpecialKey(keyCode)
{
	var pattern = "|9|16|17|18|19|20|33|34|35|36|37|39|44|45|112|113|114|115|116|117|118|119|120|121|122|123|144|145|";
	
	return pattern.indexOf("|" + keyCode + "|") > -1;
}


// ***************************************************************
//
//		FUNCIONES PRINCIPALES
//
// ***************************************************************

function computeSelectFocus(selectFieldId)
{
	clearTypedWord(selectFieldId);
	return;
}

function computeSelectBlur(selectFieldId)
{
	clearTypedWord(selectFieldId);
	return;
}

// ---------------------------------------------------------
// Busca el indice que corresponde a los caracteres escritos
// ---------------------------------------------------------
function computeSelectKeyUp(selectFieldId, key)
{
	if (key != KEY_DOWN && key != KEY_UP && key != KEY_ENTER && key != KEY_ESCAPE && !isSpecialKey(key))
	{
		findOption(selectFieldId, key);
		return false;
	}
	
}

function computeSelectKeyDown(selectFieldId, key){
	if (key == KEY_DOWN || key == KEY_UP) {
		clearTypedWord(selectFieldId);
		return;
	}
}

function computeSelectKeyPress(selectFieldId, key)
{
	return false;
}
		