class ServiceRpc
	constructor: (@endpoint, @services=[])->
		for service in @services
			@[service.name] = @serviceProxy(service)

	call: (method, params, callback)->
		client = new XMLHttpRequest()
		client.open("POST", @endpoint)
		client.setRequestHeader("Content-Type", "application/json")
		client.onreadystatechange = ()->
			if @readyState == @DONE && @status == 200
				callback?(JSON.parse(@responseText))
		client.send(JSON.stringify({method: method, params: params}))

	serviceProxy: (service)->		
		proxy = {}
		addMethod = (method)=>
			proxy[method] = (params..., callback)=>
				@call("#{service.name}.#{method}", params, callback)
		addMethod(method) for method in service.methods
		proxy
