function AJAXRequestClass(sURL, sMethod){

	this.Init();
	this.SetURL(sURL);
	this.SetMethod(sMethod);
}

AJAXRequestClass.prototype.Init=function(){
	this.oXHR=null;
	this.fCallback=null;
	this.sURL='';
	this.sMethod='GET';
	this.sParams=null;
	
	// Mozilla/Safari
	if(window.XMLHttpRequest){
		this.oXHR = new XMLHttpRequest();
		if(this.oXHR.overrideMimeType)
			this.oXHR.overrideMimeType('text/xml');
	}
	// IE
	else if(window.ActiveXObject){
		this.oXHR = new ActiveXObject("Microsoft.XMLHTTP");
	}
}

AJAXRequestClass.prototype.SetURL=function(sURL){
	this.sURL=sURL;
}

AJAXRequestClass.prototype.SetMethod=function(sMethod){
	this.sMethod=(sMethod) ? sMethod : 'GET';
}

AJAXRequestClass.prototype.SetParams=function(oParams){
	if(oParams){
		this.sParams='';
		for(var prop in oParams)
			this.sParams+=prop + '=' + escape(oParams[prop]) + '&';
		this.sParams = (this.sParams) ? this.sParams.substr(0, this.sParams.length - 1) : null;
	}
	else{
		this.sParams=null;
	}
}

AJAXRequestClass.prototype.SetCallback=function(fCallback){
	this.fCallback=fCallback;
}

AJAXRequestClass.prototype.Load=function(sURL, sMethod, oParams, fCallback){
	if(sURL)
		this.SetURL(sURL);
	if(sMethod)
		this.SetMethod(sMethod);
	if(oParams)
		this.SetParams(oParams);
	if(fCallback)
		this.SetCallback(fCallback);
	
	
	this.oXHR.open(this.sMethod, this.sURL, true);
	
	var _XHR = this.oXHR;
	var _me = this;
	this.oXHR.onreadystatechange=function(){
		if(_XHR.readyState == 4){
			if(_me.fCallback)
				_me.fCallback(_XHR);
			else
				alert('Document successfully loaded');
		}
	}
	
	if(this.sParams)
		this.oXHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	this.oXHR.send(this.sParams);
}

var inProgress = false;
var lastQuery;

function AutoComplete(ObjectType, IdObjectName, IdObjectKey, IdResultTable){
	//var sURL = (window.baseURL || '') + "/ajax/autocomplete";
	var sURL = (window.baseURL || '') + "/Ajax.php";
	var oAJAX = new AJAXRequestClass(sURL, 'POST');
	var SearchText = document.getElementById(IdObjectName).value;
	oParams = {ObjectType: ObjectType, SearchText: SearchText, IdObjectName: IdObjectName, IdObjectKey: IdObjectKey, IdResultTable: IdResultTable};
	oAJAX.Load(sURL, 'POST', oParams, ShowResult);
}



function ShowResult(ajaxObj){
	if(ajaxObj && ajaxObj.responseXML && ajaxObj.responseXML.firstChild){
		var xml = ajaxObj.responseXML;
		var res   = xml.getElementsByTagName('result');
		var nodes = xml.getElementsByTagName('r');
		
		if(res[0]){
		var SearchText    = res[0].getAttribute('SearchText');
		var IdObjectKey   = res[0].getAttribute('IdObjectKey');
		var IdResultTable = res[0].getAttribute('IdResultTable');
		var IdObjectName  = res[0].getAttribute('IdObjectName');
		
		var oTable = document.getElementById(IdResultTable);
		var oValue = document.getElementById(IdObjectKey);
		}
		
		if(oTable){
var TableBody = oTable.getElementsByTagName('tbody').item(0);
var TableRows = TableBody.getElementsByTagName('tr');
var ind = TableBody.childNodes.length;
			if(nodes.length == 0){
				for (var i = ind - 1; i >= 0 ; i--) {
TableBody.removeChild(TableBody.childNodes[i]);
				}
			}
			if(oTable && nodes.length){
var TableBody = oTable.getElementsByTagName('tbody').item(0);
var TableRows = TableBody.getElementsByTagName('tr');
var ind = TableBody.childNodes.length;
				for (var i = ind - 1; i >= 0 ; i--) {
			TableBody.removeChild(TableBody.childNodes[i]);
				}
				for(var i=0; i<nodes.length; i++){
					if(nodes[i].firstChild && nodes[i].firstChild.nodeType == 3){
				var Id = nodes[i].getAttribute('id');
				var Value = nodes[i].firstChild.nodeValue;
						if(SearchText != ''){
				re = new RegExp("("+SearchText+")", "gi");
				Value = Value.replace(re, '<b>$1</b>');
						}
var Row = document.createElement('tr');
var Cell = document.createElement('td');
var Link = document.createElement('a');
Link.innerHTML = Value;
Link.setAttribute('id', Id);
//Link.setAttribute('href', 'javascript: AutoCompleteSetValue(); return false;');
if(Link.addEventListener){
	Link.addEventListener('click', 'AutoCompleteSetValue('+Value+')', false);
} else {
	Link.attachEvent('onclick', 'AutoCompleteSetValue('+Value+')');
}
Cell.appendChild(Link);
Row.appendChild(Cell);
TableBody.appendChild(Row);
					}
				}
			}
		}
	}
}



function AutoCompleteSetValue(event){
	if(!event) event = window.event;
	//if(!event.target) {event.target = event.srcElement || document; }
	if(event.target.nodeType == 3){event.target = event.target.parentNode;}
	if(!event.relatedTarget && event.fromElement){event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;}
	
	var link = event.target;
	
	if (link)
    {
    	Id    = link.getAttribute('id');
    	Value = link.innerHTML.replace(/<\/?[^>]+>/gi, '');
		
		TableNode = link.parentNode.parentNode.parentNode.parentNode;
		if(TableNode.className.match(new RegExp('autocompleteresult'))){
			if(TableNode){
				DivNode    = TableNode.parentNode.parentNode.parentNode;
				InputNodes = DivNode.getElementsByTagName('input');
				if(InputNodes && InputNodes.length){
					InputNodes[0].value = Id;
					InputNodes[1].value = Value;
				}
		var TableBody = TableNode.getElementsByTagName('tbody').item(0);
		var TableRows = TableBody.getElementsByTagName('tr');
		var ind = TableBody.childNodes.length;
				for (var i = ind - 1; i >= 0 ; i--) {
		TableBody.removeChild(TableBody.childNodes[i]);
				}
			}

		}
    }
    return false;
}