
var g_MyGlobalVar;
var fps = 60;
var timeOffset = Math.round(1000.0 / fps);
var timeDuration =450;

// should be switched depending on browsers ?
//var baseOpacity = 100;
var baseOpacity = 0;

var g_currentPage = null;



// moving elements
function MyMovingEl(MyId, MyStyle,
					mypixShiftx, mypixShifty, myOpacityShift,
					fromX, fromY, frompacity,
					toX, toY, toopacity, startoffset)
{
    this.id = MyId;
    this.style = MyStyle;

	this.currentX = fromX;
	this.currentY = fromY;
	this.currentOpacity = frompacity;
	
	this.fromX = fromX;
	this.fromY = fromY;
	this.fromOpacity = frompacity;

	this.toX = toX;
	this.toY = toY;
	this.toOpacity = toopacity;

    this.pixShiftx  = mypixShiftx;
    this.pixShifty = mypixShifty;
    this.opacityShift  = myOpacityShift;

	this.startOffset = startoffset;
	
	
}

function setMyMovingElinMyMovingEls(MyId, MyStyle,
									mypixShiftx, mypixShifty, myOpacityShift,
									fromX, fromY, frompacity,
									toX, toY, toopacity, 
									startOffset)
{
	this.MovingElArray[this.MovingElArrayIndex++] = new MyMovingEl (MyId, MyStyle,  
																	mypixShiftx, mypixShifty, myOpacityShift, 
																	fromX, fromY, frompacity,
																	toX, toY, toopacity,
																	startOffset);
	// was empty before, add a timer now																
	if (this.MovingElArrayIndex == 1)
	{
		g_MyGlobalVar = this;
		setTimeout ('g_MyGlobalVar.moveTick()', this.timeOffset);
	}
}


function RemoveElement(elementnr)
{
    // elementnr is the number of the element you wish to remove
    // the name of the array used here is array
    for (;elementnr<this.MovingElArrayIndex - 1; elementnr++)
	{
        // assigns the value of elementnr+1 to elementnr, so you move all items by 1
        this.MovingElArray[elementnr] = this.MovingElArray[elementnr + 1];
    }
	this.MovingElArrayIndex = this.MovingElArrayIndex - 1;
    // Yes it is as easy as this!
}

function isElMoving(elToMove)
{
	for (var i=0; i<this.MovingElArrayIndex; i++)
	{
		if (elToMove == this.MovingElArray[i].id)
			return true;
	}
	return false;
}

function getMovedEl(elToGet)
{
	for (var i=0; i<this.MovedElArrayIndex; i++)
	{
		if (elToGet == this.MovedElArray[i].id)
			return this.MovedElArray[i];
	}
	return null;
}

function moveMyMovingEls()
{
	var elToMove, MyEl, newOpacity;
	for (var i=0; i<this.MovingElArrayIndex; i++)
	{
		elToMove = this.MovingElArray[i];
		if (elToMove.startOffset > 0)
		{
			elToMove.startOffset -= timeOffset;
		}
		else
		{						
			var isFinished = true;				
			MyStyle = elToMove.style;
			if (elToMove.opacityShift !=  0)
			{						
				var nval = elToMove.currentOpacity + elToMove.opacityShift;
				if ((nval < elToMove.toOpacity && nval > elToMove.fromOpacity) || 
					(nval < elToMove.fromOpacity && nval > elToMove.toOpacity))
				{
					elToMove.currentOpacity = nval;
					setOpacity (MyStyle, nval);
					isFinished = false;
				}
			}
			if (elToMove.pixShiftx != 0)
			{				
				var nval = elToMove.currentX + elToMove.pixShiftx;
				if ((nval < elToMove.toX && nval > elToMove.fromX) || 
				   (nval < elToMove.fromX && nval > elToMove.toX))
				{
					elToMove.currentX = nval;
					MyStyle.left = nval + "px";
					isFinished = false;
				}
			}
			if (elToMove.pixShifty != 0)
			{
				var nval = elToMove.currentY + elToMove.pixShifty;
				if ((nval < elToMove.toY && nval > elToMove.fromY) || 
				   (nval < elToMove.fromY && nval > elToMove.toY))
				{
					elToMove.currentY = nval;
					MyStyle.top = nval + "px";
					isFinished = false;
				}
			}
			
			if (isFinished)
			{
				if (elToMove.pixShiftx != 0)
					MyStyle.left = elToMove.toX + "px";
				if (elToMove.pixShifty != 0)
					MyStyle.top = elToMove.toY + "px";
				setOpacity (MyStyle, elToMove.toOpacity);
	
	
				if (elToMove.id.indexOf("ContenuCentre") != -1)
				{
					Rounded("div#ContenuCentre","all","#ffffff","transparent");
				}
				
				var movedEl = this.getMovedEl (name);
				if (movedEl == null)
				{
					this.MovedElArray [this.MovedElArrayIndex++] = elToMove;
				}
				else
				{
					movedEl.assign (elToMove);
				}
				this.remove (i);
				i--;
			}
		}
		
	}
	if (this.MovingElArrayIndex > 0)
	{
		g_MyGlobalVar = this;
		setTimeout ('g_MyGlobalVar.moveTick()', this.timeOffset);
	}
}

function MovingElManager(aMovingElArray, aMovingElArrayIndex, atimeOffset)
{
    this.add = setMyMovingElinMyMovingEls;
	this.remove = RemoveElement;
	this.moveTick = moveMyMovingEls;
	this.isElMoving = isElMoving;
	this.getMovedEl = getMovedEl;

    this.MovingElArray = aMovingElArray;
    this.MovingElArrayIndex = aMovingElArrayIndex;
	this.timeOffset = timeOffset;
    this.MovedElArray = new Array();
    this.MovedElArrayIndex = 0;
}


var MyMovingElArray = new Array();
var MyMovingElArrayIndex = 0;
var MyMovingElArrayManager  = new MovingElManager(MyMovingElArray, MyMovingElArrayIndex, timeOffset);


function AddToMovingElManager(MyId, MyStyle, 
								fromx, fromy, fromFade, 
								tox, toy, toFade, 
								duration, startOffset)
{
	var mypixShiftx, mypixShifty, myOpacityShift;


	mypixShiftx = (tox - fromx) / duration;
	mypixShifty = (toy - fromy) / duration;
	myOpacityShift = (toFade - fromFade) / duration;

	if (myOpacityShift == 0 && mypixShifty == 0 & mypixShiftx == 0)
		return;
	if (mypixShiftx != 0)
		MyStyle.left = fromx + "px";
	if (mypixShifty != 0)
		MyStyle.top  = fromy + "px";
	setOpacity (MyStyle, fromFade);
	MyStyle.visibility = "visible";

	MyMovingElArrayManager.add (MyId, MyStyle,
								mypixShiftx, mypixShifty, myOpacityShift,
								fromx, fromy, fromFade, 
								tox, toy, toFade, 
								startOffset);
}


	
function introAnim()
{
	var myIdNames = [
		'Titre',
		'menuGauche',
		'logo'
	];

	/*
	for (var k=0; k < myIdNames.length; k++)
	{
		var el = document.getElementById (myIdNames[k])
		if (el)
			el.style.visibility = "hidden";
	}
	*/
	var name, MyEl;

	name = myIdNames[0];
	MyEl = document.getElementById(name);
	if (MyEl)	
		AddToMovingElManager (name, MyEl.style,
				-600,				MyEl.offsetTop,	baseOpacity,
				MyEl.offsetLeft,	MyEl.offsetTop,	100,
				timeDuration / timeOffset, 0);


	name = myIdNames[1];
	MyEl = document.getElementById(name);
	if (MyEl)	
		AddToMovingElManager (name, MyEl.style,
			-400,	MyEl.offsetTop,	baseOpacity,
			MyEl.offsetLeft,	MyEl.offsetTop,	100,
			timeDuration*2 / timeOffset, 1000);


	name = myIdNames[2];
	MyEl = document.getElementById(name);
	if (MyEl)	
		AddToMovingElManager (name, MyEl.style,
			MyEl.offsetLeft,	-400,			0,
			MyEl.offsetLeft,	MyEl.offsetTop,	100,
			timeDuration / timeOffset, 500);


	g_currentPage = GetCookie ('currentPage');
	if (g_currentPage == null)
	{
		g_currentPage = 'Desc/index.html';	
		SetCookie ('currentPage', g_currentPage);
		
		var name = 'ContenuCentre';
		var receiver = document.getElementById (name);
		//receiver.style.top  = "1280px";
	}
	else
	{
		loadData (g_currentPage);
	}
}

function slidePageIn ()
{
	var name = 'ContenuCentre';
	if (MyMovingElArrayManager.isElMoving(name))
	{
		setTimeout ('slidePageIn()', timeOffset);
	}
	else
	{
		var receiver = document.getElementById (name);
		receiver.innerHTML = g_receivedData;
		receiver.setAttribute('id',name);
		var movedEl = MyMovingElArrayManager.getMovedEl (name);
		if (movedEl == null)
		{
			AddToMovingElManager (name, receiver.style,
								receiver.offsetLeft,	1280,	baseOpacity,
								receiver.offsetLeft,	receiver.offsetTop,	100,
								timeDuration / timeOffset, 0);
		}
		else
		{
			AddToMovingElManager (name, receiver.style,
								movedEl.fromX,	movedEl.fromY,	baseOpacity,
								movedEl.toX,	movedEl.toY,	100,
								timeDuration / timeOffset, 0);
		}
	}
}

function slidePageOut ()
{
	var name = 'ContenuCentre';
	if (MyMovingElArrayManager.isElMoving(name))
	{
		setTimeout ('slidePageOut()', timeOffset);
	}
	else
	{
		var MyEl = document.getElementById(name);
		AddToMovingElManager (name, MyEl.style,
								MyEl.offsetLeft,	MyEl.offsetTop,	100,
								MyEl.offsetLeft,	1280,	baseOpacity,
								timeDuration / timeOffset, 0);
	}
}

function swapPage (newPage, pageTitle)
{
	if (g_currentPage == newPage)
	{
		return false;
	}
	g_currentPage = newPage;
	SetCookie ('currentPage', newPage);
	slidePageOut();
	loadData (newPage);
	return false;
}

function ReceiveDataFromChild(data)
{
	g_receivedData = data.innerHTML;
	slidePageIn ();
}

	AttachOnLoadFunction(introAnim);
	//AttachOnResizeFunction(refreshcall);




// Following is under construction...

	var col = Array();
	col[0]="000000"; col[1]="111111"; col[2]="222222";
	col[3]="333333"; col[4]="444444"; col[5]="555555";
	col[6]="666666"; col[7]="777777"; col[8]="888888";
	col[9]="999999"; col[10]="AAAAAA"; col[11]="BBBBBB";
	col[12]="CCCCCC"; col[13]="DDDDDD"; col[14]="EEEEEE";
	col[15]="FFFFFF"; col[16]="FFFFFF"; col[17]="DDDDDD";
	col[18]="CCCCCC"; col[19]="BBBBBB"; col[20]="AAAAAA";
	col[21]="999999"; col[22]="888888"; col[23]="777777";
	col[24]="666666"; col[25]="555555"; col[26]="444444";
	col[27]="333333"; col[28]="222222"; col[29]="111111";
	col[30]="000000"; 
	var i_col=0; 
	var doani=1; 
	var timer; 
	var thislink;
	
	function animatelink() 
	{ 
		if (document.all) 
		{ 
			if (doani==1) 
			{ 
					if (i_col<=col.length-1) 
					{ 
						thislink.color=col[i_col]; 
						i_col++;
						timer=setTimeout("animatelink()",50); 
					} 
					else 
					{ 
						i_col=0;
						timer=setTimeout("animatelink()",50);
					} 
			} 
			else 
			{ 
				clearTimeout(timer);
			} 
		} 
	}
	function stopanimation() 
	{ 
		clearTimeout(timer); 
		thislink.color="000000"; 
		doani=0; 
	} 
	
	function startanimation(mylink) 
	{ 
		clearTimeout(timer) ;
		thislink=eval("document.all."+mylink+".style"); 
		doani=1 ;
		animatelink() ;
	} 
