//<!--
function getWindowHeight() {
	var windowHeight = 0;
	if (typeof(window.innerHeight) == 'number') {
		windowHeight = window.innerHeight;
	}
	else {
		if (document.documentElement && document.documentElement.clientHeight) {
			windowHeight = document.documentElement.clientHeight;
		}
		else {
			if (document.body && document.body.clientHeight) {
				windowHeight = document.body.clientHeight;
			}
		}
	}
	return windowHeight;
}

function getScrollTop() {
	var result = 0;
	if (self.pageYOffset) // all except Explorer
	{
		result = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		result = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		result = document.body.scrollTop;
	}
	return result;
}

function getScrollHeight() {
	var result = 0;
	var test1 = document.body.scrollHeight;
	var test2 = document.body.offsetHeight;
	//alert(test1 + ", " + test2 )
	if (test1 < test2) // all but Explorer Mac
	{
		result = document.body.scrollHeight;
	}
	else // Explorer Mac;
			//would also work in Explorer 6 Strict, Mozilla and Safari
	{
		result = document.body.offsetHeight;
	}
	return result;
}

var menuStandardTop = 0; 
var menuExtrasTop = 0; 

var containerElement = null;
var menuContainerElement;
var contentContainerElement;
var menuStandardElement;
var menuExtrasElement;

var menuStandardWiggle;
var menuExtrasWiggle;

var wigglers = new Array;

function WIGGLE(obj) {
	
	this.range = 10;
	this.id = wigglers.length;
	wigglers[wigglers.length] = this;
	
	this.element = obj;
	this.currentX = 0;
	this.currentY = 0;
	this.targetX = 0;
	this.targetY = 0;
	
	this.movementInfluence = 0.4;
	this.deltaInfluence = 0.15;
	this.movementSnapAt = 0.12;
	this.deltaSnapAt = 1;
	this.delta = 0;
	this.running = false;
	this.movement = 0;
	

	this.move = function() {
		this.delta = this.targetY - this.currentY;
		this.movement = this.movement * this.movementInfluence + this.delta * this.deltaInfluence;
		//alert(this.element.style.top + ": " + this.currentY + ", " + this.targetY + ", " + this.delta + ", " + this.movement);

		if (( Math.abs( this.delta ) > this.deltaSnapAt ) && ( Math.abs( this.movement ) > this.movementSnapAt ) ){
			this.currentY += this.movement;
			this.element.style.top = Math.round(this.currentY) + "px";
			window.setTimeout("wigglers[" + this.id + "].move()", 50); 
		}
		else {
			this.element.style.top = Math.round(this.targetY) + "px";
			this.running = false;
		} 
	}
	
	this.start = function() {
		if (this.running) return;
		this.running = true;
		this.move();
	}

	this.snap = function() {
		this.currentY = this.targetY;
		this.start();
	}

}


function getElements() {
	if (containerElement == null) {
		containerElement = document.getElementById('container');
		menuContainerElement = document.getElementById('sidebar');
		contentContainerElement = document.getElementById('page');
		menuStandardElement = document.getElementById('menustandard');
		menuExtrasElement = document.getElementById('menuextras');
		
		menuStandardWiggle = new WIGGLE(menuStandardElement);
		if (menuExtrasElement != null) {
			menuExtrasWiggle = new WIGGLE(menuExtrasElement);
			menuExtrasWiggle.currentY = 1600;//parseInt(menuExtrasElement.style.top);
		}	
		
	}	
}

function setFunkyContainer() {
	if (document.getElementById) {
		var windowHeight = getWindowHeight();
		if (windowHeight > 0) {
			getElements();
			//menuStandardWiggle.currentY = parseInt(menuStandardElement.style.top);
			menuStandardWiggle.targetY = menuStandardTop;
			menuStandardWiggle.start();
			//menuExtrasWiggle.currentY = parseInt(menuExtrasElement.style.top);
			if (menuExtrasWiggle != null) {
				menuExtrasWiggle.targetY = menuExtrasTop;
				menuExtrasWiggle.start();
			}	
		}
	}
}

function setContainer() {
	var menuOffset = 108;
	
	if (document.getElementById) {
		var windowHeight = getWindowHeight();
		
		if (windowHeight > 0) {
			getElements();
			
			var containerHeight = containerElement.offsetHeight-menuOffset;
			var menuContainerHeight = menuContainerElement.offsetHeight;
			var contentContainerHeight = contentContainerElement.offsetHeight;
			var menuStandardHeight = menuStandardElement.offsetHeight;
			var menuExtrasHeight = (menuExtrasElement!=null) ? menuExtrasElement.offsetHeight : 0;
			
			// bepaal de nieuwe hoogte voor de menu kolom 
			var maxY = Math.max(containerHeight, Math.max(contentContainerHeight, (menuStandardHeight + menuExtrasHeight + menuOffset)));
			if (menuContainerHeight != maxY) {
				menuContainerElement.style.height = (maxY) + "px";				
			}
			
			// bepaal scroll hoogte en positie
			scrollHeight = getScrollHeight() - 12;
			scrollTop = getScrollTop();
			
			//alert(containerHeight + ", " + menuContainerHeight + ", " + contentContainerHeight + ", " + scrollHeight + ", " + allContainerHeight + ", " + posHeight);
			
			var allContainerHeight = Math.min(scrollHeight-menuOffset, Math.min(contentContainerHeight, menuContainerHeight));
			var posHeight = Math.max(menuStandardHeight+20, allContainerHeight - (menuExtrasHeight));
				
			menuExtrasTop = (scrollTop + posHeight); 
			menuStandardTop = Math.max(0, scrollTop - menuOffset);
			
			var debugElement = document.getElementById("debug");
			if (debugElement) {
				var s = "containerHeight: " + containerHeight + "<br/>"; 
				s += "menuContainerHeight: " + menuContainerHeight + "<br/>"; 
				s += "allContainerHeight: " + allContainerHeight + "<br/>"; 
				s += "contentContainerHeight: " + contentContainerHeight + "<br/>"; 
				s += "maxY: " + maxY + "<br/>"; 
				s += "posHeight: " + posHeight + "<br/>"; 
				
				debugElement.innerHTML = s;
			}
			
			setFunkyContainer();

		}
	}
}

function initContainer() {
	setContainer();
	window.setTimeout("setContainer()", 200);
}

loadProcs[loadProcs.length] = "initContainer()";

if (window.addEventListener)	{ // W3C DOM
	//alert("addEventListener");
	window.addEventListener("scroll", setContainer, false);
	window.addEventListener("resize", setContainer, false);
} 
else {
	window.onresize = function() {
		setContainer();
	}

	window.onscroll = function() {
		setContainer();
	}
}			 
//-->
