var XmlHttp = {
	
	get: function(url, onStartRequest, onSuccess, onFailure) 
	{
		this.httpRequest("GET", url, null, onStartRequest, onSuccess, onFailure);
	},

	post: function(url, data, onStartRequest, onSuccess, onFailure) 
	{
		this.httpRequest("POST", url, data, onStartRequest, onSuccess, onFailure);
	},

	httpRequest: function(method, url, data, onStartRequest, onSuccess, onFailure) 
	{
		var req = this.getTransport();
		if (url && req) {
			onStartRequest(req);
			req.open(method, url, true);

			if (method == "POST") 
				req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

			var me = this;
			req.onreadystatechange = function() 
			{
				if (req.readyState == 4) 
				{
					if (me.responseIsSuccess(req))
						onSuccess(req);
					else
						onFailure(req);
				}
			}

			req.send(data);
		}
		else { alert("Error: url = [" + url + "], req = [" + req + "]"); }
	},

	/* Get object to use for sending http request */
	getTransport: function() {
		var obj;
		
		// Firefox, Opera 8.0+, Safari
  		try{ obj = new XMLHttpRequest(); }
	  	catch (e)
		{
			// Internet Explorer
			try{ obj = new ActiveXObject("Msxml2.XMLHTTP"); }
			catch (e)
			{
		 		try{ obj=new ActiveXObject("Microsoft.XMLHTTP");}
		  		catch (e) { obj = false; }
			}
		  }
		return obj;
	},


	responseIsSuccess: function(req) 
	{
		return (req.status == 0 || (req.status >= 200 && req.status < 300));
	},

	responseIsFailure: function(req) 
	{
		return (! this.responseIsSuccess(req));
	}
};