$(document).ready(function() {
	$('#latest .video .preview a').click(videoClick);
	$('.video .preview').hover(videoHoverIn, videoHoverOut);
	$(".preview-live").effect('pulsate', {'times': 3}, 2000);
	
	$('#tabs').tabs();
	
	$(window).blur(function() {
		isActive = false;
	});
	
	$(window).focus(function() {
		isActive = true;
	});

	getTweets();
	
	var twitterPoller = setInterval('getTweets()', 67*1000);
	var latestPoller = setInterval('getLatest()', 11*1000);
});



var lastTweetID = 0;
var updatedTweets = false;
var isActive = true;

function videoClick()
{
	$.getJSON(this.href, {}, function(json) {
		if (json.error == 0) {
			$('#player').html(json.html);
		}
	});
	var meta = this.href.split('/');
	var url = '/chat/' + meta[5] + '/' + meta[6];
	$.getJSON(url, {}, function(json) {
		if (json.error == 0) {
			$('#chat').html(json.html);
		}
	});
	
	return false;
}

function videoHoverIn()
{
	var vid = this.id.substring(2);
	var meta = $('#vm' + vid).show();
	$(this).mousemove(function(e) {
		meta.css({'left': e.pageX - meta.width() - 5 + 'px', 'top': e.pageY - meta.height() - 5 + 'px'});
	});
}

function videoHoverOut()
{
	var vid = this.id.substring(2);
	var meta = $('#vm' + vid).hide();
	$(this).mousemove();
}

function getLatest()
{
	if (isActive || true) {
		$.getJSON('/latest/' + lastVideoTs, function(json) {
			if (json.error == 0) {
				var target = $('#latest');
				var html = $(json.html).hide();
				
				target.prepend(html.fadeIn(1000));
				
				$('.preview a', html).click(videoClick);
				$('.preview', html).hover(videoHoverIn, videoHoverOut);
				$('.preview-live', html).effect('pulsate', {'times': 3}, 200);
				
				lastVideoTs = json.latest;
				
				while (json.count-- > 0) {
					$('.video:last', target).remove();
				} 
			}
		});
	}
}

function getTweets()
{
	if (lastTweetID > 0) {
		$('#twitter .tweet-time a').each( function(i, e) {
			$(e).text( humanTime( parseInt($(e).attr('ts')) ) );
		});
	}
	
	if (isActive) {
		$.getJSON('http://search.twitter.com/search.json?rpp=30&q=%23cop15&since_id=' + lastTweetID + '&callback=?', function(json) {
			var n = json.results.length;
			var target = $('#twitter');
			var tweet = null;
			var html = null;
		
			while (n-- > 0) {
				tweet = json.results[n];
				tweet.ts = new Date(tweet.created_at);
			
				html = $('<ul class="tweet"><li class="tweet-image"><img src="' + tweet.profile_image_url + '" /></li><li class="tweet-user"><a href="http://twitter.com/' + tweet.from_user + '">' + tweet.from_user + '</a></li><li class="tweet-text">' + linkURLs(tweet.text) + '</li><li class="tweet-time"><a href="http://twitter.com/' + tweet.from_user + '/status/' + tweet.id + '" ts="' + tweet.ts.getTime() + '">' + humanTime(tweet.ts.getTime()) + '</a></li></ul>');
			
				if (updatedTweets) {
					html.hide();
				}
			
				target.prepend(html);
			
				if (updatedTweets) {
					html.fadeIn(1000);
					$('.tweet:last', target).remove();
				}
			
				lastTweetID = tweet.id + 1;
			}
		
			updatedTweets = true;
		});
	}
}


function humanTime(ts)
{
	var delta = Math.floor( ((new Date()).getTime() - ts) / 1000 );
	
	var minute = 60;
	var hour = minute*60;
	var day = hour*24;

	if (delta > day) {
		return date.toLocaleString();
	}
	
	var hours = Math.floor(delta / hour);
	delta -= hours*hour;
	var minutes = Math.floor(delta / minute);
	delta -= minutes*minute;
	var seconds = delta;
	
	var string = '';
	
	if (hours == 1)
		string += hours + ' hour ';
	else if (hours > 1)
		string += hours + ' hours ';
	
	
	if (minutes == 1)
		string += minutes + ' minute ';
	else if (minutes > 1)
		string += minutes + ' minutes ';
	
	
	if (seconds == 1)
		string += seconds + ' second ';
	else if (seconds > 1)
		string += seconds + ' seconds ';

	
	string += 'ago';
	
	return string;
}

function linkURLs(text)
{
	var regexp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
	
	return text.replace(regexp, '<a target="_blank" href="$1">$1</a>');
}
