/*
Copyright (c) 2007 Ylab, www.ylab.nl
*/
var current_page;
var dir_open = 1
var dir_close = -1;

function replace_headings(){
  //repace h1 text by a (background) image
  var span, items = document.getElementsByTagName('h1');
  for(var i=0, item; item=items[i]; i++){
    if(!!item.id && !item.style.backgroundImage){
	    item.innerHTML = '<span class="hidden">' + item.innerHTML + '</span>';
	    item.style.backgroundImage = 'url(images/caption-' + item.id +'.png)';
	  }
  }
}

function animate_images(){
  //repace h1 text by a (background) image
  var items = document.images;
  for(var i=0, item; item=items[i]; i++){
    if(!!item.className && item.className == 'hover'){
      imgHover(item);
	  }
  }
}

function replace_illustration(){
	url_parts = current_page.split('/');
	current_code = url_parts[url_parts.length-1];
	$('illustration').src = 'images/illustration-' + current_code + '.jpg';
}

function replace_emailaddresses(){
	var parts, s_addr, s_repl = ' [at] ';	// put the @-replacement here
	var items = document.getElementsByClassName('email');
  for(var i=0, item; item=items[i]; i++){
    parts = item.innerHTML.split(s_repl);
		if (parts.length == 2) {
		  s_addr = (parts[0] + '@' + parts[1]);
		  item.innerHTML = '<a href="mailto:' + s_addr + '">' + s_addr + '</a>';
		}
	}
}

function resize_content(){
  //adjust height of 'page' element to the full height of the viewport
	var vp = new Viewport();
	var el = $('page');
	el.style.height = vp.y + 'px';
  el.style.overflow = 'scroll';
  el.style.overflowY = 'scroll';
	el.style.overflowX = 'hidden';

}

function init_page(){
  var items = $('mainmenu').getElementsByTagName('a');
  for(var i=0, item; item=items[i]; i++){
    item.onclick = show;
  }
  updatePage();
  resize_content();
  $('illustration').onerror = function(){
    this.src='images/illustration-404.jpg';
  };
}

function show(){
  //replace the content
  //this: a href
  var new_page = this.pathname, url_content, url_parts;
  if(new_page.substring(0,1)=='/'){
    new_page = new_page.substring(1);
  }
  if(current_page == new_page){
    return false;
  }
	current_page = new_page;
	url_parts = new_page.split('/');
	url_parts[url_parts.length-1] = 'data/' + url_parts[url_parts.length-1] + '.php';
	url_content = url_parts.join('/');
	for(i=1; i<url_parts.length; i++){
		url_content = '../' + url_content;
	}
	initSlideMovement(dir_close, false);

	xmlHttp = GetXmlHttpObject();
	xmlHttp.onreadystatechange = updateContent;
	xmlHttp.open('GET', url_content, true);
	xmlHttp.send(null);
  return false;
}

function updateContent(){
  var response, obj;

	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete'){
		response = xmlHttp.responseText;
		initSlideMovement(dir_close, response);
	}
}

function initSlideMovement(direction, response){
		var obj = $('content');
    //stop running animation
  	window.clearTimeout(obj.timeout);
		obj.direction = direction;
		slide(obj, response);
}

function slide(obj, response){
  var repeat, code;
  var ms_delay = 10; //delay in miliseconds;
  var i_steps  = obj.direction == dir_open ? 100 : 10;
  //calculate new height
	var newY = obj.offsetHeight + (obj.direction * obj.scrollHeight / i_steps);
	//verify min and max value
	newY = Math.min(newY, obj.scrollHeight);
	newY = Math.max(newY, 0);
	obj.style.overflow = 'hidden';
	obj.style.height = (newY) + 'px';
	//repeat if needed
	repeat = obj.direction == dir_open ? obj.offsetHeight < obj.scrollHeight : obj.offsetHeight > 0;
	if(repeat){
		code = function(){slide(obj, response);};
		obj.timeout = window.setTimeout(code, ms_delay);
	}
	else{
	  if(response){
	    //replace content
  		obj.innerHTML = response;
  		updatePage();
  		replace_illustration();
  		window.setTimeout('replace_headings();', 100);
  		//set direction
  		obj.direction = dir_open;
  		slide(obj, false);
	  }
	}
}

function updatePage(){
  replace_headings();
  replace_emailaddresses();
  animate_images();
}