jQuery.noConflict();
// Put all your code in your document ready area
jQuery(document).ready(function($){
	
	var fadeoutTime = 2500;
	var fadeinTime = 2000;
	var autoRefreshTime = 6000;
	var strActiveNavBtnClassName = "activesticky";
	
	var arySlides = $("#slides div");
	var aryNavs = $("#slide_nav li a");
	var btnNext = $("#slide_arrows li a.next");
	var btnPrev = $("#slide_arrows li a.previous");
	
	aryNavs.click(function(){
		switchNavAndSlide(aryNavs.index(this));
	});
	
	btnNext.click(function(event, fromAuto){
		var onAuto = fromAuto ? 1 : 0;
		var nextIdx = getCurrentIndex() + 1;
		switchNavAndSlide(nextIdx == aryNavs.length ? 0 : nextIdx, onAuto);
	});
	
	btnPrev.click(function(){
		var prevIdx = getCurrentIndex() - 1;
		switchNavAndSlide(prevIdx < 0 ? aryNavs.length - 1 : prevIdx);
	});
	
	var switchNavAndSlide = function(nextIdx, onAuto) {
		if (!onAuto) {stopAuto();}
		aryNavs.removeClass(strActiveNavBtnClassName);
		aryNavs.eq(nextIdx).addClass(strActiveNavBtnClassName);
		
		/** Jonny **/
		// Fade out
		var currentSlide = arySlides.filter("div:visible");
		currentSlide.fadeOut(fadeoutTime);
		// In IE8 Positioned elements aren't affected by their parents opacity, so they must be faded out individually
		$('*', currentSlide).fadeOut(fadeoutTime);
		
		// Fade in
		var nextSlide = arySlides[nextIdx];
		$(nextSlide).fadeIn(fadeinTime);
		$('*', nextSlide).fadeOut(0); // Required in IE8, otherwise element is shown immediately.
		$('*', nextSlide).fadeIn(fadeinTime);
		/** end Jonny **/
		
		if (!onAuto) {startAuto();}
	};
	
	var getCurrentIndex = function() {
		// Use the navigation button, because as the slides fade in and out, it is unclear when the current slide status changes
		var thisNavAEl = aryNavs.filter("[class='"+strActiveNavBtnClassName+"']");
		return aryNavs.index(thisNavAEl);
	};
	
	var refreshId = '';
	var startAuto = function() {
		refreshId = setInterval(function() {
			btnNext.trigger('click', [1]);
		}, autoRefreshTime);
	};
	var stopAuto = function() {
		clearInterval(refreshId);
	}
	startAuto();
});

