
// TODO: Make a pool of tricket_xmlHttp allowing async operation....

var tricket_xmlHttp = null;

function tricket_getXmlHttp()
{
	var obj = null;
	
	try
	{
		obj = new ActiveXObject("Msxml3.XMLHTTP");
	}
	catch(ex)
	{
		try
		{
			obj = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(iex)
		{
			try
			{
				obj = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(iex2)
			{
				obj = null;
			}
		}
	}

	if(!obj && typeof XMLHttpRequest != 'undefined')
		obj = new XMLHttpRequest();
		
	return obj;
}

function decodeTricketMapString(input)
{
	if(input == null)
		return '';
	var outerParts = input.split('|');

	var output = new String();
	for(var i = 0; i < outerParts.length; i++)
	{
		var innerParts = outerParts[i].split('$');
		for(var j = 0; j < innerParts.length; j++)
			output = output.concat((innerParts[j].length > 0 ? decode64(innerParts[j]).replace(/\|/g, '&#124;').replace(/\$/g, '&#36;') : '') + '$');
		output = output.substring(0, output.length - 1) + '|';
	}
	return output.substr(0, output.length - 1);
}

function tricket_sendGetRequest(uri, querystring)
{
	var localXmlHttp = tricket_getXmlHttp();
	localXmlHttp.open('GET', uri + '?' + querystring, false);

	localXmlHttp.setRequestHeader('Cache-Control', 'no-cache');
	localXmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
	
	localXmlHttp.send(null);

	return decodeTricketMapString(localXmlHttp.responseText);

}


function tricket_sendPostRequest(uri, dataString)
{
	var localXmlHttp = tricket_getXmlHttp();

	localXmlHttp.open('POST', uri, false);
	
	localXmlHttp.setRequestHeader('Method', 'POST ' + uri + ' HTTP/1.1');
	localXmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
	localXmlHttp.setRequestHeader('Cache-Control', 'no-cache');

	localXmlHttp.send(dataString);

	return decodeTricketMapString(localXmlHttp.responseText);
}


function tricket_sendAsyncGetRequest(uri, querystring, callbackFunctionName)
{
	if(tricket_xmlHttp && tricket_xmlHttp.readyState != 0)
		tricket_xmlHttp.abort();
	
	tricket_xmlHttp = tricket_getXmlHttp();

	tricket_xmlHttp.open('GET', uri + '?' + querystring, true);

	tricket_xmlHttp.setRequestHeader('Cache-Control', 'no-cache');

	tricket_xmlHttp.onreadystatechange = function()
	{
		if(tricket_xmlHttp.readyState == 4 && tricket_xmlHttp.responseText)
			eval(callbackFunctionName + '(\'' + tricket_xmlHttp.responseText.replace('\r\n', '') + '\');');
	};
	
	tricket_xmlHttp.send(null);
}


function tricket_sendAsyncPostRequest(uri, dataString, callbackFunctionName)
{
	if(tricket_xmlHttp && tricket_xmlHttp.readyState != 0)
		tricket_xmlHttp.abort();
	
	tricket_xmlHttp = tricket_getXmlHttp();

	tricket_xmlHttp.open('POST', uri, true);

	tricket_xmlHttp.setRequestHeader('Cache-Control', 'no-cache');

	tricket_xmlHttp.onreadystatechange = function()
	{
		if(tricket_xmlHttp.readyState == 4 && tricket_xmlHttp.responseText)
			eval(callbackFunctionName + '(\'' + tricket_xmlHttp.responseText.replace('\r\n', '') + '\');');
	};
	
	tricket_xmlHttp.setRequestHeader('Method', 'POST ' + uri + ' HTTP/1.1');
	tricket_xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	tricket_xmlHttp.send(dataString);
}



function tricket_escapeURI(s)
{
	if(encodeURIComponent)
		return encodeURIComponent(s);
	if(escape)
		return escape(s)
}

function tricket_unescapeURI(s)
{
	if(decodeURIComponent)
		return decodeURIComponent(s);
	if(unescape)
		return unescape(s)
}

