Paginator = function() {
	this.currentNum = 0;
	this.currentCount = 0;
	this.perPage = 5;
	
	this.setup();
};

Paginator.prototype = {
	setup: function() {
		this.elsArr = [];
		
		this.calcCount();
		this.setBtnListeners();
		this.setListeners();
		//this.clearDom();
		//this.setHash(this.currentNum-1);
	},
	
	calcCount: function() {
		this.currentCount = $(".navbar > .rp > span").length/2;
	},
	
	clearDom: function() {
		$(".navbar > .rp > span").remove();
	},
	
	setBtnListeners: function() {
		var parent = this;
		this.elsArr = $(".navbar > div > span").each(function() {
			var domEl = this;
			$(domEl).removeClass("hidden").click(function() {
				var id = domEl.id.split("_")[2];
				parent.setHash(id);
				parent.recheckSelections(id);
			})
		});		
	},
	
	setHash: function(num) {
		//console.log(num);
		this.currentNum = parseInt(num);
		if(location.hash == "" || location.hash.indexOf("#page") != -1) {
			location.hash = "#page"+(parseInt(num)+1);
		} else {
			location.hash = location.hash.split("-page")[0]+"-page"+(parseInt(num)+1);
		}
	},
	
	setListeners: function() {
		var parent = this;
		$("body").bind("paginator-count", function(e, count, prefix, page) {
			parent.rebildPaginator([count, prefix, page]);
		});
		$("body").bind("paginator-recheck", function(e, num) {
			parent.setHash(num);
		});
		$(".navprew").each(function() {
			var domEl = this;
			$(domEl).removeAttr("href");
			$(domEl).removeClass("hidden").click(function() {
				if(parent.currentNum != 0) {
					parent.setHash(parent.currentNum-1);
				}
			});
		});
		$(".navnext").each(function() {
			var domEl = this;
			$(domEl).removeAttr("href");
			$(domEl).removeClass("hidden").click(function() {				
				if(parent.currentNum < parseInt(parent.currentCount)-1) {
					parent.setHash(parent.currentNum+1);
				}
			})
		});
	},
	
	recheckSelections: function(int) {
		this.elsArr.each(function() {
			if(this.id.split("_")[2] == int) {
				$(this).addClass("selected");
			} else {
				$(this).removeClass("selected");
			}
		});
	},
	
	rebildPaginator: function(arr) {
		this.currentCount = arr[0];
		$(".navbar > .rp > span").remove();
		
		var fst = 0;
		var fed = 0;
		
		if(arr[2]-2 > 0) {
			var start = arr[2]-2;
		} else if(arr[2]-1 > 0) {
			var start = arr[2]-1;
			fst = 1;
		} else if(arr[2] > 0) {
			var start = arr[2];
			fst = 2;
		}
		if(arr[2]+2 < parseInt(arr[0])+1) {
			var end = arr[2]+2;
		} else if(arr[2]+1 < parseInt(arr[0])+1) {
			var end = arr[2]+1;
			fed = 1;
		} else if(arr[2] < parseInt(arr[0])+1) {
			var end = arr[2];
			fed = 2;
		}
		
		if(fst == 0 || fed == 0) {
			if(fst != 0 && fed == 0) {
				if(end+fst < parseInt(arr[0])+1) {
					end = end+fst;
				} else if(end+fst-1 < parseInt(arr[0])+1) {
					end = end+fst-1;
				} else if(end+fst-2 < parseInt(arr[0])+1) {
					end = end+fst-2;
				}
			}
			if(fst == 0 && fed != 0) {
				if(start-fed > 0) {
					start = start-fed;
				} else if(start-fed+1 > 0) {
					start = start-fed+1;
				} else if(start-fed+2 > 0) {
					start = start-fed+2;
				}
			}
		}
		
		for(var i=(start-1); i<end; i++) {
			var stringtop = '<span id="'+arr[1]+'Page_0_'+i+'" class="item"><div class="l"><div class="r"><div class="c">'+(i+1)+'</div></div></div></span>'
			var stringbottom = '<span id="'+arr[1]+'Page_1_'+i+'" class="item"><div class="l"><div class="r"><div class="c">'+(i+1)+'</div></div></div></span>'			
			$(".navbar").each(function() {
				if($(this).hasClass("bottom")) {
					$(this.childNodes[1]).append((i == (arr[2]-1)) ? $(stringbottom).addClass("selected") : $(stringbottom));
				} else {
					$(this.childNodes[1]).append((i == (arr[2]-1)) ? $(stringtop).addClass("selected") : $(stringtop));
				}
			});
		}
		this.setHash(arr[2]-1);
		this.setBtnListeners();
	}
};
