var _bannerIntervalId = null;
var _bannerRefreshInterval;
var _bannerLoading = false;


function Banner(visibleDivName, hiddenDivName, dataDivName, stylePrefix) {
	this.visibleDivName = visibleDivName;
	this.hiddenDivName = hiddenDivName;
	this.dataDivName = dataDivName;
	this.messageCount = 0;
	this.oldMessageIndex = 0;
	this.currentMessageIndex = 0;
	this.stylePrefix = stylePrefix;
	this.querySelector = "#" + dataDivName + " > div." + stylePrefix;
	this.hidden = false;
}

function startBanners(refreshInterval, activateHoover) {
	stopBanners();

	_bannerRefreshInterval = refreshInterval;
	_bannerIntervalId = setInterval(rotateBanners, _bannerRefreshInterval);

	if(activateHoover) {
		$('#' + autoBanner.visibleDivName).hover(
			function() { stopBanners(); }, 
			function() { startBanners(_bannerRefreshInterval, false); }
		);

		$('#' + manualBanner.visibleDivName).hover(
			function() { stopBanners(); }, function() { startBanners(_bannerRefreshInterval, false); }
		);
	}
}

function stopBanners() {
	if(_bannerIntervalId != null) {
		clearInterval(_bannerIntervalId);
		_bannerIntervalId = null;
	}
}

function refreshBanner(banner) {
	banner.messageCount = $(banner.querySelector).size();
	if(banner.messageCount == 0) {
		if(banner.hiddenDivName != null) {
			$('#' + banner.visibleDivName).hide();
			$('#' + banner.hiddenDivName).show();
			banner.hidden = true;
		}
	} else {
		if(banner.hidden) {
			$('#' + banner.hiddenDivName).hide();
			$('#' + banner.visibleDivName).show();
	                banner.hidden = false;
		}
		if( (banner.currentMessageIndex >= banner.messageCount) || (banner.oldMessageIndex >= banner.messageCount) ) {
			banner.currentMessageIndex = 0;
			banner.oldMessageIndex=0;
		}
		$(banner.querySelector).css('top','38px');
		$(banner.querySelector + ":eq(" + banner.currentMessageIndex + ")").css('top','0px');
	}
}

function rotateBanner(banner) {
	if(banner.messageCount > 0) {
		banner.currentMessageIndex = (banner.oldMessageIndex + 1) % banner.messageCount;
		$(banner.querySelector + ":eq(" + banner.oldMessageIndex + ")").animate({top: -50},bannerScrollSpeed, function() {
			$(this).css('top','38px');
			$(banner.querySelector + ":eq(" + banner.currentMessageIndex + ")").show().animate({top: 0},bannerScrollSpeed);
		});
		banner.oldMessageIndex = banner.currentMessageIndex;
	}
}

function rotateBanners() {
        if(!_bannerLoading) {
		if( (nextBannerReloadTime == null) || (new Date().getTime() > nextBannerReloadTime) ) {
			loadBannerData(true);
			nextBannerReloadTime = new Date().getTime() + bannerRefreshInterval;
		} else {
			rotateBanner(autoBanner);
			rotateBanner(manualBanner);
		}
	}
}

function loadBannerData(rotate) {
	_bannerLoading = true;
        var now = ((new Date()).getTime() / 60000) | 0;
	$('#autoBannerData').load('/banner/servlet/BannerServlet?type=auto&stylePrefix=' + autoBanner.stylePrefix + "&now=" + now, function() {
		$('#manualBannerData').load('/banner/servlet/BannerServlet?type=manual&stylePrefix=' + manualBanner.stylePrefix + "&now=" + now, function() {
			refreshBanner(autoBanner);
			refreshBanner(manualBanner);
			_bannerLoading = false;
			if(rotate) {
				rotateBanners();
			}
		});
	});
}

