﻿var xmlHttpObject;
var callbackFunction;
var gResults;

function makeAjaxRequest(url, parameters, async, callbackFunctionName)
{
    if(window.ActiveXObject)
    {
        xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest)
    {
        xmlHttpObject = new XMLHttpRequest();
    }
    
    callbackFunction = callbackFunctionName;
        
    var completeUrl = url + parameters.toQueryString();
    
    xmlHttpObject.open("GET", completeUrl, async);
    xmlHttpObject.onreadystatechange = xmlHttpObjectStateChange;
    xmlHttpObject.send(null);
}

/*
This function will return the xml results to the calling function synchronously.
*/
function makeSjaxRequest(url, parameters)
{
    callbackFunction = null;
    gResults = "";
    
    if(window.ActiveXObject)
    {
        xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest)
    {
        xmlHttpObject = new XMLHttpRequest();
    }
    
   var completeUrl = url + parameters.toQueryString();
    
    xmlHttpObject.open("GET", completeUrl, false);
    xmlHttpObject.onreadystatechange = xmlHttpObjectStateChange;
    xmlHttpObject.send(null);
    
    return gResults;
}

/*
This function will return the xml results to the calling function synchronously.
*/
function makeSjaxPOSTRequest(url, parameters)
{
    callbackFunction = null;
    gResults = "";
    
    if(window.ActiveXObject)
    {
        xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest)
    {
        xmlHttpObject = new XMLHttpRequest();
    }
    
    xmlHttpObject.onreadystatechange = xmlHttpObjectStateChange;
    xmlHttpObject.open("POST", url, false);
    xmlHttpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttpObject.setRequestHeader("Content-length", parameters.length);
    xmlHttpObject.setRequestHeader("Connection", "close");
    var strParams = parameters.toQueryString();
    xmlHttpObject.send( strParams.replace('?','') );
    return gResults;
}

function makeAjaxPOSTRequest(url, parameters, callbackFunctionName, async)
{
    if(window.ActiveXObject)
    {
        xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest)
    {
        xmlHttpObject = new XMLHttpRequest();
    }
	else
	{
		alert("ajaxHelper - can't create xmlhttp object!");
	}
    
    callbackFunction = callbackFunctionName;
    
    var completeUrl = url + parameters.toQueryString();
    
	xmlHttpObject.onreadystatechange = xmlHttpObjectStateChange;
    xmlHttpObject.open("POST", url, async);
	xmlHttpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttpObject.setRequestHeader("Content-length", parameters.length);
    xmlHttpObject.setRequestHeader("Connection", "close");
	var strParams = parameters.toQueryString();
    xmlHttpObject.send( strParams.replace('?','') );
}

/**
 * always synchronous
 * @param {Object} url
 * @param {Object} xmlString
 */
function makeAjaxXMLPOSTRequest(url, xmlString)
{
	if(window.ActiveXObject)
    {
        xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest)
    {
        xmlHttpObject = new XMLHttpRequest();
    }
	else
	{
		alert("ajaxHelper - can't create xmlhttp object!");
	}
    
	xmlHttpObject.onreadystatechange = xmlHttpObjectStateChange;
    xmlHttpObject.open("POST", url, false);
	xmlHttpObject.setRequestHeader("Content-type", "text/xml");
    xmlHttpObject.setRequestHeader("Connection", "close");
	callbackFunction = null;
    xmlHttpObject.send( xmlString );
	return gResults;
}

function ajaxParameters()
{
    var params = new Array();
    
	this.add = function(name, value) 
	{
			params[name] = escape(value); 
			return this;
	}
	
	this.toQueryString = function()
	{
		var queryString = "?";
		
		for(var p in params)
		{
				queryString += p + "=" + params[p].toString() + "&";
		}
		
		//add the no-cache date to the query string.. otherwise calls may be cached.
		if(queryString == "?")
		{
		    queryString += "noCache=" + new Date();
		    //return "";
		}
		else
		{
		    queryString += "noCache=" + new Date();
		    //alert(queryString);
		}

		return queryString;
	}
}

function xmlHttpObjectStateChange()
{
    if(xmlHttpObject.readyState == 4)
    {
        if(xmlHttpObject.status == 200)
        {
            var results = xmlHttpObject.responseText;

            if(callbackFunction && callbackFunction != "")
            {
                callbackFunction(results);
            }
            else
            {
                gResults = results;
            }
        }
    }
}
    
    


