function FormCompleter( Element, QueryString, ResultElementID, NoDisable )
{
	if ( !QueryString || !ResultElementID )
	{
		return false;
}
	// Variables
	var FocusedElement = ( FocusedElement ) ? FocusedElement : null;
	var ResultElementID = ResultElementID;
	var QueryString = QueryString;
	var Element = Element;
	var NoDisable = NoDisable;
	var HttpRequest = null;
	
	// Methods	
	var FormCompleter = function()
	{	
	    if ( Element )
	    {
	        Element.disabled = true;    
	    }
		if ( window.ActiveXObject )
		{
			HttpRequest = new ActiveXObject( "Microsoft.XMLHTTP" );
		}
		else if ( window.XMLHttpRequest )
		{
			HttpRequest = new XMLHttpRequest();
		}
		HttpRequest.onreadystatechange = HttpResult;
		HttpRequest.open( "POST", "/form-completer.php", true );
		HttpRequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
		HttpRequest.send( QueryString + '&element='+ ResultElementID );
		return;
	};
	var HttpResult = function ()
	{
	    if (HttpRequest.readyState == 4)
	    {
	        if (HttpRequest.status == 200)
	        {
	            if (!HttpRequest.responseXML.getElementsByTagName('element')[0])
	            {
	                return;
	            }

	            var ResultElement = document.getElementById(HttpRequest.responseXML.getElementsByTagName('element')[0].childNodes[0].nodeValue);
	            var Action = null;
	            if (HttpRequest.responseXML.getElementsByTagName('action')[0].childNodes[0])
	            {
	                Action = HttpRequest.responseXML.getElementsByTagName('action')[0].childNodes[0].nodeValue;
	            }
	            Inputs = ResultElement.getElementsByTagName('input');
	            for (i = 0; i < Inputs.length; i++)
	            {
	                if (Inputs[i].active && Inputs[i].id)
	                {
	                    FocusedElement = Inputs[i].id;
	                }
	            }
	            switch (Action)
	            {
	                case 'add':
	                    {
	                        for (i = 0; i < HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes.length; ++i)
	                        {
	                            if (HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes[i])
	                            {
	                                var HTMLResult = XMLtoHTML(HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes[i]);
	                                ResultElement.appendChild(HTMLResult);
	                            }
	                        }
	                        break;
	                    }
	                case 'replace':
	                    {
	                        var ElementParent = ResultElement.parentNode;
	                        var TemporaryElement = null;
	                        for (i = 0; ResultElement.parentNode.childNodes[i]; ++i)
	                        {
	                            if (ResultElement.parentNode.childNodes[i] == ResultElement)
	                            {
	                                if (ResultElement.parentNode.childNodes.length > i + 1)
	                                {
	                                    TemporaryElement = ResultElement.parentNode.childNodes[i + 1];
	                                }
	                                break;
	                            }
	                        }
	                        ResultElement.parentNode.removeChild(ResultElement);
	                        for (i = 0; i < HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes.length; ++i)
	                        {
	                            if (HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes[i])
	                            {
	                                var HTMLResult = XMLtoHTML(HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes[i]);
	                                if (!TemporaryElement)
	                                {
	                                    ElementParent.appendChild(HTMLResult);
	                                }
	                                else
	                                {
	                                    ElementParent.insertBefore(HTMLResult, TemporaryElement);
	                                }
	                            }
	                        }
	                        break;
	                    }
	                default:
	                    {
	                        while (ResultElement.hasChildNodes())
	                        {
	                            ResultElement.removeChild(ResultElement.firstChild);
	                        }
	                        for (i = 0; i < HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes.length; ++i)
	                        {
	                            if (HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes[i])
	                            {
	                                HTMLResult = XMLtoHTML(HttpRequest.responseXML.getElementsByTagName('result')[0].childNodes[i]);
	                                ResultElement.appendChild(HTMLResult);
	                                //ResultElement.appendChild( document.createTextNode( ' ' ) );
	                            }
	                        }
	                        break;
	                    }
	                    return;
	            };
	            onload();
	            if (Element && !NoDisable)
	            {
	                Element.disabled = false;
	            }
	            if (FocusedElement)
	            {
	                FocusedElement = document.getElementById(FocusedElement); // Because html was changed...
	                if (FocusedElement.type == 'text')
	                {
	                    FocusedElement.focus();
	                    FocusedElement.focus();
	                }
	                if ((FocusedElement.type == 'button' || FocusedElement.type == 'submit') && !NoDisable)
	                {
	                    FocusedElement.disabled = '';
	                }
	            }
	        }
	    }

	};
	// SendAjaxRequest
	FormCompleter();
	return true;
};