      $j.fn.alternateRowColors = function() {
	      $j('tbody tr:odd', this).removeClass('even').addClass('odd')
	      $j('tbody tr:even', this).removeClass('odd').addClass('even')
	      return this
      }
      $j(document).ready(function() {
	      var alternateRowColors = function($table) {
		      $j('tbody tr:odd', $table).removeClass('even').addClass('odd')
		      $j('tbody tr:even', $table).removeClass('odd').addClass('even')
	      }
	      $j('table.sortable').each(function() {
	      var $table = $j(this)
	      $table.alternateRowColors($table)
	      $table.find('th').each(function(column) {
		      var findSortKey
		      if ($j(this).is('.sort-alpha')) 
		      {
			      findSortKey = function($cell) {
				      return $cell.find('.sort-key').text().toUpperCase() + ' ' + $cell.text().toUpperCase()
			      }
		      }
		      else if ($j(this).is('.sort-numeric')) 
		      {
			      findSortKey = function($cell) {
				      var key = parseFloat($cell.text().replace(/^[^\d.]*/, ''))
				      return isNaN(key) ? 0 : key
			      }
		      }
		      else if ($j(this).is('.sort-date')) 
		      {
			      findSortKey = function($cell) {
				      var dateText = $cell.text();
				      var pos = dateText.indexOf('-');
				      if ( pos >= 0 )
				      {
					dateText = dateText.substring(0,pos);
				      }
				      dateText = $j.trim(dateText);
				      return Date.parse( dateText )
			      }
		      }
		      if (findSortKey) 
		      {
			      $j(this).addClass('clickable').hover(function() {
				      $j(this).addClass('hover')
			      }, function() {
				      $j(this).removeClass('hover')
			      }).click(function() {
				      var newDirection = 1
				      if ($j(this).is('.sorted-asc')) 
				      {
				      newDirection = -1
				      }
				      rows = $table.find('tbody > tr').get()
				      $j.each(rows, function(index, row) {
				      row.sortKey =
				      findSortKey($j(row).children('td').eq(column))
			      })
			      rows.sort(function(a, b) {
				      if (a.sortKey < b.sortKey) return -newDirection
				      if (a.sortKey > b.sortKey) return newDirection
				      return 0
			      })
			      $j.each(rows, function(index, row) {
				      $table.children('tbody').append(row)
				      row.sortKey = null
			      })
			      $table.find('th').removeClass('sorted-asc').removeClass('sorted-desc')
			      var $sortHead = $table.find('th').filter(':nth-child(' + (column + 1) + ')')
			      if (newDirection == 1) 
			      {
				      $sortHead.addClass('sorted-asc')
			      } 
			      else 
			      {
				      $sortHead.addClass('sorted-desc')
			      }
			      $table.find('td').removeClass('sorted')
			      .filter(':nth-child(' + (column + 1) + ')')
			      .addClass('sorted')
			      $table.alternateRowColors($table)
			      $table.trigger('repaginate')
		      })
		      }
	      })
	      })
      })

      $j(document).ready(function() {
	      $j('table.paginated').each(function() {
		      var currentPage = 0
		      var numPerPage = 3 // NUM PER PAGE
		      if ( typeof(overrideNumPerPage) != "undefined" )
		      {
		      	numPerPage = overrideNumPerPage;
		      }
		      var $table = $j(this)
		      $table.bind('repaginate', function() {
		      		var hideBelow = currentPage * numPerPage;
		      		var hideAbove = ((currentPage + 1) * numPerPage) - 1;
			      $table.find('tbody tr').show();
			      $table.find("tbody tr:lt(" + hideBelow + ")")
			      .hide()
			      .end();
			      $table.find("tbody tr:gt(" + hideAbove + ")")
			      .hide()
			      .end();
		      })
		      var numRows = $table.find('tbody tr').length
		      var numPages = Math.ceil(numRows / numPerPage)
		      var $pager = $j('<div class="pager">Pages </div>')
		      for (var page = 0; page < numPages; page++) 
		      {
			      $j('<span class="page-number">' + (page + 1) + '</span>').bind('click', {'newPage': page}, function(event) 
			      {
				      currentPage = event.data['newPage']
				      $table.trigger('repaginate')
				      $j(this).addClass('active').siblings().removeClass('active')
			      })
			      .appendTo($pager).addClass('clickable')
		      }
		      $pager.find('span.page-number:first').addClass('active')
		      $pager.insertAfter($table)
		      $table.trigger('repaginate')
	      })
      })

