// version 0.99a modified by Jeroen klein Gebbink - (c)2003 Montferland Media Studio

// enige basis browser en os checks
var agent = navigator.userAgent.toLowerCase();
var os = navigator.platform.toLowerCase();
var win = (os.indexOf('win32')!=-1);
var mac = (os.indexOf('mac')!=-1);
var ie5 = (agent.indexOf('msie 5')!=-1);
var ie6 = (agent.indexOf('msie 6')!=-1);
var nn = (agent.indexOf('netscape')!=-1);
var mz = (agent.indexOf('gecko')!=-1 && !nn);
//var mz = (agent.indexOf('mozilla')!=-1);
var op5 = (agent.indexOf('opera 5')!=-1);
var op6 = (agent.indexOf('opera 6')!=-1);
if (op5 || op6) {	ie5 = false; ie6 = false; nn = false; mz = false;	}

// dit te doen wanneer browsers dit script niet ondersteund; verwijder dit desgewenst
//if (!document.getElementById || op5) {    window.location = "http://www.emid.nl/index2.html/"	}

// initiatie variabelen
var scrollnum = 1;	// aantal scrollers op de pagina (eigenlijk enige te wijzigen variabele)
var interval = 25; // aantal miliseconden tussen de scrollupdates (lager = sneller)
var speed = 3;	// speed of movement pr. interval - normal scroll
var barspeed = 6; // speed of movment pr. interval - click on scrollbg
var wheelspeed = 20; //	speed of movment pr. interval  - mousewheel
var px = (op5 || op6) ? '' : 'px';
var scrollers = new Array();
var dobarscroll,orgslide,loadedscroll,dowheelscroll = false;
var loadedlayers = false;
var thenum,thetimer,evy;
var dotsheight,navmenuheight;
var mainWindow = null;

// functies om tekst selectie te voorkomen
function disableSelect(e) {
	return false;
}

function enableSelect() {
	return true;
}

// functies om eigenschappen van objecten te krijgen
function getObjStyle(name) {
	if (document.all) {
		return document.all[name].style;
		}
	else if (document.getElementById) {
		return document.getElementById(name).style;
		} 
	else if (document.layers) {
		return document.layers[name];
		}
	}

// functie om objecten aan te roepen
function getObj(name) {
	if (document.all) {
		return document.all[name];//.document
		}
	else if (document.getElementById) {
		return document.getElementById(name);
		}
	else if (document.layers) {
		return document.layers[name];
		}
	}

// overige tijdbesparende gedeelde functies
function gety(el) {
	if (op5) {
		return getObjStyle(el).pixelTop; 
	} else {
		return getObj(el).offsetTop;
		}
	}

function geth(el) {
	if (op5) {
		return getObjStyle(el).pixelHeight;
	} else {
		return getObj(el).offsetHeight;
	}
}

function getx(el) {
	if (op5) {
		return getObjStyle(el).pixelLeft;
	} else {
		return getObj(el).offsetLeft;
	}
}

function getw(el) {
	if (op5) {
		return getObjStyle(el).pixelWidth;
	} else {
		return getObj(el).offsetWidth;
	}
}

function setx(el,x) {
	getObjStyle(el).left = x+px;
}

function setw(el,x) {
	getObjStyle(el).width = x+px;
}

function sety(el,y) {
	getObjStyle(el).top = y+px;
}

function seth(el,h) {
	getObjStyle(el).height = h+px;
}

//Schaal venster tot maximale waarde:
function maxWindowSize() {
	window.moveTo(0,0);
	if (ie5 || ie6) {
		window.resizeTo(screen.availWidth,screen.availHeight);
	} else if (nn) {
		window.outerWidth = screen.availWidth;
		window.outerHeight = screen.availHeight;
	}
}

//Bepaal vensterbreedte:
function getWindowInnerWidth() {
	if (nn) {
		windowWidth = window.innerWidth;
	//} else if (ie6) {
	//	windowWidth = document.documentElement.clientWidth;
	} else {
		windowWidth = document.body.clientWidth;
	}	
	return windowWidth;
}

//Bepaal vensterhoogte:
function getWindowInnerHeight() {
	if (nn) {
		windowHeight = window.innerHeight;
	//} else if (ie6) {
	//	windowWidth = document.documentElement.clientHeight;
	} else {
		windowHeight = document.body.clientHeight;
	}	
	return windowHeight;
}

//Functie voor het verbergen van de standaard vensterscrollbars:
function hideScrollbars() {
	if (ie5 || ie6) {
		document.body.scroll = "no";
	} else if (nn) {
	//	netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
		self.scrollbars.visible = false;
	}
}

//----------------------------------------------------

// start event capturing
document.onmousemove = mouseMove;
document.onmouseup = mouseUp;
document.onmousedown = mouseDown;
//document.onselectstart = new Function ("return false");
if (nn) {
	document.onclick = enableSelect;
}


// setup alle benodigde scrollers, etc. op de pagina, ook bij resize
//window.onload = setUp;
//window.onresize = setUp;

//----------------------------------------------------

// functie om het target element te bepalen (t.b.v. event capturing)
function getTargetElement(evt) {
	var elem = (evt.target)	? evt.target : evt.srcElement;
	if (elem.nodeType == 3 || elem.tagName.toLowerCase()=='img') { 
		return elem.parentNode;//parent container dient event te ontvangen
	} else {
		return elem;
		}
	}

//----------------------------------------------------

// functies om lagen te tonen of te verbergen
function showLayer(layer) {
	layertoshow = getObjStyle(layer);
	if (document.layers) {
		vista = 'show';
	}
	else if (document.all || document.getElementById) {
		vista = 'visible';
	}
	layertoshow.visibility = vista;
}

function hideLayer(layer) {
	layertohide = getObjStyle(layer);
	if (document.layers) {
		vista = 'hide';
	}
	else if (document.all || document.getElementById) {
		vista = 'hidden';
	}
	layertohide.visibility = vista;
}

//----------------------------------------------------

// functie die de mousedown events afwikkelt
function mouseDown(evt) {
	evt = (evt) ? evt : ((window.event) ? window.event : "");
    if (evt) {
        var elem = getTargetElement(evt);//ontvangende element
		var theid = elem.id; //layer id van het event ontvangende element 
		var thefunc = theid.slice(0,theid.length-1); //thefunc extraheert de naam van de layer (scrollv, scrollbar, etc.)
		thenum = theid.charAt(theid.length-1); //welke scroller ontvangt event (nummer)
		// scroll functies
		if (loadedscroll) {
			// als het event ontvangend element is 'scrolldown' of 'scrollup'
			if (thefunc=='scrollvup' || thefunc=='scrollvdown') {	
				if (thefunc=='scrollvup') {
					scrollers[thenum].currspeed = speed;
				} else {
					scrollers[thenum].currspeed = -speed;
				}
			doScroll();	
			return;
			}
			// als het event ontvangend element is 'scrollbg'
			if (thefunc=='scrollvbg') {
				evy = (ie5 || ie6 || op6) ? evt.offsetY : evt.layerY;
				var ratio = scrollers[thenum].main_endy / scrollers[thenum].scroll_height;
				evy = evy - (scrollers[thenum].bar_height / 2);

				if (evy < gety(scrollers[thenum].bar_v_id)) {
					scrollers[thenum].currspeed = barspeed;
					scrollers[thenum].main_starty = Math.round(evy*ratio);
					if (scrollers[thenum].main_starty > scrollers[thenum].main_starty_org) scrollers[thenum].main_starty = scrollers[thenum].main_starty_org;
				}
				if(evy > gety(scrollers[thenum].bar_v_id)) {
					scrollers[thenum].currspeed = -barspeed;
					if (evy > scrollers[thenum].scroll_height_org) evy = scrollers[thenum].scroll_height_org;
					scrollers[thenum].main_endy = Math.round(evy * ratio);
					scrollers[thenum].scroll_height = evy;
				}
				doScroll();
				return;
			}
			// als het event ontvangend element is 'scrollbar'
			if (thefunc=='scrollvbar')	{	
				dobarscroll = true;	
				evy = (ie5 || ie6 || op6) ? evt.offsetY : evt.layerY;	
				return;
			}
			// als het event ontvangend element is '' of 'main' of 'cont'
			if (thefunc=='' || thefunc=='main' || thefunc=='cont') {
				var inputType = elem.type;
				var inputNodeName = elem.nodeName;
				//alert(inputNodeName);
				if (inputNodeName == "INPUT") {
					return true;
				} else if (inputNodeName == "TEXTAREA") {
					return true;
				} else {
					return false;
				}
			}
		} else {
		//andere functies
		}
	}
}

// functie die de mouseup events afwikkeld
function mouseUp(evt) {
	evt = (evt) ? evt : ((window.event) ? window.event : "");
	if (evt) {
	var elem = getTargetElement(evt);
		// scroll functies//alert(thenum);
		//if (loadedscroll) { //loadedscroll hoeft niet gechecked te worden; eventueel veranderen
			if (thetimer) clearTimeout(thetimer);
			if (dobarscroll) dobarscroll = false;
			if (thenum)	{
				scrollers[thenum].main_starty = scrollers[thenum].main_starty_org;
				scrollers[thenum].main_endy = scrollers[thenum].main_endy_org;
				scrollers[thenum].scroll_height = scrollers[thenum].scroll_height_org;
			}
		//} else {
		//	return;
		//}
	}
}

// functie die de mousemove events afwikkelt
function mouseMove(evt) {
	evt = (evt) ? evt : ((window.event) ? window.event : "");
    if (evt) {
        var elem = getTargetElement(evt);
		var theid = elem.id; //layer id van het event ontvangende element 
			//	alert(elem.id);
		var thefunc = theid.slice(0,theid.length-1); //thefunc extraheert de naam van de layer (scrollv, scrollbar, etc.)
		// scroll functies
		if (dobarscroll && thenum) {
			var my = evt.clientY;	
			var y = (my - evy) - scrollers[thenum].scroll_top;
			if (y < scrollers[thenum].bar_starty) y = scrollers[thenum].bar_starty;	
			if (y > scrollers[thenum].bar_endy) y = scrollers[thenum].bar_endy;
			sety(scrollers[thenum].bar_v_id,y);	
			var barslide = Math.round((gety(scrollers[thenum].bar_v_id) - (scrollers[thenum].bar_starty)) * (1 / scrollers[thenum].slide_v_length));
			sety(scrollers[thenum].main_id,-barslide);
			if (barslide==0 && gety(scrollers[thenum].main_id)!=scrollers[thenum].main_starty) sety(scrollers[thenum].main_id,scrollers[thenum].main_starty);
			return false;
		}
		// als het event ontvangend element is '' of 'main' of 'cont'
		if (thefunc=='' || thefunc=='main' || thefunc=='cont') {
			var inputType = elem.type;
			var inputNodeName = elem.nodeName;
			//alert(inputNodeName);
			if (inputNodeName == "INPUT") {
				return true;
			} else if (inputNodeName == "TEXTAREA") {
				return true;
			} else {
				return false;
			}
		}
	} else {
		return;
	}
}

//----------------------------------------------------

// wheelscroll functie
function wheelScroll() {
	if (!dowheelscroll)  {
		var el = event.srcElement;
		if (el.id.slice(0,el.id.length-1)!='main') {
		do {
			el = el.parentNode;
		} while (el.tagName.toLowerCase()!='div' || el.id.slice(0,el.id.length-1)!='main')
	}
	thenum = el.id.charAt(el.id.length-1);
	if (thenum) oldnum = thenum;
	if (!thenum) thenum = oldnum;
	if (event.wheelDelta >= 120) scrollers[thenum].currspeed = wheelspeed;
	else if (event.wheelDelta <= -120) scrollers[thenum].currspeed = -wheelspeed;
	dowheelscroll = true;
	if (scrollbarsVisisble(thenum)) doScroll();
	return;
	}
}

// hoofd scroll functie
function doScroll()	{
	if (!thenum) return;
	if (gety(scrollers[thenum].main_id)+scrollers[thenum].currspeed>scrollers[thenum].main_starty) scrollers[thenum].currspeed = scrollers[thenum].main_starty - gety(scrollers[thenum].main_id);
	if (gety(scrollers[thenum].main_id)+scrollers[thenum].currspeed<scrollers[thenum].main_endy) scrollers[thenum].currspeed = scrollers[thenum].main_endy - gety(scrollers[thenum].main_id);	 
	sety(scrollers[thenum].main_id, gety(scrollers[thenum].main_id)+scrollers[thenum].currspeed);
	var mainslide = Math.round(gety(scrollers[thenum].main_id)/(scrollers[thenum].main_endy/scrollers[thenum].scroll_height));
	if (mainslide<0) mainslide = 0;
	if (mainslide>scrollers[thenum].scroll_height) mainslide = scrollers[thenum].scroll_height;
	sety(scrollers[thenum].bar_v_id, scrollers[thenum].bar_starty+mainslide);
	if (!dowheelscroll)	thetimer = setTimeout('doScroll()', interval);
	dowheelscroll = false;
	return false;
}

// resize window to max. mogelijke afmeting en naar coordinaat 0,0
function maxWindowSize() {
	window.moveTo(0,0);
	if (ie5 || ie6) {
		window.resizeTo(screen.availWidth,screen.availHeight);
	}
	if (nn) {
		window.outerWidth = screen.availWidth;
		window.outerHeight = screen.availHeight;
	}
}

// bepaal of scrollbar getoond wordt:
function scrollbarsVisisble(i) {
	contHeight = geth('cont'+i);
	mainHeight = geth('main'+i);
	if (contHeight < mainHeight) {
		return true;
	} else {
		return false;
	}
}

// setup de basiswaarden voor alle layer,scrollers,etc.
function setUpLayers() {
	for (var i = 0; i < scrollnum; i++) {
		showLayer('cont'+i);
		showLayer('main'+i);
	}
	loadedlayers = true;
}

function setUpScrollers() {
	for (var i = 0; i < scrollnum; i++) {
		scrollers[i] = {
			bar_starty			: gety('scrollvup'+i)+geth('scrollvup'+i),
			bar_height			: geth('scrollvbar'+i),
			bar_endy			: gety('scrollvdown'+i)-geth('scrollvbar'+i),
			bar_v_id			: 'scrollvbar'+i,
			scroll_height		: geth('scrollvbg'+i)-geth('scrollvbar'+i),
			scroll_height_org	: geth('scrollvbg'+i)-geth('scrollvbar'+i),
			scroll_top			: gety('scrollv'+i),
			main_starty			: gety('main'+i),
			main_starty_org	 	: gety('main'+i),
			main_endy			: ((geth('main'+i)*-1)+geth('cont'+i)),
			main_endy_org		: ((geth('main'+i)*-1)+geth('cont'+i)),
			main_id				: 'main'+i,
			currspeed			: -speed,
			slide_v_length		: (geth('scrollvbg'+i)-geth('scrollvbar'+i))/(geth('main'+i)-geth('cont'+i))
		}
		if (ie6 && !mac) {
			getObj(scrollers[i].main_id).onmousewheel = function() {
				wheelScroll();
			}	
		}
	}
}

function setUp() {
	//layers
	setUpLayers();
	//scrollers
	setUpScrollers();
	//check scroller nodig
	for (var i = 0; i < scrollnum; i++)	{
		if (scrollbarsVisisble(i)) {
			showVertScrollBars(i);
		}
	}
	loadedscroll = true;
}

// functie om te bepalen of een bepaalde scrollbar getoond moet worden
function showVertScrollBars(numv) {
	scrollvnames = new Array();
	scrollvnames[1] = "scrollv";
	scrollvnames[2] = "scrollvup";
	scrollvnames[3] = "scrollvdown";
	scrollvnames[4] = "scrollvbar";
	scrollvnames[5] = "scrollvbg";
	for(var j = 1; j <= 5; j++) {
		scrollv = getObj(scrollvnames[j] +numv);
		scrollv.style.visibility = "visible";
	}
}
