/*
  mode arnhem
  academie voor beeldende kunst en vormgeving arnhem

  Copyright (C) 2005 Pyrrhon Software GbR

  Lutz und Arnd Ißler GbR
  Paul-Klee-Str. 54
  47877 Willich
  GERMANY

  Web:    www.pyrrhon.com
  Email:  info@pyrrhon.com

  Permission granted to use this file only on the server of mode arnhem.
*/

var hoveredMenu = false;
var shownMenu = false;

function hoverMenu(id) {
	// Show selected menu and show first item
	for (i=0; i<menu[id].length; i++) {
		document.getElementById(menu[id][i]).style.visibility = "visible";
	}
	hoveredMenu = id;
	document.getElementById("unhover").style.visibility = "visible";
}

function unHoverMenu() {
	if (hoveredMenu && hoveredMenu!=shownMenu) {
		document.getElementById("unhover").style.visibility = "hidden";
		// Show selected menu and show first item
		for (i=0; i<menu[hoveredMenu].length; i++) {
			document.getElementById(menu[hoveredMenu][i]).style.visibility = "hidden";
		}
		hoveredMenu = false;
	}
}

function hideMenu(id) {
	for (i=0; i<menu[id].length; i++) {
		document.getElementById(menu[id][i]).style.visibility = "hidden";
	}
	shownMenu = false;
}

function showMenu(id) {
	// Hide previously shown menu
	if (shownItem) {
		hideItem(shownItem);
	}
	prevShownMenu = shownMenu;
	if (shownMenu) {
		hideMenu(shownMenu);
	}
	// If clicking twice on the same menu, stay hidden
	if (prevShownMenu==id) {
		return;
	}
	// Show selected menu and show first item
	for (var i=0; i<menu[id].length; i++) {
		document.getElementById(menu[id][i]).style.visibility = "visible";
		if (i==0) {
			showItem(id, menu[id][i]);
		}
	}
	shownMenu = id;
	blur();
}

var shownItem = false;

function hoverItem(id) {
	document.getElementById(id).firstChild.style.backgroundColor = "black";
	document.getElementById(id).firstChild.style.color = "white";
}

function unHoverItem(id) {
	if (id!=shownItem) {
		document.getElementById(id).firstChild.style.backgroundColor = "white";
		document.getElementById(id).firstChild.style.color = "black";
	}
}

function hideItem(id) {
	document.getElementById("popup").style.visibility = "hidden";
	shownItem = false;
	unHoverItem(id);
	blur();
}

function showItem(menu, id) {
	// Check wether the user has clicked on the already shown item
	prevShownItem = shownItem;
	// Hide previously shown item
	if (shownItem) {
		hideItem(shownItem);
	}
	if (shownMenu && shownMenu!=menu) {
		hideMenu(shownMenu);
	}
	// If clicking twice on the same item, stay hidden
	if (prevShownItem==id) {
		return;
	}
	// Copy text to popup
	removeChildNodes("content");
	text = document.getElementById(id+"Text");
	if (text!=null) {
		for (i=0; i<text.childNodes.length; i++) {
			document.getElementById("content").appendChild(text.childNodes[i].cloneNode(true));
		}
	}
	// Switch headline
	document.getElementById("headline").replaceChild(
		document.createTextNode("/ "+headline[id]),
		document.getElementById("headline").firstChild
	);
	// Init scrollbar
	// speed, dragTop, dragHeight, trackHeight, trackObj, upObj, downObj, dragObj, contentMaskObj, contentObj
	new ScrollObj(6,38,130,423,"scrollTrack","scrollUp","scrollDown","scrollDrag","contentMask","content");
	// Show selected item
	document.getElementById(id).style.visibility = "visible";
	document.getElementById("popup").style.left = document.getElementById(id).parentNode.style.left;
	//document.getElementById("popup").style.backgroundColor = color[id];
	document.getElementById("popup").style.visibility = "visible";
	shownItem = id;
	shownMenu = menu;
	hoverItem(id);
	blur();
}

function blur() {
	// Explicitely lose focus (neither needed nor working on IE)
	if (!document.all) {
		document.getElementById('blur').focus();
	}
}

var steps = 10;
var stepTime = 50;

var step = 0;

var images = null;
var deltaLeft = null;
var animLefts = null;
var studentLefts = null;

function moveStudent(name, delta, current, target) {
	if (step==steps) {
		// No more animation
		animating = false;
		// Return
		return;
	}
	step++;
	found = false;
	current += delta;
	for (i=0; i<students.length; i++) {
		if (found) {
			// Move
			if (studentLefts[i]==null) {
				studentLefts[i] = parseInt(
						document.getElementById("x"+students[i]).style.left
					);
			}
			document.getElementById("x"+students[i]).style.left =
				(studentLefts[i]+current)+"px";
		} else {
			// Search
			found = students[i]==name;
		}
	}
	// Move images
	for (i=0; i<images.length; i++) {
		if (animLefts[i]==null) {
			animLefts[i] = 0;
		}
		animLefts[i] += deltaLeft[i];
		images[i].style.left = animLefts[i]+"px";
	}
	// Adjust clipping
	var width = (current-deltaImages<0 ? 0 : current-deltaImages);
	document.getElementById("x"+name+"Images").style.width = width+"px";
	document.getElementById("x"+name+"Images").style.clip = "rect(0,"+width+"px,500px,0)";
	// Call next one
	setTimeout("moveStudent('"+name+"',"+delta+","+current+","+target+")", stepTime);
}

function jumpStudents(name, delta) {
	found = false;
	for (i=0; i<students.length; i++) {
		if (found) {
			// Move
			document.getElementById("x"+students[i]).style.left =
				(parseInt(
						document.getElementById("x"+students[i]).style.left
					)+delta)+"px";
		} else {
			// Search
			found = students[i]==name;
		}
	}
}

function moveStudents(name, delta) {
	step = 0;
	moveStudent(name, delta/steps, 0, delta);
}

var hoveredStudents = new Object();

function loadStudentHover(name) {
	if (!hoveredStudents[name]) {
		// Load hover images
		hoveredStudents[name] = new Array(2);
		hoveredStudents[name][0] = new Image();
		hoveredStudents[name][0].src = "generated/"+name+".png";
		hoveredStudents[name][1] = new Image();
		hoveredStudents[name][1].src = "generated/"+name+"_on.png";
	}
}

function hoverStudent(name) {
	loadStudentHover(name);
	// Hover
	document.getElementById("x"+name+"Name").src = hoveredStudents[name][1].src;
}

function unHoverStudent(name) {
	loadStudentHover(name);
	// Unhover
	if (getStudentIndex(name)==-1) {
		document.getElementById("x"+name+"Name").src = hoveredStudents[name][0].src;
	}
}

var shownStudents = new Array(0);

function getStudentIndex(name) {
	for (var studentIndex=0; studentIndex<shownStudents.length; studentIndex++) {
		if (name==shownStudents[studentIndex]) {
			return studentIndex;
		}
	}
	return -1;
}

var animating = false;

function showStudent(name, internal) {
	if (animating) {
		return;
	}
	animating = true;
	// Hide any visible menu item
	if (!internal) {
		if (shownItem) {
			hideItem(shownItem);
		}
		if (shownMenu) {
			hideMenu(shownMenu);
		}
	}
	// Check wether the student is in the list of shown students
	var studentIndex = getStudentIndex(name);
	if (studentIndex==-1) {
		// Not visible, so show pictures
		// Show pictures
		width = 0;
		images = new Array(filenames[name].length);
		deltaWidth = new Array(filenames[name].length);
		deltaLeft = new Array(filenames[name].length);
		animWidths = new Array(filenames[name].length);
		animLefts = new Array(filenames[name].length);
		studentLefts = new Array(students.length);
		for (i=0; i<filenames[name].length; i++) {
			var node = document.createElement("img");
			node.src = filenames[name][i];
			node.style.position = "absolute";
			node.width = widths[name][i+1];
			document.getElementById("x"+name+"Images").appendChild(node);
			deltaLeft[i] = width/steps;
			width += widths[name][i+1]+deltaImages;
			images[i] = node;
		}
		// Move other students out of the way
		moveStudents(name, widths[name][0]);
		// Insert student into list of shown students
		shownStudents.push(name);
	} else {
		// Already visible, so hide pictures
		removeChildNodes("x"+name+"Images");
		// Move other students in the way
		jumpStudents(name, -widths[name][0]);
		// Remove student from list of shown students
		shownStudents.splice(studentIndex, 1);
		// Unhover name
		unHoverStudent(name);
		// No more animation
		animating = false;
	}
	// Show or hide "close all" button
	document.getElementById("closeall").style.visibility =
		(shownStudents.length>0
		? "visible"
		: "hidden");
}

function hideAllStudents() {
	while (shownStudents.length>0) {
		showStudent(shownStudents[0], true);
	}
}

function removeChildNodes(id) {
	for (i=document.getElementById(id).childNodes.length-1; i>=0; i--) {
		document.getElementById(id).removeChild(
			document.getElementById(id).childNodes[i]
		);
	}
}