var kf_TO;
var kf_browser = document.layers ? 0 : document.all ? 1 : 2;

function kf_moveLayer(xPos, yPos)
{
	switch(kf_browser)
	{
		case 0:
			this.left = xPos;
			this.top = yPos;
			break;
		case 1:
			this.style.pixelLeft = xPos;
			this.style.pixelTop = yPos;
			break;
		case 2:
			this.style.left = xPos+"px";
			this.style.top = yPos+"px";
	}
}

function kf_showIt(on)
{
	if (kf_browser)
		this.style.visibility = (on) ? "visible" : "hidden";  
	else
		this.visibility = (on) ? "show" : "hidden";
}

function initKeyFilter()
{
	var el=document.getElementsByTagName("select");
	for(var i=0; i < el.length; i++)
		setKeyFilter(el[i]);
}

function setKeyFilter(el)
{
	if(el.keyLabel==undefined)
	{
		el.keyBuffer="";
		el.id=el.name;
		el.keyLabel="label_" + el.id;
		el.style.position = "relative";
		var log=document.createElement("div");
		log.id=el.keyLabel;
		log.style.position = "absolute";
		log.style.backgroundColor = "lemonchiffon";
		log.style.border = "solid 1px black";
		log.style.padding = "2px";
		el.parentNode.appendChild(log);
		log.moveLayer = kf_moveLayer;
		log.showIt = kf_showIt;
		log.className = "keyFilter";
		log.moveLayer(el.offsetLeft, el.offsetTop - el.offsetHeight);
		log.showIt(false);
		el.onkeydown = keyFilter;
		el.onblur = resetKeyFilter;
	}
}

function keyFilter(e)
{
	e = e || window.event;
	var keycode = e.keyCode || e.which;

	var keychar = String.fromCharCode(keycode).toLowerCase();

	//alert("[" + keycode + "][" + keychar + "]");

	var alfacheck = /[a-z0-9_ ]/;

	switch(parseInt(keycode))
	{
		case 8:
			this.keyBuffer=this.keyBuffer.substring(0,this.keyBuffer.length-1);
			break;
		case 186:
			this.keyBuffer+="è";
			break;
		case 188:
			this.keyBuffer+=",";
			break;
		case 190:
			this.keyBuffer+=".";
			break;
		case 191:
			this.keyBuffer+="ù";
			break;
		case 192:
			this.keyBuffer+="ò";
			break;
		case 219:
			this.keyBuffer+="'";
			break;
		case 221:
			this.keyBuffer+="ì";
			break;
		case 222:
			this.keyBuffer+="à";
			break;
		default:
			if(alfacheck.test(keychar))
			{
				this.keyBuffer+=""+keychar;
			}
			else
			{
				if(this.onchange!=undefined)
					this.onchange();
				return true;
			}
	}
	
	var log=document.getElementById(this.keyLabel);
	if(log != null)
	{
		log.showIt(true);
		log.innerHTML=this.keyBuffer.replace(/ /g, "&nbsp;");
	}
	
	for(var i=((this.keyBuffer.length>1)?this.selectedIndex:0); i < this.options.length; i++)
	{
		if(this.options[i].text.toLowerCase().indexOf(this.keyBuffer)==0)
		{
			this.selectedIndex=i;
			if(kf_browser==2)
				kf_TO=setTimeout("selItem('" + this.id + "'," + i + ");",10);
			break;
		}
	}
	
	return false;
}

function resetKeyFilter()
{
	this.keyBuffer="";
	var log=document.getElementById(this.keyLabel);
	if(log != null)
	{
		log.innerHTML=this.keyBuffer;
		log.showIt(false);
	}
}

function selItem(id, index)
{
	var el=document.getElementById(id);
	el.selectedIndex = index;
	el.options[index].selected = true;
	clearTimeout(kf_TO);
}