function autocompleter(object,positionobjectid,resultsdivid,uid,pid,languid,phpmode){
	//set the position of the result div!
	var pos = $(positionobjectid).positionedOffset();
	$(resultsdivid).style.position="absolute";
	$(resultsdivid).style.left = (pos[0])+"px";
	$(resultsdivid).style.top = (pos[1]+$(positionobjectid).getHeight())+"px";
	$(resultsdivid).style.width = ($(positionobjectid).getWidth())+"px";
	
	var defaultstring = object.value;
	object.value = '';
	object.onfocus = function() {}
	
	Event.observe(object.id, 'keyup', function(event){
		keyNr=event.keyCode;
		autocompleter_controller(object,keyNr,resultsdivid,uid,pid,languid,phpmode);
	}); 
	Event.observe(object.id, 'focus', function(event){
		if(object.value == defaultstring){
			object.value = '';
		}
		autocompleter_controller(object,'none',resultsdivid,uid,pid,languid,phpmode);
	});
	Event.observe(object.id, 'blur', function(event){
		if(object.value==''){
			object.value = defaultstring;
		}
		window.setTimeout(function(){$(resultsdivid).hide();},50);
	}); 
			
	var autocopcleteoff = document.createAttribute("autocomplete");
	autocopcleteoff.nodeValue = "off";
	object.setAttributeNode(autocopcleteoff);
}

function autocompleter_controller(object,keyNr,resultsdivid,uid,pid,languid,phpmode){
	
	switch(keyNr){
		case 38:
			//key "up"
			act_go_up(object,resultsdivid);
			return false;
			break;
		case 40:
			//key "down"
			act_go_down(object,resultsdivid);
			return false;
			break;
		case 13:
			//key "enter"
			act_enter(object,resultsdivid);
			return false;
			break;
		/*case 27:
			//"esc"
			object.value==''
			object.blur();
			window.setTimeout(function(){$(resultsdivid).hide();},50);
			return false;
			break;*/
		default:
			//all other keys
			storeTimeoutParams(object.value,resultsdivid,uid,pid,languid,phpmode);
			if (seqCounter) {
				window.setTimeout("continueTimeout()", 400);	
			} else {
				continueTimeout();
			}
			//setTimeout(function(){actb_tocomplete(a)},50);
			break;
	}
}


var timeoutParams;

function storeTimeoutParams(params){
	timeoutParams = storeTimeoutParams.arguments;
	//reset seqCounter on empty keywords
	if (timeoutParams[0] == '') {
		seqCounter = 0;
	}
}

function continueTimeout(){
	p = timeoutParams;
	searchKeyword(p[0],p[1],p[2],p[3],p[4],p[5],p[6]);
}


var isActiveAjxReq = false;
var lastAjxReqestedSearchStr = '';
var lastAjxSkiptedSearchStr = '';
var seqCounter = 0;

function searchKeyword(keyword,resultsdivid,uid,pid,languid,phpmode){
	if(keyword != ""){
		
		if (isActiveAjxReq) {
			lastAjxSkiptedSearchStr = keyword;
			return;
		}
		
		if (keyword == lastAjxReqestedSearchStr) {
			$(resultsdivid).show();
			return;
		}
		
		isActiveAjxReq = true;
		var url = 'index.php?type=145&no_cache=1&id='+pid+'&L='+languid;
		url += '&lastReq=' + lastAjxReqestedSearchStr + '&key=' + keyword;
		
		lastAjxReqestedSearchStr = keyword;
		new Ajax.Updater(resultsdivid, url, {
			encoding: 'UTF-8',
			method: 'post',
			asynchronous: true,
			parameters: { 
				handler: 'autocomplete',
				CEOuid: uid,
				CEOpid: pid,
				searchstr: keyword,
				mode: phpmode
			},
			onComplete: function (transport) {
				$(resultsdivid).show();
				isActiveAjxReq = false;
				if (lastAjxSkiptedSearchStr && lastAjxReqestedSearchStr != lastAjxSkiptedSearchStr) {
					searchKeyword(lastAjxSkiptedSearchStr,resultsdivid,uid,pid,languid,phpmode);
					lastAjxSkiptedSearchStr = '';
				}
			}	
		});
		seqCounter++;
	}
	else{
		$(resultsdivid).hide();
		seqCounter = 0;
	}
}

function act_go_up(object,resultsdivid){
	links = $$("div#"+resultsdivid+" a");
	act = get_act_a(links);
	if(act<1){
		set_act_a(object,links,links.length-1);
	}
	else{
		set_act_a(object,links,act-1);
	}
}

function act_go_down(object,resultsdivid){
	links = $$("div#"+resultsdivid+" a");
	act = get_act_a(links);
	if(act<links.length-1){
		set_act_a(object,links,act+1);
	}
	else{
		set_act_a(object,links,0);
	}	
}
function act_enter(object,resultsdivid){
	links = $$("div#"+resultsdivid+" a.cur");
	if(links[0]){
		href = links[0].readAttribute('href');
		window.location = href;
	}
}
function set_act_a(object,links,act_key){
	links[act_key].addClassName('cur');
	object.value = links[act_key].innerHTML;
}

function get_act_a(links){
	var i = 0;
	var act = false;
	links.each(function(linkitem){
		if(linkitem.hasClassName('cur')){
			linkitem.removeClassName('cur');
			act = i;
		}
		i++;
	});
	return act
}

function set_as_act_class(object,inputfieldid,resultsdivid){
	if($(object.id).hasClassName('cur') != true){
		links = $$("div#"+resultsdivid+" a.cur");
		act = get_act_a(links);
		$(object.id).addClassName('cur');
		$(inputfieldid).value = $(object.id).innerHTML;
	}
}