function pageselectCallback(page_index, jq){
    try {
        pagination_hide_navigation();
    } catch (e){};
    var aDisplayedElem = new Array();
    if (settings){
        if (settings.bOverride){
            page_index=$.bbq.getState('iPage',true);
        }
    }
    settings = new BrowseSetting();
    settings.strSortField = strSortField;
    settings.strLetter = strCurrentLetter;
    settings.iPage = page_index;
    settings.iItems = items_per_page;
    settings.bOverride = false;
    settings.strAnchor=$.bbq.getState('strAnchor');
    $.bbq.pushState(settings);
    // Get number of elements per pagionation page from form
    $div_FadeContainer.fadeOut("slow", function() {
        max_elem = Math.min((page_index+1) * items_per_page, aPagedElements.length);
        start_elem = page_index*items_per_page;
        $ul_PagesContent.html('');
        // Iterate through a selection of the content and build an HTML string
        for(var i=start_elem;i<max_elem;i++)
            for(j=0;j<aElements.length;j++)
                if (aPagedElements[i]==aElements[j]){
                    aDisplayedElem.push(aElements[j]);
                    continue;
                }
        AppendDisplayedElem(aDisplayedElem);
        $div_FadeContainer.fadeIn("slow",PageShowCallback);
    });
    return false;
}

function getOptions(){
    var opt = {
        callback: pageselectCallback
    };
    opt.items_per_page=items_per_page;
    opt.num_edge_entries=2;
    opt.num_edge_entries=2;
    opt.prev_text = "prev";
    opt.next_text = "next";
    return opt;
}

function LoadAllElements(){
    $ul_ListNavContainer.children().each(function() {
        if ($(this).attr("class")!="ln-no-match")
            aPagedElements.push($(this).attr("id").replace(/[^0-9]+/,""));
    });
}

function LoadElementsByLetter(){
    $(".ln-" + strCurrentLetter).each(function() {
        if($(this).html())
            aPagedElements.push($(this).attr("id").replace(/[^0-9]+/,""));
    });
}

function ShowResult(){
    aPagedElements = [];
    if (strCurrentLetter != "all")
        LoadElementsByLetter();
    else
        LoadAllElements();
    optInit = getOptions();
    $ul_PagesContainer.pagination(aPagedElements.length, optInit);

}

function InitPagination(){
    $div_LettersContainer.html('');
    $ul_ListNavContainer.listnav({
        includeNums: false,
        onClick: function(strLetter){
            strCurrentLetter=strLetter;
            ShowResult();
        }
    });
    if ($.bbq.getState('strLetter'))
        strCurrentLetter=$.bbq.getState('strLetter');
    ShowResult();
}

function RemoveBold($LinksCont){
    $LinksCont.find("a").each(function(){
        $(this).removeClass("bold");
    });
}

function BrowseSetting(){
    this.strSortField = new String;
    this.strLetter = new String;
    this.iPage = 1;
    this.iItems = 2;
    this.bOverride = false;
    this.strAnchor = new String;
}
    
function Refresh(event) {
    settings = $.bbq.getState(true);
    settings.bOverride = true;
    items_per_page=settings.iItems;
    SortSpeakers(settings.strSortField);
}

$(function() {
    $('.a_iResults').click(function(){
        items_per_page = $(this).html();
        var $LinksCont=$(this).parent();
        RemoveBold($LinksCont);
        $(this).addClass("bold");
        ShowResult();
    });
    $('.a_Sort').click(function(){
        var $LinksCont=$(this).parent().parent();
        RemoveBold($LinksCont);
        $(this).addClass("bold");
        SortSpeakers($(this).attr('name'));
    });

    $.ajaxSetup({
        timeout: 5000,
        cache: false
    });

    $().ajaxStart(function() {
        $("#img_Spinner").show();
    })
    .ajaxStop(function() {
        $("#img_Spinner").hide();
    })
    .ajaxError(function() {
        $("#img_Spinner").hide();
    })
});

var optInit;
var strCurrentLetter = "all";
var aPagedElements;
var $div_LettersContainer;
var $ul_ListNavContainer;
var $li_ListNavTemplate;
var $ul_PagesContainer;
var $li_PagesTemplate;
var $div_FadeContainer;
var $ul_PagesContent;
var items_per_page;
var aElements;
var max_elem;
var start_elem;
var strSortField;
var settings;
