var paginationHistoryInitialized = false;
var paginationMenuID;
var paginationContainerID;
var paginationDoSubmit = false;

function paginationInitialization(menuID, containerID)
{
	paginationHistoryInitialized = true;
	paginationMenuID = menuID;
	paginationContainerID = containerID;

	$.history.addCallback(paginationHistoryHandler);
}

function paginationHistoryHandler(hash)
{
	if(!paginationHistoryInitialized) return;

	var page;
	if(hash == '' || hash.search(/Page\d/) == -1) page = 1;
	else page = parseInt(hash.match(/Page\d+/)[0].replace('Page', ''));
	
	// Find Anchor with this hash
	var a = $('#' + paginationMenuID + 'Page' + page);
	if(a.size() > 0) {
		// Check Current Page
		if(page == paginationGetCurrentPage())
			return;
		
		// Update prev
		if(page == 1) $('div.pagination.numeric ul li.prev').addClass('disabled');
		else $('div.pagination.numeric ul li.prev').removeClass('disabled');
		
		// Update next
		if(page == paginationGetLastPage()) $('div.pagination.numeric ul li.next').addClass('disabled');
		else $('div.pagination.numeric ul li.next').removeClass('disabled');
		
		// Update current states on page numbers
		$('div.pagination.numeric ul li').removeClass('current');
		$('div.pagination.numeric ul li.Page' + page).addClass('current');

		// AJAX Page Load (using slice in case there are multiple menus on the page)
		var container = $('#' + paginationContainerID);
		container.addClass('beingUpdated');
		showModalMessage('Loading...');
		$.get(a.attr('href'), function(response) {
			container.html($(response).find('#' + paginationContainerID).html());
			container.removeClass('beingUpdated');
			hideModalMessage();
		});
	}
}

function paginationGoToLetter(letter, link)
{
	if(paginationDoSubmit)
	{
		if(link != null)
		{
			var form = $(link).closest('form');
			if(form.size() > 0)
			{
				if(form.find('input#letter').size() == 0)
					form.append('<input type="hidden" id="letter" name="letter"/>');
				
				form.find('input#letter').val(letter);
				
				paginationGoToPage(1, link);
			}
		}
	}

	return false;
}

function paginationGoToPage(page, link)
{
	if(paginationDoSubmit)
	{
		if(link != null)
		{
			var form = $(link).closest('form');
			if(form.size() > 0)
			{
				if(form.find('input#page').size() == 0)
					form.append('<input type="hidden" id="page" name="page"/>');
				
				form.find('input#page').val(page);
				form.submit();
			}
		}
	}
	else
	{
		if(location.hash == null || location.hash == '')
			$.history.load('Page' + page);
		else if(location.hash.search(/Page\d/) != -1)
			$.history.load(location.hash.replace('#', '').replace(/Page\d+/, 'Page' + page));
		else
			$.history.load(location.hash.replace('#', '') + '_' + 'Page' + page);
	}

	return false;
}

function paginationGetPageNumberFromLink(link)
{
	return parseInt(link.attr('id').replace(paginationMenuID + 'Page', ''));
}

function paginationGetCurrentPage()
{
	var currentPageLink = $('ul#' + paginationMenuID + 'List li.page.current a');
	if(currentPageLink.size() > 0) return paginationGetPageNumberFromLink(currentPageLink);
	return 1;
}

function paginationGetLastPage()
{
	var lastPageLink = $('ul#' + paginationMenuID + 'List li.page:last a')
	if(lastPageLink.size() > 0) return paginationGetPageNumberFromLink(lastPageLink);
	return 1;
}

function paginationGoNextPage()
{
	var currentPage = paginationGetCurrentPage();
	if(currentPage < paginationGetLastPage())
	{
		var page = currentPage + 1;
		paginationGoToPage(page);
	}
}

function paginationGoPrevPage()
{
	var currentPage = paginationGetCurrentPage();
	if(currentPage > 1)
	{
		var page = currentPage - 1;
		paginationGoToPage(page);
	}
}
