
window.brand_data = null;
window.prev_brand_data = null;
window.leaderboard_page = 1;
window.locker_start_ad = 0;

window.logged_in = false;
window.twitter_page = 1;
window.twitter_live_mode = true;

window.hulu_video_id = 0;

/* ************************************************************************* */

var BBHuluPlayer = {
	video_id: 0,

	init: function() {
		if(window.hulu_video_id != 0) {
			this.video_id = window.hulu_video_id;
			NewSite.videoPlayerComponent.playVideo(window.hulu_video_id);
		}
	},

	stateChanged: function(type) {
		// type is:
		// stopped – Playback stopped and playback head was returned to zero
		// paused – Playback stopped and playback head was unchanged
		// loading – Video asset is loading
		// playing – Video asset is playing
		// buffering – Video asset is buffering
		// connectionError – An error was encountered
		// seeking – When user is seeking for a particular position
		// rewinding – When the user is rewinding the video clip
		// disconnected – when the user is disconnected

		// pasued, seeking, and rewinding are probably of interest
		if(type == 'seeking') {
			trackEvent("/event/hulu/" + window.hulu_video_id + "/playback/seeking");
		} else if(type == 'rewinding') {
			trackEvent("/event/hulu/" + window.hulu_video_id + "/playback/rewinding");
		} else if(type == 'paused') {
			trackEvent("/event/hulu/" + window.hulu_video_id + "/playback/paused");
		}
	},

	playbackStarted: function(type) {
		// type is ad or clip
		trackEvent("/event/hulu/" + window.hulu_video_id + "/" + type + "/playback/start");
	},

	playbackEnded: function(type) {
		// type is ad or clip
		trackEvent("/event/hulu/" + window.hulu_video_id + "/" + type + "/playback/stop");
	},

	playbackUpdate: function(type) {
		// type is position or duration
		// position is current time (seconds) in playback
		// duration is total length of the ad
		// position / duration = percentage of playback complete
	}
};

/* ************************************************************************* */
$(document).ready(function()
{	
	// Get login status
	$.ajax({ 
		url: "/app/loggedin",
		dataType: "json",
		cache: false,
		success: function(json, status, xhr)
		{
			if(json && json.logged_in)
			{
				window.logged_in = true;
				$("#login-form").hide();
				$("#post-form").show();
			}
		},
		error: function(xhr, type, e){  }
	});
	
	// External links
	$("a[rel=external]").live("click", function(event)
	{
		event.preventDefault();
		trackEvent("/external/" + $(this).attr("href"));
		window.open($(this).attr("href"));
	});
	
	// Ticker event handlers
	$("#ticker marquee").marquee("pointer").mouseover(function()
	{
		$(this).trigger("stop");
	}
	).mouseout(function()
	{
		$(this).trigger("start");
	}
	).mousemove(function(event)
	{
		if ($(this).data("drag") == true)
		{
			this.scrollLeft = $(this).data("scrollX") + ($(this).data("x") - event.clientX);
		}
	}
	).mousedown(function(event)
	{
		$(this).data("drag", true).data("x", event.clientX).data("scrollX", this.scrollLeft);
	}
	).mouseup(function()
	{
		$(this).data("drag", false);
	});
	
	// Leaderboard event handlers
	// $("#leaderboard .board-slot").mouseenter(function(event)
	// {
	// 	$("#leaderboard .board-info").hide();
	// 	$(this).parent().find(".board-info").show();
	// 	trackEvent("/event/info/show");
	// });
	// $("#leaderboard .board-info").mouseleave(function(event)
	// {
	// 	$(this).parent().find(".board-info").hide();
	// });

	// Leaderboard event handlers
	$("#leaderboard ul.pagination li").click(function() {
		trackEvent("/event/leaderboard/page/" + this.id);
		window.leaderboard_page = this.id.substring(1,2);

		$("#leaderboard ul.pagination li.active").removeClass('active');
		$("#p" + window.leaderboard_page + "t, #p" + window.leaderboard_page + "b").addClass('active');

		$("#leaderboard div#ranks").removeClass();
		$("#leaderboard div#ranks").addClass('p' + window.leaderboard_page);

		$("#leaderboard ul.rankings li").hide();
		if(window.leaderboard_page != 1) {
			$("#leaderboard ul.rankings li:gt(" + ((window.leaderboard_page * 10) - 11) + ")").show();
			$("#leaderboard ul.rankings li:gt(" + ((window.leaderboard_page * 10) - 1) + ")").hide();
		} else {
			$("#leaderboard ul.rankings li:first").show();
			$("#leaderboard ul.rankings li:gt(" + ((window.leaderboard_page * 10) - 10) + ")").show();
			$("#leaderboard ul.rankings li:gt(" + ((window.leaderboard_page * 10) - 1) + ")").hide();
		}

		$("#leaderboard ul.rankings li .board-slot:empty").each(function(index, li) {
			$("#" + li.parentNode.id).hide();
		});
	});

	// Locker event handlers
	$("#lockers .prev").click(function(event)
	{
		trackEvent("/event/ads/previous");
		event.preventDefault();
		if(window.locker_start_ad != 0)
		{
			window.locker_start_ad = window.locker_start_ad - 7;
			$("#lockers .ad-content").hide();
			if(window.locker_start_ad != 0) {
				$("#lockers .ad-content:gt(" + (window.locker_start_ad - 1) + ")").show();
				$("#lockers .ad-content:gt(" + (window.locker_start_ad + 6) + ")").hide();
			} else {
				$("#lockers .ad-content:first").show();
				$("#lockers .ad-content:gt(" + (window.locker_start_ad) + ")").show();
				$("#lockers .ad-content:gt(" + (window.locker_start_ad + 6) + ")").hide();
			}

			set_start = window.locker_start_ad + 1;
			set_end = (window.locker_start_ad + 7) > $("#lockers .ad-content").length ? $("#lockers .ad-content").length : (window.locker_start_ad + 7);
			$("#video-set").text(set_start + '-' + set_end);
		}
	});
	$("#lockers .next").click(function(event)
	{
		trackEvent("/event/ads/next");
		event.preventDefault();
		if(window.locker_start_ad != ($("#lockers ul li").length - 1))
		{
			window.locker_start_ad = window.locker_start_ad + 7;
			$("#lockers .ad-content").hide();
			$("#lockers .ad-content:gt(" + (window.locker_start_ad - 1) + ")").show();
			$("#lockers .ad-content:gt(" + (window.locker_start_ad + 6) + ")").hide();

			set_start = window.locker_start_ad + 1;
			set_end = (window.locker_start_ad + 7) > $("#lockers .ad-content").length ? $("#lockers .ad-content").length : (window.locker_start_ad + 7);
			$("#video-set").text(set_start + '-' + set_end);
		}
		
	});
	
	// Twitter event handlers
	// $("#login-button").click(function(event)
	// {
	// 	event.preventDefault();
	// 	//$("#twitter-spinner").show();
	// 	$("#twitter-error").text("").hide();
	// 	trackEvent("/event/twitter/login");
	// 	// if(!$("#username").val() || !$("#password").val())
	// 	// 		{
	// 	// 			$("#twitter-error").text("All fields required").show();
	// 	// 			$("#twitter-spinner").hide();
	// 	// 			return;
	// 	// 		}
	// 	// 		$.ajax({ 
	// 	// 			url: "/app/login?username=" + escape($("#username").val()) + "&password=" + escape($("#password").val()),
	// 	// 			dataType: "json",
	// 	// 			cache: false,
	// 	// 			success: function(json, status, xhr)
	// 	// 			{
	// 	// 				if(json.status == "success")
	// 	// 				{
	// 	// 					window.logged_in = true;
	// 	// 					$("#login-form").hide();
	// 	// 					$("#post-form").show();
	// 	// 					$("#tweets .reply-link").show();
	// 	// 					$("#twitter-spinner").hide();
	// 	// 				}
	// 	// 				else
	// 	// 				{
	// 	// 					$("#twitter-error").text("Login failed").show();
	// 	// 					$("#twitter-spinner").hide();
	// 	// 				}	
	// 	// 			},
	// 	// 			error: function(xhr, type, e)
	// 	// 			{
	// 	// 				$("#twitter-error").text("Login failed").show();
	// 	// 				$("#twitter-spinner").hide();
	// 	// 			}
	// 	// 		});
	// 	window.open(
	// 		"http://cache.boston.com/images/brandbowl/app/login",
	// 		"connect-with-twitter",
	// 		"menubar=0,resizable=0,width=500,height=570"
	// 	);
	// });
	$("#logout-button").click(function(event)
	{
		event.preventDefault();
		//$("#twitter-spinner").show();
		$("#twitter-error").text("").hide();
		trackEvent("/event/twitter/logout");
		$.ajax({ 
			url: "/app/logout",
			dataType: "json",
			cache: false,
			success: function(json, status, xhr)
			{
				if(json.status == "success")
				{
					window.logged_in = false;
					$("#post-form").hide();
					$("#login-form").show();
					$("#tweets .reply-link").hide();
					$("#tweets .retweet-link").hide();
					$("#tweet").val("#brandbowl");
					$("#twitter-spinner").hide();
				}
				else
				{
					$("#twitter-error").text("Logout failed").show();
					$("#twitter-spinner").hide();
				}			
			},
			error: function(xhr, type, e)
			{
				$("#twitter-error").text("Logout failed").show();
				$("#twitter-spinner").hide();
			}
		});
	});
	$("#submit-button").click(function(event)
	{
		trackEvent("/event/twitter/post");
		$.ajax({ 
			url: "/app/post?tweet=" + escape($("#tweet").val()),
			dataType: "json",
			cache: false,
			success: function(json, status, xhr)
			{
				if(json.status == "success")
				{
					$("#tweet").val("#brandbowl");
					$("#char-count").val("130");
				}
				else
				{
					$("#twitter-error").text("Update failed").show();
					$("#twitter-spinner").hide();
				}
			},
			error: function(xhr, type, e)
			{
				$("#twitter-error").text("Update failed").show();
				$("#twitter-spinner").hide();
			}
		});
	});
	
	// Reply link that loads up the username into the status update
	$("#tweets .reply-link").live("click", function(event)
	{
		trackEvent("/event/twitter/reply/");
		event.preventDefault();
		var username =  $("span", this).text();
		$("#tweet").val("@" + username + "  #brandbowl").focus().selectRange(username.length + 2, username.length + 2);
		$("#char-count").text((140 - $("#tweet").val().length) + " characters left");
	});

	// Retweet link that loads up the username/tweet content into the status update
	$("#tweets .retweet-link").live("click", function(event)
	{
		trackEvent("/event/twitter/retweet/");
		event.preventDefault();
		$("#tweet").val("RT @" + $("#" + this.parentNode.parentNode.parentNode.id + " .tweet-inner p").text()).focus().selectRange($("#tweet").val().length, $("#tweet").val().length);
		$("#char-count").text((140 - $("#tweet").val().length) + " characters left");
	});

	// Character count for status update field
	$("#char-count").text((140 - $("#post-form textarea").val().length) + " characters left");
	$("#post-form textarea").keydown(function(event)
	{
		return $(this).val().length <= 140;
	}).keyup(function(event)
	{
		textarea = $(this);
		if(textarea.val().length >= 140){ textarea.val(textarea.val().substring(0, 140)); }
		$("#char-count").text((140 - textarea.val().length) + " characters left");
	});
	
	// Pagination
	$("#tweet-pagination a").click(function(event)
	{
		event.preventDefault();
		window.twitter_live_mode = false;
		$("#tweet-pagination a.live-updates").text("live updates (off)");
		window.twitter_page = parseInt($(this).text());
		
		$("#tweet-pagination li").removeClass("active");
		$("#tweet-pagination li:nth-child(" + window.twitter_page + ")").addClass("active");
		
		var lower = (window.twitter_page * 7) - 7;
		var upper = window.twitter_page * 7;
		
		$("#tweets .tweet-content:lt(" + (lower + 1) + ")").hide();
		$("#tweets .tweet-content:gt(" + (lower) + ")").show();
		$("#tweets .tweet-content:gt(" + (upper) + ")").hide();

		trackEvent("/event/twitter/paginate/" + window.twitter_page);
	});
	$("#tweet-pagination a.live-updates").unbind();
	$("#tweet-pagination a.live-updates").click(function(event)
	{
		event.preventDefault();
		if(!window.twitter_live_mode)
		{
			window.twitter_live_mode = true;
			window.twitter_page = 1;
			$("#tweet-pagination li").removeClass("active");
			$(this).text("live updates (on)");
			loadTweets();
			trackEvent("/event/twitter/paginate/on");
		} else {
			window.twitter_live_mode = false;
			window.twitter_page = 1;
			$("#tweet-pagination li").removeClass("active");
			$("#tweet-pagination li:nth-child(" + window.twitter_page + ")").addClass("active");
			$(this).text("live updates (off)");
			trackEvent("/event/twitter/paginate/off");
		}
	});
	
	// Fancybox 
	$(".iframe").fancybox({ "frameWidth": 630, "frameHeight": 520 }); 

	$("#methodology").click(function() {
		trackEvent("/event/methodology/view");
	})

	// Methodology iframe
	$("#methodology").fancybox({
		'autoDimensions': false,
		'type': 'iframe',
		'width': 630,
		'height': 550,
		'href': '/methodology.html',
		'autoScale': false,
		'scrolling': 'no',
		'overlayShow': true,
		'overlayOpacity': 0.6,
		'overlayColor': '#333333',
		'showCloseButton': true,
		'padding': 0
	});

	$("#youtube").click(function() {
		trackEvent("/event/youtube/view");
	})

	// YouTube iframe
	$("#youtube").fancybox({
		'autoDimensions': false,
		'type': 'iframe',
		'width': 786,
		'height': 500,
		'href': '/youtube.html',
		'autoScale': false,
		'scrolling': 'no',
		'overlayShow': true,
		'overlayOpacity': 0.6,
		'overlayColor': '#333333',
		'showCloseButton': true,
		'padding': 0
	});

	// Hulu
	//$("#hulu").fancybox({ "type": "iframe", "frameWidth": 525, "frameHeight": 630 });

	$("#winner-50120523").click(function() {
		trackEvent("/event/ad/view/" + this.id.split('-')[1]);
		window.hulu_video_id = this.id.split('-')[1];
		var h2_text = "Chrysler " + " \"Imported from Detroit\"";
		NewSite._readyEventFired = false;
		$.fancybox(
			'<div id="hulu-player"><h1>Instant Replay</h1><h2>' + h2_text + '</h2><div id="videoPlayerComponent"></div></div>', {
			'autoDimensions': false,
			'width': 630,
			'height': 500,
			'autoScale': false,
			'scrolling': 'no',
			'overlayShow': true,
			'overlayOpacity': 0.6,
			'overlayColor': '#333333',
			'showCloseButton': true,
			'padding': 0,
			'onComplete': function() {
				NewSite.loadComponents(NewSite._responseJSON);
			}
		});
	})

	$("#view-volume").click(function() {
		$.fancybox(
			'<img src="http://dev.brandbowl2011.com/i/recap/total_tweets_graph.jpg" alt="" style="margin-top: 15px;" />', {
			'autoDimensions': false,
			'width': 630,
			'height': 500,
			'autoScale': false,
			'scrolling': 'no',
			'overlayShow': true,
			'overlayOpacity': 0.6,
			'overlayColor': '#333333',
			'showCloseButton': true,
			'padding': 0
		});

		return false;
	});

	// // Ticker
	loadTicker();
	$("#ticker").everyTime(150 * 1000, function(i)
	{
		loadTicker();
	}, 0);
	// 
	// // Leaderboard and lockers
	// loadBrandData();
	// $("#leaderboard").everyTime(60 * 1000, function(i)
	// {
	// 	loadBrandData();
	// }, 0);
	// 	
	// Tweets
	loadTweets();
	$("#tweets").everyTime(10 * 1000, function(i)
	{
		if(window.twitter_live_mode){ loadTweets(); }
	});
	
	// Ads
	loadAds();
	// $("#lockers").everyTime(60 * 1000 * 5, function(i)
	// {
	// 	loadAds();
	// });

	NewSite.addListener("newsiteReady", BBHuluPlayer, "init");
	NewSite.addListener("videoStateChange", BBHuluPlayer, "stateChanged");
	NewSite.addListener("videoStart", BBHuluPlayer, "playbackStarted");
	NewSite.addListener("videoComplete", BBHuluPlayer, "playbackEnded");
	NewSite.addListener("videoPlayheadUpdate", BBHuluPlayer, "playbackUpdate");
});
/* ************************************************************************* */
function updateLoginState() {
	trackEvent("/event/twitter/login");
	window.logged_in = true;
	$("#login-form").hide();
	$("#post-form").show();
	$("#tweets .reply-link").show();
	$("#tweets .retweet-link").show();
	//$("#twitter-spinner").hide();
	return true;
}

/* ************************************************************************* */
function loadTicker()
{
	$("#ticker .ticker-spinner").show();
	$.ajax({ 
		url: "/app/ticker",
		dataType: "json",
		cache: false,
		success: function(json, status, xhr)
		{
			if(status == "success")
			{
				$("#ticker marquee").trigger("stop");
				html = "";
				$.each(json, function(i, item)
				{
					if(i != json.length)
					{
						html += "<span>" + item.message + "</span>";
					}
					else
					{
						html += "<span class=\"last\">" + item.message + "</span>";
					}
				});
				$("#ticker p").html(html);
				$("#ticker marquee").trigger("start");
				$("#ticker .ticker-spinner").hide();
			}
		},
		error: function(xhr, type, e){ $("#ticker .ticker-spinner").hide(); }
	});
}
/* ************************************************************************* */


/* ************************************************************************* */
function loadBrandData()
{
	$("#leaderboard .spinner").show();
	$.ajax({ 
		url: "/app/simplefeed",
		dataType: "json",
		cache: false,
		success: processBrandData,
		error: function(xhr, type, e){ $("#leaderboard .spinner").show(); }
	});
}
/* ************************************************************************* */


/* ************************************************************************* */
function processBrandData(json, status, xhr)
{
	if(status == "success")
	{
		window.prev_brand_data = window.brand_data;
		window.brand_data = json;
		
		buildLeaderboard();
		//buildLockers();
	}
}
/* ************************************************************************* */


/* ************************************************************************* */
function buildLeaderboard()
{	
	var leaders = window.brand_data.analyses.slice(0, 50);

	$("#leaderboard ul.rankings li").hide();

	$.each(leaders, function(i, a)
	{	
		// Get this brand's previous rank
		var prev_rank = getPreviousRank(a.topic_id);
		
		var rank = i + 1;
		
		var brand_slug = a.brand.toLowerCase().replace(/\s|'|\.|\*|\+/g, "-");
		brand_slug = brand_slug.replace(/-$/g, "");
		brand_slug = brand_slug.replace(/\:/g, "");
		//brand_slug = brand_slug.replace(/[^a-zA-Z0-9 ]+/g, '');

		var board = "<div class=\"board " + brand_slug + "\" id=\"board-" + a.topic_id + "\" class=\"\">";
		
		var net_sentiment = a.sentiment_score.toFixed(1);
		if(net_sentiment > 0){ net_sentiment = "+" + net_sentiment; }
		
		// Info panel
		var info = "<div class=\"brand-score\"><p>" + (a.composite_score * 10).toFixed(0) + "</p></div>";
		info += "<div class=\"posts\"><p>" + a.posts + "</p></div>";
		info += "<div class=\"net-sentiment\"><p>" + net_sentiment  + "</p></div>";
		info += "<p class=\"more-details\"><a href=\"/details.html?" + a.topic_id + "\" class=\"iframe\">&nbsp;</a></p>";
		$("#p" + rank + " .board-info").empty().append($(info));
		
		// var rank_delta = null;
		// if(prev_rank){ rank_delta = prev_rank - rank; }
		// if(rank_delta > 0)
		// {
		// 	board += "<div class=\"meter-change pos-change\">+ " + rank_delta + "</div></div>";
		// 	$("#p" + rank + " .board-slot").empty().append($(board)).hide().fadeIn(500 + (rank * 250));
		// 	
		// }
		// else if(rank_delta < 0)
		// {
		// 	board += "<div class=\"meter-change neg-change\">- " + Math.abs(rank_delta) + "</div></div>";
		// 	$("#p" + rank + " .board-slot").empty().append($(board)).hide().fadeIn(500 + (rank * 250));
		// }
		// else
		// {
		// 	board += "<div class=\"meter-change\">--</div></div>";
		// 	$("#p" + rank + " .board-slot").empty().append($(board));
		// }
		// 

		$("#p" + rank + " .board-slot").empty().append($(board));
	});

	$("#leaderboard ul.pagination li.active").removeClass('active');
	$("#p" + window.leaderboard_page + "t, #p" + window.leaderboard_page + "b").addClass('active');

	$("#leaderboard div#ranks").removeClass();
	$("#leaderboard div#ranks").addClass('p' + window.leaderboard_page);

	if(window.leaderboard_page != 1) {
		$("#leaderboard ul.rankings li:gt(" + ((window.leaderboard_page * 10) - 11) + ")").show();
		$("#leaderboard ul.rankings li:gt(" + ((window.leaderboard_page * 10) - 1) + ")").hide();
	} else {
		$("#leaderboard ul.rankings li:first").show();
		$("#leaderboard ul.rankings li:gt(" + ((window.leaderboard_page * 10) - 10) + ")").show();
		$("#leaderboard ul.rankings li:gt(" + ((window.leaderboard_page * 10) - 1) + ")").hide();
	}

	$("#leaderboard ul.rankings li .board-slot:empty").each(function(index, li) {
		$("#" + li.parentNode.id).hide();
	});

	$(".more-details .iframe").click(function() {
		var brand_id = $("#" + this.parentNode.parentNode.parentNode.id + " .board").attr('id').split('-')[1];
		trackEvent("/event/info/show/" + brand_id);
	});

	// Add in the iframed details panels
	$(".iframe").fancybox({ "width": 700, "height": 748, "overlayColor": "#333", "overlayOpacity": 0.7, 'padding': 0, 
	'autoScale': false,
	'scrolling': 'no' });
	
	$("#leaderboard .spinner").hide();
}
/* ************************************************************************* */


/* ************************************************************************* */
function getPreviousRank(topic_id)
{
	var prev_rank = null;
	if(!window.prev_brand_data){ return null; }
	$.each(window.prev_brand_data.analyses, function(i, a)
	{	
		if(a.topic_id == topic_id)
		{
			prev_rank = i + 1;
			return;
		}
	});
	return prev_rank;
}
/* ************************************************************************* */


/* ************************************************************************* */
function buildLockers()
{	
	var laggards = window.brand_data.analyses.slice(window.locker_start_rank, window.locker_start_rank + 7);
	
	var html = "";
	$.each(laggards, function(i, a)
	{	
		var rank = window.locker_start_rank + i;
		
		var brand_slug = a.brand.toLowerCase().replace(/\s|'|\.|\*|\+/g, "-");
		brand_slug = brand_slug.replace(/-$/g, "");
		
		html += "<li class=\"" + brand_slug + "\">";
		html += "<a href=\"/details.html?" + a.topic_id + "\" class=\"iframe\">" + a.brand + "</a>";
		//html += "<meter>" + rank + "</meter></li>";
		html += "</li>";
				
	});
	$("#lockers ul").empty().append($(html));
	
	// Add in the iframed details panels
	$(".iframe").fancybox({ "frameWidth": 630, "frameHeight": 546, "overlayColor": "#333", "overlayOpacity": 0.7 });
}
/* ************************************************************************* */


/* ************************************************************************** */
function loadTweets()
{	
	$.ajax({ 
		url: "/app/tweets",
		dataType: "json",
		cache: false,
		success: processTweets,
		error: function(xhr, type, e){  }
	});
}
/* ************************************************************************** */


/* ************************************************************************** */
function processTweets(json, status, xhr)
{
	if(json)
	{
		var html = ""
		if(json.results)
		{
			$.each(json.results, function(i, result)
			{
				html += getTweetMarkup(result);		
			});
			$("#tweets").empty().append($(html));
			$("#tweets .tweet-content").hide();
			$("#tweets .tweet-content:first").show();
			$("#tweets .tweet-content:gt(0)").show();
			$("#tweets .tweet-content:gt(7)").hide();
			$("#tweet-pagination li").removeClass("active");
			$("#tweet-pagination li:nth-child(1)").addClass("active");
			$("#tweets p").autolink();
			if(window.logged_in){ $("#tweets .reply-link").show(); $("#tweets .retweet-link").show(); }
		}
	}
}
/* ************************************************************************** */


/* ************************************************************************** */
function getTweetMarkup(tweet)
{
	var html = "<div class=\"tweet-content\" id=\"tweet-" + tweet.id+ "\">";
	html += "<a href=\"http://twitter.com/" + tweet.from_user + "\" rel=\"external\" class=\"profile-image\"><img src=\"" + tweet.profile_image_url + "\" width=\"48\" height\"48\" alt=\"" + tweet.from_user + "\" /></a>";
	html += "<div class=\"tweet-inner\">";
	html += "<p><a href=\"http://twitter.com/" + tweet.from_user + "\" rel=\"external\">" + tweet.from_user + "</a> ";
	html += tweet.text + "</p>";
	html += "<div class=\"footer\">" + jQuery.timeago(new Date(tweet.created_at));
	html += "<span class=\"reply-link\" style=\"display: none;\">&nbsp;&nbsp;|&nbsp;&nbsp;<a href=\"/\">Reply <div style='display: none'>to <span>" + tweet.from_user + "</span></div></a></span>";
	html += "<span class=\"retweet-link\" style=\"display: none;\">|&nbsp;&nbsp;<a href=\"/\">Retweet</a></span>";
	html += "</div>";
	html += "</div>";
	html += "</div>";
	
	return html;
}
/* ************************************************************************** */


/* ************************************************************************** */
function loadAds()
{	
	$.ajax({ 
		url: "http://cache.boston.com/images/brandbowl/js/ads.js",
		dataType: "json",
		cache: false,
		success: processAds,
		error: function(xhr, type, e){  }
	});
}
/* ************************************************************************** */


/* ************************************************************************** */
function processAds(json, status, xhr)
{
	if(json)
	{
		var html = ""
		if(json.ads && json.ads.length)
		{
			$.each(json.ads, function(i, ad)
			{
				html += getAdMarkup(ad);
			});

			$("#lockers ul").empty().html(html);

			$("#lockers .ad-content").hide();

			$("#lockers .ad-content").click(function() {
				trackEvent("/event/ad/view/" + this.id.split('-')[1]);
				window.hulu_video_id = this.id.split('-')[1];
				if($("#" + this.id + " .ad-title-overlay h2").attr('title')) {
					var h2_text = $("#" + this.id + " .ad-title-overlay h1").attr('title') + " \"" + $("#" + this.id + " .ad-title-overlay h2").attr('title') + "\"";
				} else {
					var h2_text = $("#" + this.id + " .ad-title-overlay h1").attr('title');
				}
				NewSite._readyEventFired = false;
				$.fancybox(
					'<div id="hulu-player"><h1>Instant Replay</h1><h2>' + h2_text + '</h2><div id="videoPlayerComponent"></div></div>', {
					'autoDimensions': false,
					'width': 630,
					'height': 500,
					'autoScale': false,
					'scrolling': 'no',
					'overlayShow': true,
					'overlayOpacity': 0.6,
					'overlayColor': '#333333',
					'showCloseButton': true,
					'padding': 0,
					'onComplete': function() {
						NewSite.loadComponents(NewSite._responseJSON);
					}
				});
			});

			if(window.locker_start_ad != 0) {
				$("#lockers .ad-content:gt(" + (window.locker_start_ad - 1) + ")").show();
				$("#lockers .ad-content:gt(" + (window.locker_start_ad + 6) + ")").hide();
			} else {
				$("#lockers .ad-content:first").show();
				$("#lockers .ad-content:gt(" + (window.locker_start_ad) + ")").show();
				$("#lockers .ad-content:gt(" + (window.locker_start_ad + 6) + ")").hide();
			}

			if(json.ads.length > 7) {
				$("#video-set").text('1-7');
			} else {
				$("#video-set").text('1-'.json.ads.length);
			}

			$("#video-total").text(json.ads.length);

			$("#lockers").css('visibility', 'visible');
		}
	}
}

/* ************************************************************************** */
function getAdMarkup(ad)
{
	ad.brand = ad.brand.toString().replace(/^\s+|\s+$/g,"");
	ad.title = ad.title.toString().replace(/^\s+|\s+$/g,"");

	ad.brand_full = ad.brand;
	ad.title_full = ad.title;

	if(ad.brand.length > 19)
		ad.brand = ad.brand.substring(0, 16) + '...';

	if(ad.title.length > 19)
		ad.title = ad.title.substring(0, 16) + '...';

	var html = '<li class="ad-content" id="hulu-' + ad.id + '">';
		html += '<img src="' + ad.thumbnail + '" alt="' + ad.brand_full + ' ' + ad.title_full + '" />';

		html += '<div class="ad-title-overlay">';
			html += '<h1 title="' + ad.brand_full + '">' + ad.brand + '</h1>';

			if(ad.title != '') {
			html += '<h2 title="' + ad.title_full + '">"' + ad.title + '"</h2>';
			}

		html += '</div>';

		html += '<div class="ad-play-overlay"></div>';
	html += '</li>';

	return html;
}
/* ************************************************************************** */


/* ************************************************************************* */
function trackEvent(url)
{
	if(pageTracker){ pageTracker._trackPageview(url); }
}
/* ************************************************************************* */


/* ************************************************************************* */
$.fn.selectRange = function(start, end)
{
	return this.each(function()
	{
		if(this.setSelectionRange)
		{
			this.focus();
			this.setSelectionRange(start, end);
		}
		else if(this.createTextRange)
		{
			var range = this.createTextRange();
			range.collapse(true);
			range.moveEnd('character', end);
			range.moveStart('character', start);
			range.select();
		}
	});
};

/* ************************************************************************* */


/* ************************************************************************* */
jQuery.fn.autolink = function()
{
	return this.each(function()
	{
		var re = /((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g;
		$(this).html($(this).html().replace(re, "<a href=\"$1\" rel=\"external\">$1</a>"));
	});
}
/* ************************************************************************* */


