(function($){
	
  var settings = {
	onMouseWheel: null,
	onDrag: null,
	onUpButton:null,
	onDownButton:null,
	onNext:null,
	onPrev:null,
	onChange:null,
	
	currentPage:1,
	itemsPerPage:10,
	resultCount:50,
	pageButtons:5,
	totalItems:100,
	enabled:true
  };

  var methods = {
	config: function(options){
		$.extend(settings, options);
	},
	
    init:function(options){
		$(this).each(function() {
			var obj = $(this);
			var data = {};
			
			var str = '<div class="iws-paginate" style="float:left;">									<span class="pagination-page-button pagination-button-active">1</span>			<span class="pagination-page-button">2</span>			<span class="pagination-page-button">3</span>			<span class="pagination-page-button">4</span>				<span class="pagination-page-button">8</span>			<div id="NextPageButton" class="pagination-nav-button pagination-next-button"></div><div id="PrevPageButton" class="pagination-nav-button pagination-previous-button"></div></div>			';


			obj.prepend(str);			
			var cpy = $.extend(true, {}, settings);
			$.extend(cpy,options);
			data.currentPage = cpy.currentPage;
			data.numPages = Math.ceil(cpy.totalItems/cpy.itemsPerPage);
			data.enabled = true;
			
			data.settings = cpy;
			obj.data("data-paginate",data);
			drawPageButtons(data.numPages,data.currentPage,obj,true);
			obj.children(".iws-paginate").data("data-paginate",data);
			$(".pagination-next-button",obj).click(handleNextButton);
			$(".pagination-previous-button",obj).click(handlePrevButton);
			$(".pagination-page-button",obj).click(handlePageButtonClick);
			
			$(".PageInputField",obj).keyup(handlePageInputKey);
		});
	},
	
	enable:function() {
		var container = $(this).children(".iws-paginate")
		var data = container.data("data-paginate");
		data.enabled = true;
		container.data("data-paginate",data);
	},
	disable:function() {
		var container = $(this).children(".iws-paginate")
		var data = container.data("data-paginate");
		data.enabled = false;
		container.data("data-paginate",data);
	},
	update:function(ns){
		var container = $(this).children(".iws-paginate")
		var data = container.data("data-paginate");
		var oldPerPage = data.settings.itemsPerPage;
		var oldItems = data.settings.totalItems;
		var oldCP = data.currentPage;
		
		if(ns.currentPage)
			data.currentPage = parseInt(ns.currentPage);
		if(ns.itemsPerPage) {
			data.currentPage = 1;
			data.settings.itemsPerPage = parseInt(ns.itemsPerPage);
		}
		if(ns.totalItems) {
			data.currentPage = 1;
			data.settings.totalItems = parseInt(ns.totalItems);
		}
		
		data.numPages = Math.ceil(data.settings.totalItems/data.settings.itemsPerPage);
		if(!ns.ignoreRefresh)
			drawPageButtons(data.numPages,data.currentPage,container,true);
	}
  };

  	function resetPage() {
		currentPage = 1;
		navEnabled = false;
	}
	
	function handlePageInputKey(e) {
		if(e.keyCode == 13) {
			if($(this).val() != "" && $(this).val() != undefined) {
				var newPage = $(this).val();
				gotoPage(newPage,$(this).closest(".iws-paginate"));
				$(this).val("");
			}
		}
	}
	
	function gotoPage(n,container) {
		var data = container.data("data-paginate");
		data.currentPage = n;
		drawPageButtons(data.numPages,data.currentPage,container);
	}
	
	function handlePageButtonClick() {

		var container = $(this).closest(".iws-paginate")
		var data = container.data("data-paginate");
		if(!data.enabled)
			return;
			
		var newPage = parseInt($(this).html());
		data.currentPage = newPage;
		drawPageButtons(data.numPages,data.currentPage,container);
		//updateSearchResults();
	}
	
	function handlePrevButton() {
		var container = $(this).closest(".iws-paginate")
		var data = container.data("data-paginate");
		if(!data.enabled)
			return;
			
		container.find(".PageInputField").each(function() {
			if($(this).val() != "" && $(this).val() != undefined) {
				var newPage = $(this).val();
				gotoPage(newPage);
				$(this).val("");
				navEnabled = false;
				return;
			}
		});
		var currentPage = data.currentPage;
		var numPages = data.numPages;
		if(currentPage > 1)
			currentPage--;
		data.currentPage = currentPage;
		
		drawPageButtons(numPages,currentPage,container);
		//updateSearchResults();
		return false;
	}
	
	function handlePerPageChange() {
		resetPage();
	}
	
	function handleNextButton() {
		var container = $(this).closest(".iws-paginate");
		var data = container.data("data-paginate");

		if(!data.enabled)
			return;
			
		container.find(".PageInputField").each(function() {
			if($(this).val() != "" && $(this).val() != undefined) {
				var newPage = $(this).val();
				gotoPage(newPage);
				$(this).val("");
				navEnabled = false;
				return;
			}
		});
		
		var currentPage = data.currentPage;
		var numPages = data.numPages;
		if(currentPage < data.numPages)
			currentPage++;
		data.currentPage = currentPage;
		
		drawPageButtons(numPages,currentPage,container);
		return false;
	}
	
	function drawPageButtons(pages,curPage,container,ignoreChange) {
		var cfg = container.data("data-paginate").settings;
		if(!ignoreChange) {
			if(cfg.onChange) {
				cfg.onChange({page:curPage,pages:pages});
			}
		}
		
		$(".SearchResultsNavContainer",container).css("visibility","visible");
		var startPage = curPage;
		
		if(pages <= 5) {
			$(".PageInput",container).css("display","none");
		}
		else {
			$(".PageInput",container).css("display","inline");
		}
		
		if(curPage > 1)
			$(".pagination-previous-button",container).css("visibility","visible");
		else $(".pagination-previous-button",container).css("visibility","hidden");
		
		if(curPage >= pages) {
			$(".pagination-next-button",container).css("visibility","hidden");
		}
		else $(".pagination-next-button",container).css("visibility","visible");
		
		if(pages-4 <= curPage)
			startPage = pages-4;
		
		if(startPage < 1)
			startPage = 1;
		var drawingPage = startPage;
		
		$(".pagination-page-button",container).each(function() {
			if(drawingPage > pages)
				$(this).css("display","none");
			else $(this).css("display","block");
			
			if(drawingPage == curPage) {
				$(this).addClass("pagination-page-button-active");
			} else $(this).removeClass("pagination-page-button-active");
			
			if($(this).hasClass("pagination-last-button") && pages > curPage-5)
				$(this).html(pages);
			else $(this).html(drawingPage);
			drawingPage++;
		});
		
		/* ADDED 5/25 TO HIDE PAGINATION IF THERES ONLY ONE PAGE */
		if($(".pagination-page-button:visible").length <= 1){
			$(".pagination-page-button").closest(".iws-paginate").hide();
		}
	}

  $.fn.iwsPaginate = function(method){
    if (methods[method]){
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
    } else if (typeof method === 'object' || !method) {
      return methods.init.apply(this, arguments);
    } else {
      $.error('Method ' +  method + ' does not exist on iwsPaginate');
    }    
  };
  
})(jQuery);
