/*******************************************************************************
* Author : Irle Benoit                                                         *
* Description : This is a less-css and easy-configuring plugin which allow you *
* to pagin content within page.                                                *
* jQuery-version: Tested with jQuery 1.3.1 +                                   *
* Version: 0.9 beta                                                            *
********************************************************************************/

jQuery.fn.extend({
  magicPaging: function(opt){
    opt = $.extend({
        numberItem : 0,
        numberPage : 0,
        startingPage : 1,
        callback : null,
        leftButton : null,
        rightButton : null,
        extraLeftButton : null,
        extraRightButton : null
    }, opt);
    return  this.each(function(index) {
        if (isNaN(opt.numberItem) || isNaN(opt.numberPage) || isNaN(opt.startingPage))
          return false;
        
        if ((opt.numberItem < 1) || (opt.numberPage < 1) || (opt.startingPage < 1))
          return false;
        
        
        pageActu = opt.startingPage;
        pageMax = Math.ceil(opt.numberItem / opt.numberPage);
        
        if (pageActu > pageMax)
          return false;
        
        var leftButtonLink = (opt.leftButton == null)?"<":"<img style='border:none' src='"+opt.leftButton+"' alt='<'/>";
        var rightButtonLink = (opt.rightButton == null)?">":"<img style='border:none' src='"+opt.rightButton+"' alt='>'/>";
        var extraLeftButtonLink = (opt.extraLeftButton == null)?"<<":"<img style='border:none' src='"+opt.extraLeftButton+"' alt='<<'/>";
        var extraRightButtonLink = (opt.extraRightButton == null)?">>":"<img style='border:none' src='"+opt.extraRightButton+"' alt='>>'/>";
        
        $(this).append("<div class='magicPagingContainer'><div class='magicPagingLeft' style='float:left'><a href='#'  class='extraLeft' title='extraLeftPage' style='text-decoration:none'>"+extraLeftButtonLink+"</a><a href='#'  class='normalLeft' title='leftPage' style='text-decoration:none;margin-left:5px'>"+leftButtonLink+"</a></div><div class='magicPagingInfo' style='float:left;margin-left:33px;width:50px'><span class='magicPagingPage'>"+pageActu+"</span>/<span class='magicPagingMax'>"+pageMax+"</span></div><div class='magicPagingRight'><a href='#' class='normalRight' title='RightPage' style='text-decoration:none;margin-right:5px'>"+rightButtonLink+"</a><a href='#'  class='extraRight' title='ExtraRightPage' style='text-decoration:none'>"+extraRightButtonLink+"</a><div/></div>");
        
       $(this).find(".magicPagingLeft a.normalLeft").click(function(){
        if (pageActu > 1)
          {
            --pageActu;
            $(".magicPagingPage").html(pageActu);
            if (opt.callback)
              opt.callback(pageActu, pageMax);
          }
          return false;
       });
       
       $(this).find(".magicPagingLeft a.extraLeft").click(function(){
        if (pageActu > 1)
          {
            pageActu = 1;
            $(".magicPagingPage").html(pageActu);
            if (opt.callback)
              opt.callback(pageActu, pageMax);
          }
          return false;
       });
       
       $(this).find(".magicPagingRight a.normalRight").click(function(){
        if (pageActu < pageMax)
          {
            ++pageActu;
            $(".magicPagingPage").html(pageActu);
            if (opt.callback)
              opt.callback(pageActu, pageMax);
          }
          return false;
       });
       
       $(this).find(".magicPagingRight a.extraRight").click(function(){
        if (pageActu < pageMax)
          {
            pageActu = pageMax;
            $(".magicPagingPage").html(pageActu);
            if (opt.callback)
              opt.callback(pageActu, pageMax);
          }
          return false;
       });       
    });
  }
});
