
/**
* Block animation - SURF portal
* 
*/

// vars
var heightOpened = 144;
var heightClosed = 48;
var HoverTimer;
var AnimateTimer;
var isAnimating = false;
var currentGroup = null;
var block1 = null;
var block2 = null;
var s = 0;

// Block Groups
var Groups = new Object();
Groups['projecten'] = new Object();
Groups['producten'] = new Object();
Groups['websites'] = new Object();
Groups['publicaties'] = new Object();

// cssIsLoaded
function cssIsLoaded() {
	var mysheet = document.styleSheets[0];
	if(mysheet) {
		var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules;
		return (myrules.length > 0);
	}
	return false;
}

// isElement, isBlock, isGroup
function isElement(id) {
	return typeof(document.getElementById(id)) == 'object';
}

function isBlock(el) {
	return typeof(el) == 'object';
}

function isGroup(g) {
	return typeof(Groups[g]) == 'object';
}

function idStrToObject(id_str) {
	var i = id_str.split(":");
	var o = new Object();
	o.id = id_str;
	o.group = i[1];
	return o;
}

// getActiveGroupBlock
function getActiveGroupBlock(g) {
	if(isGroup(g)) {
		return Groups[g].active;
	} else {
		return null;
	}
}

// setOpened
function setOpened(id_str) {

	var o = idStrToObject(id_str);
	var id = o.id;
	var group = o.group;

	if(isGroup(group)) {
		Groups[group].active = id_str;
	}
}

// onMouseOverBlock
function onMouseOverBlock(id_str) 
{
	var o = idStrToObject(id_str);
	var id = o.id;
	var group = o.group;
		
	if(HoverTimer) clearTimeout(HoverTimer);
	if(isGroup(group) && id != getActiveGroupBlock(group)) {
		HoverTimer = setTimeout("toggleBlock('"+id+"', '"+group+"');", 1500);
	}
}

// onMouseOverBlock
function onMouseOutBlock() 
{
	if(HoverTimer) clearTimeout(HoverTimer);
}

// toggleBlock
function toggleBlock(id_str)
{
	var o = idStrToObject(id_str);
	var id = o.id;
	var group = o.group;
	
	if(isAnimating == false && isElement(id) && isGroup(group) && id != getActiveGroupBlock(group) && cssIsLoaded() == true) 
	{
		currentGroup = group;
		block1 = document.getElementById(id);
		block2 = document.getElementById(getActiveGroupBlock(group));
		s = heightClosed;
		block1.className = 'block anim';
		if(isBlock(block2)) block2.className = 'block anim';
		updateAnimation();
	}
}

// updateAnimation
function updateAnimation()
{
	if(AnimateTimer) clearTimeout(AnimateTimer);
	AnimateTimer = setTimeout("updateAnimation();", 1);
	isAnimating = true;

	s = s + 0.8 * (heightOpened - s);
	block1.style.height = Math.round(s)+"px";

	if(isBlock(block2)) {
		block2.style.height = Math.round((heightOpened+heightClosed)-s)+"px";
	}

	if(Math.round(heightOpened-s) == 0) {

		block1.style.height = heightOpened+"px";
		block1.className = 'block open';
		Groups[currentGroup].active = block1.id;

		if(isBlock(block2)) {
			block2.style.height = heightClosed+"px";
			block2.className = 'block closed';
		}

		clearTimeout(AnimateTimer);
		isAnimating = false;
	}
}

