	
/** 
	AJAX 
*/ 
var xHttp;
var storedVal;
var ajaxInited = false;
function ajaxInit() {
	//alert("init");
	if(ajaxInited) return;
	ajaxInited = true;
	if(window.ActiveXObject) { // M$
		try {
			xHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (exc) {
			try {
				xHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (exc2) {
				xHttp = null;
			}
		}
	}
	else if(window.XMLHttpRequest) {
		try {
			xHttp = new XMLHttpRequest(); 
		}
		catch (exc3) {
			xHttp = null;
		}
	}
}

function __ajaxCallBack() {
	
	/*
	if(this.ajaxReplyCounter < this.keyEventCounter -1) {
		this.ajaxReplyCounter++;
		return;
	}
	*/
	var callFunction = eval(getFunctionCall());
	
	if(xHttp.readyState==4) {
		try {
			var suggests = xHttp.responseXML.getElementsByTagName("*")[0];
			if(suggests && suggests.firstChild) {
			//this.ajaxReplyCounter = this.keyEventCounter;
				callFunction(suggests);
				
			}
		}
		catch (ex){alert ("ERROR->:" +ex + ", TXT: "+ xHttp.responseText);
		}; 
		// schon möglich bei zu schneller Tastenfolge
		// dann kommt evtl. nichts. Durch Ventile ist es auch nicht zu machen.
		// Browser scheinen Multithreading zu beherrschen, wie setTimeout(void, int) zeigt.
	}
	else {
		//xHttp.onreadystatechange = ajaxCallBack(callFunction); //--> too much recursion, JA WAS!
		//setTimeout('ajaxCallBack('+callFunction+')','100'); // huch, nur 100? Stackoverflow?
	}
}
var strStored = "";
function toLower(str){
	strStored = str;
	return str.toLowerCase();
}

function merge(str){
	var len = strStored.length;
	return strStored + str.substring(len, str.length);
}

function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

var formerTerm = "";
var splitChar = "";

function splitSuggest(term) {
	var plus = term.lastIndexOf("+");
	var space = term.lastIndexOf(" ");
	if(plus < 0 && space < 0) {
		formerTerm = "";
		splitChar = "";
		return toLower(term);
	}
	var myIndex = plus;
	if(plus < 0) myIndex = space;
	else if(space > plus){
		myIndex = space;
	}
	splitChar = (myIndex == plus) ? "+" : " ";
	formerTerm = term.substring (0, myIndex);
	return toLower(term.substring (myIndex + 1));
}

function getVal() {
		var q = document.getElementById('suggest').value;
	if(q == storedVal || q.length == 0) return;
	storedVal = q;
	q = splitSuggest(q);
}

var functionCall="feuerzeug";
var keyEventCounter = 0;
var ajaxReplyCounter = 0;
function setEqual() {	
	this.keyEventCounter = 0;
	this.ajaxReplyCounter = 0;
}
function getFunctionCall() {
	return this.functionCall;
}
function updateAjax(obj) {
	
	if(!ajaxInited) ajaxInit();
	if(xHttp == null) {
		return;
	}
	this.keyEventCounter++;
	this.functionCall = obj.functionCall;
	var remoteURL = obj.remoteURL;
	var paramArr = obj.paramArr;

	var URL = remoteURL+"?";
	for (var i = 0; i < paramArr.length; i++) {
		URL+=paramArr[i][0]+"="+paramArr[i][1]+"&";
	}
	
	xHttp.open('GET', URL, true);
	//xHttp.setRequestHeader("Content-Type", "text/xml; charset=UTF-8");
	xHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	try {
		xHttp.onreadystatechange = __ajaxCallBack;
		xHttp.send(null);
	}
	catch (ex) {alert ("ERROR 1: at state "+xHttp.readyState+":"  + ex)//besser nicht
	};

}

function updateAjaxPOST(obj) {
	if(!ajaxInited) ajaxInit();
	if(xHttp == null) {
		return;
	}
	this.keyEventCounter++;
	this.functionCall = obj.functionCall;
	var remoteURL = obj.remoteURL;
	var paramArr = obj.paramArr;

	var post = "";
	for (var i = 0; i < paramArr.length; i++) {
		post+=paramArr[i][0]+"="+paramArr[i][1]+"&";
	}
	
	xHttp.open('POST', remoteURL, true);
	xHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");
    xHttp.setRequestHeader("Content-length", post.length);
    xHttp.setRequestHeader("Connection", "close");
	try {
		xHttp.onreadystatechange = __ajaxCallBack;
		xHttp.send(post);
	}
	catch (ex) {//alert ("ERROR 1: at state "+xHttp.readyState+":"  + ex)//besser nicht
	};

}

var AjaxObject = function (remoteURL, functionCall, paramArr) {
	// alles public
	this.remoteURL = remoteURL;
	this.functionCall = functionCall;
	this.paramArr = paramArr;
}


