var PhotoAnimation = (function() {
	var isSetup = false, galleries, context, selectedIndex, imageWrapper, currentImgUrl, imageNavContext, nav;
	
	function setup() {
		if (!isSetup) {
			galleries = $('.thumbs');	
			imageWrapper = $('#imageTarget');
			nav = $('#imageNav');
			
			galleries.each(function() {
				var elem = $(this);
				
				elem
					.find('.subnav')
						.find('.draw')
							.click(function() {
								showDrawings(elem);
								return false;
							})
						.end()
						.find('.paint')
							.click(function() {
								showPaintings(elem);
								return false;
							})	
						.end()
					.end()	
					.find('li img').click(function() {
						setBigImage($(this));
					});							
			});
			
			imageWrapper.find('img').live('click', loadNext);
			
			$('.image_back').click(loadPrev);
			
			$('.image_next').click(loadNext);			
					
			isSetup = true;
		}

		return isSetup;
	}
	
	function loadPrev() {
		setBigImage(imageNavContext.eq(backIndex()));
	}
	
	function loadNext() {
		setBigImage(imageNavContext.eq(nextIndex()));
	}
	
	function backIndex() {
		if (selectedIndex - 1 < 0) {
			selectedIndex = imageNavContext.length - 1;
		} else {
			selectedIndex--;
		}
		
		return selectedIndex;
	}
	
	function nextIndex() {
		if (selectedIndex + 1 >= imageNavContext.length) {
			selectedIndex = 0;
		} else {
			selectedIndex++;
		}
		
		return selectedIndex;		
	}
	
	function getBigUrl(source) {
		return source.replace('_th', '').replace('thumbs', 'large');
	}
	
	function setBigImage(image) {
		var imgUrl = getBigUrl(image.attr('src'));
		
		if (imgUrl !== currentImgUrl) {
			
			imageWrapper.hide().html('<img src="' + imgUrl + '" />').fadeIn();	
			currentImgUrl = imgUrl;
			selectedIndex = imageNavContext.index(image.get(0));
			
			setNavContext();
		}
	}
	
	function showDrawings(gallery) {
		imageNavContext = gallery.find('.drawings').find('img');		
		gallery
			.find('.paint').removeClass('paintOn').end()
			.find('.paint_star').hide().end()
			.find('.paintings').hide().end()
			.find('.draw').addClass('drawOn').end()
			.find('.draw_star').show().end()
			.find('.drawings').show()
				.find('li img').eq(0).click();
					
		toggleNavigation();	
	}
	
	function showPaintings(gallery) {
		imageNavContext = gallery.find('.paintings').find('img');		
		gallery
			.find('.draw').removeClass('drawOn').end()
			.find('.draw_star').hide().end()
			.find('.drawings').hide().end()
			.find('.paint').addClass('paintOn').end()
			.find('.paint_star').show().end()
			.find('.paintings').show()
				.find('li img').eq(0).click();
		
		toggleNavigation();		
	}
	
	function toggleNavigation(gallery) {
		if (imageNavContext.length) {
			nav.show();
		} else {
			nav.hide();
		}
	}
	
	function setNavContext() {
		nav.find('.image_next').css('visibility', selectedIndex >= imageNavContext.length - 1 ? 'hidden' : 'visible');
		nav.find('.image_back').css('visibility', selectedIndex === 0  ? 'hidden' : 'visible');
	}
	
	function loadThumbs(index) {
		if (setup()) {
			galleries.hide();
			galleries.eq(index).each(function() {
				context = $(this);
				
				context.fadeIn('slow');
							
				if (context.find('.drawings').length) {
					showDrawings(context);	
				} else {
					context.find('li img').eq(0).click();
					imageNavContext = context.find('img');
					toggleNavigation();
				}	
										
			});
		}
	}
	
	var self = {};
	self.loadThumbs = loadThumbs;
	
	return self;
})();