//
var cache = new Array();
var result_cache = new Array();
var content_cache = new Array();
var div_name_cache = new Array();
var effect_cache = new Array();
var request_pending = new Array();

var nameOfDivToUpdate;
var requestedUrl;
var showDivWithEffect = false;

function createRequestObject(){
	var ro; // request object
	
	try
	{
		ro = new XMLHttpRequest();
	}
	catch(e)
	{
		var XMLHttpVersions = new Array (	"MSXML2.XMLHTTP.6.0",
										 	"MSXML2.XMLHTTP.5.0",
										 	"MSXML2.XMLHTTP.4.0",
										 	"MSXML2.XMLHTTP.3.0",
										 	"MSXML2.XMLHTTP",
										 	"Microsoft.XMLHTTP"	);
		for ( i=0; i < XMLHttpVersions.length && !ro; i++ )
		{
			try
			{
				ro = new ActiveXObject(XMLHttpVersions[i]);
			}
			catch(e) {}
		}
	}
	if ( !ro )
	{
		alert ('Unable to create XMLHttpRequest object.');
	} else {
		return ro;
	}
}

var http = createRequestObject();

function send_request(url,divId,effect)
{
	if ( checkResultCache(url) == true ) {
		request_pending[url] = false;
		return true;
	}

	cache.push(url,divId,effect);

	if ((http.readyState == 4 || http.readyState == 0) && cache.length > 0){
		
		var cacheUrl 	= cache.shift();
		var cacheDiv	= cache.shift();
		var cacheEffect = cache.shift();
		
		if ( cacheUrl !== undefined ) {

			http.open('get', cacheUrl);

			requestedUrl 		= cacheUrl;
			nameOfDivToUpdate 	= cacheDiv;
			showDivWithEffect 	= cacheEffect;
	
			http.onreadystatechange = handleResponse;
			http.send(null);
	
			return true;
		} else {
			return false;
		}
	} else {
		setTimeout("send_request();", 500);
	}
}

function handleResponse(){

	if(http.readyState == 4){
		var response = http.responseText;

		// set the result for the requested url to true
		result_cache[requestedUrl] 		= true;
		
		content_cache[requestedUrl] 	= response;
		div_name_cache[requestedUrl] 	= nameOfDivToUpdate;
		effect_cache[requestedUrl] 		= showDivWithEffect;

		// update the div
		updateDiv(response);
	}
}
function checkResultCache(url){
	// this function checks if we have results from previous requestes
	// if that is so, display the cached result
	// and stop the current ajax request
	if ( ( result_cache[url] == true ) ) {
		nameOfDivToUpdate = div_name_cache[url];
		showDivWithEffect = effect_cache[url];
		
		updateDiv(content_cache[url]);
		return true;
	} else {
		return false;
	}
}
function updateDiv(content){
	var resultDiv = document.getElementById(nameOfDivToUpdate);

	if (resultDiv) {
		resultDiv.innerHTML = content;
		if ( showDivWithEffect ){
			toggleDivs(nameOfDivToUpdate);
		}
	}
	showDivWithEffect = false;
	requestedUrl = "";
	nameOfDivToUpdate = "";
	showDivWithEffect = "";
}
function cancelSubmit() {
  return false; // cancel event
}
