// JavaScript for RPGC homepage banner transitions

// init vars
TransitionSpeed    = 500;
DefaultBannerTime  = 5000;
MaxChars           = 35;
InitRight          = 420;
ScrollCounter      = 0;
PreviousBanner     = '';
ScrollingSpeed     = 15;
ScrollInterval     = null;

// init
function initBanners(SetMaxChars, BannerElementsClipWidth, BannerElmntsMarginTop) {

	if (SetMaxChars != null)
		MaxChars = SetMaxChars;
	
	MaxChars = 1;
	
	if (BannerElementsClipWidth != null) {
		document.getElementById('BannerTextContainer1').style.clip = 'rect(0px,' + BannerElementsClipWidth + 'px,30px,0px)';
		document.getElementById('BannerTextContainer2').style.clip = 'rect(0px,' + BannerElementsClipWidth + 'px,30px,0px)';
		InitRight = BannerElementsClipWidth;
	}
	
	if (BannerElmntsMarginTop != null) {
		document.getElementById('BannerTextContainer1').style.marginTop = (0 - BannerElmntsMarginTop) + 'px';
		document.getElementById('BannerTextContainer2').style.marginTop = (0 - BannerElmntsMarginTop) + 'px';
	}
	
	setTimeout('showBanners()', 1000);
}

// Set banners
function showBanners(Mode) {
	
	// no banners to show
	if (RPGCBannersArray.length == 0)
		return;
	
	// init banner text as blank
	BannerText = '';
	
	// pick random banners (they can't be the same one)
	while ((BannerText == PreviousBanner && RPGCBannersArray.length > 1) || BannerText == '')
		BannerText = RPGCBannersArray[Math.floor(Math.random() * RPGCBannersArray.length)];
	
	// set objects
	Obj0 = document.getElementById('BannerTextContainer1');
	Obj1 = document.getElementById('BannerTextContainer2');
	
	// first run, set browser-specific style properties
	if (PreviousBanner == '' && RPGCBannersArray.length > 1) {
		if (SteamingPileOfCrap) {
			Obj0.style.visibility = 'hidden';
			Obj1.style.visibility = 'hidden';
			Obj0.style.color      = '#7DB840';
			Obj1.style.color      = '#7DB840';
		}
		else {
			with (Obj0.style) {
				opacity      = 0;
				MozOpacity   = 0;
				KhtmlOpacity = 0;
			}
			
			with (Obj1.style) {
				opacity      = 0;
				MozOpacity   = 0;
				KhtmlOpacity = 0;
			}
		}
	}
	
	// insert banner text
	eval('Obj' + ((Mode)?'1':'0') + '.innerHTML = BannerText;');
	Mode2 = Mode;
	
	// init transition
	eval('transitionBanner(' + ((Mode)?'Obj0':'Obj1') + ',' + ((Mode)?'Obj1':'Obj0') + ', !Mode);');

	// set previous banner and mode
	PreviousBanner = BannerText;
}

// cross-fade
function transitionBanner(Obj_OUT, Obj_IN, NextMode) {
	
	NextMode2 = NextMode;
	
	// fade out previous banner
	if (PreviousBanner != '') {
		if (SteamingPileOfCrap) Obj_OUT.style.visibility = 'hidden'; else opacity(Obj_OUT.id, 100, 0, TransitionSpeed);
		
		// reset scrolling start position
		Obj_OUT2 = Obj_OUT;
		setTimeout("ScrollCounter = 0; with (Obj_OUT2.style) { marginLeft = 0; clip = 'rect(0px,' + InitRight + 'px,30px,0px)'; }", TransitionSpeed);
	}
	
	// fade in new banner
	if (SteamingPileOfCrap) Obj_IN.style.visibility = 'visible'; else opacity(Obj_IN.id, 0, 100, TransitionSpeed);
	
	// javascript marquee for banner that's too long
	if (Obj_IN.innerHTML.length > MaxChars) {
		
		// delay by a second so people can read the first few letters
		Obj_IN2   = Obj_IN;
		NextMode2 = NextMode;
		
		setTimeout("Obj_IN3 = Obj_IN2; NextMode3 = NextMode2; ScrollInterval = setInterval('scrollBanner(Obj_IN3, NextMode3)', ScrollingSpeed);", 2000);
	}
	
	// queue next banner in default time
	else
		setTimeout('showBanners(NextMode2);', DefaultBannerTime);
}

// scroll
function scrollBanner(Obj, NextMode) {

	// increment scrolling
	ScrollCounter++;
	Obj.style.marginLeft = (0 - ScrollCounter) + 'px';
	Obj.style.clip       = 'rect(0px,' + (InitRight + ScrollCounter) + 'px,30px,' + ScrollCounter + 'px)';
	
	// reached the end, reset scrolling and call for new banner
	if (ScrollCounter == Obj.clientWidth) {
		clearInterval(ScrollInterval);		
		showBanners(NextMode);
	}
}
