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

function Ajax() {
	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) { this.req = false; } } }
}

/*************************************************************************
 * Request URL
 *   - url:        uit de voeren URL
 *   - method:     opvraag methode: "GET" of "POST"
 *   - func:       functie uit te voeren bij succes (de eerste en enige parameter die meegegeven wordt aan deze functie is de output van de AJAX call)
 *   - params:     mee te geven parameters. Altijd in array-vorm {key:value}
 */
Ajax.prototype.request = function(url,method,func,params) {
	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();
			break;
		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);
			break;
		default:
			alert("invalid AJAX method");
	}
}

/*************************************************************************
 * OnReadyStateChange wrapper
 */
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);
				}
			}
		}
	}
}
