var msPerPanel = 6000;
var fadeSpeed = 1000;
var windowTimerReference;

$(document).ready(function(){
	
	function fadeTo(toPane) {

		stopAnimations();
		var fromPane = $('li.selected > ul li.selected')
		
		fromPane.parent().removeClass('selected');			
		if (fromPane.parent()[0] != toPane.parent()[0]) {
			fromPane.parent().fadeOut(fadeSpeed);
			toPane.parent().fadeIn(fadeSpeed);
		}
		
		fromPane.fadeOut(fadeSpeed);
		fromPane.children().fadeOut(fadeSpeed, function() {
			fromPane.removeClass('selected');
			fromPane.closest('.selected').removeClass('selected');			
		})
		
		toPane.children().fadeIn(fadeSpeed)
		toPane.fadeIn(fadeSpeed, function() {
			toPane.addClass('selected');
			toPane.parent().parent().addClass('selected');
			$('li.selected div.content').css("filter", "alpha(opacity=65)");
			evaluateButtons();
		})
		
	}
	
	function switchTo(toPane) {
		stopAnimations();
		$('li.selected > ul li.selected').hide().removeClass('selected').closest('.selected').removeClass('selected');
		toPane.parent().show();
		toPane.children().show();
		toPane.show().addClass('selected').parent().parent().addClass('selected');
		evaluateButtons();
	}
	
	removeBlanks();
	resetFocus();
	setTimerAll();
	connectButtons();
	
	function removeBlanks() {
		$('.items li span').each(function () { if($(this).children().size() < 1) { $(this).parent().remove(); } } )
	}	
	
	function resetFocus() {
		$('.items li:not(:first)').hide();
		$('#categories li h3 a').blur();
	}
	
	function evaluateButtons() {
		if (!isSingleEntry()) {
			$('#categories .controls').show();
		} else { $('#categories .controls').hide(); }
	}
	
	function stopAnimations() {
		$('#categories li').stop(true, true);
	}
	
	function connectButtons() {
		$('#next').click(function() {
			resetTimeouts();
			stopAnimations();
			switchTo(nextTheme());
		} );
		$('#previous').click(function() {
			resetTimeouts();
			stopAnimations();
			switchTo(previousTheme());
		} );
		$('#pause').click(function() {
			resetTimeouts();
		} );
		$('#play').click(function() {
			resetTimeouts();
			setTimerTheme();
		} );			
	}
	
	function setTimerAll() {
		if(isCssEnabled()){
			windowTimerReference = window.setTimeout(moveNextAll, msPerPanel);
			$('#pause').show();
			$('#play').hide();
		} else { showAllItems(); }
	}
	
	function setTimerTheme() {
		if(isCssEnabled()){
			windowTimerReference = window.setTimeout(moveNextTheme, msPerPanel);
			$('#pause').show();
			$('#play').hide();
		} else { showAllItems(); }			
	}		
	 
	function moveNextAll() {
		fadeTo(nextAll($('#categories li ul li'), 'selected'));
		setTimerAll();
	}
	
	function moveNextTheme() {
		if (!isSingleEntry()) {
			fadeTo(nextTheme());
		}
		setTimerTheme();
	}
	
	function isSingleEntry() {
		return ($('li.selected > ul li').length <= 1)
	}
	
	function nextAll(items, filter) {
		var yieldItem;
		items.each(function (index) {
			if($(this).hasClass(filter)) {
				if ($(items[index+1]).length > 0) {
					yieldItem = $(items[index+1]);
				} else { yieldItem = $(items[0]); }
			}
		} );
		return yieldItem;
	}
	
	function nextTheme() {
		if($('li.selected > ul li.selected').next().length == 0) {
			return $('li.selected > ul li:first')
		} else {
			return $('li.selected > ul li.selected').next();
		}
	}		
	
	function previousTheme() {
		if($('li.selected > ul li.selected').prev().length == 0) {
			return $('li.selected > ul li:last')
		} else {
			return $('li.selected > ul li.selected').prev();
		}
	}	

	
	$('li.tabone h3').bind('click', function() {
		resetTimeouts()
		switchTo($('li.tabone > ul li:first'))
		setTimerTheme();
		return false;
	});
	
	$('li.tabtwo h3').bind('click', function() {
		resetTimeouts()
		switchTo($('li.tabtwo > ul li:first'))
		setTimerTheme();
		return false;
	});	
	
	$('li.tabthree h3').bind('click', function() {
		resetTimeouts()
		switchTo($('li.tabthree > ul li:first'))
		setTimerTheme();
		return false;
	});	
	
	$('li.tabfour h3').bind('click', function() {
		resetTimeouts()
		switchTo($('li.tabfour > ul li:first'))
		setTimerTheme();
		return false;
	});			
	
	function resetTimeouts() {
		window.clearTimeout(windowTimerReference);
		$('#pause').hide();
		$('#play').show();	
	}
	
	function isCssEnabled() {
		return ($('html').css('overflow') == 'auto');
	}
	
	function showAllItems() {
		stopAnimations();
		resetTimeouts();
		$('#categories').children().show();
	}
	
});
