/*************************************************************************
 * AJAX CLASS v0.1
 *************************************************************************
 * Reinier van Grieken / Scheepens Reclame Adviseurs
 *************************************************************************
 * Laatste wijziging: 29 december 2008
 *************************************************************************
 * TO DO: genoeg!
 *************************************************************************/

/*************************************************************************
 * class        : Ajax
 * omschrijving : AJAX calls maken en antwoorden afvangen
 * argumenten   : (string) url    : de URL van het script wat uitgevoerd dient te worden
 *                (string) method : de methode van gegevens aanbieden; GET of POST
 *                (function) func : de functie die uitgevoerd moet worden na succes
 *                (object) params : de waardes die meegestuurd moeten worden, {key:value,..}
 */
function Ajax(url,method,func,params) {
	try { this.req = new XMLHttpRequest(); } catch (e) { try { this.req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (E) { try { this.req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { return false; } } }
	var self = this;
	this.userFunc = func;
	switch (method.toLowerCase()) {
		case "get":
			var get_params = "";
			var f=true; for (var key in params) { if (!f) get_params+="&"; else get_params+="?"; get_params+=key+"="+encodeURIComponent(params[key]); f=false; }
			this.req.open(method, url+get_params, true);
			this.req.onreadystatechange = this.success(self);
			this.req.send();
			return true;
		case "post":
			var post_params = "";
			var f=true; for (var key in params) { if (!f) post_params+="&"; post_params+=key+"="+encodeURIComponent(params[key]); f=false; }
			this.req.open(method, url, true);
			this.req.onreadystatechange = this.success(self);
			this.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			this.req.setRequestHeader('Content-Length', post_params.length);
			this.req.send(post_params);
			return true;
		default:
			alert("[AJAX] invalid AJAX method");
			return false;
	}
}

/*************************************************************************
 * function     : (internal) Ajax.success
 * omschrijving : Wrapper voor de gebruikersfunctie wat uitgevoerd wordt na een succesvolle AJAX call
 * argumenten   : (object) self : de relevante instance van deze class
 */
Ajax.prototype.success = function(self) {
	return function() {
		if (self.req.readyState==4) {
			if (typeof(self.req.status)!='undefined') {
				if (self.req.status == 200) {
					self.userFunc(self.req.responseText);
				}
			}
		}
	}
}

