// Create a new ajax object
function SAjax()
{
	this.http_request = null;
	this.url = "";
	this.xml = false;
	this.getHttpRequest = getHttpRequest;
	this.makeRequest = makeRequest;
	this.postRequest = postRequest;
	this.soapRequest = soapRequest;
	this.isReady = isReady;
	this.isGood = isGood;
	this.hasMessage = hasMessage;
	this.getMessage = getMessage;
	this.getError = getError;
	this.getErrorMessage = getErrorMessage;
	this.getXml = getXml;
	this.getText = getText;
	this.xmlDoc = xmlDoc;
}

// Get an HttpRequest object, based on browser type
function getHttpRequest()
{
	if (this.http_request)
		this.http_request = null;
		
    if (window.XMLHttpRequest) 
    { // Mozilla, Safari,...
        this.http_request = new XMLHttpRequest();
    } 
    else if (window.ActiveXObject) 
    { // IE
        try 
        {
            this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) 
        {
            try 
            {
                this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!this.http_request) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
    }
}

// Make an http request
function makeRequest(url, async, handlerFunc, xml)
{
	this.url = url;
	this.xml = xml;
	
	this.getHttpRequest();
	if (this.http_request)
	{
		this.http_request.onreadystatechange = handlerFunc;
		this.http_request.open('GET', url, async);
		if (xml && this.http_request.overrideMimeType)
			this.http_request.overrideMimeType('text/xml');
		this.http_request.send(null);
	}
	else
	{
		alert("XmlHttp not available!");
	}
}

function postRequest(url, submit, async, handlerFunc, xml)
{
	this.url = url;
	this.xml = xml;
	
	this.getHttpRequest();
	if (this.http_request)
	{
		this.http_request.onreadystatechange = handlerFunc;
		this.http_request.open('POST', url, async);
		//if (xml && this.http_request.overrideMimeType)
		//	this.http_request.overrideMimeType('text/xml');
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		this.http_request.send(submit);
	}
	else
	{
		alert("XmlHttp not available!");
	}
}

function soapRequest(url, async, handlerFunc, soap, soapAction)
{
	this.url = url;
	this.xml = true;
	
	this.getHttpRequest();
	if (this.http_request)
	{
		this.http_request.onreadystatechange = handlerFunc;
		this.http_request.open('POST', url, async);
		this.http_request.setRequestHeader("SOAPAction", soapAction); // url + "/" + soapFunc) ;
		this.http_request.setRequestHeader("Content-Type", "text/xml; charset=utf-8" ) ;
		this.http_request.send(soap) ;
	}
	else
	{
		alert("XmlHttp not available!");
	}
}

function isReady()
{
	return (this.http_request.readyState == 4);
}

function isGood()
{
	if (this.http_request.status == 200)
	{ 
		if (this.xml)
			return true;
		if (!this.hasMessage())
			return true;
	}
	return false;
}

function hasMessage()
{
	return (this.http_request.responseText.length > 0);
}

function getMessage()
{
	return this.http_request.responseText;
}

function getError()
{
	return "There was a problem with the request.<p>[" + this.http_request.status + "] " + this.http_request.statusText + "<br>" + this.http_request.responseText;
}

function getErrorMessage()
{
	if (this.hasMessage())
		return show_status(this.getMessage(), STATUS_ERROR);
	else
		return show_status(this.getError(), STATUS_ERROR);
}

function getXml()
{
	return this.http_request.responseXML;
}

function getText()
{
	return this.http_request.responseText;
}

function xmlDoc()
{
	var doc;
	// code for IE
	if (window.ActiveXObject)
	{
		doc = new ActiveXObject("Microsoft.XMLDOM");
		doc.async=false;
		doc.loadXML(this.http_request.responseText);
	}
	// code for Mozilla, etc.
	else if (document.implementation && document.implementation.createDocument)
	{
		//doc = document.implementation.createDocument("","",null);
		//doc.loadXML(this.http_request.responseText);
		
		//create a DOMParser
	    var objDOMParser = new DOMParser();
        
		//create new document from string
		doc = objDOMParser.parseFromString(this.http_request.responseText, "application/xml");	
		//alert(this.getText());
	}
	else
	{
		alert('Your browser cannot handle this script');
	}
	return doc;
}