$(document).ready( function () {
	var viewOnline = $(".viewShow"), overlay = $(".overlay"), oScreen = $(".oScreen"), oContent = $(".oContent"), win = $(window), doc = $(document), wrapper = $("#wrapper"), resize, initSlides, slides = $(".slide"), slideTimings = new Array(), currentSlide = 0, slidePrev = $(".slideControls .slidePrev"), slideNext = $(".slideControls .slideNext"), slideClose = $(".slideControls .slideClose"), checkButtons, resetButtons, disableButtons, goPrev, goNext;
	
	// these can be used for explicit overrides for when a fade-in should start
	slideTimings[0] = new Array();
	slideTimings[0][0] = 0;
	slideTimings[0][1] = 1000;
	slideTimings[0][2] = 1500;
	slideTimings[0][3] = 2000;
	slideTimings[0][4] = 2500;
	slideTimings[0][5] = 3000;
	slideTimings[0][6] = 3200;
	slideTimings[0][7] = 3600;
	slideTimings[0][8] = 4000;
	slideTimings[0][9] = 4400;
	slideTimings[0][10] = 4800;
	slideTimings[0][11] = 6000;
	slideTimings[0][12] = 7500;
	slideTimings[0][13] = 7500;
	
	// resize overlay screen function
	resize = function () { oScreen.width( doc.width() ); oScreen.height( doc.height() ); };
	
	// initialization of slide show
	initSlides = function () {
		$( slides.get(0) ).trigger("runSlide");
	};
	
	// show overlay show
	viewOnline.click( function () {
		resize.call();
		$( slides.get(0) ).show();
		overlay.fadeIn("slow", initSlides);
		return false;
	});
	
	// enable close button
	slideClose.click( function () { overlay.fadeOut(); return false; });
	
	// turn off overlay
	oScreen.click( function () { overlay.fadeOut(); return false; });
	
	// keep screen matched to full window size
	win.resize( resize );
	
	// match overlay to column height
	oContent.height( "741px" );
	
	// set up slides and layers
	slides.each( function (index) {
		var slide = $(this), hasInited = false, parts = slide.children(".slidePart");
		
		// initialize slide parts to hide
		parts.hide();
		
		// slide run animation behavior
		slide.bind( "runSlide", function () {
			var partCount = 0, fadePart, pCtr;
			
			fadePart = function () {
				var part, targetWidth, targetHeight;
				
				if ( partCount < parts.length )
				{
					part = $( parts.get(partCount) );
					
					part.show();
					targetWidth = part.width();
					targetHeight = part.height();
					part.width( 1.25 * targetWidth );
					part.height( 1.25 * targetHeight );
					part.css( { "margin-left": ( -1 * (part.width() - targetWidth)/2 ) + "px", "margin-top": ( -1 * (part.height() - targetHeight)/2 ) + "px", "opacity": 0 } );
					part.animate( { "margin-left": 0, "margin-top": 0, "width": targetWidth + "px", "height": targetHeight + "px", "opacity": 1 }, "slow" );
					
					//part.fadeIn( "slow" );
					partCount += 1;
				}
			};
			
			if (!hasInited)
			{
				for ( pCtr = 0; pCtr < parts.length; pCtr++)
				{
					setTimeout( fadePart, slideTimings[index][pCtr] );
					//setTimeout( fadePart, pCtr * 150 );
				}
				hasInited = true;
			}
		});
		
	});
	
	// set up between-slide navigation
	resetButtons = function () {
		slidePrev.addClass("off");
		slideNext.addClass("off");
		slidePrev.unbind("click");
		slideNext.unbind("click");
	};
	
	disableButtons = function () {
		resetButtons.call();
		slidePrev.click( function () { return false; } );
		slideNext.click( function () { return false; } );
	};
	
	checkButtons = function () {
	
		resetButtons.call();
		
		// not at the first slide, enable the previous button
		if ( currentSlide !== 0 )
		{
			slidePrev.removeClass("off");
			slidePrev.click( goPrev );
		}
		else { slidePrev.click( function () { return false; } ); }
		
		// not at the last slide, enable the next button
		if ( currentSlide < slides.length - 1 )
		{
			slideNext.removeClass("off");
			slideNext.click( goNext );
		}
		else { slideNext.click( function () { return false; } ); }
	};
	
	goPrev = function () {
		var currSlide = $( slides.get(currentSlide) ), prevSlide = $( slides.get(currentSlide-1) );
		disableButtons.call();
		slides.hide();
		currSlide.show(); prevSlide.show();
		currSlide.css( { "z-index": 35 } );
		prevSlide.css( { "z-index": 30, "left": 0 } );
		currSlide.animate( {"left": oContent.width() + "px"}, { "duration":"slow", "complete": function () { currentSlide -= 1; checkButtons.call(); } } );
		return false;
	};
	
	goNext = function () {
		var currSlide = $( slides.get(currentSlide) ), nextSlide = $( slides.get(currentSlide+1) );
		disableButtons.call();
		slides.hide();
		currSlide.show(); nextSlide.show();
		currSlide.css( { "z-index": 30 } );
		nextSlide.css( { "z-index": 35, "left": oContent.width() + "px" } );
		nextSlide.animate( {"left": 0}, { "duration":"slow", "complete":function () { currentSlide += 1; checkButtons.call(); nextSlide.trigger("runSlide"); } } );
		return false;
	};
	
	checkButtons.call();
	
	
});
