var _album_slider = null;
var _current_album = null;
var _current_catalog_index = -1;
var _player_state = 'INIT';
var _random_play = false;
var _sections = [];
var _continuous_play = true;

function add_section(section_name, num_pages, url)
{
        _sections[_sections.length] = {
                name: section_name,
                page_count: num_pages,
                current_page: 1,
                data_url: url
        };
}

function body_loaded()
{
	new Ajax.Updater('album_covers_container', webroot + 'albums/catalog_slider', {
		onComplete: function(transport) {
			_album_slider = new Slider({ num_slide_steps: 10, slide_time_msec: 200, container_name: 'album_slider', block_prefix: 'block_', loop: true });
			update_catalog_pagination();
                        load_player();
		}
	});	
	new Ajax.Updater('ticker_container', webroot + 'content_items/ticker', {
		onComplete: function(transport) {
			new Slider({ num_slide_steps: 10, slide_time_msec: 500, container_name: 'ticker_slider', block_prefix: 'ticker_item_', loop: true, direction: 'vertical', auto: true, pause_msec: 5000 });
		}
	});	
	for (var i = 0; i < _sections.length; i++) {
		if ($(_sections[i].name + "_data") == null) {
			continue;
		}
		load_section_page(_sections[i], 1);
	}
	setInterval("next('flipbook');", 5000);
}

function load_player()
{
	var swf = new SWFObject(webroot + "swf/media_player.swf", "media_player_swf", 5, 5, 9, '#000000');
	swf.addVariable("skinSwfUrl", webroot + "swf/play_pause.swf");
	swf.addVariable("externalEventListeners", "playerReady=player_ready,mediaStarted=media_started,logDebug=player_debug,play=player_play,pause=player_pause,playlistComplete=playlist_complete");
	swf.write("media_player");
}

function slider_next()
{
        if (_album_slider.current_block < _album_slider.num_blocks) {
                _album_slider.next();
                update_catalog_pagination();
        }
}

function slider_prev()
{
        if (_album_slider.current_block > 1) {
	        _album_slider.prev();
	        update_catalog_pagination();
        }
}

function slider_goto(page)
{
        _album_slider.goto(page);
	update_catalog_pagination();
}

function play_next_album() {
        _current_catalog_index++;
        if (_current_catalog_index < 0 || _current_catalog_index >= Catalog.get_size()) {
                _current_catalog_index = 0;
        }
        var album = Catalog.get_album_by_index(_current_catalog_index);
        if (album != null) {
                _play_album(album);
        }
}

function play_random_album(max_catalog_index) {
        if (!max_catalog_index) {
                max_catalog_index = Catalog.get_size();
        }
        while (true) {
                var i = Math.floor(Math.random() * max_catalog_index);
                var album = Catalog.get_album_by_index(i);
                // don't play the hidden album
                if (album.id < 1) {
                        continue;
                }
                if (_current_album == null || _current_album.id != album.id) {
                        _play_album(album);
                        return;
                }
        }
}

function play_album(id) {
        var album = Catalog.get_album(id);
        if (album != null) {
                _play_album(album);
        }
}

function _play_album(album)
{
        var album_cell = null;
        var num = (_current_album == null ? -1 : _current_album.catalog_number);
        if (num != -1) {
                album_cell = $('block_' + num);
                if (album_cell != null) {
                        album_cell.removeClassName('album_cell_playing');
                        album_cell.addClassName('album_cell_not_playing');
                }
        }
	_current_album = album;
        _current_catalog_index = album.catalog_index;
        num = _current_album.catalog_number;
        album_cell = $('block_' + num);
        if (album_cell != null) {
                album_cell.removeClassName('album_cell_not_playing');
                album_cell.addClassName('album_cell_playing');
        }
	$('current_album_title').innerHTML = shorten_string(_current_album.title, 50);
	media_player_swf.playPlaylist(_current_album.tracks);
	$('play_pause_link').innerHTML = 'STOP THE MUSIC';
	_player_state = 'PLAYING'; 
        slider_goto(num);
}

function play_track(id)
{
        _current_album = null;
        $('current_album_title').innerHTML = 'The Catalog';
        media_player_swf.playPlaylist([ Catalog.get_track(id) ]);
}

function player_ready()
{
        if (_random_play) {
                // The first album played when the player loads should be one
                // of the first seven albums displayed in the player.
                play_random_album(7);
        }
        else {
                _play_album(Catalog.get_album_by_index(0));
        }
}

function player_debug(msg) {
	alert('Player says: ' + msg);
}

function player_play() {
	$('play_pause_link').innerHTML = 'STOP THE MUSIC';
	_player_state = 'PLAYING'; 
}

function player_pause() {
	$('play_pause_link').innerHTML = 'START THE MUSIC';
	_player_state = 'PAUSED'; 
}

function media_started(args) {
	$('current_track_title').innerHTML = shorten_string(args.currentMedia.title, 50);
}

function playlist_complete() {
	if (_continuous_play) {
                if (_random_play) {
                        play_random_album();
                }
                else {
                        play_next_album();
                }
        }
}

function shorten_string(s, max_len) {
	if (s.length > max_len) {
		return s.substring(0, max_len) + "...";
	}
	return s;
}

function play_pause() {
	if (_player_state == 'PAUSED') {
		media_player_swf.playPlayer();
	}
	else {
		media_player_swf.pausePlayer();
	}
}

function show_album_notes(album_id)
{
        // show a subModal popup window
        showPopWin(webroot + 'albums/notes/' + album_id, 500, 200);
}

function show_article(article_id)
{
        // show a subModal popup window
        showPopWin(webroot + 'content_items/article/' + article_id, 700, 600);
}

function next(section_alias)
{
	var s = get_section(section_alias);
	if (s.current_page < s.page_count) {
		load_section_page(s, s.current_page + 1);
	}
	else {
		load_section_page(s, 1);
	}
}

function prev(section_alias)
{
	var s = get_section(section_alias);
	if (s.current_page > 1) {
		load_section_page(s, s.current_page - 1);
	}
	else {
		load_section_page(s, s.page_count);
	}
}

function get_section(section_alias)
{
	for (var i = 0; i < _sections.length; i++) {
		if (_sections[i].name == section_alias) {
			return _sections[i];
		}
	}
	return null;
}

function load_section_page(section, page_num) {
		var id = section.name + '_data';
		new Ajax.Updater(id, webroot + section.data_url + '/page:' + page_num, {
			onComplete: function(transport) {
				section.current_page = page_num;
				$(section.name + '_current_page').innerHTML = "" + page_num;
			}
		});				
}

// figures out on which page in the catalog slider an album appears
// a total hack, but oh well. :(
function get_page_num(album_id) {
        var album_cell = $('album_cell_' + album_id);
        if (album_cell == null) {
                return -1;
        }
        var a = album_cell.ancestors();
        for (var i = 0; i < a.length; i++) {
                if (a[i].id.match(/^block_(\d+)$/)) {
                        return RegExp.$1;
                }
        }
}

function set_continuous_play(flag) {
        _continuous_play = flag;
}

function update_catalog_pagination() {
	var pc = $('slider_page_count');
	var pn = $('slider_page_num');
        if (pc) {
	        pc.innerHTML = _album_slider.num_blocks;
        }
        if (pn) {
	        pn.innerHTML = 1;
        }
}
