(function ($) {
   $.fn.paginate = function (options) {
      var opts = $.extend({}, $.fn.paginate.defaults, options);
      return this.each(function () {
        $this = $(this);
        var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
        var selectedpage = o.start;
        $.fn.draw(o, $this, selectedpage);
      });
    };

    var outsidewidth_tmp = 0;
    var insidewidth = 0;
    var bName = navigator.appName;
    var bVer = navigator.appVersion;
    if (bVer.indexOf('MSIE 7.0') > 0)
      var ver = "ie7";
    $.fn.paginate.defaults = {
      count: 5,
      start: 12,
      display: 5,
      border: true,
      border_color: '#fff',
      text_color: '#8cc59d',
      background_color: 'black',
      border_hover_color: '#fff',
      text_hover_color: '#fff',
      background_hover_color: '#fff',
      rotate: true,
      images: true,
      mouse: 'slide',
      onChange: function () { return false; }
    };

    $.fn.draw = function (o, obj, selectedpage) {
      if (o.display > o.count)
        o.display = o.count;

      $this.empty();
      var _pagelist = $(document.createElement('span'));
      //if (selectedpage == o.start) {
      var _rotleft = $(document.createElement('a')).addClass("moveLeft").html(' &laquo; ');
      //}
      //      else {
      //        var _rotleft = $(document.createElement('a')).addClass("moveLeft").html(' &laquo; ').show();
      //      }
      _pagelist.append(_rotleft);
      var _currPage = $(document.createElement('span')).addClass("pagedisplayed").html(selectedpage);
      _pagelist.append(_currPage);

      var _ulwrapdiv = $(document.createElement('span'));
      for (var i = 0; i < o.display; i++) {
        var val = i + 1;
        var _selobj;
        if (val <= selectedpage) {
            var _obj = $(document.createElement('a')).addClass("pageselected").html(' &#8226; ');
          _selobj = _obj;
        }
        else {
            var _obj = $(document.createElement('a')).addClass("pageunselected").html(' &#8226; ');
          _selobj = _obj;
        }
        _selobj.attr('id', val);
        _ulwrapdiv.append(_selobj);
      }

      if (o.display != o.count) {
        _ulwrapdiv.append(' ... ');
      }

      _pagelist.append(_ulwrapdiv);
      if (selectedpage == o.count) {
        var _lastPage = $(document.createElement('span')).addClass("last").html(o.count);
      }
      else {
        var _lastPage = $(document.createElement('a')).addClass("last").html(o.count);
      }
      _pagelist.append(_lastPage);

      if (selectedpage == o.count) {
        var _rotright = $(document.createElement('a')).addClass("moveRight").html(' &raquo; ').hide();
      }
      else {
        var _rotright = $(document.createElement('a')).addClass("moveRight").html(' &raquo; ').show();
      }
      _pagelist.append(_rotright);
      //append all:
      $this.addClass('jPaginate').append(_pagelist);
      _rotleft.addClass('disabled');
      
      _rotright.mousedown(function () {
        selectedpage = parseInt(selectedpage) + 1;
        if (selectedpage == o.start) {
            _rotleft.addClass('disabled');
           
        }
        else {
            _rotleft.removeClass('disabled');
        }

        if (selectedpage < o.count) {
            _rotright.removeClass('disabled');
        }
        else {
            _rotright.addClass('disabled');
        }

        if (selectedpage <= o.display) {
            $('a.pageunselected:first', obj).removeClass("pageunselected").addClass("pageselected");
        }
        $('span.pagedisplayed', obj).html(selectedpage);
        o.onChange(selectedpage);
      });


      _rotleft.mousedown(function () {
        selectedpage = parseInt(selectedpage) - 1;
        if (selectedpage == o.start) {
            _rotleft.addClass('disabled');
        }
        else {
            _rotleft.removeClass('disabled');
        }

        if (selectedpage < o.count) {
            _rotright.removeClass('disabled');
        }
        else {
            _rotright.addClass('disabled');
        }

        if (selectedpage < o.display) {
            $('a.pageselected:last', obj).removeClass("pageselected").addClass("pageunselected");
        }
        $('span.pagedisplayed', obj).html(selectedpage);
        o.onChange(selectedpage);
      });

      _lastPage.click(function (e) {
          _rotright.addClass('disabled');
          _rotleft.removeClass('disabled');
        _pagelist.find('a.pageunselected').each(function () {
          $(this).removeClass("pageunselected").addClass("pageselected");
        })
        selectedpage = o.count;
        $('span.pagedisplayed', obj).html(selectedpage);
        o.onChange(o.count);

      });

      _ulwrapdiv.find('a').click(function (e) {
          var selPage = $(this, obj).attr('id');
        if (selPage < selectedpage) {
          for (var i = selectedpage; i > selPage; i--) {
              $('#' + i, obj).removeClass("pageselected").addClass("pageunselected");
          }
        }
        else {
          for (var i = parseInt(selectedpage) + 1; i <= selPage; i++) {
              $('#' + i, obj).removeClass("pageunselected").addClass("pageselected");
          }
        }
        selectedpage = selPage;
        if (selectedpage != o.start) {
            _rotleft.removeClass('disabled');
        }
        else {
            _rotleft.addClass('disabled');
        }

        if (selectedpage != o.count) {
            _rotright.removeClass('disabled');
        }
        else {
            _rotright.addClass('disabled');
        }
        $('span.pagedisplayed', obj).html(selectedpage);
        o.onChange(selectedpage);
      });

    };

})(jQuery);


