var currentPage = undefined;

String.prototype.startsWith=function(str){return(this.match("^"+str)==str)}

function updateActive()
{
	$("nav > a").removeClass( "active" );
	var matches = /#\/([^/]*)/.exec( location.hash );
	var section = ( matches && matches.length > 0 ) ? matches[1] : "home";
	$("a#" + section).addClass( "active" );
}

function ajaxifyLinks()
{
	updateActive();

	// rewrite all links to perform ajax hash changes
	var local = document.location.protocol + "//" + document.location.hostname + "/";
	$("a").each( function()
	{
		if ( this.rel == "lightbox" )
			return;
		var href = this.href;
		if ( /#/.exec( href ) || !href.startsWith( local ) || /[.][a-zA-Z0-9]+$/.exec( href ) )
			return;
		else if ( href[0] == '/' )
			this.href = "#" + href;
		else ( href.substr( 0, local.length ) == local )
			this.href = "#" + href.substr( local.length - 1 );
	} );

	$('a[rel="lightbox"]').lightBox();

	$("form").each( function()
	{
		var action = this.action;
		if ( action.startsWith( "/ajax" ) || action == "" || ( action[0] != '/' && !action.startsWith( local ) ) )
			return;
		else
			this.action = "/ajax" + action;
	} );

	$("form").ajaxForm( { target: '#content', success: ajaxifyLinks } );
}

$(document).ready( function()
{
	ajaxifyLinks();

	// change to the ajax version
	var regexp = /^\/(.+)$/;
	var match = regexp.exec( document.location.pathname )
	if ( match )
		return location = "/#/" + match[1];

	// watch for hash changes
	watchHashChanges( onHashChanged );
} );

function watchHashChanges( callback )
{
	if ( !watchHashChanges.hash )
	{
		setTimeout( function() {
			var hash = location.hash.replace( /^#/, "" );
			watchHashChanges.hash = hash;
			callback( watchHashChanges.hash );
		}, 10 );
	}

	setInterval( function() {
		var hash = location.hash.replace( /^#/, "" );
		if ( watchHashChanges.hash !== hash )
		{
			watchHashChanges.hash = hash;
			callback( watchHashChanges.hash );
		}
	}, 100 );
}

var loader = null;

function onHashChanged( hash )
{
	clearTimeout( loader );
	loader = setTimeout( function() {
		$("#loading").fadeIn();
	}, 1000 );

	updateActive();

	$("#content").fadeOut( "fast", function() {
		var page = hash ? hash : "home";
		currentPage = page;
		$("#content").load( "/ajax/" + page, function() {
			document.body.className = page.match(/\w+/)[0];
			clearTimeout( loader );
			ajaxifyLinks();
			$("#loading").fadeOut( "fast" );
			$("#content").fadeIn();
		} );
	} );
}

// Media Player

var player_tracks = new Array();
var player_current_index = undefined;
var player_current_title;
var player_current_url;
var track_div;
var volume_div;

function parse_podcast( xml )
{
	$(xml).find("item").each(function() {
		var title = $(this).find("title").text();
		var url = $(this).find("enclosure").attr("url");
		var guid = $(this).find("guid").text();
		player_tracks.push({title: title, url: url, guid: guid});
	} );
	player_set_track(0);
	return;
}

function createCookie(name, value, expire_days)
{
	var expires = "";
	if (expire_days) {
		var date = new Date();
		date.setTime(date.getTime() + expire_days * 86400000);
		var expires = "; expires=" + date.toGMTString();
	}
    document.cookie = name + "=" + value + expires + "; path=/";
}
function eraseCookie(name)
{
    createCookie( name, "", -1 );
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(";");
	for(var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==" ")
			c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0)
			return c.substring(nameEQ.length, c.length);
	}
	return null;
}

$(function() {

	$("#player").jPlayer( {
	    ready: function() {
	        setVolume( readCookie("player_volume") );
		$.get( "/rss/podcast.xml", null, parse_podcast, "xml" );
	    },
	    swfPath: "/style",
	    customCssIds: true,
	    supplied: "mp3",
	    solution: "flash, html"
	} )
	.jPlayer("onProgressChange", function(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime) {
		volume_div.text( $.jPlayer.convertTime(playedTime) + "/" + $.jPlayer.convertTime(totalTime) );
	} )
	.jPlayer("onSoundComplete", function() {
		player_set_track( player_current_index + 1 );
	} );

	$("#player").bind($.jPlayer.event.progress, function(event) {
	    volume_div.text( $.jPlayer.convertTime(event.jPlayer.status.currentTime) + "/" + $.jPlayer.convertTime(event.jPlayer.status.duration) );
	});

	$("#player").bind($.jPlayer.event.timeupdate, function(event) {
	    volume_div.text( $.jPlayer.convertTime(event.jPlayer.status.currentTime) + "/" + $.jPlayer.convertTime(event.jPlayer.status.duration) );
	});

	$("#player").bind($.jPlayer.event.error, function(event) {
	    switch(event.jPlayer.error.type) {
			case $.jPlayer.error.URL:
			{
				track_div.text(event.jPlayer.error.message);
				player_set_track(player_current_index - 1);
				break;
			}
			case $.jPlayer.error.NO_SOLUTION:
			{	
				if (console.error) console.error(event.jPlayer, "jPlayer NO_SOLUTION");
				break;
			}
			default:
			{
				if (console.error) console.error(event.jPlayer, "jPlayer Error");
				break;
			}
		}
    });

	$("button#play").click(function() {
		eraseCookie("player_state");
		$("#player").jPlayer("play");
		show_pause();
		return false;
	});

	$("button#pause").click(function() {
		$("#player").jPlayer("pause");
		show_play();
		return false;
	});

	$("button#stop").click(function() {
		createCookie("player_state", "stopped", 7);
		$("#player").jPlayer("stop");
		show_play();
		return false;
	});

	$("button#skip").click(function() {
		eraseCookie("player_state");
		player_set_track( player_current_index + 1 );
		return false;
	});

	$("button#back").click(function() {
		eraseCookie("player_state");
		player_set_track( player_current_index - 1 );
		return false;
	});

	track_div = $("#track");
	volume_div = $("#position");

	var volume_down = false;
	var volumn_left = $("#volume-value").offset().left - $("#volume").offset().left;
	var volumn_width = parseInt($("#volume-value").css("max-width"));
	if (!volumn_width) volumn_width = 100;

	function setVolume( value )
	{
		if ( value == null )
			value = 80;
		else
			value = Math.min( 100, Math.max( 0, value ) );

		$("#volume-value").width(value / 100 * volumn_width);
		$("#player").jPlayer("volume", value / 100);
		createCookie("player_volume", value, 7);
	}

	function volume_event(e, s)
	{
		if ( e.button != 0 )
			return;
		var pos = $(this).offset();
		setVolume( (e.pageX - pos.left - volumn_left) / volumn_width * 100 );
		e.preventDefault();
	}

	$("#volume").mousecapture({
		"down": volume_event,
		"move": volume_event,
		"up": volume_event
	});

	/*
	.mousedown(function(e) {
		if ( e.button == 0 )
			volume_down = true;
		var pos = $("#volume").offset();
		setVolume( (e.pageX - pos.left - volumn_left) / volumn_width * 100 );
		e.preventDefault();
	});

	$("nav").mouseup(function(e) {
		if ( e.button == 0 )
			volume_down = false;
		e.preventDefault();
	})
	.mouseout(function(e) {
		if ( volume_down && !$(e.toElement).is("nav *") && !$(e.toElement).is("nav") )
			volume_down = false;
	})
	.mousemove(function(e) {
		if ( !volume_down )
			return;
		var pos = $("#volume").offset();
		setVolume( (e.pageX - pos.left - volumn_left) / volumn_width * 100 );
		e.preventDefault();
	});*/

	$("#play").hide();
	$("#pause").hide();


	$("#player-tab").click( function() {
		$("#player-tab").animate({height: "+=5"}, "fast", function() {
			$("#player-tab").animate({height: "0"}, "fast");
			$("#player-controls").animate({height: "42px"});
		});
	} );

	$("button#close").click( function() {
		$("#player-controls").animate({height: "+=5"}, "fast", function() {
			$("#player-controls").animate({height: "0"}, "fast");
			$("#player-tab").animate({height: "29px"});
		});
	} );

	$("#player-tab").height("29px");
	$("#player-controls").height(0);

	/*$(window).resize( function(){
		$("img.gradient").css("height", $(body).height() + "px");
	});*/

} );

function player_play_guid( guid )
{
	for ( var i = 0; i < player_tracks.length; i++ )
		if ( player_tracks[i].guid == guid ) {
			eraseCookie("player_state");
			return player_set_track( i, true );
		}
}

function player_play_url( url )
{
	for ( var i = 0; i < player_tracks.length; i++ )
		if ( player_tracks[i].url == url ) {
			eraseCookie("player_state");
			return player_set_track( i, true );
		}

	// TODO -- play interrupt
}

function player_set_track( index, force )
{
	if ( player_current_index == index && ( !force || ( force && $("button#pause").is(":visible") ) ) )
		return;

	if ( player_tracks.length == 0 ) {
		$('#play,#pause,#stop,#skip,#back').hide();
		return;
	}

	// wrap track index
	index = index % player_tracks.length;
	if ( index < 0 )
		index = player_tracks.length + index;

	player_current_index = index;
	var track = player_tracks[index];

	player_current_title = track.title;
	track_div.text(track.title);
	if ( player_current_url != track.url )
		$("#player").jPlayer("setMedia", {mp3:track.url});
	player_current_url = track.url
	if ( readCookie("player_state") != "stopped" ) {
		$("#player").jPlayer("play");
		show_pause();
	} else {
		show_play();
	}
}

function show_pause()
{
	$("button#play").fadeOut( 'fast' );
	$("button#pause").fadeIn( 'fast' );
}

function show_play()
{
	$("button#pause").fadeOut( 'fast' );
	$("button#play").fadeIn( 'fast' );
}

