function gRPC_Engine() {

	this.request_type = 'GET' // POST, GET
	this.requests = new Array();

};

gRPC_Engine.prototype = {

	initXMLInterface: function() {
		var A;
		
		var msxmlhttp = new Array(
			'Msxml2.XMLHTTP.5.0',
			'Msxml2.XMLHTTP.4.0',
			'Msxml2.XMLHTTP.3.0',
			'Msxml2.XMLHTTP',
			'Microsoft.XMLHTTP');
		for (var i = 0; i < msxmlhttp.length; i++) {
			try {
				A = new ActiveXObject(msxmlhttp[i]);
			} catch (e) {
				A = null;
			}
		}
		
		if(!A && typeof XMLHttpRequest != "undefined")
			A = new XMLHttpRequest();

		if (!A)
			sajax_debug("Could not create connection object.");

		return A;
	},

	cancelRequests: function() {
		for (var i = 0; i < this.requests.length; i++) 
			this.requests[i].abort();
	},

	request: function(uri, callback_func, callback_param) {
		var i, xml, n;
		var post_data;
		var target_id;

		switch ( this.request_type )
		{
			case "POST":
//				post_data = "rs=" + escape(func_name);
//				post_data += "&rst=" + escape(sajax_target_id);
//				post_data += "&rsrnd=" + new Date().getTime();
				
//				for (i = 0; i < args.length-1; i++) 
//					post_data = post_data + "&rsargs[]=" + escape(args[i]);
				post_data = null;
				break;

			case "GET":
/*
				if (uri.indexOf("?") == -1) 
					uri += "?rs=" + escape(func_name);
				else
					uri += "&rs=" + escape(func_name);
				uri += "&rst=" + escape(sajax_target_id);
				uri += "&rsrnd=" + new Date().getTime();
				
				for (i = 0; i < args.length-1; i++) 
					uri += "&rsargs[]=" + escape(args[i]);

				post_data = null;
*/
				break;

			default:
				alert("Illegal request type: " + this.request_type);
				return false;
				break;
		}

		xml = this.initXMLInterface();
		xml.open(this.request_type, uri, true);
			
		this.requests[this.requests.length] = xml;
			
		if ( this.request_type == "POST" ) {
			xml.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
			xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		}
		
		xml.onreadystatechange = function() {
			if (xml.readyState != 4) 
				return;

			var status;
			var data;
			var txt = xml.responseText.replace(/^\s*|\s*$/g,"");
			status = txt.charAt(0);
			data = txt.substring(2);

			if (status == "-") {
				alert("Error: " + data);
			} else {
				callback_func(data, callback_param);
			}
		}

		xml.send(post_data);

		delete xml;
		return true;
	}

}

var gRPC = new gRPC_Engine();

