
/*
 ****************************
 *   Basic AJAX functions   *
 *   © Pascal Pfiffner      *
 ****************************
 */

// dhtml.js must be included _before_ this document!
var XMLhandleFunction = handleGetStuff;


// sends a request for a page
function requestPage(url, post_vars) {
	req = createXMLHttpRequest();
	if(!req)
		return false;
	
	req.onreadystatechange = handleStateChange;
	
	// POST
	if(post_vars) {
		req.open("POST", url, true);
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		req.setRequestHeader("Content-length", post_vars.length);
		req.setRequestHeader("Connection", "close");
		req.send(post_vars);
	}
	
	// GET
	else {
		req.open("GET", url, true);
		req.send(null);
	}
	
	return true;
}

// handles the readystatechanges
function handleStateChange() {
	if(!req)
		return false;
	
	switch(req.readyState) {
		case 0:		// UNINITIALIZED
		case 1:		// LOADING
		case 2:		// LOADED
		case 3:		// INTERACTIVE
			break;
		case 4:		// COMPLETED
			receiveXML(req);
			break;
		default:;
	}
}

// receives XML-data
function receiveXML(req) {
	if(!req.responseXML) {
		if(confirm("There seems to be a problem with the XML document, aborting.\n\nDo you wish to see some debug-information?"))
			alert(req.responseText);
		
		resetClickedObject();
		return false;
	}
	
	if('function' == typeof(XMLhandleFunction)) {
		return XMLhandleFunction(req);
	}
	else {
		alert('no handlefunction defined');
	}
}


// returns a new XMLHttpRequest-Object. Needed because MSIE has another implementation
function createXMLHttpRequest() {
	var req = null;
	
	if(window.XMLHttpRequest) {
		req = new XMLHttpRequest;
	}
	else if(window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(err_MSXML2) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(err_Microsoft) { }
		}
	}
	
	return req;
}


