jQuery.jsonrpc_client = function() {
	return new (function() 
	{ 
		this.generateRequestId = function() {
			var d = new Date();
			var id = d.getMinutes() +''+ d.getMilliseconds();			
			return Number(id);
		};		
		this.call = function( serviceURL, method, callbackObj )	{
			var id = this.generateRequestId();			
			var params = [];
			for (var i=3; i<arguments.length; i++) {
				params.push(arguments[i]);
			}
			var options = {
				url: serviceURL, 
				dataType: 'json',
				type: 'POST', 
				contentType: 'application/json',
				data: JSON.stringify({
					'id': id, 
					'version': '2.0', 
					'method': method, 
					'params': params
				}),
				success: callbackObj[method+'_Result'],
				error: callbackObj[method+'_Status'],				
				beforeSend: function(){
					jQuery('#ajax-loader').fadeIn("fast");					
				},
				complete: function(){
					jQuery('#ajax-loader').fadeOut("fast");		
				},
				timeout: 3000, // 3 secs
				processData: false	
			};
			
			var id = this.generateRequestId();		
			var req = jQuery.ajax( options );
		};
	});
}

// Sets a remote proxy to a local javascript variable using the following syntax
// <script jsonrpc:service="myService" type="text/javscript" src="http://nido/jsonrpc/gateway.php?service=TestService&proxy"></script> 

jQuery.jsonrpc_proxy = function() {
	return new (function(){
		this.client = jQuery.jsonrpc_client();
		this.getAlias = function( serviceURL ) {
			return jQuery("script[src='"+serviceURL+"']").attr('jsonrpc:service');
		};
		this.addService = function(serviceAlias, serviceProxy){
			var ns = window;
			if ( serviceAlias.indexOf('.') != -1 ) {
				var nsParts = serviceAlias.split(".");
				for( var i=0; i<nsParts.length; i++ ){
					var part = nsParts[i];
					if( !ns[part] ) {
						if( i == nsParts.length-1 ){
							ns[part] = serviceProxy;
						} else {
							ns[part] = {};
						}
					}
					ns = ns[part];
				}
			} else {
				ns[serviceAlias] = serviceProxy;
			}			
		};
	});
}

jQuery(document).ready(function(){jsonRpcProxyManager = jQuery.jsonrpc_proxy();});