var pics = "";
var numPics;
var current = 0;
var timeout;
var interval = 2000;
var slideDuration = 3000;
var delay = slideDuration/2;
var windowActive = true;
var tweening = false;

if (/*@cc_on!@*/false) { // check for Internet Explorer
	//console.log("IE detected");
	document.onfocusin = _onFocus;
	document.onfocusout = _onBlur;
} else {
	//console.log("non-IE browser detected");
	window.onfocus = _onFocus;
	window.onblur = _onBlur;
}

function initCarousel() {		
	var pics = $("#carousel").children();
	pics.each(function(i, e) {
		if (i != current) {
			$(e).hide();
		}
	});
	numPics = pics.length;
	if (numPics > 1) {
		_bindClickOnDots();
		_setNewTimeout();
	}
}

function _onBlur() {
	windowActive = false;
	//console.log("_onBlur", windowActive, tweening);
	_clearTimeout();
};
function _onFocus(){
	windowActive = true;
	//console.log("_onFocus", windowActive, tweening, timeout);
	if (!tweening) {
		_setNewTimeout();
	}
};

function _setNewTimeout() {
	if (timeout == undefined) {
		//console.log("_setNewTimeout", timeout);
		timeout = window.setTimeout(function() { carouselNext(); }, interval);
	}
}

function _clearTimeout() {
	clearTimeout(timeout);
	timeout = undefined;
}

function carouselNext() {
	var next;
	if (current == numPics-1) {
		next = 0;
	} else {
		next = current+1;
	}
	_carouselPic(next);
}

function carouselIndex($i) {
	if ($i != current) {
		_carouselPic($i);
	}
}

function _carouselPic($i) {
	// animation start
	if (windowActive) {
		_onAnimationStart();
		var options = {direction:"right", mode:"hide", easing:"easeInCubic"};
		$("#carousel > *").eq(current).effect("slide", options, slideDuration);
		$("#carouselDots > li > a").eq(current).removeClass("active");
		current = $i;
		var options = {direction:"left", mode:"show", easing:"easeOutCubic"};
		$("#carousel > *").eq(current).delay(delay).effect("slide", options, slideDuration, _onAnimationComplete);		
		$("#carouselDots > li:eq("+current+") > a").addClass("active");
	}
}

function _onAnimationStart() {
	tweening = true;
	var e = $.Event("animationStart");
	$(window).trigger(e);
}

function _onAnimationComplete() {
	// animation complete
	tweening = false;
	if (windowActive) {
		var e = $.Event("animationComplete");
		$(window).trigger(e);
		_clearTimeout();
		_setNewTimeout();
	}
}

function _bindClickOnDots() {
	//console.log("_bindClickOnDots");
	$("#carouselDots > li > a").each(function (i, e) {
		$(e).click(_onDotClick);
	});
}

function _onDotClick(e) {
	//console.log("_onDotClick", tweening, e.currentTarget);
	if (!tweening) {
		var index = $(e.currentTarget).parent().index();
		if (index != current) {
			_clearTimeout();
			//console.log("_carouselPic on dot click");
			_carouselPic(index);
		}
	}
	e.preventDefault();
}
