(function($){
	$(function(){
		$("div.pagination a").click(function() { return false; });
		$("div.pagination.prev a").addClass("jcarousel-prev");
		$("div.pagination.next a").addClass("jcarousel-next");
		var $thumbs =$("div#thumbnail ul").css("position", "absolute").find("li");
		var thumbHeight = $thumbs.find("img").height();
	
		$("div#shuffle").jcarousel({
			auto: 7,
			animation: 500,
			eading: "easeOutQuart",
			scroll: 1,
			wrap: "circular",
			initCallback: initHandler,
			itemVisibleInCallback: { onBeforeAnimation: itemVisibleInHandler },
			itemVisibleOutCallback: { onAfterAnimation: itemVisibleOutHandler },
			itemLastInCallback: { onAfterAnimation: itemLastInHandler }
		}).addClass("js_enabled").css("width", "");
		
		function initHandler(carousel, state) {
			bindHover($thumbs, carousel);
		}
		
		function bindHover($obj, carousel) {
			$obj.hover(
				function() {
					$("table.project_txt", $(this)).animate({ top:0 }, 300, "easeOutQuart");
					carousel.stopAuto();
				},
				function() {
					$("table.project_txt", $(this)).animate({ top:thumbHeight }, 700, "easeOutBounce");
					carousel.startAuto();
				}
			).find("table.project_txt").css("top", thumbHeight);
		}
		
		function itemVisibleInHandler(carousel, item, i, state) {
			var $lis = $("li", carousel.list);
			var filterExp = (state == "next")? ":first":
			                         (state == "prev")? ":last": "";
			if(carousel.get(i).html() == "" && filterExp) {
				carousel.add(i, $lis.filter(filterExp).html());
				bindHover(carousel.get(i), carousel);
			}
		};
		
		function itemVisibleOutHandler(carousel, item, i, state) {
			var $lis = $("li", carousel.list);
			var filterExp = (state == "next")? ":first":
			                         (state == "prev")? ":last": "";
			if($lis.size() > $thumbs.size() && filterExp) {
				carousel.remove($lis.filter(filterExp).attr("jcarouselindex"));
			}
		};
		
		function itemLastInHandler(carousel, item, i, state) {
			carousel.startAuto();
		};
	});
})(jQuery);