/***********************************************************************************************************************
comms.js
ver 1.00
5.10.07


***********************************************************************************************************************/

var url_root = GetServerRoot();
var url_dest = GetServerDest();
var code_dir = GetCodeDir();



var global_socket;
var pendingTX = [];

var response_timeout = 0;
var response_timeout_max = 20;

var dbg_str = '';

function ShowDebug()
{
alert(dbg_str);
}

function CreateSocket()
{
	if(window.XMLHttpRequest) 
	{
    	try 
		{
			global_socket = new XMLHttpRequest();
        }
		catch(e)
		{
			global_socket = false;
        }
    /* branch for IE/Windows ActiveX version*/
    } 
	else if(window.ActiveXObject)
	{

       	try 
		{
        	global_socket = new ActiveXObject("Msxml2.XMLHTTP");
      	}
		catch(e)
		{
        	try
			{
          		global_socket = new ActiveXObject("Microsoft.XMLHTTP");
        	}
			 catch(e) 
			{
          		global_socket = false;
        	}
		}
    }

	if (!global_socket)
		alert('xmlhttp problem');
}

function TX_Message()
{

	if (pendingTX.length)
	{
		if (!pendingTX[0].waiting_response)
		{
			var url_addr = url_root + code_dir + url_dest;

/*
alert(url_addr);
alert(pendingTX[0].message_object.get_request() );
*/

			CreateSocket();
			if (global_socket)
			{
				pendingTX[0].waiting_response = true;
				global_socket.onreadystatechange = pendingTX[0].ResponseHandler;
				global_socket.open("POST", url_addr, true);
				global_socket.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				global_socket.send(pendingTX[0].message_object.get_request() );
				show_server_status();

				response_timeout = 0;
				setTimeout("TX_Message()", 1000);
			}
		}
		else
		{
			response_timeout++;
			/*
			if (response_timeout >= response_timeout_max)
				alert('there seems to be a problem with the server connection');
			else
				setTimeout("TX_Message()", 1000);
				*/
		}
	}
}

function ResponseValidator()
{
	var stat = 0;
	try
	{
		if (global_socket.readyState==4)	
			stat = 4;
	}
	catch(e)
	{
		return false;
	}

	if (stat == 4)
	{
		if (global_socket.status==200)
		{
			return true;
		}
	    else
		{
			return false;
		}
	}
	else
		return false;

}


MessageHandler.prototype = new MessageHandler;
MessageHandler.prototype.constructor = MessageHandler;
MessageHandler.prototype.TX = MessageHandler_TX;
MessageHandler.prototype.ResponseHandler = MessageHandler_ResponseHandler;

function MessageHandler(message_object)
{
	this.waiting_response = false;
	this.message_object = message_object;
}

function MessageHandler_TX()
{
	TX_Message();
}


function MessageHandler_ResponseHandler()
{
	hide_server_status();
	if (ResponseValidator() )
	{
		pendingTX[0].message_object.ResponseHandler(global_socket.responseText);
		pendingTX.splice(0, 1);
		global_socket = null;
		response_timeout = 0;
		if (pendingTX.length)
			TX_Message();
	}
}





