function makePresentation(prsNode) {
  var slides = new Array();
  callForElementsBySelector('div.slide', prsNode ? prsNode : document,
    function(slideNode) {
      slides.unshift(slideNode);
    });
  var currentSlide = 0;
  slides[currentSlide].style.visibility = 'visible';

  this.nextSlide = function() {
    if (currentSlide+1 < slides.length) {
      slides[currentSlide].style.visibility = '';
      currentSlide++;
      slides[currentSlide].style.visibility = 'visible';
    }
  }

  this.prevSlide = function() {
    if (currentSlide > 0) {
      slides[currentSlide].style.visibility = '';
      currentSlide--;
      slides[currentSlide].style.visibility = 'visible';
    }
  }

  for (i=0; i<slides.length; i++) {
    callForElementsBySelector('span.cur_pagenr', slides[i],
      function(rplcNode) { rplcNode.firstChild.data = (i+1) });
    callForElementsBySelector('span.total_pagenr', slides[i],
      function(rplcNode) { rplcNode.firstChild.data = slides.length });
  }

  return this;
}

function useTemplates() {
  var template = document.getElementById('template_default');
  callForElementsBySelector('div.st_default', document,
    function(slideNode) {
      var children = slideNode.childNodes;
      var newSlide = template.cloneNode(true);
      callForElementsBySelector('span.template_body', newSlide,
        function(bodyNode) {
          for (var i=0; i<children.length; i++) {
            bodyNode.appendChild(children[i].cloneNode(true));
          }
        });
      for (var i=children.length; i>0; i--) {
        slideNode.removeChild(children[i-1]);
      }
      slideNode.appendChild(newSlide);
    });
}

registerEventHandler(window, 'onload',
  function() {
    useTemplates();
    var presentation = makePresentation();
    registerEventHandler(document, 'onkeydown', function(e) {
      var key = e.which;
      switch(key) {
        case 33: presentation.prevSlide(); break;
        case 34: presentation.nextSlide(); break;
      }
    });
  });

registerRules({
  'div.dialog2 input' : {
    onkeypress : function(e) {
      if (e.which == 13) {
        alert("You pressed Enter");
        return false;
      }
    }}});

registerEventHandler(window, 'onload',
  function() {
   callForElementsBySelector('div.dialog3 div.dialog', document,
     function(node) {
       var submitNode;
       callForElementsBySelector('input[type=submit]', node,
               function(curSubmitNode) { submitNode = curSubmitNode });
       callForElementsBySelector('input[type]', node,
         function(inputNode) {
           registerEventHandler(inputNode, 'onkeypress',
             function(e) { if (e.which == 13) alert(submitNode.value) });
         });
     })});

