function NewElem(type)
{
  return document.createElement(type);
}

function NewTxtNode(text)
{
  return document.createTextNode(text);
}

function NewLink(href, text)
{
  var link = NewElem('a');
  link.appendChild(NewTxtNode(text));
  SetAttr(link, 'href', href);
  return link;
}

function AddElem(parent, child)
{
  parent.appendChild(child);
  return parent;
}

function GetElem(id)
{
  return document.getElementById(id);
}

function DelElem(element)
{
  while (element.childNodes.length > 0)
  {
    element.removeChild(element.childNodes[0]);
  }
}

function SetAttr(element, key, value)
{
  element.setAttribute(key, value);
}

function SetClass(element, clss)
{
  element.className = clss;
}

function init(uri)
{
  var container = NewElem('div');
  SetAttr(container, 'id', 'container');
  AddElem(GetElem('body'), container);
  
  var tabs = NewElem('ul');
  SetAttr(tabs, 'id', 'tabs');
  AddElem(container, tabs);
  
  AddTab('Home', 'Home()');
  AddTab('Research', 'Research()');
  AddTab('Weblog (Dutch)', 'Blog()');
  //AddTab('SIS Doctoral Guild', 'Guild()');
  
  var li = NewElem('li');
  SetClass(li, 'subnav');
  AddElem(tabs, li);
  
  var countdown = NewElem('b');
  SetAttr(countdown, 'id', 'countdown');
  AddElem(li, countdown);
  ShowCountdown();
  setInterval('ShowCountdown()', 1000);
  
  var content = NewElem('div');
  SetAttr(content, 'id', 'content');
  AddElem(container, content);
  
  var footer = NewElem('div');
  SetAttr(footer, 'id', 'footer');
  AddElem(footer, NewTxtNode('Copyright by Mark Voortman'));
  AddElem(container, footer);
  
  if (uri == '/')
  {
    Home();
  }
  else if (uri == '/guild')
  {
    Guild();
  }
  else if (uri == '/start')
  {
    Start();
  }
  else if (uri == '/todo')
  {
    Todo();
  }
}

var dat = new Date();
dat.setFullYear(2010, 6, 11);
dat.setHours(14);
dat.setMinutes(30);
dat.setSeconds(0);

function ShowCountdown()
{
  var time = dat - new Date();
  var days = Math.floor(time / 1000 / 60 / 60 / 24);
  var hours = Math.floor(time / 1000 / 60 / 60 - days * 24);
  var minutes = Math.floor(time / 1000 / 60 - days * 24 * 60 - hours * 60);
  var seconds = Math.floor(time / 1000 - days * 24 * 60 * 60 - hours * 60 * 60 - minutes * 60);
  var countdown = GetElem('countdown');
  DelElem(countdown);
  AddElem(countdown, NewTxtNode('World Cup final in ' + days + ' days, ' + hours + ' hours, ' + minutes + ' min, ' + seconds + ' sec'));
}

function AddTab(name, fun)
{
  var tabs = GetElem('tabs');
  var item = NewElem('li');
  var link = NewLink('javascript:' + fun, name);
  AddElem(item, link);
  AddElem(tabs, item);
}

function SetActiveTab(fun)
{
  var element = GetElem('tabs');
  for (var i = 0; i < element.childNodes.length - 1; i++)
  {
    var a = element.childNodes[i].childNodes[0];
    if (a.getAttribute('href') == 'javascript:' + fun)
    {
      SetClass(a, 'active');
      a.blur();
    }
    else
    {
      SetClass(a, '');
    }
  }
}

function Start()
{
  var content = GetElem('content');
  DelElem(content);
  
  var p = NewElem('p');
  AddElem(content, p);
  AddElem(p, NewLink('http://mark.voortman.name/', 'Homepage'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('https://voortman.name/mail', 'Email'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('https://asdf13.com/', 'Asdf'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://dsl.sis.pitt.edu/', 'DSL'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://genie.sis.pitt.edu/', 'GeNIe'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://uai.sis.pitt.edu/', 'UAI'));
}

function Home()
{
  SetActiveTab('Home()');
  
  var content = GetElem('content');
  DelElem(content);
  
  var p = NewElem('p');
  var b = NewElem('b');
  AddElem(b, NewTxtNode('Mark Voortman'));
  AddElem(p, b);
  AddElem(p, NewElem('br'));
  AddElem(p, NewTxtNode('Entrepreneur'));
  AddElem(content, p);
  
  var p = NewElem('p');
  var b = NewElem('b');
  AddElem(b, NewTxtNode('Email'));
  AddElem(p, b);
  AddElem(p, NewElem('br'));
  AddElem(p, NewTxtNode('mark@voortman.name'));
  AddElem(content, p);
  
  var p = NewElem('p');
  var b = NewElem('b');
  AddElem(b, NewTxtNode('Business'));
  AddElem(p, b);
  AddElem(p, NewElem('br'));
  AddElem(p, NewTxtNode('I am in the process of starting my own company. Check back later for more info.'));
  AddElem(content, p);
  
  var p = NewElem('p');
  var b = NewElem('b');
  
  var p = NewElem('p');
  var img = NewElem('img');
  SetAttr(img, 'src', 'photos/canyon.png');
  AddElem(p, img);
  AddElem(content, p);
}

function Research()
{
  SetActiveTab('Research()');
  
  var content = GetElem('content');
  DelElem(content);
  
/*
  var p = NewElem('p');
  var b = NewElem('b');
  AddElem(b, NewTxtNode('Office'));
  AddElem(p, b);
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://www.pitt.edu/', 'University of Pittsburgh'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://www.sis.pitt.edu/', 'School of Information Sciences'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://dsl.sis.pitt.edu/', 'Decision Systems Laboratory'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewTxtNode('Room 2B10'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewTxtNode('135 North Bellefield Avenue'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewTxtNode('Pittsburgh, PA 15260'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewTxtNode('USA'));
  AddElem(content, p);
  
  var p = NewElem('p');
  var b = NewElem('b');
  AddElem(b, NewTxtNode('Advisor'));
  AddElem(p, b);
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://www.pitt.edu/~druzdzel/', 'Marek Druzdzel'));
  AddElem(content, p);
  
  var p = NewElem('p');
  var b = NewElem('b');
  AddElem(b, NewTxtNode('Software'));
  AddElem(p, b);
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://genie.sis.pitt.edu/', 'GeNIe and SMILE'));
  AddElem(content, p);
*/
  
  var h = NewElem('h2');
  AddElem(h, NewTxtNode('Research interests'));
  AddElem(content, h);
  
  var p = NewElem('p');
  AddElem(p, NewTxtNode('Machine learning, statistics, causal discovery, probabilistic graphical models, decision making under uncertainty.'));
  AddElem(content, p);
  
  var h = NewElem('h2');
  AddElem(h, NewTxtNode('Education'));
  AddElem(content, h);
  
  var ul = NewElem('ul');
  var li = NewElem('li');
  AddElem(li, NewTxtNode('Ph.D. in Information Sciences (2010): '));
  AddElem(li, NewLink('http://etd.library.pitt.edu/ETD/available/etd-01212010-164420/', 'Causal Discovery of Dynamic Systems (2009)'));
  AddElem(li, NewTxtNode(', '));
  AddElem(li, NewLink('http://ischool.pitt.edu/', 'Department of information Science and Telecommunications'));
  AddElem(li, NewTxtNode(', '));
  AddElem(li, NewLink('http://www.pitt.edu/', 'University of Pittsburgh'));
  AddElem(ul, li);
  var li = NewElem('li');
  AddElem(li, NewTxtNode('M.S. in Media and Knowledge Engineering (2005), '));
  AddElem(li, NewLink('http://ewi.tudelft.nl/', 'Faculty of Electrical Engineering, Mathematics and Computer Science'));
  AddElem(li, NewTxtNode(', '));
  AddElem(li, NewLink('http://www.tudelft.nl/', 'Delft University of Technology'));
  AddElem(ul, li);
  var li = NewElem('li');
  AddElem(li, NewTxtNode('B.S. in Technical Informatics (2005), '));
  AddElem(li, NewLink('http://ewi.tudelft.nl/', 'Faculty of Electrical Engineering, Mathematics and Computer Science'));
  AddElem(li, NewTxtNode(', '));
  AddElem(li, NewLink('http://www.tudelft.nl/', 'Delft University of Technology'));
  AddElem(ul, li);
  AddElem(content, ul);
  
/*
  var h = NewElem('h2');
  AddElem(h, NewTxtNode('Publications'));
  
  AddElem(content, h);
  
  var ul = NewElem('ul');
  var li = NewElem('li');
  var b = NewElem('b');
  AddElem(b, NewTxtNode('Decomposing Local Probability Distributions in Bayesian Networks for Improved Inference and Parameter Learning'));
  AddElem(li, b);
  AddElem(li, NewTxtNode(' Adam Zagorecki, Mark Voortman, Marek J. Druzdzel. In the Proceedings of the Nineteenth International Florida Artificial Intelligence Research Society Conference (FLAIRS-2006).'));
  AddElem(ul, li);
  AddElem(content, ul);
*/
}

function Blog()
{
  SetActiveTab('Blog()');
  
  var content = GetElem('content');
  DelElem(content);
  
  AddElem(content, AddElem(NewElem('h2'), NewTxtNode('Oude weblogs')));
  
  var p = NewElem('p');
  AddElem(p, NewLink('http://voortman.name/mark/blog', 'Oud'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewLink('http://voortman.name/mark/blog/old', 'Nog ouder'));
  AddElem(p, NewElem('br'));
  AddElem(p, NewElem('br'));
  AddElem(content, p);
  
  AddElem(content, AddElem(NewElem('h2'), NewTxtNode('Florida 05-06-2006')));
  
  AddElem(content, AddElem(NewElem('p'), NewTxtNode('Het is zoals gebruikelijk alweer een tijdje geleden dat ik m\'n weblog bijgewerkt heb, maar ik heb er nu maar meteen een nieuwe website omheen gebouwd. De oude weblog moet ik nog omzetten naar dit nieuwe formaat, dus voorlopig is de oude pagina ook nog bereikbaar. Zoals je misschien weet kom ik alweer bijna naar huis, dus heb ik speciaal voor mijn moeder hierboven een teller gemaakt die aangeeft wanneer ik op Schiphol aankom (grapje mam).')));
  
  AddElem(content, AddElem(NewElem('p'), NewTxtNode('Ik ben, zoals eerder aangekondigd, een paar weken geleden voor een conferentie naar Florida geweest. Ik wist van tevoren niet precies wat ik er allemaal van moest verwachten, maar toen ik in het super deluxe hotel gearriveerd was kon het al niet meer stuk. Gelukkig moest ik op de eerste dag meteen al de presentatie houden, zodat ik er vanaf was. Het verliep allemaal goed en ondertussen had ik een aantal mensen leren kennen zodat ik die avond de kroeg in kon. Verder was er op de conferentie onder andere nog een interessant praatje van iemand van Google, maar het hoogtepunt was toch wel de trip naar het Kennedy Space Center. Dat was allemaal erg interessant en indrukwekkend, vooral de IMAX film (3d) was spectaculair. Hieronder heb ik nog een aantal fotootjes geplaatst van de conferentie. Tot gauw!')));
  
  var div;
  var img;
  var p;
  
  div = NewElem('div');
  SetAttr(div, 'align', 'center');
  img = NewElem('img');
  SetAttr(img, 'src', 'photos/diner.jpg');
  AddElem(div, img);
  p = NewElem('p');
  AddElem(p, NewTxtNode('Foto van de conferentie met vlnr: Silvia (Italiaanse), ikke, Kevin (Canadees), Theo (Griek), Richard (Zweed) en onbekend (Albaanse).'));
  AddElem(div, p);
  AddElem(content, div);
  
  AddElem(content, NewElem('br'));
  
  div = NewElem('div');
  SetAttr(div, 'align', 'center');
  img = NewElem('img');
  SetAttr(img, 'src', 'photos/bedroom.jpg');
  AddElem(div, img);
  p = NewElem('p');
  AddElem(p, NewTxtNode('Ziet er toch relaxt uit dacht ik!!!'));
  AddElem(div, p);
  AddElem(content, div);
  
  AddElem(content, NewElem('br'));
  
  div = NewElem('div');
  SetAttr(div, 'align', 'center');
  img = NewElem('img');
  SetAttr(img, 'src', 'photos/universe.jpg');
  AddElem(div, img);
  p = NewElem('p');
  AddElem(p, NewTxtNode('Mark to the moon!'));
  AddElem(div, p);
  AddElem(content, div);
  
  AddElem(content, NewElem('br'));
  
  div = NewElem('div');
  SetAttr(div, 'align', 'center');
  img = NewElem('img');
  SetAttr(img, 'src', 'photos/shuttle.jpg');
  AddElem(div, img);
  p = NewElem('p');
  AddElem(p, NewTxtNode('Schaalmodel van een space shuttle.'));
  AddElem(div, p);
  AddElem(content, div);
  
  AddElem(content, NewElem('br'));
  
  div = NewElem('div');
  SetAttr(div, 'align', 'center');
  img = NewElem('img');
  SetAttr(img, 'src', 'photos/engine.jpg');
  AddElem(div, img);
  p = NewElem('p');
  AddElem(p, NewTxtNode('Ikke en een grasmaaier motor.'));
  AddElem(div, p);
  AddElem(content, div);
  
  AddElem(content, NewElem('p'));
}

function Guild()
{
  SetActiveTab('Guild()');
  
  var content = GetElem('content');
  DelElem(content);
  
  var h;
  var p;
  var b;
  var o;
  var l;
  
  h = NewElem('h2');
  AddElem(h, NewTxtNode('SIS Doctoral Guild Elections'));
  AddElem(content, h);
  
  p = NewElem('p');
  AddElem(p, NewTxtNode('This page is intended for SIS doctoral students. Since I am nominated for the Doctoral Guild elections, I would like to share my ideas on this page. I\'ll try to keep it as short as possible, to save your time, so I will focus on the things I think are important. I know the page looks boring, but I don\'t have time to make anything fancy right now. If you have any questions, comments, etc., please click '));
  AddElem(p, NewLink('javascript:Home()', 'here'));
  AddElem(p, NewTxtNode(' for contact information.'));
  AddElem(content, p);
  
  h = NewElem('h2');
  AddElem(h, NewTxtNode('My Ideas'));
  AddElem(content, h);
  
  p = NewElem('p');
  b = NewElem('b');
  AddElem(b, NewTxtNode('The purpose'));
  AddElem(p, b);
  AddElem(p, NewTxtNode(' of the Doctoral Guild is, in my opinion, twofold:'));
  o = NewElem('ol');
  l = NewElem('li');
  b = NewElem('b');
  AddElem(b, NewTxtNode('A mechanism to increase interaction among students.'));
  AddElem(l, b);
  AddElem(o, l);
  AddElem(p, o);
  l = NewElem('li');
  b = NewElem('b');
  AddElem(b, NewTxtNode('Act as a representative body towards the university.'));
  AddElem(l, b);
  AddElem(o, l);
  AddElem(p, o);
  AddElem(p, NewTxtNode('I will now dedicate a paragraph to each of these goals to explain them in more detail.'));
  AddElem(content, p);
  
  p = NewElem('p');
  AddElem(p, NewTxtNode('The first goal is mostly self-explaining, but I would like to give some concrete examples here. Usually, we only meet each other in the classroom and the rest of the day we\'re just hiding in our offices. By organizing events it is possible to meet each other in a different setting and also relax a little bit. Example events are watching movies, bowling, skiing etc. Events don\'t have to be only about the fun, also brown bags or informal presentations of mutual benefit could be organized. My goal would be to organize at least one fun event and one other event per month to start with. The frequency could always be increased.'));
  AddElem(content, p);
  
  p = NewElem('p');
  AddElem(p, NewTxtNode('The second goal, a representative body, is about the interaction between doctoral students and the university. When there are issues that involve all students we could meet and make decisions, and the Doctoral Guild representatives could present this to, for example, the faculty. Good examples are the mail boxes on the 7th floor or clearification of the preliminary exam rules.'));
  AddElem(content, p);
  
  p = NewElem('p');
  AddElem(p, NewTxtNode('Lastly, I want to spend a few words on the Doctoral Guild website.'));
  b = NewElem('b');
  AddElem(b, NewTxtNode(' I think it\'s important to have an up-to-date website with information relevant to all PhD students.'));
  AddElem(p, b);
  AddElem(p, NewTxtNode(' We should also announce all events here. Maybe a wiki style website would be beneficial, because it makes it possible for everyone to post relevant information. It happened to me several times that I heard about interesting events only after they took place.'));
  AddElem(content, p);
  
  p = NewElem('h2');
  AddElem(p, NewTxtNode('Please Participate!'));
  AddElem(content, p);
  
  p = NewElem('p');
  AddElem(p, NewTxtNode('The Guild will only survive when there are enough students interested. So show your interest by voting, and after the elections come to the events and meetings!'));
  AddElem(content, p);
}
