(function($) {

$.extend($.fn, {
	pagination: function( elements, options ) {
		if((!this.length)||(!elements.length)) return false;

                if($("#selectItemGallery").length != 0)
                {
                    for(var i=5; i<elements.length; i++)
                    {
                      if($(elements[i]).attr('id')=='selectItemGallery')
                      {
                          options.currentPage = parseInt(i/5);
                          break;
                      }
                    }
                }

		var paginator = $.data(this[0], 'paginator');
		if ( paginator ) {
			paginator.init();
			return paginator;
		}
		paginator = new $.paginator( options, elements );
		$.data(this[0], 'paginator', paginator);
		return paginator;
	}
});
$.paginator = function(options, elements){
	this.settings = $.extend( {}, $.paginator.settings, options );
	this.items = elements;
	this.init();
}

$.extend($.paginator, {
	settings : {
		perpage: 6,
		pager : null,
		nextElement : null,
		prevElement : null,
		showcounter : true,
		prev : "qp_next",
		next : "qp_prev",
		pagerContainer : null,
                currentPage: 0,
		pagenumber : "qp_pagenumber",
		totalnumber : "qp_totalnumber",
		counter : "qp_counter",
		cm : null,
		total: null,
		last: false,
		first: true,
		nextbut: null,
		prevbut: null,
		parentElement: null
	},
	prototype : {
	    hideLinks:function(options) {
	        if (options.hiddenClass) {
		        if (options.showParent) {
				    options.prevElement.addClass(options.hiddenClass);
				    options.nextElement.addClass(options.hiddenClass);
			    } else {
				    options.prevElement.parent().addClass(options.hiddenClass);
				    options.nextElement.parent().addClass(options.hiddenClass);
			    }
		    } else {
			    if (options.showParent) {
				    options.prevElement.hide();
				    options.nextElement.hide();
			    } else {
				    options.prevElement.parent().hide();
				    options.nextElement.parent().hide();
			    }
			}
	    },
		init: function() {
			this.items.show();
			this.settings.total = this.items.size();
			if ( this.items.size() > this.settings.perpage )
			{
                                    this.items.filter(":gt("+(this.settings.perpage-1)+")").hide();
                                    this.settings.cm = this.settings.perpage;
                                    this.setNav();
                                    if (this.settings.pagerContainer){
                                            this.settings.pagerContainer.show();
                                            this.settings.nextElement.parent().show();
                                    } else {
                                            this.settings.prevElement.parent().show();
                                    }
                                    if(this.settings.currentPage>0)
                                    {
                                        this.setPage(this.settings.nextElement, this.settings.currentPage);
                                    }
			} else {
			    this.hideLinks(this.settings);
			}
		},
		setNav:function () {
			if (this.settings.nextElement && this.settings.prevElement) {
				var nextbut = this.settings.nextElement;
				var prevbut = this.settings.prevElement;
			} else {
				if ( this.settings.pager === null )
				{
					this.settings.pager = jQuery('<div class="qc_pager"></div>');
					this.items.eq( this.items.size() -1 ).after(this.settings.pager);
				}

				var pagerNav = $('<a class="' + this.settings.prev + '" href="#">&laquo; Prev</a><a class="' + this.settings.next + '" href="#">Next &raquo;</a>');
				jQuery(this.settings.pager).append( pagerNav );
				if ( this.settings.showcounter )
				{
					var counter = '<span class="'+settings.counter+'"><span class="'+settings.pagenumber+'"></span> / <span class="'+settings.totalnumber+'"></span></span>';

					this.settings.pager.find("."+this.settings.prev).after( counter );

					this.settings.pager.find("."+this.settings.pagenumber).text( 1 );
					this.settings.pager.find("."+this.settings.totalnumber).text( Math.ceil(this.settings.total / this.settings.perpage) );
				}

				nextbut = this.settings.pager.find("."+this.settings.next);

				prevbut = this.settings.pager.find("."+this.settings.prev);
			}
			prevbut.addClass("hidden");

			nextbut.bind('click',this.goNext);
			prevbut.bind('click',this.goPrev);
			$.data(nextbut[0], 'paginatorLink', this);
			$.data(prevbut[0], 'paginatorLink', this);
			for (var i in nextbut.get()){
				$.data(nextbut[i],'paginatorLink', this)
			}
			for (var i in prevbut.get()){
				$.data(prevbut[i],'paginatorLink', this)
			}
		},
		setPage : function(elm, page){
                        var element = $(elm);
                        var paginator = $.data(element[0], 'paginatorLink');

                        for(var i=0; i<page; i++)
                        {
                            if(!this.last){
                                    var nm = paginator.settings.cm + paginator.settings.perpage;
                                    paginator.items.hide();
                                    paginator.items.slice(paginator.settings.cm, nm).show();
                                    paginator.settings.cm=nm;
                                    if(paginator.settings.cm>=paginator.settings.total){
                                            paginator.last = true;
                                            paginator.settings.nextElement.addClass('hidden');
                                    }
                                    if (paginator.settings.markFirst) {
                                            paginator.items.removeClass(paginator.settings.markFirst);
                                            paginator.items.filter(':visible:first').addClass(paginator.settings.markFirst)
                                    }
                                    if (paginator.settings.markLast) {
                                            paginator.items.removeClass(paginator.settings.markLast);
                                            paginator.items.filter(':visible:last').addClass(paginator.settings.markLast)
                                    }
                                    if(paginator.settings.showcounter) paginator.settings.pager.find('.'+paginator.settings.pagenumber.text(paginator.settings.cm/paginator.settings.perpage))
                                    paginator.settings.prevElement.removeClass("hidden");
                                    paginator.first = false;
                            }
                        }
			return false;
		},
		goNext : function(){
                        var element = $(this);
			var paginator = $.data(element[0], 'paginatorLink');
			if(!this.last){
				var nm = paginator.settings.cm + paginator.settings.perpage;
				paginator.items.hide();
				paginator.items.slice(paginator.settings.cm, nm).show();
				paginator.settings.cm=nm;
				if(paginator.settings.cm>=paginator.settings.total){
					paginator.last = true;
					paginator.settings.nextElement.addClass('hidden');
				}
				if (paginator.settings.markFirst) {
					paginator.items.removeClass(paginator.settings.markFirst);
					paginator.items.filter(':visible:first').addClass(paginator.settings.markFirst)
				}
				if (paginator.settings.markLast) {
					paginator.items.removeClass(paginator.settings.markLast);
					paginator.items.filter(':visible:last').addClass(paginator.settings.markLast)
				}
				if(paginator.settings.showcounter) paginator.settings.pager.find('.'+paginator.settings.pagenumber.text(paginator.settings.cm/paginator.settings.perpage))
				paginator.settings.prevElement.removeClass("hidden");
				paginator.first = false;
			}
			return false;
		},
		goPrev: function(){
			var element = $(this);
			var paginator = $.data(element[0], 'paginatorLink');
			if(!this.first){
				var nm = paginator.settings.cm-paginator.settings.perpage;
				paginator.items.hide();
				paginator.items.slice( (nm - paginator.settings.perpage), nm ).show();
				paginator.settings.cm = nm;
				if ( paginator.settings.cm == paginator.settings.perpage  ){
					paginator.settings.first = true;
					paginator.settings.prevElement.addClass("hidden");
				}
				if (paginator.settings.markFirst) {
					paginator.items.removeClass(paginator.settings.markFirst);
					paginator.items.filter(':visible:first').addClass(paginator.settings.markFirst)
				}
				if (paginator.settings.markLast) {
					paginator.items.removeClass(paginator.settings.markLast);
					paginator.items.filter(':visible:last').addClass(paginator.settings.markLast)
				}
				if ( paginator.settings.showcounter ) paginator.settings.pager.find("."+paginator.settings.pagenumber).text(paginator.settings.cm/paginator.settings.perpage);
				paginator.settings.nextElement.removeClass("hidden");
				paginator.settings.last = false;
			}
			return false;
		}
	}
})

})(jQuery);
