/**********************************************************

			    Copyright 2006 Andreas Creten


			Filename: HTTP.js
			Discription: HTTPObjectRequest script
***********************************************************/
http = new Object();

http._xmlobjects = [
	function() { return new XMLHttpRequest(); },
	function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
	function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
];

http._xmlobject = null;

http.newRequest = function() {
	if(http._xmlobject != null) return http._xmlobject();
	
	for(var i = 0; i < http._xmlobjects.length; i++) {
		try {
			var xmlobject = http._xmlobjects[i];
			var request = xmlobject();
			if (request != null) {
				http._xmlobject = xmlobject;
				return request;
			}
		}
		catch(e) {
			continue;
		}
	}
	
	http._xmlobject = function() {
		throw new Error("XMLHttpRequest not supported");
	}
	
	http._xmlobject();
}

http.handleReadyState = function(readyState) {
		switch(readyState)
		{
			case 0:
				// nog niet geïnitialiseerd en verbonden
				http.readyState0();
				break;
				
			case 1:
				// Bezig met laden
				http.readyState1();
				break;
				
			case 2:
				// Geladen
				http.readyState2();
				break;
				
			case 3:
				// Interactief
				http.readyState3();
				break;
		
			case 4:
				// Volledig geladen
				http.readyState4();
				break;
		}
}

http.handleHTTPStatus = function(status) {
		switch(status) {
			case 200:
				// OK
				http.status200();
				break;
				
			case 400:
				// Bad Request
				http.status400();
				break;
				
			case 401:
				// Unauthorized
				http.status401();
				break;
				
			case 403:
				// Forbidden
				http.status403();
				break;
		
			case 404:
				// Not Found
				http.status404();
				break;
			
			case 500:
				// Internal Server Error
				http.status500();
				break;
		}
}

http.get = function(url, handleResponse) {

	var request = null;
	var request = http.newRequest();

	request.onreadystatechange = function() {
/*		http.handleReadyState(request.readyState);
		http.handleHTTPStatus(request.status);
		*/
		if(request.readyState == 4) {
			if(request.status == 200) {
				if(handleResponse)
					handleResponse(request);
				else http.handleResponse(request);
			}
		}
	}

	request.open("GET", url);
	request.send(null);
	
	return request;
}

http.post = function(url, handleResponse, t_parameters){

	var parameters = "";
	var parameter_count = null;
	var request = null;
	var request = http.newRequest();

	request.onreadystatechange = function() {
		http.handleReadyState(request.readyState);
		http.handleHTTPStatus(request.status);

		if(request.readyState == 4) {
			if(request.status == 200) {
				if(handleResponse)
					handleResponse(request);
				else http.handleResponse(request);
			}
		}
	}
	
	for(parameter in t_parameters) {
		parameter_count++;
		if(parameter_count != 1) parameters += "&";
		parameters += parameter+"="+t_parameters[parameter];
	}

	request.open("POST", url, true);
	
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", parameters.length);
	request.setRequestHeader("Connection", "close");

	request.send(parameters);
	
	return request;
}

// functies die aangemaakt kunnen worden voor een preloader ofzo
http.readyState0 = function(){};
http.readyState1 = function(){};
http.readyState2 = function(){};
http.readyState3 = function(){};
http.readyState4 = function(){};

//
http.status200 = function(){}; // OK
http.status400 = function(){}; // Bad Request
http.status401 = function(){}; // Unauthorized
http.status403 = function(){}; // Forbidden
http.status404 = function(){}; // Not Found
http.status500 = function(){}; // Internal Server Error
//
// krijgt als invoer het request object
http.handleResponse = function(request){ error.set('handleResponse function not set!'); };
