$(function(){

	var container   = $('#animal_browser');
	var categories  = $('ul.pet_category_nav li');

	var petList     = container.find('ul.pet_list');
	var petTemplate = container.find('#pet_template');
	var prevButton  = container.find('#prev');
	var nextButton  = container.find('#next');
	var leadItem    = container.find('.animals_listed .lead_item');
	var lastItem    = container.find('.animals_listed .last_item');
	var totalItems  = container.find('.animals_listed .total_items');
	var pageCount   = null;
	var currentPage = 1;
	var taxonomies  = [];

	function loadPage(page) {

		prevButton.addClass('disabled');
		nextButton.addClass('disabled');

		if (!page) {
			page = currentPage;
		}

		$.ajax({
			url:      '/browse_animals/',
			type:     'GET',
			data:     'page=' + page + '&taxonomies=' + taxonomies.join(','),
			dataType: 'json',
			success: function(data) {
				petList.empty();
				petTemplate.tmpl(data.animals).appendTo(petList);
				leadItem.html(data.lead_item);
				lastItem.html(data.last_item);
				totalItems.html(data.total_items);

				currentPage = page;
				pageCount   = data.total_pages;

				if (currentPage != 1) {
					prevButton.removeClass('disabled');
				}

				if (currentPage != pageCount) {
					nextButton.removeClass('disabled');
				}
			}
		});
	}

	prevButton.click(function(e){
		e.preventDefault();
		if (!prevButton.hasClass('disabled')) {
			loadPage(currentPage - 1);
		}
	});

	nextButton.click(function(e){
		e.preventDefault();
		if (!nextButton.hasClass('disabled')) {
			loadPage(currentPage + 1);
		}

	});

	categories.click(function(e) {
		e.preventDefault();

		var taxonomy = $(this).text();

		if (!taxonomy) {
			taxonomies = [];
			categories.find('a').removeClass('selected');
			categories.filter('.show_all').addClass('selected');
		} else {
			var selected = $.inArray(taxonomy, taxonomies);

			if (selected == -1) {
				$(this).find('a').addClass('selected');
				taxonomies.push(taxonomy);
			} else {
				$(this).find('a').removeClass('selected');
				taxonomies.splice(selected, 1);
			}

			if (taxonomies.length == 0) {
				categories.filter('.show_all').find('a').addClass('selected');
			} else {
				categories.filter('.show_all').find('a').removeClass('selected');
			}
		}

		loadPage(1);
	});
});




