// Name: 	Communication_with_server.js
// Author:	Adir Eini. 9.6.06
// purpose:	Contains interaction with web server for client side scripting.
// Supports both Mozilla browsers and IE.

function create_Object()
{ 
	var xmlhttp;
	// This if condition for Firefox and Opera Browsers 
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
	{
		try 
		{
			xmlhttp = new XMLHttpRequest();
		} 
		catch (e) 
		{
			alert("Your browser does not support XMLHTTPRequest");
			xmlhttp = false;
		}
	}
	// else condition for ie
	else
	{
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xmlhttp;
}

function server_interaction()
{
	switch (_request.readyState)
	{
		case 1:
			/* Data is loading */
			break;
		
		case 4:
			if (_request.status != 200)
				break;
			/* Data is ready*/
			data_valid_indicator = true;
			data_from_server = _request.responseText;
			if (_loading_image)
			_loading_image.style.visibility = 'hidden';
			if (_request_callback_hook) _request_callback_hook(); // call callback if valid
			
			return;
	}
	//setTimeout(server_interaction, 30);
}

function call_server(server_page_name, callback_hook, loading_image)
{
	
	data_valid_indicator = false;
	_request.open("GET", server_page_name);
	_request_callback_hook = callback_hook;
	_loading_image = loading_image;
	
	try
	{
	
		if (_loading_image)
			_loading_image.style.visibility = 'visible';
		setTimeout("_request.send('')", 1);
	}
	catch(e)
	{
		if (_loading_image)
			_loading_image.style.visibility = 'hidden';
	}
	//setTimeout(server_interaction, 1);
	_request.onreadystatechange = server_interaction;
}

function call_server_post(server_page_name, params, callback_hook, loading_image)
{
	_request_callback_hook = callback_hook;
	_loading_image = loading_image;
	
	try
	{
		if (_loading_image)
			_loading_image.style.visibility = 'visible';
		setTimeout("_request.send('')", 1);
	}
	catch(e)
	{
		if (_loading_image)
			_loading_image.style.visibility = 'hidden';
	}

	_request.open("POST", server_page_name, true);	
	//Send the proper header information along with the request
	_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	_request.setRequestHeader("Content-length", params.length);
	_request.setRequestHeader("Connection", "close");
	_request.send(params);
	_request.onreadystatechange = server_interaction;
}

function call_server_post_params_array(server_page_name, param_arr, value_arr, callback_hook, loading_image)
{
	var params = "";
	for (var i = 0; i < param_arr.length; i++)
	{
		if (i > 0)
			params += "&";
		params += param_arr[i] + "=" + value_arr[i];
	}
	call_server_post(server_page_name, params, callback_hook, loading_image);
}

var _request = create_Object();
_request.onreadystatechange = server_interaction;
var _request_callback_hook = null;
var _loading_image = null;
var data_valid_indicator = false;
var data_from_server;

function server_is_ready_to_receive()
{
	return (_request.readyState == 4);
}