/*
Usage example:
	pagesInit(Individual_Item_Handle, Page_Numbers_Container_Handle, Number_Of_Page_Numbers_To_Display, Number_Of_Items_Per_Page, Prev_Link_Handle, Next_Link_Handle);
e.g.
	pagesInit('fieldset.page', 'div.pageNums', 5, 1);
*/

if((typeof Prototype=='undefined') || (typeof Element == 'undefined') || (typeof Element.Methods=='undefined')) throw("paging.js requires the Prototype JavaScript framework ");

var Pages = new Array();
var currentPage = 0;
var prevPageBut;
var nextPageBut;
var pageStart;
var pageNumbersDiv = new Array();
var prevNextButtonsEnabled;
var numPages;
var struct;
var pageSize;

function pagesInit(pageDivHandle, pageNumbersHandle, NumOfPageLinks, itemPerPage, prevPageLinkHandle, nextPageLinkHandle) {
    Pages = $$(pageDivHandle);
    if (typeof pageNumbersHandle != 'undefined') pageNumbersDiv = $$(pageNumbersHandle);
    struct = NumOfPageLinks;
    pageSize = itemPerPage;
    if (typeof prevPageLinkHandle != 'undefined') prevPageBut = $$(prevPageLinkHandle);
    if (typeof nextPageLinkHandle != 'undefined') nextPageBut = $$(nextPageLinkHandle);
	
    if (getNumPages() > 0){ 
        gotoPage(0);
    }
}

function getNumPages()
{
	if ((Pages.length / pageSize) > Math.floor(Pages.length / pageSize))
		return Math.floor(Pages.length / pageSize) + 1
	else
		return Math.floor(Pages.length / pageSize)
}

function previousPage(){
    if (currentPage > 0){
        currentPage--;
        gotoPage(currentPage);
    }
}

function nextPage(){
    if (currentPage < (getNumPages()-1)){
        currentPage++;
        gotoPage(currentPage);
    }    
}

function gotoPage(id){
    hidePages();
	var start = id * pageSize
	
    for (var x = start; x < start + pageSize; x++){
		if (x < Pages.length){
		 	Pages[x].style.display = 'block';
			if (x >= start + pageSize - 1) Pages[x].style.border = 'none';
		}
		if (x == Pages.length - 1) Pages[x].style.border = 'none';
				
    }

    currentPage = id;  
    updatePageNumbers(id);
    updatePrevNextLinks(id);
}

function hidePages(){
    for (var x = 0; x < Pages.length; x++){
        Pages[x].style.display = 'none';
    }
}

function updatePrevNextLinks(id) {
    
    if (typeof prevPageBut != 'undefined') {
        if (id == 0) {
            for (var x = 0; x < prevPageBut.length; x++) {
                prevPageBut[x].addClassName("disabled");
            }
        } else {
            for (var x = 0; x < prevPageBut.length; x++) {
                prevPageBut[x].removeClassName("disabled");
            }
        }
    }
    if (typeof nextPageBut != 'undefined') {
        var maxpageNum = getNumPages() - 1;
        if (id >= maxpageNum) {
            for (var x = 0; x < nextPageBut.length; x++) {
                nextPageBut[x].addClassName("disabled");
            }
        } else {
            for (var x = 0; x < nextPageBut.length; x++) {
                nextPageBut[x].removeClassName("disabled");
            }
        }
    }
}

function updatePageNumbers(id) {
    if (typeof pageNumbersDiv != 'undefined') {
        var startPage = id - Math.floor(struct / 2)
        var endPage = startPage + (struct - 1)

        if (startPage < 0) {
            startPage = 0
            endPage = (struct - 1)
        }

        if (endPage >= getNumPages()) {
            endPage = getNumPages() - 1
            startPage = endPage - (struct - 1)
        }

        if (startPage < 0) {
            startPage = 0
        }

        var divConent = "";
        for (var x = startPage; x <= endPage; x++) {
            divConent += '<a href="Javascript: gotoPage(' + x + ')" title="Page ' + (x + 1) + '"'
            if (x == id) divConent += ' class="selected"';
            divConent += '>' + (x + 1) + '</a>';
        }

        if (startPage < endPage) {
            for (var x = 0; x < pageNumbersDiv.length; x++) {
                pageNumbersDiv[x].innerHTML = divConent;
            }
        }
    }    
}