/*
 * AJAX Communicator
 */
 
function Ajax ()
{
	this.responseType = null;
	
	this.init = function init ()
	{
		this.responseType = 'XML';
	}
	
	this.newXMLHttpRequest = function ()
	{
		var xmlreq = false;
		if (window.XMLHttpRequest) 
		{	//non Microsoft
			xmlreq = new XMLHttpRequest();
		}
		else if (window.ActiveXObject)
		{
			try
			{	//IE later versions
				xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e1) {
				try
				{	//IE older versions
					xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e2) {
					//Unable to create XMLHttpRequest
				}
			}
		}
		return (xmlreq);
	}
	
	this.getReadyStateHandler = function (req, responseHandler, responseType, handlerParams)
	{
		return function ()
		{
			if (req.readyState == 1) {}
			if (req.readyState == 2) {}
			if (req.readyState == 3) {}
			if (req.readyState == 4)
			{
				if (req.status == 200)
				{
					if ( responseType.toString().toUpperCase() == 'TEXT' )
					{
						responseHandler (req.responseText, handlerParams);
					}
					else
					{
						responseHandler (req.responseXML, handlerParams);
					}
				}
				else
				{
					window.alert ( 'Error. Server returned status [' + req.status + '].' );
				}
			}
		}
	}
	
	this.send = function ( toFile, method, queryString, responseHandler, handlerParams )
	{
		req = this.newXMLHttpRequest();
		if ( !req ) return ( false );
		req.onreadystatechange = this.getReadyStateHandler(req, responseHandler, this.responseType, handlerParams);
		req.open(method, toFile, true);
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		req.send(queryString);
	}
	
	this.init ();
	
}

var ajax = new Ajax ();