var JsonServiceClient = {	
		
	invoke: function(url, method, params, callback) {
		JsonServiceClient.invoke(url, method, params, callback, 0);
	},
		
	invoke: function(url, method, params, callback, id) {

		var requestMsgObj = {
	       "method": method,
	       "params": params,
	       "id" : id
		};		
	
		var requestMsgJson = YAHOO.lang.JSON.stringify(requestMsgObj); 
		var escapedRequestMsgJson = escape(requestMsgJson);	
		
		
		YAHOO.util.Connect.setDefaultPostHeader(false);
		YAHOO.util.Connect.initHeader('Content-Type', 'application/javascript; charset=UTF-8', false);
		
		// needed to keep form variables from being inserted into POST.
		YAHOO.util.Connect.resetFormState();
		
		YAHOO.util.Connect.asyncRequest(
			'POST', 
			url, 
			{
				success: function(o) {
					var response = null;
				
					try {
					 	if (o.status == 200 && o.responseText != null) {
					 		try {
					 			response = YAHOO.lang.JSON.parse(o.responseText);
					 		}
					 		catch (ex) {					 			
					 			try {
					 				var jsonResponse = JsonServiceClient.tryToFindJsonObject(o.responseText); 
					 				if (jsonResponse != null) {					 					
					 					response = YAHOO.lang.JSON.parse(jsonResponse);
					 				}
					 			}
					 			catch (ex2) {					 				
					 			}
					 		}
					 		
					 		// If response is still null, we had a parsing error.
					 		if (response == null) {
						 		response = {
						 			result: null,
						 			error: {
						 				message: 'Error processing response JSON: ' + o.responseText,
						 				responseText: o.responseText
						 			}
						 		};
					 		}
					 	}
		 				else {
		 					response = {
								result: null,
		 						error: { message: "Unknown error - " + o.status + " - " + o.responseText }
							};
						}
					}
					catch (ex) {
						// Client-side error.
						response = {
							result: null,
							error: { message: ex.message }
	                    };
					}							
					
					callback(response);
				},
				 
			    failure: function(o) {		    	
			    	var response = null;
							
					response = {
						result: null,
						error: { message: "Unknown error - " + o.status + " - " + o.responseText }
					};			
					
					callback(response);
			    }		     		    
			},			
			requestMsgJson);
	},
	
	tryToFindJsonObject : function (str) {
		// This is to find the JSON string if extra stuff was written before it for some reason.
		var startBraceIndex = str.indexOf('{');	
		if (startBraceIndex > 0) {
			return str.substr(startBraceIndex - 1);
		}
		else {
			return null;		
		}
	}
	
};