var FB_TAB_ID = 1;
var TWITTER_TAB_ID = 2;
var numToLoad = 0;

var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var daysOfWeek = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

var tabLoadTimer;

function getFBUpdates(uIds) {
	clearFBUpdates();

	showLoading("tab-fb");
	numToLoad = uIds.length;

	for(u=0;u<uIds.length; u++) {
		getFBStatus(uIds[u]);
	}
}

function getFBStatus(userId) {
	var limit = 1;

	$.ajax({
		url:"/inc/app/uw/lib/FacebookJSON.php",
		data:{userId:userId, limit:limit},
		type:"GET",
		dataType:"json",
		success: function(data,textStatus) {

			if (data != undefined) {
				for(d=0; d<data.length; d++) {
					addStatus(data[d]);
				}
			}
			numToLoad--;
			if (numToLoad == 0) stopLoading();
		}
	});
}

function addStatus(data) {
	var fromId = data.from.id;
	var fromName = data.from.name;
	var fromLink = 'http://facebook.com/pages/'+fromName+'/'+fromId;
	var postTime = formatFacebookDate(data.created_time);
	var postDate = makeDateText(new Date(postTime));
	var message = (data.message == undefined) ? data.name:data.message;

	//try trimming longer messages
	if (message.length > 140) {
		//look for the end of the first sentance
		var firstPeriod = message.indexOf(".");

		if (firstPeriod > 20) { //not to short
			message = message.substring(0, firstPeriod+1);
		}
	}

	var imgHTML = [''];

	if (data.picture != undefined) {
		imgHTML = [
			'<div class="fb-img">',
				'<a target="_blank" href="'+fromLink+'">',
				'<img alt="'+fromName+' profile" src="'+data.picture+'" width="40" />',
				'</a>',
			'</div>'
		];
	}

	var link = '';

	if (data.link != undefined) {
		link = '<br /><a href="'+data.link+'" class="small">Read more</a> &raquo;';
	}

	$(".fb-msgs .archive", "#tab-fb").before(
		[
			'<li class="fb clearfix">',
				imgHTML.join(''),
				'<div class="fb-text">',
					'<p>',
						'<a target="_blank" href="'+fromLink+'" class="fb-user">'+fromName+'</a> ',
						message,
						link,
						'<div align="right"><a target="_blank" class="fb-timestamp" href="'+fromLink+'">'+postDate+'</a></div>',
				'</div>',
			'</li>'
		].join("")
	);
}

function clearFBUpdates() {
	$(".fb", "#tab-fb").remove();
}

function getTwitterUpdates(screenNames) {
	clearTwitterUpdates();

	showLoading("tab-twitter");
	numToLoad = screenNames.length;

	for(s=0; s<screenNames.length;s++) {
		getUserTweets(screenNames[s]);
	}
}

function getUserTweets(screenName) {

	$.getJSON(
		"http://api.twitter.com/1/statuses/user_timeline.json?callback=?",
		{screen_name:screenName, count:1},
		function(data,textStatus) {
			if (data != undefined) {
				for(d=0; d<data.length; d++) {
					addTweets(data);
				}
			}
			numToLoad--;
			if (numToLoad == 0) stopLoading();
		}
	);
}

function addTweets(tweets) {
	for(t=0; t<tweets.length;t++) {
		addTweet(tweets[t]);
	}
}

function addTweet(tweet) {
	var screenName = tweet.user.screen_name;
	var tweetTime = makeDateText(new Date(tweet.created_at));

	$(".tweets .archive", "#tab-twitter").before(
		[
			'<li class="tweet clearfix">',
				'<div class="twtr-img">',
					'<a target="_blank" href="http://twitter.com/'+screenName+'">',
					'<img alt="'+screenName+' profile" src="'+tweet.user.profile_image_url+'" />',
					'</a>',
				'</div>',
				'<div class="twtr-tweet-text">',
					'<p>',
						'<a target="_blank" href="http://twitter.com/'+screenName+'" class="twtr-user">'+screenName+'</a> ',
						tweet.text,
						'<div align="right"><a target="_blank" class="twtr-timestamp" href="http://twitter.com/'+screenName+'/status/'+tweet.id+'">'+tweetTime+'</a></div>',
				'</div>',
			'</li>'
		].join("")
	);
}

function clearTwitterUpdates() {
	$(".tweet", "#tab-twitter").remove();
}

function showLoading(tabType) {
	$("h2", "#"+tabType).after('<div class="loading" align="center"><img src="/inc/app/uw/html/images/loading.gif" /></div>');

	setTimeout(function(){ addWarning(tabType); }, 20000);
}

function stopLoading() {
	clearTimeout(tabLoadTimer);
	$(".loading, .warning").remove();
}

function addWarning(tabType) {
	$(".loading").replaceWith('<div class="warning" align="center">There was a problem loading one or more items on this tab. This issue is most likely temporary. Please try again at a later time.</div>');
}

function formatFacebookDate(dateText) {

	var utcTime = dateText.replace("+0000", "").split("T");
	var utcParts = utcTime[1].split(":");
	var utcDate = new Date(utcTime[0]);
	utcDate.setHours(parseInt(utcParts[0]), parseInt(utcParts[1]), parseInt(utcParts[2]), 0);

	//need to adjust from utc to local time
	//19 hour diff? not sure why but this is what syncs the time up
	var localOffset = 19*60*60000;
	var localDate = new Date(utcDate.getTime() + localOffset);
	var newDateText = months[localDate.getMonth()] + " " + localDate.getDate() + " " + localDate.getFullYear() + " " + localDate.getHours() + ":" + localDate.getMinutes() + ":" + localDate.getSeconds();

	return newDateText;
}

function makeDateText(post) {
	var now = new Date();
	var timeDiff = Math.floor((now.getTime() - post.getTime())/1000);
	var minutes = 60;
	var hours = minutes*60;
	var days = hours*24;
	var dateDiff;
	var dateText = "";

	if (!isNaN(timeDiff)) {

		if (now.getFullYear() == post.getFullYear() && now.getMonth() == post.getMonth()) {
			dateDiff = now.getDate() - post.getDate();
		} else {
			dateDiff = Math.floor(timeDiff/days);
		}

		if (timeDiff < 1*minutes) {
			dateText = timeDiff+" seconds ago";
		} else if (timeDiff < 60*minutes) {
			dateText = Math.floor(timeDiff/minutes)+" minutes ago";
		} else if (timeDiff > 50*minutes && timeDiff < 90*minutes) {
			dateText = "about an hour ago";
		} else if (timeDiff < 1*days) {
			dateText = Math.floor(timeDiff/hours)+" hours ago";
		} else if (dateDiff == 1) {
			dateText = "Yesterday";
		} else if (dateDiff < 5) {
			dateText = "on "+daysOfWeek[post.getDay()];
		} else {
			var postHour = post.getHours();
			var postMinutes = post.getMinutes();
			if (postHour == 0) {
				postHour = 12;
				postAMPM = "am";
			} else if (postHour >= 12) {
				if (postHour != 12) postHour -= 12;
				postAMPM = "pm";
			} else {
				postAMPM = "am";
			}

			if (postMinutes < 10) {
				postMinutes = "0"+postMinutes;
			}

			dateText = months[post.getMonth()]+" "+post.getDate()+" at "+postHour+":"+postMinutes+postAMPM;
		}
	}

	return dateText;
}
