var pageSize = 9,
	curPage = 1,
	squares,
	origSquares,
	numOfPages;

function Pager(PageSize) {
	this.Counter = squares.length;
	this.Pages = Math.ceil(this.Counter / PageSize);
	numOfPages = this.Pages;
}

Pager.prototype.CreatePageNumbers = function() {
	var ret = "<ul id=\"pagingNumbers\">";

	ret += "<li id=\"prev-button\" class=\"pager prev\"><a href=\"#\" alt=\"Prev\">&lt;</a></li>"

	for(var i = 1; i <= this.Pages; i++) {

		ret += "<li><a href=\"#\" alt=\"" + i + "\">" + i + "</a></li>";
	}

	ret += "<li id=\"next-button\" class=\"pager next\"><a href=\"#\" alt=\"Next\">&gt;</a></li>"

	ret += "</ul>";
	
	return ret;
}

function SetActivePager() {
	$("ul#pagingNumbers li").removeClass("current");
	$("ul#pagingNumbers li").eq(curPage).addClass("current");
}

$(document).ready(function() {
	$("#filter").show();

	$("li.disabled a").live("click", function(e) {
		return false;
	});

	$("div.paging a").live("click", function() {
		var page = $(this).attr("alt");



		if (isNaN(page)) {
			if (page == "Prev") {
				if (curPage == 1) {return false; } //safari/chrome
				--curPage;
			}
			else if (page == "Next") {
				if (curPage == numOfPages) { return false; } //safari/chrome
				curPage++;
			}
		}
		else {
			curPage = parseInt(page);
		}
		var pagingControls = $("div.paging ul");
		if (curPage == 1) {
			$("li:first", pagingControls).addClass("disabled");
		}
		else {
			$("li:first", pagingControls).removeClass("disabled");
		}

		if (numOfPages == curPage) {
			$("li:last", pagingControls).addClass("disabled");
		}
		else {
			$("li:last", pagingControls).removeClass("disabled");
		}
		var offset = (curPage - 1) * pageSize,
			grabSize = curPage * pageSize;

		squares.hide().addClass('hidden');
		squares.slice(offset, curPage * pageSize).addClass("loading");

		SetupRows();
		squares.slice(offset, curPage * pageSize).fadeIn('slow').removeClass('hidden');
		SetActivePager();
		return false;
	});

	$("select#filter").change(function() {
		curPage = 1;
		if (origSquares) {
			squares.parent().html(origSquares);
			squares = $('ul#portfolio-squares li');
			origSquares = null;
		}
		var filterVal = $(this).val();

		if(filterVal == 'all') {
			squares.hide().addClass("hidden");
			HookupPager();
		}
		else if (filterVal == 'most-recent') {
			squares.hide().addClass("hidden");
			SortHandler();
			HookupPager();
		}
		else {
			$("div.paging").empty();
			squares.each(function() {
				if(!$(this).hasClass(filterVal)) {
					$(this).hide().addClass('hidden');
				} else {
					$(this).addClass("loading");
					$(this).fadeIn('slow').removeClass('hidden');
				}
			});
			SetupRows();
		}

		return false;		
	});

	Initialize();

});

function Initialize() {
	squares = $('ul#portfolio-squares li');

	squares.hide();
	ClassResetter();
	squares.addClass("hidden");

	$("div.paging").show();
	HookupPager();
	//SetupRows();
}

function HookupPager() {
	$("div.paging").html(new Pager(pageSize).CreatePageNumbers());
	SetActivePager();
	$("#pagingNumbers li a").eq(1).click();
}

function ClassResetter() {
	squares.each(function() {
		var classes = $(this).attr("class").split(",");
		for(var i = 0; i < classes.length; i++) {
			classes[i] = classes[i].replace(/-\/-/g , "-");
			classes[i] = classes[i].replace(/ /g , "-");
			classes[i] = classes[i].toLowerCase();
		}
		$(this).attr("class", classes.join(" "));
	});
}

function SetupRows() {

	var loadingSquares = squares.filter(".loading");
	for(var i = 1; i <= loadingSquares.length; i++) {
		loadingSquares.eq(i -1).attr("id", "row-" + i);
	}
	squares.removeClass("loading");
}

function SortHandler() {
	origSquares = squares.parent().html();
	squares.tsort({attr: "title", order: "desc"});

}