var selectedByKbd = false;
var selectIndex = 0;
var elementOnKeyPressF = new Array(100);
var elementOnKeyDownF  = new Array(100);
var elementOnChangeF   = new Array(100);

function checkStateProgress()
{
    if(document.readyState == null) return;
    if(document.readyState != 'complete'){ setTimeout('checkStateProgress()',100); return; }
    var eLen = document.all.length;
    var idx  = 0;
    var i;
    for(i=0; i < eLen; i++)
    {   if(!(document.all[i].allowModifiedKeyboardNaviagtion == 'true')) continue;
        selectKeyHandler_init(document.all[i], idx);
        idx++;
    }
}

function selectKeyHandler_init(elem, id)
{
	elem.sIndex = id;
	elementOnKeyDownF[id] = elem.onkeydown;
	elem.onkeydown  = processKeyDown;
	elementOnKeyPressF[id] = elem.onkeypress;
	elem.onkeypress = processKeyPress;
	elementOnChangeF[id] = elem.onchange;
	elem.onchange   = processSelect;
}

function processKeyDown()
{
	selectedByKbd = true;
	var id = event.srcElement.sIndex;
	selectIndex = id;
	//if(elementOnKeyDownF[id] != null) elementOnKeyDownF[id]();
	if(elementOnKeyDownF[id] != null) elementOnKeyDownF[id].apply(this, arguments);
}

function processKeyPress()
{
	var id = event.srcElement.sIndex;
	selectIndex = id;

	if(event.keyCode == 13)
	{	selectedByKbd = false;
		//if(elementOnChangeF[id] != null) elementOnChangeF[id]();
		if(elementOnChangeF[id] != null) elementOnChangeF[id].apply(this, arguments);
	}
	//if(elementOnKeyPressF[id] != null) elementOnKeyPressF[id]();
	if(elementOnKeyPressF[id] != null) elementOnKeyPressF[id].apply(this, arguments);
}

function processSelect()
{
	var id = event.srcElement.sIndex;
	if(selectIndex == id)
    {
        if(selectedByKbd)
	    {	selectedByKbd = false;
		    return;
	    }
	}
	//if(elementOnChangeF[id] != null) elementOnChangeF[id]();
	if(elementOnChangeF[id] != null) elementOnChangeF[id].apply(this, arguments);
}

checkStateProgress();

