//  adapted/improved from Robert Nyman www.robertnyman.com/ajax-suggestions 
function navigateResults(evt, keyCode, setdiv, setinput){
	//alert (keyCode);
	var event = (typeof evt != 'undefined')? evt : event;
	var selectedItem = -1;
	var currentElm = (/input/i.test(this.nodeName))? this : evt.srcElement;
	// create array of all result elements as objects.
	var results = document.getElementById(setdiv).getElementsByTagName('li');
	var keyCode = keyCode || event.keyCode;
	var navigateUp = keyCode == 38;
	var navigateDown = keyCode == 40;
	var navigateSide = keyCode == 37 || keyCode == 39 || keyCode == 13;
	if (results.length > 0 && (navigateUp || navigateDown || navigateSide)) {
		// return any previously selected element to its default class but note its position first.
		for (var i=0; i<results.length; i++) {
			item = results[i];
			if (item.className.match(/suggest-link-sel/)) {
				selectedItem = i;
			}
			item.className = 'suggest-link';
		}
		// change the selected element position marker if arrow up or down.
		if (navigateUp) {
			if ((selectedItem - 1) >= 0) {
				selectedItem--;
			} else {
				selectedItem = -1;
			}
			if (results[selectedItem]){
				document.getElementById(setinput).value=results[selectedItem].innerHTML;
			}
		} else if (navigateDown) {
			if ((selectedItem + 1) < results.length){
				selectedItem++;
			} else {
				selectedItem = -1;				
			}
			if (results[selectedItem]){
				document.getElementById(setinput).value=results[selectedItem].innerHTML;
			}
		// or set the selected item into the input box if arrow left or right.
		} else if (navigateSide) {
			if (results[selectedItem]){
			//document.getElementById(setinput).value=results[selectedItem].innerHTML;
			document.getElementById(setdiv).style.display='none';}
			//setSearch(results[selectedItem].innerHTML);
		}
		// change the class of the selected element.
		var item;
		var elmToFocus = currentElm;
		if (selectedItem > -1 && !navigateSide) {
			var currentItem = results[selectedItem];
			currentItem.className = 'suggest-link-sel';
			elmToFocus = results[selectedItem];
		}
		try { elmToFocus.focus(); } catch(e) { }
		// prevent the default action of relevant keys.
		if (event) {
			if (event.preventDefault) {
				event.preventDefault();
			} else {
				event.returnValue = false;
			}
			if (event.stopPropagation) {
				event.stopPropagation();
			} else {
				event.cancelBubble = true;
			}
		}
		return false;
	}
}
function lookup(event,url,par,setdiv,setinput){
	var req;
	var oldData; 
	var doesNotSupport = true; 
	var setproperties;
	setproperties = 'setdiv='+setdiv+'&setinput='+setinput+'&';
	if (event.keyCode == 40 || event.keyCode == 38 ||  event.keyCode == 13 || event.keyCode == 37 || event.keyCode == 39) {
	    	navigateResults(event,event.keyCode,setdiv,setinput);
    }
	else{
		document.getElementById(setinput).style.background='url(images/status.gif)';
		document.getElementById(setinput).style.backgroundRepeat='no-repeat';
		document.getElementById(setinput).style.backgroundPosition='right';
		if (par == "" || oldData == par || !doesNotSupport) 
      			return; 
			oldData = par; 
			if (window.XMLHttpRequest) { 
  				req = new XMLHttpRequest; 
			} else if (window.ActiveXObject) { 
				req = new ActiveXObject("Microsoft.XMLHTTP"); 
			} 
			if (req) { 
				req.onreadystatechange = processReqChange; 
      			req.open("GET", url + '?' + setproperties + par, true); 
				req.send(null); 
			} else { 
				alert("Your browser does not support XMLHttpRequest technology!"); 
				doesNotSupport = false; 
    		}	 
		}
		function processReqChange() {
			// only if req shows "loaded" 
			if (req.readyState == 4) { 	
				// only if "OK" 
				if (req.status == 200) { 
				document.getElementById(setinput).style.background='url()';
				//var response;
				response = req.responseText;
				var len = response.length;
				var list;
				list='';
				if (len==0){
					list = 'no suggestions';
						document.getElementById(setdiv).style.display='none';
				}
				else{
					document.getElementById(setdiv).style.display='block';
					//document.getElementById(setinput).focus();
					document.getElementById(setdiv).innerHTML=response;
					}
				} else { 
					//alert("There was a problem retrieving the data:\n" + req.statusText + req.responseText);
				}	 
			} 
		}

}
function fetch(setinnerdiv,par,url){
	var req;
	var oldData; 
	var doesNotSupport = true; 
		if (par == "" || oldData == par || !doesNotSupport) 
      			return; 
			oldData = par; 
			if (window.XMLHttpRequest) { 
  				req = new XMLHttpRequest; 
			} else if (window.ActiveXObject) { 
				req = new ActiveXObject("Microsoft.XMLHTTP"); 
			} 
			if (req) { 
				req.onreadystatechange = processReqChange; 
   				req.open("GET",url+'?'+ par, true); 
				req.send(null); 
			} else { 
   				alert("Your browser does not support XMLHttpRequest technology!"); 
   				doesNotSupport = false; 
  			}	 
		function processReqChange() {
			// only if req shows "loaded" 
			if (req.readyState == 4) { 
				// only if "OK" 
				if (req.status == 200) { 
				//var response;
				response = req.responseText;
				document.getElementById(setinnerdiv).innerHTML=response;
				} else { 
					//alert("There was a problem retrieving the data:\n" + req.statusText + req.responseText);
				}	 
			} 
		}
	}

