/* 
	Copyright Camelonta AB - 2006
*/


function AjaxConnection(  )
{
	/*if(_xmlHttp==null)
	{
		_xmlHttp =  getXMLHttpRequest();
		this.XmlHttpRequest = _xmlHttp;
	}
	*/
	this.XmlHttpRequest = getXMLHttpRequest();
	this.Get = _Get;
	this.Post = _Post;
	this.GetSync = _GetSync;
}

onResponseStateChange = function(thisCall) {
	req = thisCall.req;
	if (req.readyState != 4) 
		return;
	else
	{
		callbackFunction = thisCall.callbackFunction;
		
		var content = (thisCall.responseIsXml)?req.responseXML: req.responseText;
		
		//responseHeaders = req.getAllResponseHeaders();
		thisCall.callbackFunction(content, thisCall.callingContext);
		thisCall = null;
	}
}

function _GetSync( url, queryStringArgs, callbackFunction, callingContext, responseIsXml ) 
{
	// Build the querystring
	queryString = buildQueryString(queryStringArgs);
	if(queryString.length>0 && url.indexOf("?")==-1)
		url = url + "?" + queryString;
	else
		url = url + "&" + queryString;

	//var debugUrl = prompt("url", url)
	// Open a connection to the server
	this.XmlHttpRequest.open("GET", url, false);
	this.XmlHttpRequest.send(null);
	var serverResponse = this.XmlHttpRequest.responseText;
	return serverResponse;
}


function _Post( url, queryStringArgs, callbackFunction,  callingContext, responseIsXml, bodyType, body ) 
{
	// Build the querystring
	queryString = buildQueryString(queryStringArgs);
	if(queryString.length>0 && url.indexOf("?")==-1)
		url = url + "?" + queryString;
	else
		url = url + "&" + queryString;

	if(url.indexOf("//")>-1)
	{
		var oRegExp = new RegExp("//", "gi");
		url = url.replace(oRegExp,  "/");
	}
	
	

	//var debugUrl = prompt("url", url)
	
	this.XmlHttpRequest.open("POST", url, true);

	// Setup a callBack-function
	var thisCall = {req: this.XmlHttpRequest,
                callbackFunction: callbackFunction,
                callingContext: callingContext,
                responseIsXml: responseIsXml,
                url: url};
	this.XmlHttpRequest.onreadystatechange = function() { onResponseStateChange(thisCall); }

	// Open a connection to the server
    this.XmlHttpRequest.setRequestHeader('Content-Type',  bodyType);
    // Send the request
    this.XmlHttpRequest.send(body);
}

function _Get( url, queryStringArgs, callbackFunction, callingContext, responseIsXml ) 
{
	// Build the querystring
	queryString = buildQueryString(queryStringArgs);
	//alert("get: " + queryString);
	if(queryString.length>0 && url.indexOf("?")==-1)
		url = url + "?" + queryString;
	else
		url = url + "&" + queryString;
	//alert("get: " + url);
	//var debugUrl = prompt("url", url)
	// Open a connection to the server
	this.XmlHttpRequest.open("GET", url, true);

	// Setup a callBack-function
	 var thisCall = {req: this.XmlHttpRequest,
                callbackFunction: callbackFunction,
                callingContext: callingContext,
                responseIsXml: responseIsXml,
                url: url};
	this.XmlHttpRequest.onreadystatechange = function() { onResponseStateChange(thisCall); }

	// Send the request
	this.XmlHttpRequest.send(null);
	return;
}



function buildQueryString(arr)
{	
	var queryString = "&nc="+new Date().getTime();
		
	for( key in arr ) {
        var value = arr[key];
		queryString += '&' + key + '=' + encodeURIComponent(value);
	}
	return (queryString.length > 0) ? queryString.substring(1): queryString;
}




//////////////////////////////////////////////////////////////////////////////////////////////7
	
var _xmlHttp = null;

function HttpRequest( url, callbackFunction )
{
	this.Url = url;
	this.CallbackFunction = callbackFunction;
	 
	if(_xmlHttp==null)
	{
		_xmlHttp =  getXMLHttpRequest();
		this.XmlHttpRequest = _xmlHttp;
	}
	this.CallServer = _CallServer;
	this.Get = _Get;
	this.Post = _Post;
}


function _CallServer( ) 
{	
	// Build the URL to connect to
	var url = this.Url + "?";
	
	for(var i = 0; i < arguments.length; i=i+2)
	{
		argName = arguments[i];
		argVal = arguments[i+1];
		url += argName + "=" + encodeURIComponent( argVal );
		if((i+2)<arguments.length)
			 url += "&";
	}
	// Open a connection to the server
	this.XmlHttpRequest.open("GET", url, true);

	// Setup a function for the server to run when it's done
	this.XmlHttpRequest.onreadystatechange = this.CallbackFunction;

	// Send the request
	this.XmlHttpRequest.send(null);
}

function httpCallback() 
{
	var httpResponseArea = document.getElementById("httpResponse");
	if (xmlHttp.readyState == 4) 
	{
		var response = xmlHttp.responseText;
		httpResponseArea.innerHTML += response;
		HandleAjaxResponse( eval(response) );
		//httpResponseArea.innerHTML += "<li>" + "Getting response: " + response;
	}
}



// CROSS BROWSER creation of XmlHttp-object
function getXMLHttpRequest()
{
	var xmlHttp = null;
	var clsids = ["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP.2.6","Microsoft.XMLHTTP.1.0","Microsoft.XMLHTTP.1","Microsoft.XMLHTTP"];
	// Firefox and others: if we didn't get any with above we try with XmlHttpRequest.
	if (typeof XMLHttpRequest!='undefined') 
		xmlHttp = new XMLHttpRequest();
	else{
		for(var i=0; i<clsids.length && xmlHttp == null; i++) 
		{
			xmlHttp = getXmlHttpObj(clsids[i]);
			if(xmlHttp!=null)
				break;
		}
	}


	return xmlHttp;
}


// try-and-catch creation of object
function getXmlHttpObj(clsid) 
{
	var xmlHttp = null;
	try {
		xmlHttp = new ActiveXObject(clsid);
		return xmlHttp;
	} catch(ex) {}
}
