
recent_amt = recent_cnt * -recent_width;

Event.observe(window, 'load', function(event) {
	
	// load up last-live as default
	getLastFm('last_five');

	/* -- Recent Works links -- */
	
	// recent next
	Event.observe('recent-next-btn', 'click', function(e) {
		Event.stop(e);
		if (!$('recent-next-btn').hasClassName('selected')) {
			recentMove('forward', null);
		}
	});
	
	// recent previous
	Event.observe('recent-prev-btn', 'click', function(e) {
		Event.stop(e);
		if (!$('recent-prev-btn').hasClassName('selected')) {
			recentMove('backward', null);
		}
	});
	
	/* -- LastFm links -- */
	
	// last_five
	Event.observe('last_five', 'click', function(e) {
		Event.stop(e);
		if (!$('last_five').hasClassName('selected')) {
			getLastFm('last_five');
		}
	});
	
	// top_five
	Event.observe('top_albums', 'click', function(e) {
		Event.stop(e);
		if (!$('top_albums').hasClassName('selected')) {
			getLastFm('top_albums');
		}
	});
	
	// library
	Event.observe('library', 'click', function(e) {
		Event.stop(e);
		if (!$('library').hasClassName('selected')) {
			getLastFm('library');
		}
	});
	
});

function recentMove(motion, x) {
	var left = $('recent-mover').getStyle('left');
	// rid ourselves of "px" and convert to a js number
	if (left) left = parseFloat(left.sub('px',''));
	
	if (motion == 'forward') {
		var max = recent_amt + recent_width;
		if (left > max) {
			movePage(-recent_width,'relative');
		} else {
			movePage(0,'absolute');
		}
	} else if (motion == 'backward') {
		if (left != 0 && left != null) {
			movePage(recent_width,'relative');
		} else {
			movePage((recent_cnt-1)*-recent_width,'absolute');
		}
	} else if (motion == 'page') {
		x = (x-1) * -recent_width;
		movePage(x,'absolute');
	}
}

function movePage (x, position) {
	new Effect.Move('recent-mover', { x: x, y: 0, mode: position });
}

function selectLastFm(id) {
	if (!$(id).hasClassName('selected')) {
		// remove all class names
		['last_five','top_albums','library'].each(function(e){
			if ($(e).hasClassName('selected') && (e != id)) {
				$(e).removeClassName('selected');
			}
		});
		$(id).addClassName('selected');
	}
}

function failLastFm(message) {
	$('fail-message').innerHTML = message;
	$('fail').setStyle({
		display: 'block'
	});
}

function cleanLastFm() {
	// empty contents
	$('lastfm').innerHTML = '';
	
	// remove any messages
	$('fail').setStyle({
		display: 'none'
	});
}

function getLastFm(method) {
	new Ajax.Updater('lastfm','/ajax/lastfm.php?method='+method,
	{
		method:'get',
		onLoading: function(){
			// select link
			selectLastFm(method);
			
			// clean up
			cleanLastFm();
			
			// show loader
			$('loading').setStyle({
				display: 'block'
			});
		},
		onSuccess: function(transport){
			// remove loading up
			$('loading').setStyle({
				display: 'none'
			});
			
			if (transport.responseText == 'fail') {
				// last.fm is not responding
				failLastFm('Last.fm is down.');
				transport.responseText = '';
			} else if (transport.responseText.blank()) {				
				// report that nothing was returned
				failLastFm('Nothing yet...');
			}
			
		},
		onFailure: function(){
			// we failed
			failLastFm('Last.fm is down.');
		}
	});
}