/**
 * @fileoverview 
 * @author Michael Kamphausen, www.michael-kamphausen.de
 * @version 1.0
 */
multipages = new Array();
multipages.links = new Array();
multipages.scanner = window.setInterval(scanMultipage, 100);

/* searches the html code for div elements with the class name "multipage" and adds them to the multipages array */
function scanMultipage() {
  multipages.parentID;
  multipages.navigationFunction;
  var parent = document.getElementById(multipages.parentID);
  if (!parent || !multipages.navigationFunction) {return false;}
  
  var childNodes = parent.childNodes;
  for (var i = 0, lengthI = childNodes.length; i < lengthI; i++) {
    var childNode = childNodes[i];
    if ((childNode.nodeType == 1) && !childNode.bound && childNode.className &&
      (childNode.className.indexOf("multipage") >= 0)) {
      multipages.push(childNode);
      childNode.bound = true;
      if (multipages.length > 1) {
        childNode.style.display = "none";
      } else {
        multipages.display = 0;
      }
    }
  }
  if (multipages.length > 0) {
    multipages.navigationFunction(parent);
  }
}

/* stop searching for div elements with the class name "multipage" */
function stopScanMultipage() {
  window.clearInterval(multipages.scanner);
  scanMultipage();
}

/* creates a menu based on numbers for each multipage to navigate and cycle through the multipage sections */
function numberedNavigation(parent) {
  /* in case the navigation node does not yet exist, it will be created */
  if (!multipages.navigation) {
    if (multipages.length == 0) {return false;}
    multipages.navigation = createTagNode("div", new Array(
      new Array("id", "numbered_nav")),
      null);
    /* insert navigation after the first multipage section to the DOM tree */
    parent.insertBefore(multipages.navigation, multipages[0].nextSibling);
    /* create and append button for jumping to the previous multipage */
    var previous = appendTagNode(multipages.navigation, "a", new Array(
      new Array("href", "")),
      "<");
    previous["onclick"] = new Function("previousMultipage(); return false;");
    appendTagNode(multipages.navigation, "span", null, "  ");
    multipages.navigation.pages = appendTagNode(multipages.navigation, "span", null, null);
    /* append a "next" button later in this function */
    var appendEnd = true;
  }
  
  /* create the numbered links to each multipage, store them in the multipage.links array and append them to the DOM tree */
  for (var i = multipages.links.length, lengthI = multipages.length; 
    i < lengthI; i++) {
    multipages.links[i] = appendTagNode(multipages.navigation.pages, "a", new Array(
      new Array("href", "")),
      (i + 1));
    multipages.links[i]["onclick"] = new Function("gotoMultipage(" + (i + 1) + "); return false;");
    multipages.navigation.pages.appendChild(document.createTextNode(" "));
  }
  
  /* will be executed only once when the navigation node was created */
  if (appendEnd) {
    /* create and append button for jumping to the next multipage */
    appendTagNode(multipages.navigation, "span", null, "  ");
    var next = appendTagNode(multipages.navigation, "a", new Array(
      new Array("href", "")),
      ">");
    next["onclick"] = new Function("nextMultipage(); return false;");
    /* the first multipage gets the id "current_multipage" for css formatting */
    multipages.links[0].id = "current_multipage";
  }
}

function previewNavigation(parent) {
  if (!multipages.navigation) {
    if (multipages.length == 0) {return false;}
    multipages.navigation = createTagNode("div", new Array(
      new Array("id", "preview_nav")),
      null);
    parent.insertBefore(multipages.navigation, multipages[0].nextSibling);
    var subcolumns = appendTagNode(multipages.navigation, "div", new Array(
      new Array("class", "subcolumns")),
      null);
    subcolumns.className = "subcolumns";
  
    var col_left = appendTagNode(subcolumns, "div", new Array(
      new Array("class", "c6l")),
      null);
    col_left.className = "c6l";
    var col_left_sub = appendTagNode(col_left, "div", new Array(
      new Array("class", "subcl")),
      null);
    col_left_sub.className = "subcl";
    var previous = appendTagNode(col_left_sub, "a", new Array(
      new Array("href", "")),
      null);
    previous["onclick"] = new Function("previousMultipage(); return false;");
    appendTagNode(previous, "img", new Array(
      new Array("src", "../../images/previous.gif"),
      new Array("alt", "Vorherige Seite")),
      null);
      
    var col_center = appendTagNode(subcolumns, "div", new Array(
      new Array("class", "c88l")),
      null);
    col_center.className = "c88l";
    multipages.col_center_sub = appendTagNode(col_center, "div", new Array(
      new Array("class", "subc")),
      null);
    multipages.col_center_sub.className = "subc";
    
    var col_right = appendTagNode(subcolumns, "div", new Array(
      new Array("class", "c6r")),
      null);
    col_right.className = "c6r";
    var col_right_sub = appendTagNode(col_right, "div", new Array(
      new Array("class", "subcr")),
      null);
    col_right_sub.className = "subcr";
    var next = appendTagNode(col_right_sub, "a", new Array(
      new Array("href", "")),
      null);
    next["onclick"] = new Function("nextMultipage(); return false;");
    appendTagNode(next, "img", new Array(
      new Array("src", "../../images/next.gif"),
      new Array("alt", "Nächste Seite")),
      null);
  }
  
  for (var i = multipages.links.length, lengthI = multipages.length, exit = false; (i < lengthI) && !exit; i++) {
    multipages.links[i] = appendTagNode(multipages.col_center_sub, "a", new Array(
      new Array("href", "")),
      null);
    multipages.links[i]["onclick"] = new Function("gotoMultipage(" + (i + 1) + "); return false;");
    var images = multipages[i].getElementsByTagName("img");
    exit = !(images && images.length);
    if (!exit) {
      appendTagNode(multipages.links[i], "img", new Array(
        new Array("src", images[0].src),
        new Array("alt", images[0].alt)),
        null);
    /* in case the image is not yet loaded, try again later */
    } else {
      multipages.links.pop();
    }
  }
  
  if (multipages.links.length > 0) {
    multipages.links[0].id = "current_multipage";
  }
}

function gotoMultipage(id) {
  if ((id > 0) && (id <= multipages.length)) {
    multipages[multipages.display].style.display = "none";
    if (multipages.links[multipages.display]) {
      multipages.links[multipages.display].removeAttribute("id");
    }
    multipages[id - 1].style.display = "block";
    if (multipages.links[id - 1]) {
      multipages.links[id - 1].id = "current_multipage";
    }
    multipages.display = id - 1;
    var parent = multipages.navigation.parentNode;
    parent.removeChild(multipages.navigation);
    parent.insertBefore(multipages.navigation, multipages[id - 1].nextSibling);
    window.scrollTo(0, 0);
  }
}

function previousMultipage() {
  var id = (multipages.display > 0)?
    (multipages.display - 1):(multipages.links.length - 1);
  gotoMultipage(id + 1);
}

function nextMultipage() {
  var id = (multipages.display < multipages.links.length - 1)?
    (multipages.display + 1):(0);
  gotoMultipage(id + 1);
}