/*
--------- TO USE PAGINATION YOU MUST IMPLEMENTS -------------------
- function pag_callDwr(sortBy, sortOrder, page, callBackFunction) {}
	call the Dwr method to get data
- function pag_getLineHtml(model,index) {}
	return the HTML corresponding to one line of the model

---------- YOU CAN ALSO IMPLEMENTS (OPTIONNAL) --------------------
- function pag_BeforePaginating() {}
	executed first when paginate is called
- function pag_AfterPaginating() {}
	executed last when paginate is called

---------- YOU CAN USE FOLLOWING FEATURED FUNCTIONS ---------------
- paginate(page)
	refresh lines using page attribute
- paginate()
	refresh lines using current page

---------- USED HTML ELEMENTS ---------------
@see pagination.vm for more informations

*/

var pag_sortOrder;
var pag_sortBy;
var pag_nbPages;
var pag_nbPageResults;
var pag_nbTotalResults;

$(document).ready(function() {
	pag_currentPage = 1;
	pag_nbPages = $("#nbPages").val();
	pag_nbPageResults = $("#nbPageResults").val();
	pag_nbTotalResults = $("#nbTotalResults").val();
	pag_sortBy = $("#defaultSortBy").val();
	pag_sortOrder = $("#defaultSortOrder").val();
	pagination_update_pagelinks();
	
	if ($("#nbTotalResults").val() == 0) {
		$("#resultsTab").hide();
		$("#noResult").show();
	} else {
		$("#resultsTab").show();
		$("#noResult").hide();
	}
	
	$(".paginationPreviousPageLink").click(function() { if (pag_currentPage>1) paginate(pag_currentPage-1); return false; });
	$(".paginationFirstPageLink").click(function() { if (pag_currentPage>1) paginate(1); return false; });
	$(".paginationNextPageLink").click(function() { if (pag_currentPage<pag_nbPages) paginate(pag_currentPage+1); return false; });
	$(".paginationLastPageLink").click(function() { if (pag_currentPage<pag_nbPages) paginate(pag_nbPages); return false; });
	$(".sortLink").click(function() {
		var href_sortBy = $(this).attr("href").substring(1);
		if(href_sortBy == pag_sortBy) {
			if(pag_sortOrder == "asc") {
				pag_sortOrder = "desc";
			} else {
				pag_sortOrder = "asc";
			}
		} else {
			pag_sortOrder = "desc";
			pag_sortBy = href_sortBy;
		}
		paginate(1); 
		return false;
	});
});
	
function paginate(page) {
	if (typeof page == "undefined") {
		page = pag_currentPage;
	}
	if (typeof pag_BeforePaginating == "function") {
		pag_BeforePaginating();
	}
	pag_callDwr(pag_sortBy, pag_sortOrder, page, function (model) {
		pag_nbPages = model.nbPages;
		pag_currentPage = model.currentPage;
		pag_nbPageResults = model.lines.length;
		pag_nbTotalResults = model.nbTotalResults;
		pag_sortBy = model.currentSortBy;
		pag_sortOrder = model.currentSortOrder;
		if ($("#resultsTab").length>0 && model.lines.length == 0) {
			$("#resultsTab").hide();
			$("#noResult").show();
		}
		else {
			$("#resultsTab").show();
			$("#noResult").hide();
			$("#results").empty();
			for (i=0;i<model.lines.length;i+=1) {
				$("#results").append(pag_getLineHtml(model,i));	
			}
			pagination_update_pagelinks();
			if (typeof pag_AfterPaginating == "function") {
				pag_AfterPaginating();
			}
		}
	});
}

function pagination_update_pagelinks() {
	if (pag_nbPages>1) {
		$(".paginationDiv").show();
	} else {
		$(".paginationDiv").hide();
	}
	$(".paginationNbTotalResults").html(pag_nbTotalResults);
	$(".paginationCurrentPage").html(pag_currentPage);
	$(".paginationNbPages").html(pag_nbPages);
	
	$(".paginationPageList").empty();
	
	var lowerEnd;
	var higherEnd;
	if (pag_nbPages<10) {
		lowerEnd = 1;
		higherEnd = pag_nbPages;
	} else if (pag_currentPage < 6) {
		lowerEnd = 1;
		higherEnd = 9;
	} else if (pag_currentPage+4 > pag_nbPages) {
		higherEnd = pag_nbPages;
		lowerEnd = pag_nbPages-8;
	}
	else {
		higherEnd = pag_currentPage+4;
		lowerEnd = pag_currentPage-4;
	}
	for (j=lowerEnd; j<=higherEnd; j+=1) {
		var span = "<a";
		if (pag_currentPage==j) {
			span +=" class=\"current\"";
		}
		span +=" href=\"#"+j+"\" title=\"";
		span += $("#gotopage").val();
		span += "\">";
		span += j;
		span += "</a>";
		$(".paginationPageList").append(span);
	}
	$(".paginationPageList a").click(function() { paginate($(this).html()); return false; });

	if (lowerEnd==pag_currentPage) {
		$(".paginationPreviousPageLink").addClass("disabled");
		$(".paginationFirstPageLink").addClass("disabled");
	} else {
		$(".paginationPreviousPageLink").removeClass("disabled");
		$(".paginationFirstPageLink").removeClass("disabled");
	}
	if (higherEnd==pag_currentPage) {
		$(".paginationNextPageLink").addClass("disabled");
		$(".paginationLastPageLink").addClass("disabled");
	} else {
		$(".paginationNextPageLink").removeClass("disabled");
		$(".paginationLastPageLink").removeClass("disabled");
	}

}