// JavaScript Document

var interval	= 40;			// interval between each slide movement in milliseconds.
var duration	= 3000;			// duration of effect in milliseconds.
var fadeIn		= 200;			// duration of fade in effect in milliseconds
var fadeOut		= 1500;			// duration of fade out effect in milliseconds
var centerX		= 228;			// horisontal position of animation center in containing div
var centerY		= 230;			// vertical position of animation center in containing div

var slide_div_obj = [];			// reference to div objects
var slide_img_obj = [];			// reference to img objects
var slide_status = [];			// slides status: ready, fadeIn, constant, fadeOut
var slide_zIndexes = [];		// slides ordered by z-index
var timerID = [];				// timers of slides
var startTime = [];				// start times slides
var opacity = [];				// slides opacity
var elapsed = [];				// slides elapsed time in milliseconds
var elapsed_last = [];			// slides elapsed at slide() step time in milliseconds

var slides = [];				// transformations of slides
// slides parameters           rx,    ry,    x1    y1    s1    x2    y2    s2    px    py
slides['filestructure']	= [   416,  1021,     0, -350,  0.8,    0,  350,  1.0]; 
slides['management']	= [   563,   290,   150,  -20,  1.0, -150,  -20,  1.0]; 
slides['editing']		= [   765,   292,   420,  130,  0.9,  -50,  130,  1.0,  566,  282]; 
slides['mastering']		= [   544,   320,  -100,    0,  0.9,  120,    0,  1.0]; 
slides['hardware']		= [   900,   598,     0,    0,  0.5,    0,    0,  1.0]; 
slides['security']		= [   536,   327,     0,    0,  1.0,  130,    0,  0.8]; 
slides['backup']		= [   350,   467,    50,  100,  1.0,  -50,  -50,  1.0]; 
slides['workflows']		= [   386,   407,    -8,   16,  0.8,  -20,  -20,  0.8]; 
slides['automation']	= [   470,   375,     0,    0,  1.0,   50,   20,  0.6]; 
slides['tracking']		= [   563,   290,   150,  -20,  1.0, -150,  -20,  1.0]; 

// following variables x1, y1 ... are provided as easy references the matching variables in the 'slides' array
// example of reference to the y2 value of array 'workflow': slides['workflow'][y2]
var rx = 0; 	// image horiszontal resolution (width); pixels
var ry = 1; 	// image vertical resolution (height); pixels
var x1 = 2; 	// initial horisontal position
var y1 = 3;		// initial vertical position
var s1 = 4;		// initial scale
var x2 = 5;		// end horisontal position
var y2 = 6;		// end vertical position
var s2 = 7;		// end scale
var px = 8;		// horisontal position of pivot point, optional, defaults to center
var py = 9;		// vertical position of pivot point, optional, defaults to center


function startSlide(objname){
	logIt('startSlide (\'' + objname + '\')');
		startTime[objname] = (new Date()).getTime();
		elapsed_last[objname]= 0;
	popSlide(objname);

switch (slide_status[objname])	{
		case 'ready':
				slide_status[objname] = 'fadeIn';
				startTime[objname] = (new Date()).getTime();
				slide_status[objname] = 'fadeIn';
				logIt('  startTime[\'' + objname + '\'] = ' + startTime[objname]);
			break;

		case 'fadeIn':
			break;

		case 'constant':
			break;

		case 'fadeOut':
			if (elapsed[objname] < duration - fadeOut) {
				slide_status[objname] = 'fadeIn';
			}
			break;
	}

	slide(objname);
	timerID[objname] = setInterval( 'slide(\'' + objname + '\');', interval);
	return;
}


function slide(objname){
	elapsed[objname] = new Date().getTime() - startTime[objname];
	var elapsedDuration = elapsed[objname] / duration;

	switch (slide_status[objname])	{
		case 'ready':
			break;

		case 'fadeIn':
			opacity[objname] += (elapsed[objname] - elapsed_last[objname]) / fadeIn;
			if (opacity[objname] > 1) {
				slide_status[objname] = 'constant';
				opacity[objname] = 1;
			}
			break;

		case 'constant':
			if (elapsed[objname] > duration - fadeOut) {
				logIt();
				slide_status[objname] = 'fadeOut';
			}
			break;

		case 'fadeOut':
			opacity[objname] -= (elapsed[objname] - elapsed_last[objname]) / fadeOut;
			if (opacity[objname] < 0) {
				opacity[objname] = 0;
				clearInterval(timerID[objname]);
				slide_status[objname] = 'ready';
			}
			if (elapsed[objname] > duration) {
				showNeeds(objname);
				 }
			break;
	}

	var RX = slides[objname][rx];
	var RY = slides[objname][ry];
	var X1 = slides[objname][x1];
	var X2 = slides[objname][x2];
	var Xn = X1 + ( X2 - X1 ) * elapsedDuration;
	var Y1 = slides[objname][y1];
	var Y2 = slides[objname][y2];
	var Yn = Y1 + ( Y2 - Y1 ) * elapsedDuration;
	var S1 = slides[objname][s1];
	var S2 = slides[objname][s2];
	var Sn = S1 + ( S2 - S1 ) * elapsedDuration;
	var PX = slides[objname][px];
	var PY = slides[objname][py];

	slide_div_obj[objname].style.left	= parseInt(Xn - PX * Sn + centerX  ) + 'px';
	slide_div_obj[objname].style.top	= parseInt(Yn - PY * Sn + centerY  ) + 'px';
	slide_img_obj[objname].width		= RX * Sn;
	slide_img_obj[objname].height		= RY * Sn;

	setOpacity(slide_div_obj[objname], opacity[objname]);
	elapsed_last[objname] = elapsed[objname];
	return;
}

function endSlide(objname){
	logIt('endSlide (\'' + objname + '\')');
	switch (slide_status[objname])	{
		case 'ready':
			slide_status[objname] = 'ready';
			break;

		case 'fadeIn':
			slide_status[objname] = 'fadeOut';
			break;

		case 'constant':
			slide_status[objname] = 'fadeOut';
			break;

		case 'fadeOut':
			slide_status[objname] = 'fadeOut';
			break;
	}
	return;
}

function setSlides () {
	logIt('setSlides ()');
	var z = 0;
	for (objname in slides)	{
		slide_div_obj[objname] = document.getElementById('slide_' + objname);
		slide_img_obj[objname] = document.getElementById('img_' + objname);

		slide_zIndexes[z] = objname;
		slide_div_obj[objname].style.zIndex = z;
		slide_status[objname] = 'ready';
		opacity[objname] = 0;
		setOpacity(slide_div_obj[objname], opacity[objname]);

		slide_div_obj[objname].style.left = slides[objname][x1] + 'px';
		slide_div_obj[objname].style.top  = slides[objname][y1] + 'px';

		if (slides[objname][px] == undefined) {
			slides[objname][px] = slides[objname][rx] / 2;
			slides[objname][py] = slides[objname][ry] / 2;
		}
//		logIt(z + ' ' + objname + ' declared as a slide: ' + slides[objname]);
		z++;
	}
}

function popSlide (objname) {
	slide_div_obj[objname] = document.getElementById('slide_' + objname);

	var offset = 0;
	var z = 0;
	for (z = 0; z < slide_zIndexes.length - 1; z++)	{
		if (slide_zIndexes[z] == objname) {
			offset = 1;
		}
		slide_zIndexes[z] = slide_zIndexes[z + offset];
		slide_div_obj[slide_zIndexes[z]].style.zIndex = z;
	}
	slide_zIndexes[z] = objname;
	slide_div_obj[objname].style.zIndex = z;
}



function setOpacity(objectReference, opacityLevel) {
	objectReference.style.opacity = opacityLevel;
	objectReference.style.filter = 'alpha(opacity=' + opacityLevel * 100 + ')';
}











