
	var rpcBase = Class.create({
		initialize:function(URI, apiKey){
			this.instID = 'rpcClient.' + parseInt(Math.random()*1000000);
			if (!URI || !apiKey ){
				if (window.console) console.log("No URI or APIKEY received; aborting");
				return;
			}
			this.debug = false;
			this.URI = URI;
			this.apiKey = apiKey;
			this.requests = []; // array
		},
		
		createCall : function(object, method, args){
			if (!args) args = {};
			var request = {'object':object, 'method':method, 'args':args};
			this.requests.push(request)
		},
		
		handleErr: function(){
			if (window.console) console.log(arguments);
		},
		
		getRequestXML : function(){
			var outputXML = "";
			this.requests.each(
				(function(reqObj){
					outputXML += '<request object="' + reqObj.object + '" method="' + reqObj.method+ '">' + this.getArgsXML(reqObj.args) + "</request>";
				}).bind(this)
			)
			this.requests = [];
			return outputXML;
		},
		
		getArgsXML : function(args){
			var outputXML = '';
			for (token in args){
				// check for nested array:
				if (args[token] instanceof Array){
					outputXML += this.arrayToXML(token, args[token]);
				}else if (args[token] instanceof Object){
					outputXML += this.objectToXML(token, args[token]);
				}else{
					outputXML += '<' + token + '>' + args[token]+ '</' + token + '>';
				}
				//console.log(token, args[token], (args[token] instanceof Array), (args[token] instanceof Object))	
			}
			return outputXML;
		},
		
		objectToXML : function(token, objectValue){
			var outputXML = '<' + token + '>';
			for (objectToken in objectValue){
				if (objectValue[objectToken] instanceof Array){
					outputXML += this.arrayToXML(objectToken, objectValue[objectToken]);
				}else if (objectValue[objectToken] instanceof Object){
					outputXML += this.objectToXML(objectToken, objectValue[objectToken]);
				}else{
					outputXML += '<' + objectToken + '>' + objectValue[objectToken] + '</' + objectToken+ '>';
				}
			}
			outputXML += '</' + token + '>'
			return outputXML;
		},
		
		arrayToXML : function(token, arrayValue){
			var outputXML = '<' + token + '>';
			arrayValue.each(
				(function(elem){
					if (elem instanceof Array){
						outputXML += this.arrayToXML(token, elem);
					}else if (elem instanceof Object){
						outputXML += this.objectToXML(token, elem);
					}else{
						outputXML += '<' + token+ '>' + elem + '</' + token + '>';
					}
				}).bind(this)
			)
			outputXML += '</' + token + '>'
			return outputXML;
		},
		
		toObject : function(){
			var parser = new JKL.ParseXML();
			var root = this.responseDOM.documentElement
			var data = parser.parseDocument( root );
			return data;
		}
		
	})
