	function Tunnel(master)
	{
		var self=this;
		this.init=function()
		{
			//self.baseURL="http://inside.nikesportswear.com/maps/admin_json.php?";
			self.baseURL="http://uat.nikebasketballservices.akqa.com/GetStores.ashx?";
			//self.baseURL="http://localhost:2586/GetStores.ashx?";
			self.baseObject={
							q_callback:"client.tunnel.response",
							callback:function(){return;},
							status:"loading..."
						 };
			
			self.requests=[];
			self.isRunning=false;
		}
		this.add=function(obj)
		{
			self.requests[self.requests.length]=obj;			
			if(!self.isRunning)
			{
				self.isRunning=true;
				self.run();
			}
		}
		this.run=function()
		{
			if(self.requests.length==0)
			{
				self.isRunning=false;
				return;
			}
			var obj=self.merge(self.requests[0]);
			self.issue(obj);
		}

		this.issue=function(obj)
		{
			var script=document.createElement('script');
			script.type = 'text/javascript';
			script.src = self.baseURL+serialize(obj)+bustCache();
			document.body.appendChild(script);
		}
		this.response=function(data)
		{
			self.requests[0].callback(data);
			self.requests.shift();
			self.run();
		}
		this.merge=function(obj)
		{
			var mergedObject={};
			for(var p in self.baseObject)
				if(p!="status")
					mergedObject[p]=self.baseObject[p];
			for(var p in obj)
				mergedObject[p]=obj[p];
			return mergedObject;
		}
		//set it up when instantiated
		self.init();
	}




	
/******************** UTILS **************************/

	function serialize(obj) //ain't recursive
	{
		var str="";
		var connector="";
		for(var p in obj)
		{
			if(typeof obj[p] != "function")
			{
				str+=connector+escape(p)+"="+escape(obj[p]);
				connector="&";
			}
		}
		return str;
	}
	
	
	function bustCache() {
	
		var _date = new Date(),
		//_ran = Math.floor(Math.random()*100001),
		_str = "&timeNow=" + _date.getHours() + _date.getMinutes() +  _date.getMilliseconds();
		return _str;
		
	}
	
