function createXmlHttpRequest() {
	var xmlhttp = false;
	if( window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlhttp;
}

var oldquery = "";
var xmlhttp = 0;
var input = 0;
var keyDown = 0;

function peekQuery (vid,src) {
	if (! xmlhttp) xmlhttp = createXmlHttpRequest();

	if (! xmlhttp || xmlhttp.readyState == 1 || 
		xmlhttp.readyState == 2 || xmlhttp.readyState == 3){
		return; 
	}

	var textbox = document.getElementById(vid);
	var query   = EscapeUTF8(textbox.value);

	if (query == "") {
		textbox.clearCompletionItems();
	} else if (oldquery != query) {
    
	    xmlhttp.open("GET", src + "?q=" + query, true);
	    xmlhttp.onreadystatechange = function() {
      
      		if (xmlhttp.readyState == 4 && xmlhttp.status == 200
	  			&& xmlhttp.responseText != "") {
	    		
	    		var response = xmlhttp.responseText.replace(/\n+$/g, "");
	    		var ary = response.split(/\n/);
	    		textbox.showCompletionItems(
					ary,
					function(n) {
						textbox.value = ary[n];
						textbox.clearCompletionItems();
						textbox.focus();
						oldquery = EscapeUTF8(textbox.value);
					} );
			}
		}
		xmlhttp.send(null)
	}
	oldquery = query;
}

function suggestOn(iid,src) {
	var textbox = document.getElementById(iid);
	initCompletion(textbox);
	TimerID = setInterval(
		function () { peekQuery(iid,src); },
		500);
}

function suggestOff(iid) {
	clearInterval(TimerID);
	DTimerID = setInterval(
		function () {
			var textbox = document.getElementById(iid);
			textbox.clearCompletionItems();
			clearInterval(DTimerID); },
		200);
}


