__author__ = 'Vance Dubbelry : altjeringa@gmail.com'
__version__ = '0.1'
__date__ = '3/02/07'

from django.template import Context, loader
from django.conf import settings
import math

class Page(object):
  """
    Bean Style Class. Just holds values
  """
  
  def __init__(self, num, offset, current ):
    self.number = num
    self.offset = offset
    self.current = current
    
class Pager(object):
  
  def end(self):
    return self.current_index + self.page_length
    
  def render(self):
    """ 
      Returns a string of all the html for the pager.
    """
    
    t = loader.get_template('util/pager.html')
    c = Context(      { 
                        'pages': self.pages(), 
                        'URL_PREFIX' : settings.URL_PREFIX,
                        'query_string': self.query_string,
                        'current_index': self.current_index,
                        'next' : self.gen_next(),
                        'previous' : self.gen_previous(),
                        'records': self.set_length
                      }
        )
    
    return t.render(c)
    
    
  def pages(self):
    page_nums = range(1, self.number_of_pages() )
    pages = []
    
    for num in page_nums:
      current = False;
      if ( num == self.current_page() ):
        current = True
        
      pages.append( Page(num, (num * self.page_length) - self.page_length, current) )
    
    return pages
    
  def number_of_pages(self):
    pages = self.set_length / self.page_length + 2 
    return pages
    
  def current_page(self):
    return math.ceil( ( float( self.current_index ) / float( self.page_length ) + 2 ) )
    
  def gen_next(self):
    next = self.next
    if self.number_of_pages() != self.current_page():
      next = self.current_index + self.page_length
    return next
    
  def gen_previous(self):
    prev = self.previous
    if self.current_index != 0:
      prev = self.current_index - self.page_length
    return prev
    
  def __init__(self):
    self.page_length = settings.PAGE_LENGTH
    self.next = 0
    self.previous = 0
    self.current_index = 0
    self.set_length = 0
    self.query_string = ''

  