$(function(){
	$(document).bind('reveal.facebox', function() {
		var curPos;
		var width;
		var newPos;
		var ready = true;
		var curSlide = 1;
		var clickSlide = 1;
		var category = "All";
		
		var slideshowWidth;
		var slideIncrement;
		var limitPos;
		
		setSlideshowData();
		
		$(".catLink").click(function(){
			category = $(this).attr("title");
			
			$(".catLink").removeClass("active");
			$(".catLink[title="+category+"]").addClass("active");
			
			if(category != "All"){				
				$("#thumbnails .thumb[title="+category+"]").css("display","block");
				$("#thumbnails .thumb[title!="+category+"]").css("display","none");
				
				$("#slideContainer .slide[title="+category+"]").css("display","block");
				$("#slideContainer .slide[title!="+category+"]").css("display","none");
				
				setSlideshowData();
				doSlide(0);
			} else {
				$("#thumbnails .thumb").css("display","block");
				
				$("#slideContainer .slide").css("display","block");
				
				setSlideshowData();
				doSlide(0);
			}
			
			return false;
		});
		
		function setSlideshowData(){
			if(category != "All"){
				slideshowWidth = ($("#slideContainer .slide[title="+category+"]").width() * $("#slideContainer .slide[title="+category+"]").length);
				$("#slideContainer").width(slideshowWidth);
				
				slideIncrement = $("#slideContainer .slide[title="+category+"]").width();
				limitPos = -(slideshowWidth - $("#slideContainer .slide[title="+category+"]").width());
			} else {
				slideshowWidth = ($("#slideContainer .slide").width() * $("#slideContainer .slide").length);
				$("#slideContainer").width(slideshowWidth);
				
				slideIncrement = $("#slideContainer .slide").width();
				limitPos = -(slideshowWidth - $("#slideContainer .slide").width());
			}
		}
		
		setOpacity(1,1);
		changeDesc(clickSlide);
		
		var containerPos = $("#viewport").offset().left;
		
		$(".button.right").click(function(){
			if(ready){
				ready = false;
				
				curPos = ($("#slideContainer").offset().left - containerPos);
				newPos = curPos - slideIncrement;				
				
				curSlide = parseInt(-(newPos) / slideIncrement + 1);
				clickSlide = curSlide;
				
				if(newPos >= limitPos){
					doSlide(newPos);
				} else {
					ready = true;
				}
			}
			return false;
		});
		
		$(".button.left").click(function(){
			if(ready){
				ready = false;
				
				curPos = ($("#slideContainer").offset().left - containerPos);
				newPos = curPos + slideIncrement;
				
				if(newPos < slideIncrement - 1){
					doSlide(newPos);
				} else {
					ready = true;	
				}
			}
			return false;
		});

		$(".thumb").click(function(){
			if(category != "All"){
				curSlide = ($(this).prevAll("[title="+category+"]").length);
			} else {
				curSlide = ($(this).prevAll().length);
			}
			newPos = -(slideIncrement * curSlide);
			clickSlide = curSlide + 1;
			doSlide(newPos);
			
			changeDesc(clickSlide);
			
			resetOpacity();					
			setOpacity(curSlide+1, 1);
			
			return false;
		});
		
		$(".thumb").mouseover(function(){
			if(category != "All"){
				curSlide = ($(this).prevAll("[title="+category+"]").length);
			} else {
				curSlide = ($(this).prevAll().length);
			}
			setOpacity(curSlide+1, 1);
		});
		
		$(".thumb").mouseout(function(){
			if(category != "All"){
				curSlide = ($(this).prevAll("[title="+category+"]").length);
			} else {
				curSlide = ($(this).prevAll().length);
			}
			if((curSlide+1) != clickSlide){
				setOpacity(curSlide+1, .5);
			}
		});
		
		function doSlide(pos){
			$("#slideContainer").animate({left: pos+'px'},"slow",null,function(){ checkPos() });
		};
		
		function checkPos(){
			curPos = ($("#slideContainer").offset().left - containerPos);
			
			if((curPos*-(1)) % slideIncrement != 0){
				if((parseInt((curPos*-(1)) / slideIncrement)) != 0){
					newPos = -(parseInt((curPos*-(1)) / slideIncrement) * slideIncrement) - slideIncrement;
			   	} else if(curPos*-(1) < 1){
				   newPos = 0;
			   	} else {
					newPos = -(slideIncrement);
				}
				
				if (newPos >= limitPos){
					$("#slideContainer").animate({left: newPos+'px'},"slow",null,function(){ ready = true });
					changeThumb(newPos);
				} else {
					changeThumb(curPos);
					ready = true;
				}
			} else {
				changeThumb(curPos);
				ready = true;
			}
		};
		
		function changeThumb(pos){
			curSlide = parseInt(-(pos) / slideIncrement + 1);
			
			changeDesc(curSlide);
					
			resetOpacity();					
			setOpacity(curSlide, 1);
		};
		
		function resetOpacity(){
			$(".thumb").css("-moz-opacity", .5);
			$(".thumb").css("opacity", .5);
			$(".thumb").css("filter","alpha(opacity=50)");
		};
		
		function setOpacity(slide,opacity){
			var alpha = opacity * 100;
			if(category != "All"){
				var theThumb = ($(".thumb[title="+category+"]").filter(function(index){ return index == slide-1; }));
			} else {
				var theThumb = ($(".thumb:nth-child("+slide+")"))
			}
			theThumb.css("-moz-opacity", opacity);
			theThumb.css("opacity", opacity);
			theThumb.css("filter","alpha(opacity="+alpha+")");
		};
		
		function changeDesc(slide){
			if(category != "All"){
				var desc = ($(".slide[title="+category+"] img").filter(function(index){ return index == slide-1; }).attr("alt"));
			} else {
				var desc = $(".slide:nth-child("+(slide)+") img").attr("alt");
			}
			$(".description p").html(desc);
		};
	});
});
