// Het symbool gaat een horizontale en vertikale harmonische trilling maken.
var symbool=getElement('symbool');
var mx,my, sx,sy, x,y, vx,vy, cx,cy;
var LastTime = 0;

function Resize() {
	// Bij resize of scroll verandert het centrum van de trilling.

	// Symbool moet op zelfde positie t.o.v. linksboven blijven
	x += sx; y += sy
	
	// Haal window-afmetingen en scroll-positie op
        if(document.all){
		// Standard DOM (Firefox etc)
                mx = document.body.offsetWidth; my = document.body.offsetHeight;
                sx = document.body.scrollLeft;  sy = document.body.scrollTop;
        }else{
		// Microsoft versie
                mx = window.innerWidth;         my = window.innerHeight;
                sx = window.pageXOffset;        sy = window.pageYOffset;
        }
        // Bereken gewenste amplitude (maximale uitwijking)
        mx = (mx - symbool.width ) / 2 - 15;
        my = (my - symbool.height) / 2 - 15;

        // Bereken centrum van het window
        sx += mx+5; sy += my+5;

	// Positie symbool t.o.v. centrum
	x -= sx; y -= sy
}

function StartGlide() {
	// Verkrijg random startwaarden

	var p, v;
	// Window-afmeting en scroll-positie
	Resize();

	// Bepaal veerconstanten tussen .02 en .06
	cx=(.5+Math.random()) * .04	
	cy=(.5+Math.random()) * .04
	
	// Bepaal startpunt ergens langs onderrand van ellips
	// Hoek tussen .15 en .85 pi radialen
	p = (.5 + .7 * (Math.random()-.5) ) * Math.PI;
	// Positie in pixels t.o.v. centrum
	x = mx*Math.cos(p);
	y = my*Math.sin(p);
	
	// Bepaal startsnelheid langs de ellips,
	// Hoeksnelheid tussen .06 en .12 rad/s
	v=(1+Math.random()) * .06;
	// Positie of negatief
	if(Math.random()<.5) v = -v;
	// Snelheidsvector in pixels/s
	vx = -y*v;
	vy =  x*v;
	
	LastTime = new Date();
}

function Glide() {
var ax,ay;
	if(LastTime==0) StartGlide();

	var now=new Date();
	// Om een gelijkmatige beweging te krijgen houden we rekening met wisselende intervallen
	var interval = (now-LastTime)/1000; if(interval>.06) interval=.06;
	LastTime=now;

	// Bereken versnelling volgens de veerconstanten, met een afwijking om
	// geleidelijk op de gewenste amplitude uit te komen
	ax = -cx*x
	   + (Math.sqrt((mx*mx) / (x*x + (vx*vx)/cx)) - 1 ) * vx * .1;
	ay = -cy*y
	   + (Math.sqrt((my*my) / (y*y + (vy*vy)/cy)) - 1 ) * vy * .1;
	// Bereken nieuwe snelheid
	vx += interval*ax;
	vy += interval*ay;
	// Bereken nieuwe positie
	x  += interval*vx;
	y  += interval*vy;

        symbool.style.left = sx+x;
        symbool.style.top  = sy+y;
	symbool.style.display = "";
}
// (Maximaal) elke 40 ms updaten
window.setInterval("Glide()",40);
// Elke 1500 ms corrigeren voor windowwijzigingen
window.setInterval("Resize()", 1500);

