
function getXMLHttpRequest() {
	var xmlHttpReq = null;
	if (window.XMLHttpRequest) {
		xmlHttpReq = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xmlHttpReq;
}

function AjaxRequest(method, url, data, async, stateChangeHandler) {
	var xmlHttpReq = getXMLHttpRequest();
	if (xmlHttpReq == null)
		return false;
	
	xmlHttpReq.onreadystatechange = function() { stateChangeHandler(xmlHttpReq); };
	xmlHttpReq.open(method, url, async);
	xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttpReq.setRequestHeader('Connection', 'close');
	xmlHttpReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
	xmlHttpReq.send(data);
	return true;
}

function getNodeValue(parent, tagName) {
	var e = parent.getElementsByTagName(tagName);
	return (e != null && e[0] != null && e[0].hasChildNodes()) ? e[0].firstChild.nodeValue : "";
}

function submitFormResponseHandler(xmlHttpReq) {
	if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
		var response = xmlHttpReq.responseXML;
		if (response != null) {
			var code = getNodeValue(response, "code");
			var message = getNodeValue(response, "message");
			if (message != "") {
				alert(message);
			}
		}
	}
}

function submitForm(form, url, responseHandler) {
	var qs = "";
	form.submit_button.disabled = true;
	for (var i=0; i<form.elements.length; i++) {
		qs += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
	}
	AjaxRequest("POST", "/ajax/" + url, qs, true, responseHandler);
	form.submit_button.disabled = false;
}
