/*
* Generic function to make Ajax requests, inspired by 
* Stoyan Stefanov (http://www.sitepoint.com/article/take-command-ajax)
* 
* @param url 							the url to request
* @param callback_function				the function to invoke with the javascript results
* @param return_xml						true or false. If true then we expect xml back, otherwise plain text
*/
function makeHttpRequest(url, callback_function, return_xml)
{ 
   var http_request = false;
	//alert("oke");
   if (window.XMLHttpRequest) { // Mozilla, Safari,...
       http_request = new XMLHttpRequest();
       if (http_request.overrideMimeType) {
           http_request.overrideMimeType('text/xml');
       }
   } else if (window.ActiveXObject) { // IE
       try {
           http_request = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (e) {
           try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
           } catch (e) {}
       }
   }	

   if (!http_request) {
       alert('Your browser doesn\'t support this feature.');
       return false;
   }
   http_request.onreadystatechange = function() {
   		/* The request can go through a number of states but we only care about 4
   		 	0 (uninitialized)
			1 (loading)
			2 (loaded)
			3 (interactive)
			4 (complete)
   		*/
       if (http_request.readyState == 4) {
           if (http_request.status == 200) {
               if (return_xml) {
                   eval(callback_function + '(http_request.responseXML)');
               } else {
                   eval(callback_function + '(http_request.responseText)');
               }
           } else if (http_request.status != 0){ //some versions of IE can return 0
               alert('There was a problem with the request.(Code: ' + http_request.status + ')');
           }
       }
   }
   //alert(url);
   http_request.open('GET', url, true);
   http_request.send(null);
}

function php_urlencode (str) {
	str = escape(str);
	return str.replace(/[*+\/@#]|%20/g,
	function (s) {
		switch (s) {
			case "*": s = "%2A"; break;
			case "+": s = "%2B"; break;
			case "/": s = "%2F"; break;
			case "@": s = "%40"; break;
			case "#": s = "%23"; break;
			case "%20": s = "+"; break;
		}
		return s;
	}
	);
}
