function initSearchSuggestions(sokInputId, sokKnappId, forslagDivId, urlprefix) {
	initSearchSuggestionsDo(sokInputId, sokKnappId, forslagDivId, urlprefix, 'searchw', '', '')
}

function initSearchSuggestionsDo(sokInputId, sokKnappId, forslagDivId, urlprefix, urlform, clickFunction, onchangeFunction) {
	var sokInput = $el(sokInputId) 
	var forslagDiv = $el(forslagDivId)
	var sokKnapp = $el(sokKnappId)
	
	if(sokInput && forslagDiv) {
		sokInput.soktext_delay = 0
		sokInput.old_selection = '';
		sokInput.cache = new Array();
	//	if (sokInput.style.width)
	//		forslagDiv.style.width = sokInput.style.width;
	//	var debug = $el('debug')
		forslagDiv.className = 'sokforslag_div';
		
		sokInput.handleKeys = function (e) {
			var oEvent = window.event ? window.event : e;
			var key = oEvent.keyCode;
			var type = oEvent.type;
			
			if (type == 'keyup') {
				if (key == 13) { 
					if ($el(sokInput.old_selection)) 
						$el(sokInput.old_selection).onclick()
					else
						sokInput.soktext_klick('', '') 
				} else if (key == 38) {
					forslagDiv.forra();
				} else if (key == 32) {
					sokInput.fill(' ');
				} else if (key == 39) {
					sokInput.fill('');
				} else if (key == 40) {
					if (forslagDiv.visa())
						forslagDiv.nasta();
					else 
						sokInput.ajaxSearchSuggestions();
				} else if (key == 27) {
					forslagDiv.gom();
				} else if ((key > 45 && key < 90) || key==8 || (key > 190 && key < 230)) {
					if (onchangeFunction)
						onchangeFunction();
					sokInput.ajaxSearchSuggestions();
				}
			} else if (type=='keydown') {
				if (key == 13) { 
					return false;
				}
			} else if (type=='keypress') {
				if (key == 9) {
					sokInput.fill('');
				}
			}
		}
		
		forslagDiv.gom = function () {
			clearTimeout(sokInput.soktext_delay)
			sokInput.soktext_delay = setTimeout(function () {
				forslagDiv.hover('');
				//switchClass(sokInput, 'loading', '');
				forslagDiv.style.display = 'none';
			}, 10)
		}
		
		forslagDiv.tom = function () {
			forslagDiv.innerHTML = '';
		}
		forslagDiv.visa = function () {
			if (this.a && this.a.length>0) {
				forslagDiv.style.display = 'block';
				return true;
			} else {
				forslagDiv.gom();
				return false;
			}
		}
		
		sokInput.toggleDiv = function () {
			clearTimeout(sokInput.soktext_delay)
			if (forslagDiv.style.display == 'none') {
				forslagDiv.visa();
			} else {
				forslagDiv.hover('');
				forslagDiv.style.display = 'none';
			}
		}
		
		forslagDiv.nasta = function() {
			var a = this.a;
			if (!sokInput.old_selection) {
				forslagDiv.hover(a[0].id);
			} else {
				for(i=0 ; i<a.length ; i++)
					if (a[i].id==sokInput.old_selection) {
						if (i==a.length-1)
							forslagDiv.hover('');
						else
							forslagDiv.hover(a[i+1].id);
						break;
					}
			}
		}
		
		forslagDiv.forra = function() {
			var a = this.a;
			if (!sokInput.old_selection) {
				forslagDiv.hover(a[a.length-1].id);
			} else {
				for(i=a.length-1 ; i>=0 ; i--)
					if (a[i].id==sokInput.old_selection) {
						if (i==0)
							forslagDiv.hover('');
						else
							forslagDiv.hover(a[i-1].id);
						break;
					}
			}
		}
		
		forslagDiv.hover = function(s) {
			if ($el(sokInput.old_selection)) {
				$el(sokInput.old_selection).className='';
			}
			if ($el(s)) {
				$el(s).className='selected';
			}
			sokInput.old_selection = s;
		}
		
		sokInput.ajaxSearchSuggestions = function() { 
			//forslagDiv.gom(); 
			//forslagDiv.tom(); 
			
			onSuccess = function (httpRequest) {
				switchClass(sokInput, 'loading', '');
				var t = httpRequest.responseText
				
				var a = new Array();
				
				// Get JSON results
				s = eval(t)[0];
				a = eval(t)[1];
				
				sokInput.cache[s] = new Array();
				sokInput.cache[s] = a;
				doResults(s, a);
			}
			
			function doResults(s, a) {	
				var b = new Array();
				var output = '';
				
				if (a.length==0) {
					if (noresultsFunction)
						noresultsFunction();
				} else {
					for (i=0 ; i<a.length && b.length<10 ; i++) {
						if (a[i]!='') {
							if (clickFunction!='') {
								tempname = a[i][1];
								tempid = a[i][0];
							} else {
								tempname = tempid = a[i];
							}
							tempname = tempname.toLowerCase();
							if (!b.contains(tempname)&&!b.contains(tempname.substr(0,tempname.length-1))) {
								b.push(tempname);
								temptext = '<b>' + tempname.substr(0, s.length) + '</b>' + tempname.substr(s.length,tempname.length);
								output+='<a href="#" tabindex=1000 id="forslag'+ i + '"' + 
												' onclick="$el(\''+sokInput.id+'\').soktext_klick(this.title, \''+tempid + '\')" title="'+ tempname+'"'+
												' onmouseover="$el(\''+forslagDiv.id+'\').hover(this.id)">'+temptext+'</a>';
							}
						}
					}
				}
				forslagDiv.innerHTML = output;
				forslagDiv.a = forslagDiv.getElementsByTagName('a')
				forslagDiv.visa();
				sokInput.old_selection='';
			}
			
			if (sokInput.value.length>0) {
				//switchClass(sokInput, '', 'loading');
				tmp =  sokInput.cache[sokInput.value]
				if (tmp) {
					doResults(sokInput.value, tmp);
				} else {
					clearTimeout(sokInput.soktext_delay)
					sokInput.soktext_delay = setTimeout(function () {
						makeAjaxRequest('search_suggestions', urlprefix+urlform+'.htm', 'soktext='+sokInput.value, onSuccess, onSuccess, 0);
					}, 100)
				}
			} else {
				forslagDiv.gom();
			}
		}
		
		sokInput.fill = function(s) {
			var t = '';
			if ($el(sokInput.old_selection)) 
				t = $el(sokInput.old_selection).title;
			if (t)
				this.value=t+s;
			forslagDiv.gom();
		}
		
		sokInput.soktext_klick = function(s, t) {
			sokInput.fill('');
			if (clickFunction!='')
				clickFunction(s, t);
			else 
				sokKnapp.click();
			sokInput.focus();
			return false;
		}
		
		// Register events And functions
		sokInput.onkeypress = sokInput.handleKeys
		sokInput.onkeydown = sokInput.handleKeys;
		sokInput.onkeyup = sokInput.handleKeys;
		//sokInput.onblur = forslagDiv.gom;
	}
}