MSGI.service = (function() {
	var lastId = 0;

	/**
	 * This creates a new message id
	 * @returns {integer} a message id
	 */
	function generateRpcId() {
		return ++lastId;
	}

	return {

		/**
		 * This sends a message to the MSGI service api
		 * @param {string} method the name of the RPC method
		 * @param {object} data the key/value pairs that will be sent
		 * @param {function} callback the function to be executed
		 */
		send: function(method, data, callback) {
			var url = "/service/service.jsp";
			var rpcId = generateRpcId().toString();
			
			if (arguments.length == 2) {
				// if invoked in the form MSGI.service.send(method, callback)
				callback = data;
				data = [];
			} else {
				data = [data];
			}

			var request = JSON.stringify({ "method": method, "params": data, "id": rpcId });
			$.post(url, request, function(json) {
				var response;
				try {
					response = jsonParse(json);
				} catch (e) {
					response = { "id": rpcId, "result": null, "error": "Error parsing JSON response." };
				}
				callback(response);
			});
		}
	};
})();
