//render combo fb and twitter posts
function renderEveryone(fbObj, twObj, rssObj, renderIntoContainer){
	if (!(fbObj.hasresponse && twObj.hasresponse && rssObj.hasresponse)) {
		// do nothing, waiting on responses for both
		// check again in 100ms
		setTimeout(function(){
			renderEveryone(fbObj, twObj, renderIntoContainer)
		}, 100);
		return;
	}
	
	var html = '';
	$(renderIntoContainer).empty();

	var facebook = {
		'name':			'facebook',
		'instance':		null,
		'generator':	fbObj,
		'template':		new fbPostTempl()
	}

	var twitter = {
		'name':			'twitter',
		'instance':		null,
		'generator':	twObj,
		'template':		new twTweetsTempl()
	}

	var rss = {
		'name':			'rss',
		'instance':		null,
		'generator':	rssObj,
		'template':		new rssPostTempl()
	}
	
	var services = [facebook, twitter, rss];
	
	for (var i = 0; i < services.length; i++) {
		var service = services[i];
		service.instance = service.generator.next();
	}
	
	do {
		var candidates = [];
		
		for (var i = 0; i < services.length; i++) {
			var service = services[i];
			
			if (service.instance)
				candidates.push(service);
		}
		
		candidates.sort(timestampSorter);
		
		var winner = candidates.shift();
		
		if (winner) {
			html += winner.template.toHTML(winner.instance);
			winner.instance = winner.generator.next();
		}
	} while (winner);
	
	$(renderIntoContainer).append(html);
	$('.trackable').nsTrackable();
	
	
	function timestampSorter(a, b) {
		return getTimestampFromPost(b.instance) - getTimestampFromPost(a.instance);
	}	

	function getTimestampFromPost(post) {
		if (post.hasOwnProperty('date'))
			return post.date.valueOf();
			
		else if (post.hasOwnProperty('created_at'))
			return new Date(post.created_at).valueOf();
		
		else if (post.hasOwnProperty('created_time'))
			return post.created_time * 1000;
	}
}

function postRelativeTimeString(tstamp){
	//tstamp will be in ms
	
	//Set the two dates
	var today_date = new Date();
	var post_date = new Date();
	post_date.setTime(tstamp);

	var DateDiff = {
		inDays: function(d1, d2) {
		var t2 = d2.getTime();
		var t1 = d1.getTime();
		return parseInt((t2-t1)/(24*3600*1000));
		},
		inMinutes: function(d1, d2) {
		var t2 = d2.getTime();
		var t1 = d1.getTime();
		return parseInt((t2-t1)/(60*1000));
		},
		inHours: function(d1, d2) {
		var t2 = d2.getTime();
		var t1 = d1.getTime();
		return parseInt((t2-t1)/(3600*1000));
		}
	}
	//Calculate difference btw the two dates
	var diff = DateDiff.inDays(post_date, today_date);
	var diff_message = '';
	if(diff > 1)
		diff_message = diff + ' days ago';
	if(diff == 1)
		diff_message = '1 day ago';
	if (diff == 0){
		diff = DateDiff.inHours(post_date, today_date);
		if(diff == 1) {
			diff_message = 'about an hour ago';
		} else if(diff == 0) {
			diff = DateDiff.inMinutes(post_date, today_date);
			if(diff == 1) {
				diff_message = '1 minute ago';
			} else if(diff == 0) {
				diff_message = 'less than a minute ago';
			} else {
				diff_message = diff + ' minutes ago';
			}
		} else {
			diff_message = diff + ' hours ago';
		}
	}
	return diff_message;
}

