var master;

JQ(document).ready(function() {
	master = requests();
});

function Tunnel(master)
{
	var self=this;
	this.init=function()
	{
		self.requests=[];
		self.request_running=false;
	};
	this.issue=function(data, callback, id)
	{
		self.requests[self.requests.length]={d:data,c:callback,i:id};
		
		if(!self.request_running)
		{
			self.request_running=true;
			self.loading();
		}
	};
	self.loading = function() {
		var loading = '<img src="/' + site_folder + '/' + loader_img + '" alt="Loading..." class="loading_img" />';
		JQ('#' + self.requests[0].i + ' .module_inner').append(loading); 
		self.run_requests();
	};
	self.run_requests=function()
	{
		if(self.requests.length==0)
		{
			self.request_running=false;
			return;
		}
		console.log('in range: ', self.requests[0].d.tag);
		if (self.requests[0].d.catalog && self.requests[0].d.categoryId) {
//			JQ.get('/' + site_folder + '/global/jsp/catalog.jsp', self.requests[0].d, self.issue_done,'xml');
			JQ.get('/nikeos/p/' + site_folder + '/en_US/products_request', self.requests[0].d, self.issue_done,'json');
		} else {
			JQ.get('/nikeos/p/' + site_folder + '/en_US/feed_by_tag', self.requests[0].d, self.issue_done,'json');
		}
	};
	this.issue_done=function(data)
	{
		self.requests[0].c(data,self.requests[0].i);
		self.requests.shift();
		if(self.requests.length==0) {
			self.request_running=false;
		} else if(self.requests.length != 0) {
			self.loading(self.requests[0].i);
		}

};
	
	self.init();
}

function requests() {
	var self = this;
	var feeds = [];
	var requests = 0;
	this.init = function() {
		self.tunnel = new Tunnel();
		self.makeRequest();
	};
	self.makeRequest = function() {
		feeds = JQ('#content_left, #content_right').find('div').filter('.feed');
		
		if (feeds.length > 0) {
			feeds.each(function(index,a) {
				var classes = JQ(a).attr('class');
				var id = JQ(a).attr('id');
				var range = classes.match(/limit-(\S*)/)[1];
				
				if (JQ(a).hasClass('tag-pcat')) {
					var category = classes.match(/category-(\S*)/)[1];
					var catalog = classes.match(/catalog-(\S*)/)[1];
					console.log('category: ', category);
					console.log('catalog: ', catalog);
					var d = {
						categoryId: category,
						catalog: catalog
					};
				} else { 
					var d = {
						site_folder: site_folder,
						region: region,
						tag: classes.match(/tag-(\S*)/)[1],//split('tag-').pop(),
						range: range
					};
				}
				var i = id;
				var c = self.buildFeedModule;
				//var l = 
				self.tunnel.issue(d,c,i);
			});
		}
	};
	this.smartEllipsis = function(string,max) {
		var space = string.lastIndexOf(' ');
		string = (string.length < max) ? string + '&hellip;' : (space > -1) ? string.substring(0,space) + '&hellip;' : '';
		return string;
	};
	self.buildFeedModule = function(data,id) {
		if (data.feed) {
			if (feeds.length > requests && data.feed.length > 0) {
				console.log('callback is customFeedFunctions.createFeed');
				JQ('#' + self.tunnel.requests[0].i + ' .module_inner .loading_img').remove();
				customFeedFunctions.createFeed(data.feed,id);
				requests++;
			} else {
				console.log('callback is customFeedFunctions.createError');
				customFeedFunctions.createError(id);
			}
		} else if (data.cp) {
			console.log('callback is customFeedFunctions.createPcat');
			JQ('#' + self.tunnel.requests[0].i + ' .module_inner .loading_img').remove();			
			customFeedFunctions.createPcat(data.cp,id);
		} else {
			console.log('callback is customFeedFunctions.createError');
			JQ('#' + self.tunnel.requests[0].i + ' .module_inner').empty();
			customFeedFunctions.createError(id);
		}

	};
	
	self.init();
}