var page_size = 10;
var unique = {};
var current_list = [];
var twitter_list = [];
var twitvid_list = [];

var twitter_page = 1;
var twitvid_page = 1;

var twitter_error = false;
var twitvid_error = false;

//
function unhtmlspecialchars(str){
	str = str + "";
	str = str.replace(/&amp;/g,"&");
	str = str.replace(/&#039;/g,"'");
	str = str.replace(/&quot;/g,"\"");
	str = str.replace(/&lt;/g,"<");
	str = str.replace(/&gt;/g,">");
	str = str.replace(/&nbsp;/g," ");
	str = str.replace(/\\([\\'"])/g, '$1');
	return str;
}

function getTweetType(str) {
	var tweet_type = 5;
	if (str.indexOf("I like this video by") == 0) {
		tweet_type = 1;
	} else if (str.indexOf("RT") != -1) {
		tweet_type = 2;
	} else if (str.indexOf("@") == 0) {
		tweet_type = 3;
	}
	return tweet_type;
}

function getTweetSource(str) {
	if (str) {
		str = unhtmlspecialchars(str);	
	} else {
		str = '<a href="http://www.twitvid.com/">TwitVid</a>';
	}
	return str;
}

function formatTweet(tweet) {
	var tweet_type = getTweetType(tweet.text);
	if (tweet.guid && tweet_type != 2) {
		tweet_type = 4;
	}
	tweet.type = tweet_type;
	//
	tweet.text = tweet.text.replace(/www\.twitvid\.com/ig,"twitvid.com");
	tweet.source = getTweetSource(tweet.source);
	var html = unhtmlspecialchars(tweet.text);
	tweet.html = ui_tweetText(html);
	var milliseconds = Date.parse(tweet.created_at.substr(5));
	tweet.milliseconds = milliseconds;
	var date = new Date();
	date.setTime(milliseconds);
	tweet.time_ago = jQuery.timeago(date);
	return tweet;
}

//===================================================================================
function getFromTwitter() {
	if (twitter_list.length) {
		return;	
	}
	twitter_error = false;
	var url = "/index.php?area=ajax&cmd=getHappening&page_size="+page_size+"&page="+twitter_page;
	$.getJSON(url, function(data) {
		twitter_page ++;
		var tweets = data;
		var num = tweets.length;
		if (num) {
			for (var i = 0; i < num; i++) {
				twitter_list.push(formatTweet(tweets[i]));
			}
		} else {
			twitter_error = true;	
		}
		if (twitvid_list.length || twitvid_error) {
			mergeList();
		}
	});
}

function getFromTwitvid() {
	if (twitvid_list.length) {
		return;	
	}
	twitvid_error = false;
	var url = "/index.php?area=ajax&cmd=latestTweets&page_size="+page_size+"&page="+twitvid_page;
	$.getJSON(url, function(data) {
		twitvid_page ++;
		var tweets = data;
		var num = tweets.length;
		if (num) {
			for (var i = 0; i < num; i ++) {
				twitvid_list.push(formatTweet(tweets[i]));
			}
		} else {
			twitvid_error = true;
		}
		if (twitter_list.length || twitter_error) {
			mergeList();
		}
	});
}

function mergeList() {
	if (twitter_error || twitvid_error) {
		showTweets();
		return;
	}
	if (!twitter_list.length || !twitvid_list.length) {
		updateTweets();
		return;
	}
	var tweet;
	var tweet1 = twitter_list.shift();
	var tweet2 = twitvid_list.shift();
	if (tweet1.milliseconds > tweet2.milliseconds) {
		tweet = tweet1;
		twitvid_list.unshift(tweet2);
	} else {
		tweet = tweet2;
		twitter_list.unshift(tweet1);
	}
	if (!unique[tweet.id]) {
		unique[tweet.id] = true;
		current_list.push(tweet);
	}
	if (current_list.length < page_size) {
		mergeList();
	} else {
		showTweets();
	}
}

function showTweets() {
	$(".happending_list_loading").hide();
	//
	while(current_list.length) {
		var tweet = current_list.shift();
		var htm = getTweetItem(tweet);
		if(htm) {
			$(".happending_list").append(htm);
		}
	}
}
function showOlder() {
	if (twitter_list.length && twitvid_list.length) {
		mergeList();
	} else {
		updateTweets();
	}
}

function getGuid(str) {
	var index = str.search(/http:\/\/twitvid.com\/\w{5}$/);
	var guid = str.substr(index + 19);
	//alert(guid);
	return guid;
}

function getTweetItem(tweet) {
	var htm = '';
	htm += '<div class="happending_item happending_item_'+tweet.id+' clearfix">';
		htm += '<div style="display:none;">'+tweet.text+'</div>';
		htm += '<div class="happending_icon"><a href="/videos/'+tweet.from_user+'" onmouseover="showBIO(this,\''+tweet.from_user+'\');">';
		htm += '<img src="'+tweet.profile_image_url+'" width="48" height="48" onerror="thumbnailError(this, \'user\');" /></a>';
		htm += '</div>';
		htm += '<div class="happending_body">';
			htm += '<div class="happending_arrow_left"><span class="icon icon_1_07"></span></div>';
			htm += '<div class="happending_main curved_4px">';
				htm += '<div class="happending_user">';
				htm += '<a href="/videos/'+tweet.from_user+'" onmouseover="showBIO(this,\''+tweet.from_user+'\');"><b>'+tweet.from_user+'</b></a>';
				htm += '</div>';
				htm += '<div class="clearfix">';
					if (!tweet.guid) {
						tweet.guid = getGuid(tweet.text);	
					}
					if (tweet.guid) {
						htm += '<div class="happending_thumb left">';
						htm += '<a href="'+tweet.guid+'" onmouseover="showVID(this,\''+tweet.guid+'\');"><img src="http://twitvidvideos.s3.amazonaws.com/thumbnails/'+tweet.guid+'.jpg" width="80" height="50" onerror="thumbnailError(this, \'video\');" /></a>';
						htm += '</div>';
					}
					htm += '<div class="happending_text breakwords left">'+tweet.html+'</div>';
				htm += '</div>';
			htm += '</div>';
			htm += '<div class="happending_time"> posted '+tweet.time_ago+' from '+tweet.source+'</div>';
		htm += '</div>';
		htm += '<div class="happending_type"><div class="tweet_type tweet_type_'+tweet.type+' pngfix"></div></div>';
	htm += '</div>';
	return htm;
}
//
function updateTweets() {
	$(".happending_list_loading").show();
	getFromTwitter();
	getFromTwitvid();
}
updateTweets();
