﻿

function ControlPaging(name)
{
    this.name = name;
    this.divId = "ControlPaging_"+name+"Div";  
    var self= this;
    
    // Renders only an empty div. The searchresult will render the full pager.
    this.Render = function()
    {
       var temp=""; 
       
       // Outer div    
        temp += "<div id='"+this.divId+"' class='ControlPaging'>";    
        
        // End outer div.
        temp += "</div>"; 
        
        // Write HTML to page. 
        document.write(temp);  
    }
    this.Render();
    
    // ------------------------------------------------------------------------------
    //  Search controller will receive all relevant events from this 
    //  control.
    // ------------------------------------------------------------------------------     
    this.RegisterAsTrigger = function(searchController)
    {
        fc.RegisterTrigger(this.name, searchController);
    }
    
    // ------------------------------------------------------------------------------
    //  Eventhandler for "SearchResult".
    // ------------------------------------------------------------------------------ 
    this.OnSearchResult = function(data, _this, persistedSearch)
    {  
        var pageSize = data.responseHeader.params.rows;
        var page = data.responseHeader.params.start / pageSize ;        
        var results = data.response.numFound;
        var numPageButtons = 5; // must be uneven (3 or 5 or 7 or 9 etc...).
        var totalPages = parseInt(data.response.numFound / pageSize);
        if (data.response.numFound % pageSize != 0)
            totalPages++;
           
        debug("totalPages="+totalPages);

        var html = "<ol class='ControlPaging_List'>";
              
        var firstPage;
        var lastPage;
        if (page < (numPageButtons-1))
        {
            firstPage = 0;
        }
        else if (page > (totalPages-1) - parseInt((numPageButtons/2)) )
        {
            firstPage = (page - parseInt((numPageButtons/2))) - ((totalPages-1) - page) -    (parseInt((numPageButtons/2) - ( ((totalPages-1) - page)) * 2)   );
            
            //debug("firstpage = ("+page+" - "+parseInt((numPageButtons/2))+") - ("+(totalPages-1)+" - "+page+") - ("+parseInt(numPageButtons/2)+" - ("+(totalPages-1)+" - "+page+"))   ) = "+ firstPage);
        }
        else
        {
            firstPage = page - parseInt((numPageButtons/2));  
        }
        
        // Show previous button?
        if (page > 0)
        {
            html += "<li page='"+ (page -1) +"' id='ControlPaging_"+self.name+"_Prev' class='ControlPaging_ListItem'>«</li>";           
        }
        
        // Show first page button?
        if (firstPage > 1)  
        {
            html += "<li page='0' class='ControlPaging_ListItem'>1</li>";     
            html += "<li class='ControlPaging_ListItem_Dots'>...</li>";
        }
         
        // show page buttons
        for (var i=0; i<numPageButtons; i++)
        {
            if ( (firstPage+i) < totalPages)
            {
                if (page == firstPage +i)
                {
                    html += "<li page='"+ (firstPage +i) +"' class='ControlPaging_ListItem_Selected'>"+ (firstPage + 1 +i)+"</li>";
                }
                else
                {
                    html += "<li page='"+ (firstPage +i) +"' class='ControlPaging_ListItem'>"+ (firstPage + 1 +i)+"</li>";
                }
                lastPage = (firstPage +i);
            }     
        }
        
        // Show last page button?
        if (lastPage+1 < totalPages )
        {
            html +="<li class='ControlPaging_ListItem_Dots'>...</li>";  
            html += "<li page='"+ (parseInt(totalPages)-1) +"' class='ControlPaging_ListItem'>"+totalPages+"</li>";             
        }   
        
        // Show next page button?
        if (page < parseInt(totalPages)-1)
        {
            html += "<li page='"+(parseInt(page)+1)+"' id='ControlPaging_"+self.name+"_Next' class='ControlPaging_ListItem'>»</li>";  
        } 
            
        html +="</ol>";
              
        $("div#"+self.divId).html(html);    
        
        
        $(".ControlPaging_ListItem").bind("click", self.OnPageButtonClick);
		
		
		
    }
    
    // ------------------------------------------------------------------------------
    //  Subscribe to specific event from searchcontroller.
    // ------------------------------------------------------------------------------ 
    this.SubscribeEvent = function(searchController, eventName, callback)
    {
        fc.SubscribeEvent(this, searchController, eventName, callback);
    }
    
    // ------------------------------------------------------------------------------
    //  Subscribe to all relevant events from searchcontroller.
    // ------------------------------------------------------------------------------ 
    this.SubscribeEvents = function(searchController)
    {
        self.SubscribeEvent(searchController, "SearchResult", self.OnSearchResult);
    }
    
    // ------------------------------------------------------------------------------
    //  User clicked on a page button.
    // ------------------------------------------------------------------------------ 
    this.OnPageButtonClick = function(event)
    {
        var p = $(this).attr( "page");
        javascript:window.scrollTo(0,0);    
        fc.CriteriaChange_Page(self.name, p);            
    }
}