
if (!window.tpatpc) {
	window.tpatpc = {};
}

with (tpatpc) {
	
////////////JsonLoader class
	
	tpatpc.JsonLoader = function() {
		this.loaded = {};
	};
	
	JsonLoader.callbacks = [];
	
	
	JsonLoader.prototype = {
		load: function(jsonReq) {
			var baseUrl = jsonReq.getUrl();
			if(this.loaded[baseUrl]) {
				//if this url was already requested and fetched, just call the callback
				jsonReq.callback(this.loaded[baseUrl]);
			}
			
			var callbackNum = JsonLoader.callbacks.length;
			var scriptUrl = jsonReq.getUrl("tpatpc.JsonLoader.callbacks["+callbackNum+"]");
			
			this.assignCallback(callbackNum,jsonReq.callback,baseUrl);
		
			this.loadInternal(baseUrl,scriptUrl);
			
		},
		
		assignCallback: function(callbackNum,callback,baseUrl) {
			var that = this;
			JsonLoader.callbacks[callbackNum] = function(data) {
				if (JsonLoader.callbacks[callbackNum].called) {
					return;
				}
				
				JsonLoader.callbacks[callbackNum].called = true;
				that.loaded[baseUrl] = data;
				callback(data);
				
			}
		},
		
		loadInternal:  function(baseUrl,scriptUrl) {
			if(this.loaded[baseUrl]) {
				return;
			}
			
			var scriptToPaste = document.createElement("script");
			scriptToPaste.setAttribute("type","text/javascript");
			scriptToPaste.setAttribute("src",scriptUrl);
			document.getElementsByTagName("BODY")[0].appendChild(scriptToPaste);
			
			this.launchTimeout(baseUrl,scriptUrl);
		},
		
		launchTimeout: function(baseUrl,scriptUrl) {
			var that = this;
			setTimeout(function() {
				//TODO se va in timeout, stacca il tag dalla pagina
				that.loadInternal(baseUrl,scriptUrl);
			},5000);
		}
	};

///////////JsonRequest interface
	
	tpatpc.JsonRequest = function() {
		
	};
	
	JsonRequest.prototype = {
		getUrl: function(callbackString) {
		
		},
		
		callback: function(data) {
		
		} 
	};
}
