// MWAjax.js
//
// Mainwave AJAX handling code


// Ajax variables
var request;	// The asynchronous XMLHttpRequest object
var ajaxSuccessCallback;
var ajaxFailureCallback;


//
// Create and send a new Ajax request
//
function sendAjaxRequest(url, params, successCallback, failureCallback) {
	// Cancel any outstanding request
	//
	if (request) {
		request.abort();
	}

	// Now issue the new request
	//
	ajaxSuccessCallback = successCallback;
	ajaxFailureCallback = failureCallback
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest();
		try {
			doOpenAndSendAjaxRequest(url, params);
		}
		catch (exception) {
			// TODO: Something!
		}
	}
	else { // IE
		request = new ActiveXObject("Microsoft.XMLHTTP");
		if (request) {
			doOpenAndSendAjaxRequest(url, params);
		}
		else {
			// TODO: Something!
		}
	}
}


function doOpenAndSendAjaxRequest(url, params) {
	//
	// params will be a hash specified like this:
	// var params = {param1:"value1", params2:"value2", ...}
	//
	if (request) {
		// Build param string
		var paramString = "";
		if (params) {
			var flatArray = new Array;
			for (var key in params) {
				flatArray.push(key + "=" + params[key]);
			}
			paramString = "?" + flatArray.join("&");
		}

		// Set up callback function
		request.onreadystatechange = processAjaxStateChange;

		// Open the request and set headers
		request.open("GET",				// method
					 url + paramString,	// URL
					 true)				// asynchronous flag
		request.setRequestHeader('Content-Type', 'text/plain');

		// Finally, send the request
		request.send(null);
	}
}

//
// Callback for the XMLHttpRequest
//
function processAjaxStateChange() {
	try {
		if (request.readyState == 4) {
			if (request.status != 200) {// || request.responseText.indexOf("WEBVAULTERROR") > -1) {
				if (ajaxFailureCallback) {
					ajaxFailureCallback();
				}
			}
			else if (ajaxSuccessCallback) {
				ajaxSuccessCallback(request.responseText);
			}
			request = null;
		}
	}
	catch(e) {
		// Do something with e!
	}
}
