//variables
var selected=-1;
var hide='';
var selValue='';
var arrowDown=40;
var arrowUp=38;
var arrowLeft=37;
var arrowright=39;	
var enter=13;
var esc=27;
var del=46;
//var tab=9;

//positioning and showing the suggestions list
showSuggestBox=function(currEl)
{	obj(currEl.id+'Lst').on();
	obj(currEl.id+'Lst').style.top=currEl.offsetTop+currEl.offsetHeight+"px";
	obj(currEl.id+'Lst').style.left=currEl.offsetLeft+"px";
	obj(currEl.id+'Lst').style.width=currEl.offsetWidth+"px";
	hide=currEl.id;
}

//hiding the suggestions list
hideSuggestBox=function(currEl)
{	selected=-1;
	obj(currEl.id+'Lst').off();
	hide='';
}

//get key code - arrow up, arrow down e.t.c.
getKeyCode=function(ev)
{	if(!ev) ev=window.event;
	return ev.keyCode;
}

//highlight the selected suggestions and remember the selected suggestion's value
highlight=function(currEl)
{	suggNum=obj(currEl.id+'Lst').getElementsByTagName('li');
	for(i=0;i<suggNum.length;i++)
	{	if(selected == i)
		{	suggNum[i].className="suggest highLighted";
			selValue=suggNum[i].innerHTML;
		}
		else suggNum[i].className="suggest"
	}
	return selValue;
}

//on-over-click effects
onOver=function(currEl)
{	prevSel=(selected>=0)?currEl.id.replace(/\d+/, selected):currEl.id;
	obj(prevSel).className="suggest";
	currEl.className="suggest highLighted";
	selected=currEl.id.replace(/\D+/, '');
	selValue=currEl.innerHTML;
	return selValue;
}
onOut=function(currEl)
{	currEl.className="suggest";
}
onclck=function(currEl)
{	sugBoxId=currEl.id.replace(/Lst\d+/, '');
	obj(sugBoxId).value=selValue;
	selected=-1;
	obj(sugBoxId+'Lst').off();
	hide='';
	obj(sugBoxId).focus();
}
onblr=function(currEl)
{	chngValue(currEl);
	hideSuggestBox(currEl);
}
//changing the value of the input field
chngValue=function(currEl)
{	obj(currEl.id).value=selValue;
}

//managing all type of actions - arrow up, down, esc, enter...e.t.c.
actions=function(ev,currEl)
{	var key = getKeyCode(ev);
	switch(key)
	{	case esc:
			if(hide==currEl.id) hideSuggestBox(currEl);
			obj(currEl.id).value='';
		break;
		
		case del:
			if(hide==currEl.id) hideSuggestBox(currEl);
			obj(currEl.id).value='';
		break;
		
		case enter:
			chngValue(currEl);
			hideSuggestBox(currEl);
		break;
		
		case arrowDown:
			if(!hide) showSuggestBox(currEl);
			if(currEl.parentNode.getElementsByTagName('li').length==0) getInfo(currEl.id,currEl.value);
			if(selected<obj(currEl.id+'Lst').getElementsByTagName('li').length-1)
			{	if(hide==currEl.id) selected++;
				highlight(currEl);
			}
		break;
		
		case arrowUp:
			if(selected>0)
			{	if(1) selected--;
				highlight(currEl);
			}
			else hideSuggestBox(currEl);
		break;

		default:
			if(!hide) showSuggestBox(currEl);
			getInfo(currEl.id,currEl.value);
			selected=-1;
		break;
	}
}