//
// AJAX* related JavaScript code - this should be included on the front end and backend.
//
// * - Strictly speaking this isn't  'AJAX' as we don't do the 'X'.
//

var awaitingResponse = false;
var showFullDebugResponse = false;

// Used to initialise the global request object...
function createRequestObject() {
    var requestObject;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer") {
		try {
        	requestObject = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(ourEx) {
			// Chances are the browser is simply lying about being IE - try a standard XMLHttpRequest...	
			requestObject = new XMLHttpRequest();	
		}
	}
	else requestObject = new XMLHttpRequest();

    return requestObject;
}

var http = createRequestObject();		// Our global request object...

// Used to send the HTTP request...
function sendRequest(url) {
	if(!awaitingResponse) {
		try {
			//window.status = 'Fetching \''+url+'\'';
			debug('sendRequest - "'+url+'"');
			http.open('get', url);
			http.onreadystatechange = handleResponse;
			http.send(null);
			awaitingResponse = true;
		}
	
		catch(ourEx) { window.status = ourEx; }
	}
}

// Used to process the request response...
function handleResponse() {
	awaitingResponse = false;
	try {
		if(http.readyState == 4) {
			var response = http.responseText;
			var chunk = new Array();

			if(response.length) {
				if(response.indexOf('|') != -1) {
					chunk = response.split('|');
					
					if(chunk[0] && chunk[1]) document.getElementById(chunk[0]).innerHTML = chunk[1];
					if(chunk.length >2) eval(chunk[2]);		// Is there any Javascript to be evaled?

					// *** DEBUG ***
					responseData = showFullDebugResponse ? (chunk[1] ? '"'+chunk[1]+'"' : 'N/A') : chunk[1].length+' byte(s)';
					debug('handleResponse - dest: "'+chunk[0]+'" - data: '+responseData+' - eval: '+(chunk[2] ? '"'+chunk[2]+'"' : 'N/A')+'');
				}
			}
		}
	}

	catch(ourEx) { window.status = ourEx; }
}
