/* aqPaging v1.1 - Paging function with next and previous ranges.
   Copyright (C) 2008 Paul Pham <http://aquaron.com/~jquery/aqPaging>

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
(function($){
$.fn.aqPaging = function (options) {
   var opts = $.extend({ },$.fn.aqPaging.defaults,options);

   return this.each(function(){
      if (opts.pages <= 1) { return false; }

      if (!$('.aqPaging',this).length) {
         $.fn.aqPaging.defaults.uniqID++;
         $('<div class="aqPaging" id="aqPaging_' + $.fn.aqPaging.defaults.uniqID+'"><\/div>').appendTo(this);
         $.fn.aqPaging.defaults.cbs[$.fn.aqPaging.defaults.uniqID] = opts.cb;
      }

      var $pager = $('.aqPaging',this);
      var pid = $pager.attr('id');

      var s = 1, e = opts.pages;
      var html = '';

      var offset = (opts.current > opts.max) ? 1 : 0;

      if (opts.pages > opts.max) {
         if (opts.current > opts.max) { 
         	s = (opts.max * parseInt((opts.current-offset)/opts.max));
         }

         if (opts.current-offset+opts.max < opts.pages)  {
            e = s + opts.max + offset;
         }
      }

      for (var p=s; p<=e; p++) {
      	html += '<a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''+pid+'\''+','+p+','+opts.pages+');">' + p + '<\/a> ';
		}
		
      $pager.html(html);

      if (opts.current >= s && opts.current-opts.max > 0) {
         $pager.prepend('<a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''+pid+'\''+','+(s-opts.max+1)+','+opts.pages +')">' + (s-opts.max+1) + '<\/a> <i>&hellip;<\/i> ');
      }
      
      if ((opts.current-offset+opts.max) <= opts.pages && e != opts.pages) {
         $pager.append('<i>&hellip;<\/i>'+' <a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''+pid+'\''+','+opts.pages+','+opts.pages +')">'+opts.pages+'<\/a> ');
      }

      var hi 	= ((opts.current-1)%opts.max) + ((offset+1)*offset);

		// TFOLEY: THIS CSS SHOULDN'T BE USED UNTIL FURTHER TESTED. BREAKS IN IE.
      if (opts.css) {
         $pager.find('a').css(opts.aCss).not(':eq('+hi+')').hover(       
         	function() { $(this).css(opts.hiCss); },
            function() { $(this).css(opts.loCss); }
         );
         
         $pager.find('i').css(opts.iCss);
         $pager.find('a').eq(hi).css(opts.hiCss);         
      } else {      
         $pager.find('a').removeClass('aqPagingHi').eq(hi).addClass('aqPagingHi');
         $pager.find('a:last').addClass('aqPagingLast');	// Added in class to last item.
      }
      
      if (opts.flip) {
         $.fn.aqPaging.flip(pid,opts.current,opts.pages);
      }
      
   });
};

$.fn.aqPaging.flip = function(id,p,total) {
   var idx = id.replace(/aqPaging_/,''),
   	 func = $.fn.aqPaging.defaults.cbs[idx];
   	 
   if (func) { func(p); }
   $('.aqPaging').parent().aqPaging({current: p, pages: total});

   // Replaced below with above, account for more then one set of controls per page please.
   //$('#'+id).parent().aqPaging({current: p, pages: total});

   return false;
};

// Removed default, overrides not working.
$.fn.aqPaging.defaults = {
   cbs: [], pages: 0, current: 0, max: 4, uniqID: 0, flip: false
   /*
   css: { font: '14pt georgia,helvetica', padding: '0px 30px' },
   hiCss: { backgroundColor: '#7F4F17', borderColor: '#7f4f17', color: '#eee' },
   loCss: { backgroundColor: 'transparent', borderColor: '#aaa', color: '#777' },
   aCss: { margin: '2px', padding: '2px 5px', color: '#777',
      display: 'block', float: 'left', border: '1px solid #aaa' },
   iCss: { display:'block', float:'left' }
  */
};
})(jQuery);
