//MDi 

function Animation(speed,easeIn,easeOut){
	this.speed = speed;
	this.easeIn = easeIn;
	this.easeOut = easeOut;
}

eazy = new Animation(8,10,10);
fast = new Animation(30,0,8);


/*do not change beneath this line*/

var scroller;

getE = function(el){return document.getElementById(el);}

if (document.all){
	getPageX = 	function(l){var pos = 0;while( l. parentElement != null ){pos += l.offsetLeft;l = l. parentElement;}return  pos;}
}
else {
	getPageX = function(){if (arguments[ 0 ].x){return arguments[ 0 ].x;}else {return arguments[ 0 ].offsetLeft;}}
}


getScrollLeft = function(){
  if (document.documentElement.scrollLeft){
    return document.documentElement.scrollLeft;
  }
  else {
    return document.body.scrollLeft;
  }
}



//mouseovers
function createMouseOvers(){
	var p = 0, d = document.images;
	prelImgs = new Array();
	for (var i = 0; i < d.length; i++){
		var o = d[i];
		if (o.src.indexOf('_out') != -1){
			var s = o.src, l = s.length, e = s.substring(l-4,l);
			o.outSrc = s;
			o.overSrc = s.substring(0,l-8)+'_over'+e;
			o.onmouseover = function(){this.src = this.overSrc;}
			o.onmouseout = function(){this.src = this.outSrc;}
			prelImgs[p] = new Image();
			prelImgs[p].src = o.overSrc;
			p++;
		}
	}
}

function scrollTijdlijn(obj,posMove,animation){
	var distance,posMove;
	getE('buttonBreak').src= '/media/images/break_freeze.gif';
	if (obj){
		var nonAbsDistance = getPageX(obj) - getScrollLeft() - 4;
		if (nonAbsDistance == Math.abs(nonAbsDistance)){
			distance = nonAbsDistance
			posMove = true;
		}
		else {
			distance = -nonAbsDistance
			posMove = false;		
		}
	}
	else {
		distance = posMove ? getE('tijdlijnTable').offsetWidth - document.body.clientWidth - getScrollLeft() : getScrollLeft();
	}
	scroller = setTimeout('animate(' + getScrollLeft() + ',' + distance + ',' + animation.speed + ',true,' + posMove + ',' +animation.easeIn + ',' + animation.easeOut + ')',30);
	window.document.onmousedown = stopAnimation;
}

function stopAnimation(){
		clearTimeout(scroller);
		getE('buttonBreak').src= '/media/images/break.gif';
}

//power animator, MDi, nov. 2003	
function animate(startPos,dist,speed,hor,posMove,easeIn,easeOut,currDist,currSpeed,peakDist,peakSpeed){
	var cD,cS,pS,pD,cP
	cD = !currDist ? 0 : currDist;
	cS = !currSpeed ? 0 : currSpeed;
	cS = !currSpeed && !easeIn ? speed : cS;
	pS = !peakSpeed ? speed : peakSpeed;

	/*hack voor ie en safari op de mac die geen onmousedown-event op de scrollbars begrijpen*/
	var expectedScrollLeft = posMove ? startPos + cD : startPos - cD;
	if (getScrollLeft() != expectedScrollLeft){
		stopAnimation();
		return;
	}	
	
	if (peakDist){pD = peakDist;}
	else { pD = easeIn && easeOut ? parseInt((dist)/(easeIn+easeOut)*easeIn) : 0;}
	if (cD >= pD && easeOut){
		cS = parseInt(((dist-cD)+((speed-cS)/2))/(easeOut+0.5)+1);
		if (cS > pS){cS = pS;}
	}
	else if (easeIn){
		cS = parseInt((cD+((speed-cS)/2))/(easeIn-0.5)+1);
		if (cS > speed){cS = speed;}
	}
	if (cD+cS > dist){cS = dist-cD;}
	cD += cS;
	cP = posMove ? startPos+cD : startPos-cD;
	hor ? window.scrollTo(cP,0) : window.scrollTo(0,cP);
	if (cD < dist){
		scroller = setTimeout('animate('+startPos+','+dist+','+speed+','+hor+','+posMove+','+easeIn+','+easeOut+','+cD+','+cS+','+pD+','+pS+');',30);
	}
}

/* LIB tbv event listeners */

// ARRAY EXTENSIONS

if (!Array.prototype.push) Array.prototype.push = function() {
    for (var i=0; i<arguments.length; i++) this[this.length] = arguments[i];
    return this.length;
}

Array.prototype.find = function(value, start) {
    start = start || 0;
    for (var i=start; i<this.length; i++)
        if (this[i]==value)
            return i;
    return -1;
}

Array.prototype.has = function(value) {
    return this.find(value)!==-1;
}

// FUNCTIONAL

function map(list, func) {
    var result = [];
    func = func || function(v) {return v};
    for (var i=0; i < list.length; i++) result.push(func(list[i], i, list));
    return result;
}

function filter(list, func) {
    var result = [];
    func = func || function(v) {return v};
    map(list, function(v) { if (func(v)) result.push(v) } );
    return result;
}


// DOM

function getElem(elem) {
    if (document.getElementById) {
        if (typeof elem == "string") {
            elem = document.getElementById(elem);
            if (elem===null) throw 'cannot get element: element does not exist';
        } else if (typeof elem != "object") {
            throw 'cannot get element: invalid datatype';
        }
    } else throw 'cannot get element: unsupported DOM';
    return elem;
}

function hasClass(elem, className) {
    return getElem(elem).className.split(' ').has(className);
}

function getElementsByClass(className, tagName, parentNode) {
    parentNode = !isUndefined(parentNode)? getElem(parentNode) : document;
    if (isUndefined(tagName)) tagName = '*';
    return filter(parentNode.getElementsByTagName(tagName),
        function(elem) { return hasClass(elem, className) });
}


// DOM EVENTS

function listen(event, elem, func) {
    elem = getElem(elem);
    if (elem.addEventListener)  // W3C DOM
        elem.addEventListener(event,func,false);
    else if (elem.attachEvent)  // IE DOM
        elem.attachEvent('on'+event, function(){ func(new W3CDOM_Event(elem)) } );
        // for IE we use a wrapper function that passes in a simplified faux Event object.
    else throw 'cannot add event listener';
}

function mlisten(event, elem_list, func) {
    map(elem_list, function(elem) { listen(event, elem, func) } );
}

function W3CDOM_Event(currentTarget) {
    this.currentTarget  = currentTarget;
    this.preventDefault = function() { window.event.returnValue = false }
    return this;
}


// MISC CLEANING-AFTER-MICROSOFT STUFF

function isUndefined(v) {
    var undef;
    return v===undef;
}

/* Popup functions */

var _POPUP_FEATURES = 'scrollbars=no,height=450,width=450,resizable=yes,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes';

function raw_popup(url, features) {
    if (isUndefined(features)) features = _POPUP_FEATURES;
    var theWindow = window.open(url, '_blank', features);
    theWindow.focus();
    return theWindow;
}

function link_popup(src, features) {
    return raw_popup(src.getAttribute('href'), features);
}

function event_popup(e) {
    link_popup(e.currentTarget);
    e.preventDefault();
}
