// Ajax stuff
// Copyright (c) 2006 William Tan <wil@dready.org>
// Parts taken from http://developer.mozilla.org/en/docs/AJAX:Getting_Started



////////////// "Low-level" functions

var REQ_MIMETYPE = "application/x-www-form-urlencoded";



function stateChangeHandler(request, successHandler)
{
	// failureHandler is an optional 3rd argument
	var failureHandler = function(msg) { alert(msg); };
	if (arguments.length > 2) {
		failureHandler = arguments[2];
	}

	try {
		if (request.readyState != 4)
			return;

		if (request.status != 200) {
			failureHandler("Server failed to respond properly: " +
				request.status + " status received");
			return;
		}

		successHandler(request.responseXML);
	}
	catch (e) {
		failureHandler("Problem with XML request: " + e);
	}
}


function sendXML(method, url, toSend, successHandler, failureHandler)
{
	if (window.XMLHttpRequest) {
		// browser has native support for XMLHttpRequest object
		req = new XMLHttpRequest();
		// older versions of FF requires this:
		if (req.overrideMimeType)
			req.overrideMimeType('text/xml');
	}
	else if (window.ActiveXObject) {
		// try XMLHTTP ActiveX (Internet Explorer) version
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				failureHandler(
					'Failed to make ActiveX object: ' + e);
			}
		}
	}

	if (!req) {
		failureHandler('Could not instantiate XMLHTTP');
	}

	req.onreadystatechange = function() {
		stateChangeHandler(req, successHandler, failureHandler);
	};
	req.open(method, url, true);
	req.setRequestHeader("Content-Type", REQ_MIMETYPE);
	req.setRequestHeader("Cache-Control", "no-cache");
	req.send(toSend);
}



///////// High-level functions

function sendXMLGET(url, successHandler, failureHandler)
{
	return sendXML('GET', url, null, successHandler, failureHandler);
}


function sendXMLPOST(url, content, successHandler, failureHandler)
{
	return sendXML('POST', url, content, successHandler, failureHandler);
}



function showError(msg) {
	var el = $("error");
	if (el) {
		el.innerHTML = msg;
		dispShow(el);
	}
	else alert(msg);
}


function xmlGet(url, successHandler)
{
	return sendXMLGET(url, successHandler, showError);
}


function xmlPost(url, content, successHandler)
{
	return sendXMLPOST(url, content, successHandler, showError);
}

