var suggest_focusflag;
var suggest_submitflag;

	function suggest(id,method,vars)
	{
		suggestfield = document.getElementById(id+"_field");
		suggestresults = document.getElementById(id+"_suggestions");
		pos = findpos(suggestfield);

				if (suggestresults.firstChild) suggestresults.removeChild(suggestresults.firstChild);
				suggestresults.className = "suggestresults";
				suggestresults.style.position = "absolute";
				suggestresults.style.top = (pos[1]+suggestfield.offsetHeight-1)+"px";
				suggestresults.style.left = pos[0]+"px";
				suggestresults.style.display = "none";

		suggest_focusflag = suggestfield.id;
		suggest_submitflag = "";

		suggestfield.onblur = suggest_stop;
		suggestfield.onkeydown = suggest_keypress;

		suggest_monitor(suggestfield,suggestresults,false,method,vars);
	}

	function suggest_monitor(suggestfield,suggestresults,oldvalue,method,vars)
	{
		// Function to loop and request data if field has changed

		suggest_submitflag = "";
	
		if (suggest_focusflag == suggestfield.id)
		{
			// Only loop if focus remains
			value = suggestfield.value;

			// If changes to field value then get suggestions
			if ((oldvalue != value) && (oldvalue !== false))
				{ suggest_get(suggestfield,suggestresults,method,vars); }

			 setTimeout('suggest_monitor(suggestfield,suggestresults,value,"'+method+'","'+vars+'")',1000);
		}
	}

	function suggest_get(suggestfield,suggestresults,method,vars)
	{
		fieldvalue = suggestfield.value;
	  	suggestion_request = xmlrequestconnect_post('/httprequest/suggest.php');
		suggestion_request.onreadystatechange = function() {
		        if(suggestion_request.readyState == 4) {
		            xmldata = suggestion_request.responseXML;
				
					if (xmldata) {
						suggestions = xmldata.getElementsByTagName("suggestion");
						if (suggestresults.firstChild) suggestresults.removeChild(suggestresults.firstChild);
						if (suggestions.length > 0) {
							suggestlist = document.createElement('ul');
							for(i=0;i<suggestions.length;i++) {
								suggestitem = document.createElement('li');
								suggestion = document.createTextNode(suggestions[i].firstChild.nodeValue);
								suggestitem.appendChild(suggestion);
								suggestlist.appendChild(suggestitem);
							}
							suggestresults.appendChild(suggestlist);
							suggestions = suggestresults.getElementsByTagName("li");
							for(i=0;i<suggestions.length;i++) {
								suggestions[i].onmouseover = suggest_highlightresult;
								suggestions[i].onmouseout = suggest_unhighlightresult;
								suggestions[i].onmousedown = suggest_clickselect;
							}
							suggestresults.style.display = "";
						}else {
							suggestresults.style.display = "none";
						}
					}
		        }
		    }
		suggestion_request.send('field='+fieldvalue+'&method='+method+vars);
	    return false;
	}

	function suggest_clickselect(e)
	{
		if (!e) e = window.event;
		target = findtarget(e);

		node = target;

		while (node.tagName != "DIV")
		{
			node = node.parentNode;		
		}

		id = node.id.replace("_suggestions","_field");
		
		document.getElementById(id).value = target.firstChild.nodeValue;
	}

	function suggest_highlightresult(e)
	{
		if (!e) e = window.event;
		target = findtarget(e);

		target.className = "highlight";
	}

	function suggest_unhighlightresult(e)
	{
		if (!e) e = window.event;
		target = findtarget(e);

		target.className = "";
	}

	function suggest_stop()
	{
		suggest_focusflag = "";
		suggestresults.style.display = "none";
	}

	function suggest_keypress(e)
	{
		if (!e) e = window.event;
		target = findtarget(e);

		suggest_submitflag = 1;

		if (e.keyCode == 40)
		{
			suggest_focusflag = 0;

			suggestfield = document.getElementById(target.id);
			suggestresults = document.getElementById(target.id.replace("_field","_suggestions"));

			if (suggestresults.firstChild)
			{
				suggestions = suggestresults.firstChild.childNodes;

				if (suggestions.length > 0)
				{
					// Find the highlighted field
					highlighted = -1;
					for(i=0;i<suggestions.length;i++)
					{
						if (suggestions[i].className == "highlight")
						{
							highlighted = i;
						}
					}
					newpos = highlighted + 1;

					if (highlighted >= 0) suggestions[highlighted].className = "";
					if (newpos >= suggestions.length) newpos = 0;
						suggestions[newpos].className = "highlight";
						suggestfield.value = suggestions[newpos].firstChild.nodeValue;
				}
			}

		}

		if (e.keyCode == 38)
		{
			suggest_focusflag = 0;

			suggestfield = document.getElementById(target.id);
			suggestresults = document.getElementById(target.id.replace("_field","_suggestions"));

			if (suggestresults.firstChild)
			{
				suggestions = suggestresults.firstChild.childNodes;

				if (suggestions.length > 0)
				{
					// Find the highlighted field
					highlighted = -1;
					for(i=0;i<suggestions.length;i++)
					{
						if (suggestions[i].className == "highlight")
						{
							highlighted = i;
						}
					}
					newpos = highlighted - 1;

					if (highlighted >= 0) suggestions[highlighted].className = "";

					if (newpos < 0) newpos = suggestions.length - 1;
						suggestions[newpos].className = "highlight";
						suggestfield.value = suggestions[newpos].firstChild.nodeValue;
				}
			}

		}

		if (e.keyCode == 13)
		{
			suggestfield = document.getElementById(target.id);
			suggestresults = document.getElementById(target.id.replace("_field","_suggestions"));

			if (suggestresults.firstChild)
			{
				suggestions = suggestresults.firstChild.childNodes;

				if (suggestions.length > 0)
				{
					// Find the highlighted field
					highlighted = -1;
					for(i=0;i<suggestions.length;i++)
					{
						if (suggestions[i].className == "highlight")
						{
							highlighted = i;
						}
					}

					suggestfield.value = suggestions[highlighted].firstChild.nodeValue;
				}

				if (suggestresults.firstChild) suggestresults.removeChild(suggestresults.firstChild);
				suggestresults.style.display = "none";
				suggest_focusflag = suggestfield.id;
				suggestfield.focus();
			}
			
		}

		
	}



