/***********************************************************************************
 *  Copyright (c) 2005 - 2009
 *  Cogent Software Solutions, Inc.
 *  All Rights Reserved
 *
 *  This file is the intellectual property of:
 *   Cogent Software Solutions, Inc.
 *   4206 Buckskin Lake Dr.
 *   Ellicott City, Maryland 21042
 *
 *   Phone:  866-531-7272
 *   Email:  mwarble@cogentsoftwaresolutions.com
 *   Web:    www.cogentsoftwaresolutions.com
 *
 *  Use is subject to licensing agreement.
 *
 ***********************************************************************************/
var xmlRequest;
var currentAjaxRequest;
var requestQueue = new Array();
var requestInProgress = false;


function logVisit()
{
   sendAjaxGetRequest("/logvisit", null, null);
}


function setImgSrc(id, filename)
{
	var image = document.getElementById(id);
	image.src = filename;
}


function sendAjaxGetRequest(action, callback, clientData)
{
	var request = new Object();

	request.type = "GET";
	request.action = action;
	request.callback = callback;
	request.clientData = clientData;

	if (requestInProgress == false)
	{
		return sendXmlHttpGetRequest(request);
	}
	else
	{
		queueAjaxRequest(request);
	}
}


function sendAjaxPostRequest(action, parameters, callback, clientData)
{
	var request = new Object();

	request.type = "POST";
	request.action = action;
	request.parameters = parameters;
	request.callback = callback;
	request.clientData = clientData;

	if (requestInProgress == false)
	{
		return sendXmlHttpPostRequest(request);
	}
	else
	{
		queueAjaxRequest(request);
	}
}


function queueAjaxRequest(request)
{
	requestQueue.push(request);
}

function processAjaxResponse(ajaxResponse)
{
	currentAjaxRequest.callback(ajaxResponse);

	processNextAjaxRequest();
}

function processNextAjaxRequest()
{
	if (requestQueue.length > 0)
	{
		var request = requestQueue.shift();

		if (request.type == "GET")
		{
			return sendXmlHttpGetRequest(request);
		}
		else if (request.type == "POST")
		{
			return sendXmlHttpPostRequest(request);
		}
		else
		{
			// error
		}
	}
}


//***************************************************
//**  Transport Layer
//***************************************************
function sendXmlHttpGetRequest(ajaxRequest)
{
	currentAjaxRequest = ajaxRequest;

	xmlRequest = getXmlHttpRequestObject();

	if (ajaxRequest.callback == null || ajaxRequest.clientData == null)
	{
		xmlRequest.open("GET", ajaxRequest.action, false);
		xmlRequest.send(null);

	    var ajaxResponse = new Object();

		ajaxResponse.text = xmlRequest.responseText;
		ajaxResponse.xml  = xmlRequest.responseXML;

		return ajaxResponse;
	}
	else
	{
		requestInProgress = true;

		xmlRequest.open("GET", ajaxRequest.action, true);

		xmlRequest.onreadystatechange = onXmlHttpResponse;

		xmlRequest.send(null);
	}

}

function sendXmlHttpPostRequest(ajaxRequest)
{
	currentAjaxRequest = ajaxRequest;

	xmlRequest = getXmlHttpRequestObject();

	if (ajaxRequest.callback == null || ajaxRequest.clientData == null)
	{
		xmlRequest.open("POST", ajaxRequest.action, false);
		xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlRequest.send(ajaxRequest.parameters);

	    var ajaxResponse = new Object();

		ajaxResponse.text = xmlRequest.responseText;
		ajaxResponse.xml  = xmlRequest.responseXML;

		return ajaxResponse;
	}
	else
	{
		requestInProgress = true;

		xmlRequest.open("POST", ajaxRequest.action, true);

		xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

		xmlRequest.onreadystatechange = onXmlHttpResponse;

		xmlRequest.send(ajaxRequest.parameters);
	}
}


function onXmlHttpResponse()
{
	if (xmlRequest.readyState == 4 && xmlRequest.status == 200)
	{
		requestInProgress = false;

	    var ajaxResponse = new Object();

		ajaxResponse.text = xmlRequest.responseText;
		ajaxResponse.xml  = xmlRequest.responseXML;
		ajaxResponse.clientData = currentAjaxRequest.clientData;

		processAjaxResponse(ajaxResponse);
	}
}


function getXmlHttpRequestObject()
{
	var xmlHttpRequestObject = null;

	/*@cc_on
	@if (@_jscript_version >= 5)
	{
		try
		{
			xmlHttpRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				xmlHttpRequestObject = null;
			}
		}
	}

	@end @*/

	if (!xmlHttpRequestObject && typeof XMLHttpRequest != 'undefined')
	{
		try
		{
			xmlHttpRequestObject = new XMLHttpRequest();
		}
		catch (e)
		{
			xmlHttpRequestObject = null;
		}
	}

	return xmlHttpRequestObject;
}


