var PLAYER = "flashPlayer"; // div for jwplayer
var COOKIE_STREAM_KEY = "stream";
var NP_INTERVAL_ID;

var streams = [
	{ name: "Pacific Time",
		delay: is_dst_active ? 480 : 420,
		playlist_id: 0,
		stream_url: "http://stream8.amazingradio.com:8000/8h",
 		history_url: "http://www.amazingtunes.com/radio/history.json?offset=480&callback=?" },
	{ name: "Mountain Time",
		delay: is_dst_active ? 420 : 360,
		playlist_id: 1,
		stream_url: "http://stream8.amazingradio.com:8000/7h",
 		history_url: "http://www.amazingtunes.com/radio/history.json?offset=420&callback=?" },
	{ name: "Central Time",
		delay: is_dst_active ? 360 : 300,
		playlist_id: 2,
		stream_url: "http://stream8.amazingradio.com:8000/6h",
 		history_url: "http://www.amazingtunes.com/radio/history.json?offset=360&callback=?" },
	{ name: "Eastern Time",
		delay: is_dst_active ? 300 : 240,
		playlist_id: 3,
		stream_url: "http://stream8.amazingradio.com:8000/5h",
 		history_url: "http://www.amazingtunes.com/radio/history.json?offset=300&callback=?" }
];

var currentStream;
var dst_active = null;

// Initialisation procedure
$(document).ready(function() {
	// get stream from cookie, or else detect it
	if(s = $.cookie(COOKIE_STREAM_KEY))
		set_stream(s);
	else
		set_stream(get_closest_stream());	
	
	$("#shiftSelection").find("a").each(function(i, button) {
		var id = $(button).attr("id");
		$(button).click(function() {
			set_stream(i);
		});
	});

	// Initialise jwPlayer
	setup_player();
	jwplayer(PLAYER).stop(); // don't play automatically
	update_now_playing();
});

function get_closest_stream() {
	// choose radio stream based on user's timezone
	var diff = 9999;
	var stream = 0;

	for(i in streams) {
		var time_difference = Math.abs(streams[i].delay - (new Date()).getTimezoneOffset());
		if(time_difference < diff) {
			diff = time_difference;
			stream = i;
		}
	}

	return stream;
}

function set_stream(stream) {
	currentStream = stream;
	$("#timezone").html(streams[currentStream].name);
	set_radio_stream(streams[currentStream]);
	$.cookie(COOKIE_STREAM_KEY, currentStream);

	$("#shiftSelection").find("a").each(function(i, button) {
		if(stream == i) {
			$(button).addClass("selected");
		} else {
			$(button).removeClass("selected");
		}
	});
}

function is_dst_active() {
	// rule for DST in America is the following:
	// - begins at 2am on 2nd Sunday in March
	// - ends at 2am on the first Sunday of November
	if(dst_active != null) return dst_active;

	var date = new Date();
	
	var dst_start = null;
	var dst_end = null;
	var day = 1;
	var sundaysFound = 0;

	do {
		dst_start = new Date(date.getFullYear(), 2, day++, 2);
		if(dst_start.getDay() == 0)
			sundaysFound++;
	} while(sundaysFound < 2);

	day = 1;

	do {
		dst_end = new Date(date.getFullYear(), 10, day++, 2);
	} while(dst_end.getDay() != 0);

	dst_active = date > dst_start && date < dst_end;

	return dst_active;
}

/**** JWPLAYER CODE ****/

// Callback when jwPlayer is loaded
function player_loaded(obj) {
	set_radio_stream(streams[currentStream]); // initialize with stream
	$("#playRadio").attr("href", "#");
	
	// Set up button to play or stop the radio
	$("#playRadio").click(function() {
		if(jwplayer(PLAYER).getState() == "IDLE")
			jwplayer(PLAYER).play();
		else
			jwplayer(PLAYER).stop();
	});
}

// Event callback when jwPlayer is playing
function player_playing(oldstate) {
	jwplayer(PLAYER).setVolume(100); // set volume to max
	$("div#radioButton").css("background-image", "url('images/buttonStop.png')");

	update_now_playing();
	NP_INTERVAL_ID = window.setInterval(update_now_playing, 15000);
	$("#whatsPlaying").slideDown(500);
}

// Event callback when jwPlayer has stopped playing
function player_stopped(oldstate) {
	$("div#radioButton").css("background-image", "url('images/buttonPlay.png')");
	window.clearInterval(NP_INTERVAL_ID);
	$("#whatsPlaying").slideUp(500);
}

// Inserts jwPlayer
function setup_player() {
	jwplayer(PLAYER).setup({
		modes: [{ type: "flash", src: "jwplayer/player.swf" } ],
		height: 1,
		width: 1,
		file: "radio.xml",
		events: {
			onIdle: player_stopped,
			onPlay: player_playing,
			onReady: player_loaded
		}
	});
}

// Sets the radio stream to a particular playlist entry
function set_radio_stream(stream) {
	if(jwplayer(PLAYER).getState() == undefined) {
		$("#playRadio").attr("href", stream.stream_url);
	} else {
		jwplayer(PLAYER).playlistItem(stream.playlist_id);
	}
}

var tune_id = 0;

// Fetches and updates the now playing info
function update_now_playing() {
	$.getJSON(streams[currentStream].history_url, function(json) {

		var counter = 0;
		$.each(json, function(i,item) {
			if (item.tune != undefined) {
				counter++;
				if (counter > 1) return false; // limits to 1 list it
					
				if (tune_id == item.tune.id) return true;

				tune_id = item.tune.id;

				var tune_url = 'http://www.amazingtunes.com/users/' + item.tune.owner.permalink + '/tunes/' + item.tune.id;
				var artist_url = 'http://www.amazingtunes.com/users/' + item.tune.owner.permalink;
				var tune_name = item.tune.title;
				var artist_name = item.tune.owner.display_name

				$('#artist').attr("href", artist_url);
				$('#artist').html(artist_name);
				$('#track').attr("href", tune_url);
				$('#track').html(tune_name);
			}
		});
	});
}

