$(function() {
	
//////GLOBALS -- every page
	
	//adding / after navigation items
	$('nav#main_nav ul li').not(':last').append('/');
	$('nav#utility_nav li').not(':last').append('/');

	//contacts -- engage dropdown
	$('nav.utility_nav li a:contains("Contact")').addClass('contact_dropdown')
	$('nav.utility_nav a.contact_dropdown').click(function(e) { 
		 e.preventDefault();
		$('#contact_us').slideToggle(500);
	});
	
	//deactivate grid & list anchor links
	$('.post_nav nav a.mode_grid, .post_nav nav a.mode_list, .post_nav #filter_links a').click(function(e) {
		e.preventDefault();
	});
	
	
//contact form
function submit_contact(form) {
	$.ajax({
		url: "/ajax/contact.php",
		type: "POST",
		data: $("#contact").serialize(),
		success: function(data) { 
			$("#contact").html(data); 
		}
	});
	return false;
}
	
//////POST Page
	
	function validate_user_comments(form) {

		//validate form
		var errors = new Array();
		if (form.your_name.value == 'YOUR NAME')	errors[errors.length] = 'your name is required';
		if (form.your_email.value == 'YOUR E-MAIL')	errors[errors.length] = 'your e-mail address is required';
		if (form.comment.value == 'COMMENT')		errors[errors.length] = 'comment is required';
		if (!form_errors(errors)) return false;		
			
		//post comment
		$.ajax({
			url: "/ajax/comments_post.php",
			type: "POST",
			data: $("#" + form.name).serialize(),
			success: function(data) { $("#comments").html(data); }
		});
		
		return false;
	}
	
	
	
//////SLIDESHOW functionality
	
	// inserted UI elements
	if ($("ul.controls li").size() > 2) {
		$('.post_nav').append('<span id="keys_info">Use <span>&lt;</span> / <span>&gt;</span> Keys to advance images</span>');
	}
		
	
	//global variables for slideshows
	var postSlideshowContainer = $('#image_slider_container ul');
	var postSlideshowSlides = $('#image_slider_container ul li');
	
	var fullSlideshowContainer;
	var fullSlideshowSlides;
	var fullSlideshowActivated = false;
	var fullSlideshowWrapperHeight;
	
	
	var navSliderHTML = $('.image_slider_nav').html();
	var navSlideshowContainer = $('.image_slider_nav ul');
	var navSlideshowSlides = $('.image_slider_nav ul li');
	
	
	var slidesOffset;
	var numberOfSlides;
	var slideWidth;
	var currentPosition = 0;
	var selectedPosition = 0;
	
	var miniNavContainer;
	var miniNavImages;
	var miniNavImageWidth;
	var miniNavImageMiddle;
	
	var miniNavSelectedImage;
	var miniNavCurrentImage;
	var shiftMiniNavIncrement = 0;
	
	var shiftIncrementValue = 0;
	var shiftIncrementMax = 0;
	var miniNavContainerTotalShifts;
	var miniNavContainerCurrentShift = 0;
	
	
	//functions for slideshows
	
	/* bind arrow controls for clicking */
	function bindArrowControls(thisSlidesContainer) {
		$(document).ready(function() {
			$('.control').click(function(){
				manageSelectedArrowControls($(this), thisSlidesContainer);
			});
		})
	}
	

	/* insert the main control arrows for slideshow */
	function insertArrowControls(thisArrowContainer, thisSlidesContainer) {
		thisArrowContainer.prepend('<span class="control prev_control">Previous</span><span class="control next_control">Next</span>');
		
		thisArrowContainer.find('span.control').hover(function() { 
			$(this).addClass('control_hover');
		}, function() { 
			$(this).removeClass('control_hover');
		});
		
		// activate control arrows functionality
		bindArrowControls(thisSlidesContainer);
	}
	
	
	/* manage the slideshow arrows visibility */
	function manageArrowControls(position) {	
		if(position == 0) {
			$('.prev_control').css('visibility', 'hidden')
		} else {
			$('.prev_control').css('visibility', 'visible')
		}
		
		if(position == numberOfSlides - slidesOffset) {
			$('.next_control').css('visibility', 'hidden')
		} else {
			$('.next_control').css('visibility', 'visible')
		}
	}
	
	/* manage the selected arrow functionality */
	function manageSelectedArrowControls(thisArrow, thisSlidesContainer) {
		selectedPosition = (thisArrow.hasClass('next_control')) ? selectedPosition+1 : selectedPosition-1;
		manageArrowControls(selectedPosition);
		
		gotoSlide(thisSlidesContainer, selectedPosition);
	}
	
	
	/* initialize the mini nav controls*/
	function setupMiniNavControls(thisPosition) {
		
		miniNavContainer = $('#main_header .nav_selector_rail');
		miniNavImages = $('#main_header .image_slider_nav ul li');
		miniNavImageTotal = miniNavImages.length;
				
		miniNavImageWidth = miniNavImages.width() + 16; // get image width plus all padding
		miniNavImageMiddle = Math.floor(miniNavImageWidth / 2); // get midpoint for image
		
		miniNavContainer.css('width', (miniNavImageWidth * miniNavImageTotal)); // set calculated width for container
		
		// establish total number of times the container needs to move to show images	
		var calculateTotalShifts = miniNavImageTotal - 6;
		calculateTotalShifts = calculateTotalShifts / 6;
		if (calculateTotalShifts <= 0) {
			miniNavContainerTotalShifts = 0;
		} else {
			calculateTotalShifts = Math.floor(calculateTotalShifts);
			miniNavContainerTotalShifts = calculateTotalShifts + 1;
		}	
		
		// behavior on clicking a specific image in mini nav
		miniNavImages.click(function() {
			$(this).siblings().removeClass('selected');
			$(this).addClass('selected');
		})
		
		// behavior on hovering over a specific image in mini nav
		miniNavImages.hover(function() {
			$(this).addClass('img_hover');
			animateMiniNavSelector($(this).index());
		}, function() {
			$(this).removeClass('img_hover');
			animateMiniNavSelector(selectedPosition);
		});
		
		
		// behavior for mini nav arrows
		$('.mini_control').click(function() {
			
			if($(this).hasClass('next_mini_control')) {
				if(miniNavContainerCurrentShift < miniNavContainerTotalShifts) {
					shiftIncrementValue = shiftIncrementValue + 6;
					miniNavContainerCurrentShift++;
					animateMiniNavContainer(shiftIncrementValue);
				}
				manageminiNavArrows();
				
			} else if ($(this).hasClass('prev_mini_control')) {
				if(miniNavContainerCurrentShift > 0) {
					shiftIncrementValue = shiftIncrementValue - 6;
					miniNavContainerCurrentShift--;
					animateMiniNavContainer(shiftIncrementValue);
				}				
				manageminiNavArrows();
			}
		});
		
		manageMiniNavControls(thisPosition);
		
	}

			
	/* manage behaviors for mini nav elements */
	function manageMiniNavControls(thisPosition) {
		indicateSelectedMiniNavImage(thisPosition);
		manageminiNavArrows();
		shiftMiniContainer(thisPosition);
	}
	
	
	/* manage visibility of mini nav arrows */
	function manageminiNavArrows() {
		if(miniNavContainerCurrentShift == 0) {
			$('.prev_mini_control').css('visibility', 'hidden')
		} else {
			$('.prev_mini_control').css('visibility', 'visible')
		}
		
		if(miniNavContainerCurrentShift == miniNavContainerTotalShifts) {
			$('.next_mini_control').css('visibility', 'hidden')
		} else {
			$('.next_mini_control').css('visibility', 'visible')
		}
	}
	
	
	/*highlight the selected mini nav image and insert class attr */
	function indicateSelectedMiniNavImage(thisPosition) {
		miniNavSelectedImage = miniNavImages.get(thisPosition);
		$(miniNavSelectedImage).siblings().removeClass('selected');
		$(miniNavSelectedImage).addClass('selected');
		animateMiniNavSelector(thisPosition);
	}
		
		
	/* move the mini nav selector carrot */	
	function animateMiniNavSelector(thisPosition) { 
		var incrementAmount = 79;
		var miniNavSelectorPosition;
		
		miniNavSelectorPosition = (Math.floor(incrementAmount / 2)) - 4;
		
		if(thisPosition > 0) {
			miniNavSelectorPosition += thisPosition * incrementAmount;
		}
		
		$('.image_slider_nav .selector').stop().animate({ 'left' : miniNavSelectorPosition }, 200);
	}
	
	
	/* move the mini nav container */
	function animateMiniNavContainer(thisIncrement) {
		var distanceIncrement = 79;		
		miniNavContainer.animate({'marginLeft' : (distanceIncrement * -thisIncrement)});
	}
	
	
	/* determine when to move the mini nav container */
	function shiftMiniContainer(thisPosition) {
		shiftIncrementValue = thisPosition / 6;
		shiftIncrementValue = (Math.floor(shiftIncrementValue));
		miniNavContainerCurrentShift = shiftIncrementValue;
		shiftIncrementValue = (Math.floor(shiftIncrementValue) * 6);
		
		animateMiniNavContainer(shiftIncrementValue);
		
		manageminiNavArrows();
	}
	

	/* manage the keyboard arrow controls */
	function manageKeyboardControls(thisContainer) {
		$(document).keydown(function(e){
			if ((e.keyCode == 37) && (selectedPosition > 0)) { 
				selectedPosition--;
				manageArrowControls(selectedPosition);
				gotoSlide(thisContainer, selectedPosition);
				return false;
		    } else if ((e.keyCode == 39) && (selectedPosition != (numberOfSlides - slidesOffset))) { 
				selectedPosition++;
				manageArrowControls(selectedPosition);
				gotoSlide(thisContainer, selectedPosition);
				return false;
			}
		});
	}


	/* set the width of the specified slides container */
	function setContainerWidth(thisContainer, thisContainerSlides, extraPadding) {
		slideWidth = thisContainerSlides.width();
		numberOfSlides = thisContainerSlides.length;
		
		if(extraPadding) {
			slideWidth += extraPadding;
		}
		
		thisContainer.css('width', (slideWidth * numberOfSlides));
	}
	
	
	/* activate post page slideshow */
	function postSlideshowActivation() {
		slidesOffset = 2;
		if(postSlideshowSlides.length > 2) {
			insertArrowControls($('#image_slider_wrap'), postSlideshowContainer);
			manageArrowControls(currentPosition);
			manageKeyboardControls(postSlideshowContainer);
		}
		setContainerWidth(postSlideshowContainer, postSlideshowSlides, 28);		
	}
	
	
	/* activate full page slideshow */
	function fullSlideshowActivation() {
		if (fullSlideshowActivated == false) {
			fullSlideshowActivated = true;
			
			$('header#main_header, div#content').wrapAll('<div id="slideshow_wrapper"></div>');
			fullSlideshowWrapperHeight = $('#slideshow_wrapper').height();
		
			$('#slideshow_wrapper').append('<div class="slideshow_container"></div>');
			
			
			fullSlideshowTransition(856, 1000, 1000, 300, false);
		}
	}
	
	/* add thumnail images for mini nav in full slideshow */
	function addfullSlideshowThumbs() {
		var thumbnailSlideshow = $('header#main_header div.wrapper').html();
		
		$('header#main_header div.wrapper').html('');
		
		thumbnailSlideshow += '<nav class="image_slider_nav">';
		thumbnailSlideshow += '<span class="mini_control prev_mini_control">Previous</span><span class="mini_control next_mini_control">Next</span><div class="nav_wrap"><div class="nav_selector_rail"><span class="selector"></span>';
		thumbnailSlideshow += navSliderHTML;
		thumbnailSlideshow += '</div></div></nav>';
		
		$('header#main_header div.wrapper').html(innerShiv(thumbnailSlideshow));
	};	
	
	
	/* add the post nav for full slideshow */
	function addPostNav() {
		$('header#main_header div.wrapper').append('<div class="post_nav"><span class="links"><a href="#" class="close_slideshow">Close</a></span><span id="keys_info">Use <span>&lt;</span> / <span>&gt;</span> Keys to advance images</span></div>');
	};
	
	
	/* transition to full slideshow */
	function fullSlideshowTransition(newHeight, closeSpeed, openSpeed, pause, deactivate) {
		//$(document).ready(function() {
		$('#slideshow_wrapper').css('overflow', 'hidden');

		$('#slideshow_wrapper').animate({
			'height' : 0
			}, closeSpeed, function(){
				if (deactivate == false) {
					$('body').addClass('slideshow');
					$('.control').unbind('click');
					$(document).unbind('keydown');
					addfullSlideshowThumbs();
					addPostNav();
					grabfullSlideshowImages();
					slidesOffset = 1;
					manageArrowControls(selectedPosition); 
					
					$(this).delay(pause).animate({
						'height' : newHeight
					}, openSpeed)
				} else {
					
					$('body').removeClass('slideshow');
					$('header#main_header .image_slider_nav, header#main_header .post_nav').remove();
					$('.slideshow_container').html('');
					$('.control').unbind('click');
					$(document).unbind('keydown');
					setContainerWidth(postSlideshowContainer, postSlideshowSlides, 28); // reset vars for post slideshow
					slidesOffset = 2;
					bindArrowControls(postSlideshowContainer);
					manageKeyboardControls(postSlideshowContainer);
					jumptoSlide(postSlideshowContainer, selectedPosition);
					
					$(this).delay(pause).animate({
						'height' : newHeight
					}, openSpeed, function(){
						$('.slideshow_container').remove();
						$('header#main_header, div#content').unwrap('div#slideshow_wrapper');
					})
				}
		});
		//});
	};
	
	
	/* grab the full slideshow images from the post slideshow*/
	function grabfullSlideshowImages() {
		var largeSlideshow = '<ul>';
		
		postSlideshowSlides.each(function(index) {
			var imgURL = $(this).find("img").attr("src");
			var imgURLNew = imgURL.replace("_regular", '');
			
			largeSlideshow += '<li><img alt="" height="640" src="' + imgURLNew + '" width="960" /></li>'; 
		});
		
		largeSlideshow += '</ul>';
		
		$('.slideshow_container').append(largeSlideshow);
		
		$(document).ready(function() {
			fullSlideshowContainer = $('.slideshow_container ul');
			fullSlideshowSlides = $('.slideshow_container ul li');
					
			setContainerWidth(fullSlideshowContainer, fullSlideshowSlides, 0);
			
			insertArrowControls($('body.slideshow .slideshow_container'), fullSlideshowContainer);
			manageKeyboardControls(fullSlideshowContainer);
			setupMiniNavControls(selectedPosition);
			
			jumptoSlide(fullSlideshowContainer, selectedPosition);
		});		
	};
	
	
	/* amimate the slideshow */
	function gotoSlide(thisContainer, thisPosition) {
		thisContainer.animate({ 'marginLeft' : slideWidth*(-thisPosition) });
		selectedPosition = thisPosition;
		
		if($('body').hasClass('slideshow')) {
			manageMiniNavControls(selectedPosition);
			//manageMiniNavContainerMovement(selectedPosition);
		}
	}
	
	
	/* jump to a specific slide in the slideshow */
	function jumptoSlide(thisContainer, thisPosition) {
		if(thisPosition > (numberOfSlides - slidesOffset)) {
			thisPosition--;
		}
		thisContainer.css({ 'marginLeft' : slideWidth*(-thisPosition) });
	}
	
	
	/*initiate activation of full slideshow*/
	$('a.slideshow_view').click(function(e) { 
		e.preventDefault();
		fullSlideshowActivation();
	});
	
	
	/*close the full slideshow*/
	$('a.close_slideshow').live('click', function() {
		if (fullSlideshowActivated == true) {
			fullSlideshowTransition(fullSlideshowWrapperHeight, 1000, 1000, 300, true);	
			fullSlideshowActivated = false;

		}
	});
	
	
	/* Grab the index value of the selected mini image */  
	$('.image_slider_nav li').live('click', function(e) {
		e.preventDefault();
		selectedPosition = $(this).index(); 
			
		if(selectedPosition > (numberOfSlides - slidesOffset)) {
			selectedPosition--;
		}
		
		manageArrowControls(selectedPosition);
		
		if($('body').hasClass('slideshow')) {
			gotoSlide(fullSlideshowContainer, selectedPosition);
		} else {
			gotoSlide(postSlideshowContainer, selectedPosition);
		}
	});

	//Activate all slideshow functionality
	postSlideshowActivation();


});
	
	
	
































