The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
class Data

class Data.Page
  constructor: (@_total_entries = 0, @_entries_per_page = 10, @_current_page = 1) ->

  total_entries: (total_entries) ->
    @_total_entries = total_entries if total_entries
    return @_total_entries

  entries_per_page: (entries_per_page) ->
    @_entries_per_page = entries_per_page if entries_per_page
    return @_entries_per_page

  current_page: (current_page) ->
    @_current_page = current_page if current_page
    return @_current_page

  first_page: ->
    return 1

  last_page: ->
    pages = @_total_entries / @_entries_per_page
    if pages == Math.floor(pages)
        last_page = pages
    else
        last_page = 1 + Math.floor(pages)
    if last_page < 1
        last_page = 1   
    return last_page

  first: ->
    if @_total_entries == 0
        return 0
    else
        return ( ( @_current_page - 1 ) * @_entries_per_page ) + 1

  last: ->
    if @_current_page == this.last_page()
        return @_total_entries
    else
        return @_current_page * @_entries_per_page

  previous_page: ->
    if @_current_page > 1
        return @_current_page - 1
    else
        return null

  next_page: ->
    if @_current_page < this.last_page()
        return @_current_page + 1
    else
        return null
    
  splice: (array) ->
    if array.length > this.last()
        top = this.last()
    else
        top = array.length
    if top == 0
        return []
    return array.slice(this.first()-1, top)

  skipped: ->
    skipped = this.first() - 1
    if skipped < 0
        return 0
    else
        return skipped

  entries_on_this_page: ->
    if @_total_entries == 0
        return 0
    else
        return this.last() - this.first() + 1

Data.Page.VERSION = "0.02"