function httpRequest(method, url, parameters, asynchronous) {
	var request = false;
	this.method = method;
	this.url = url;
	this.parameters = parameters;
	this.asynchronous = asynchronous;
	this.initRequest = function() {
		if (window.XMLHttpRequest) {
			request = new XMLHttpRequest();
		}
		else if (window.ActiveXObject) {
			try {
				request = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e) {
				try {
					request = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {}
			}
		}
		if (!request) {
			alert("Giving up :( Cannot create an XMLHTTP instance");
			return false;
		}
		return true;
	}

	this.setHandlerFunction = function(callbackFunction, par) {
		request.onreadystatechange = function() {
			switch(request.readyState) {
				case 1:
				eval(callbackFunction + "('Loading...',par)");
				break;
				case 2:
				eval(callbackFunction + "('Loading...',par)");
				break;
				case 4:
				if (request.status == 200) {
					if(request.responseText.split(":")[0]=="<redirect>")
					window.location.href=request.responseText.split(":")[1];
					else
					eval(callbackFunction + "(request.responseText,par)");
				} else {
					alert("There was a problem with the request. Status code: " +
					request.status + ", " + request.statusText + "\n" + "Please refresh the page!");
				};
				break;
			}
		}
	}

	this.sendRequest = function() {
		if(this.method == "GET") {
			request.open(this.method, this.url + '?' + this.parameters,
			this.asynchronous);
			request.send(null);
		}
		else if(this.method == "POST") {
			request.open(this.method, this.url, this.asynchronous);
			request.setRequestHeader("Content-Type",
			"application/x-www-form-urlencoded");
			request.send(this.parameters);
		}
	}

	this.abortRequest = function() {
		request.abort();
	}
}
