/*
	script_splash.js
	
	Splash script for cfms.ca
	Copyright (C)2009 Gordon Hicks, all rights reserved
*/

	// Page Initialization
	if (showSplash) window.onload = splashAni;

	// animation parameters
	var maxWait = 2000; // ms - maximum time to wait for splash images; beyond this, go to home page
	var arrowRedOffset = 100; // px - Red Arrow Home Position: number of pixels offset from left of 'splash' div
	var arrowGreenOffset = 341; // px - Green Arrow Home Position
	var redrawPeriod = 40; // ms - period between animation re-draw 

	// persona dramatis handles
	var pageSplash;
	var pageBackground;
	var pageForeground;
	var spritePartnering;
	var spriteMoving;
	var spriteLogo;
	var spriteArrowGreen;
	var spriteArrowRed;
	
	// global
	var timer;
	var pendingTimeoutId; // keep track of any pending timeouts

	// associated images (used to check loading)
	var imgPartnering = new Image();
	var imgMoving = new Image();
	var imgLogo = new Image();
	var imgArrowGreen = new Image();
	var imgArrowRed = new Image();
	imgPartnering.src = "img/splash_partnering.gif";
	imgMoving.src = "img/splash_moving.gif";
	imgLogo.src = "img/splash_logo.gif";
	imgArrowGreen.src = "img/splash_arrow_green.gif";
	imgArrowRed.src = "img/splash_arrow_red.gif";


	function splashAni() {
		// splash animation initialization
		
		// get persona dramatis
		pageSplash = document.getElementById('pageSplash');
		pageBackground = document.getElementById('pageBackground');
		pageForeground = document.getElementById('pageForeground');
		spritePartnering = document.getElementById('splash-partnering');
		spriteMoving = document.getElementById('splash-moving');
		spriteLogo = document.getElementById('splash-logo');
		spriteArrowGreen = document.getElementById('splash-arrow-green');
		spriteArrowRed = document.getElementById('splash-arrow-red');

		// reveal splash area; hide home page
		pageBackground.style.visibility = 'hidden' ;
		pageForeground.style.visibility = 'hidden' ;
		pageSplash.style.visibility = 'visible' ;


		// start the clock...
		resetTimer();

		// first step of animation...
		waitForImages();
		return;
		
	}


	function waitForImages() {
		// waiting on image load attempt...
		if ( !imgPartnering.complete || !imgMoving.complete || !imgLogo.complete || !imgArrowGreen.complete || !imgArrowRed.complete ) {
			// not yet...
			if ( elapsed() < maxWait ) {
				// keep checking...
				pendingTimeoutId = window.setTimeout("waitForImages()",100);
			} else {
				// too long - bail out
				return;
			}	
		} 
		// let's go...
		resetTimer();
		spriteArrowRed.style.visibility = 'visible';
		spriteArrowRed.style.left = '-1000px'; // position far left
		redArrowEnter();
	}


	function redArrowEnter() {
		var tminus = elapsed() / 1000 - 1.5; // 'count-down time, in seconds
		if ( tminus < 0 ) { 
			// position equation (linear deceleration)			
			x = -(300 * tminus * tminus);
			spriteArrowRed.style.left =  Math.round(x + arrowRedOffset) + 'px';
			pendingTimeoutId = window.setTimeout("redArrowEnter()",redrawPeriod);
		} else {
			// final position
			spriteArrowRed.style.left =  arrowRedOffset + 'px';
			// next step...
			pendingTimeoutId = window.setTimeout("showMoving()",250); // wait 250 ms, then show "Moving Forward..."
		}	
	}

	
	function showMoving() {
		spriteMoving.style.visibility = 'visible' ;
		pendingTimeoutId = window.setTimeout("hideMoving()",3500); // wait then hide...
	}


	function hideMoving() {
		spriteMoving.style.visibility = 'hidden' ;
		resetTimer();
		pendingTimeoutId = window.setTimeout("redArrowExit()",250);
	}

	function redArrowExit() {
		var t = elapsed() / 1000; // time, in seconds
		if ( t < 1.50 ) { 
			// position equation (linear acceleration)			
			x = (500 * t * t);
			spriteArrowRed.style.left =  Math.round(x + arrowRedOffset) + 'px';
			pendingTimeoutId = window.setTimeout("redArrowExit()",redrawPeriod);
		} else {
			// hide red arrow
			spriteArrowRed.style.visibility = 'hidden';
			spriteArrowGreen.style.left = '-1000px';
			spriteArrowGreen.style.visibility = 'visible';
			resetTimer();
			greenArrowEnter();
		}	
	}

	function greenArrowEnter() {
		var tminus = elapsed() / 1000 - 1.5; // 'count-down time, in seconds
		if ( tminus < 0 ) { 
			// position equation (linear deceleration)			
			x = -(300 * tminus * tminus);
			spriteArrowGreen.style.left =  Math.round(x + arrowGreenOffset) + 'px';
			pendingTimeoutId = window.setTimeout("greenArrowEnter()",redrawPeriod);
		} else {
			// final position
			spriteArrowGreen.style.left =  arrowGreenOffset + 'px';
			// next step...
			pendingTimeoutId = window.setTimeout("showLogo()",250); // wait, then show "Logo..."
		}	
	}


	function showLogo() {
		spriteLogo.style.visibility = 'visible' ;
		pendingTimeoutId = window.setTimeout("showPartnering()",2000); // wait, then show cutline...
	}

	
	function showPartnering() {
		spritePartnering.style.visibility = 'visible' ;
		pendingTimeoutId = window.setTimeout("done()",4000); // wait, go to home page...
	}


	function done() {
		window.clearTimeout(pendingTimeoutId);
		// hide splash area; reveal home page
		pageSplash.style.visibility = 'hidden';
		spritePartnering.style.visibility = 'hidden';
		spriteMoving.style.visibility = 'hidden';
		spriteLogo.style.visibility = 'hidden';
		spriteArrowGreen.style.visibility = 'hidden';
		spriteArrowRed.style.visibility = 'hidden';
		pageBackground.style.visibility = 'visible';
		pageForeground.style.visibility = 'visible';
		// set a cookie that expires 3:00 am tomorrow...
		var theDate = new Date(); // today, now
		theDate.setTime( theDate.valueOf() + (21*60*60*1000) ); // 21 hours in future
		var expiryDate = new Date( theDate.getFullYear(), theDate.getMonth(), theDate.getDate(), 3, 0, 0, 0 ); // 3 am tomorrow
		document.cookie = 'skipIntro=true; expires=' + expiryDate.toGMTString();
	}


	function resetTimer() {
		timer = new Date();
	}	


	function elapsed() {
		// calculate elapsed time in ms
		var now = new Date();
		return (now - timer);
	}



