// Noko av dette skriptet er henta frå
// http://www.siteexperts.com/tips/contents/ts17/page1.asp
// og noko er henta frå
// http://www.w3.org/DOM/demo.js
//
// Skriptet fungerer ikkje perfekt. Blant anna lagar
// det ikkje eit *ekte* listehierarki. Bør skrivast om
//
// Copyright (c) 2001 World Wide Web Consortium,
// (Massachusetts Institute of Technology, Institut National de
// Recherche en Informatique et en Automatique, Keio University). All
// Rights Reserved. This program is distributed under the W3C's Software
// Intellectual Property License. This program is distributed in the
// hope that it will be useful, but WITHOUT ANY WARRANTY; without even
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE.
// See W3C License http://www.w3.org/Consortium/Legal/ for more details.
//
// Copyright 1999 InsideDHTML.com, LLC. All rights reserved.

function getConcatenedTextContent(node) {
    var _result = "";
    if (node == null) {
	return _result;
    }
    var childrens = node.childNodes;
    var i = 0;
    while (i < childrens.length) {
	var child = childrens.item(i);
	switch (child.nodeType) {
	case 1: // ELEMENT_NODE
	case 5: // ENTITY_REFERENCE_NODE
	    _result += getConcatenedTextContent(child);
	    break;
	case 3: // TEXT_NODE
	case 2: // ATTRIBUTE_NODE
	case 4: // CDATA_SECTION_NODE
	    _result += child.nodeValue;
	    break;
	case 6: // ENTITY_NODE
	case 7: // PROCESSING_INSTRUCTION_NODE
	case 8: // COMMENT_NODE
	case 9: // DOCUMENT_NODE
	case 10: // DOCUMENT_TYPE_NODE
	case 11: // DOCUMENT_FRAGMENT_NODE
	case 12: // NOTATION_NODE
	    // skip
	    break;
	}
	i ++;
    }
    return _result;
}

function getTextContent(node) {
    var _result = "";
    if (node == null) {
	return _result;
    }
    switch (node.nodeType) {
    case 1: // ELEMENT_NODE
    case 5: // ENTITY_REFERENCE_NODE
	_result += getConcatenedTextContent(node);
	break;
    case 3: // TEXT_NODE
    case 2: // ATTRIBUTE_NODE
    case 4: // CDATA_SECTION_NODE
    case 7: // PROCESSING_INSTRUCTION_NODE
    case 8: // COMMENT_NODE
	_result += node.nodeValue;
	break;
    case 6: // ENTITY_NODE
    case 9: // DOCUMENT_NODE
    case 10: // DOCUMENT_TYPE_NODE
    case 11: // DOCUMENT_FRAGMENT_NODE
    case 12: // NOTATION_NODE
	// skip
	break;
    }
    return _result;
}

function getHeaders() {
 var obj = document.getElementsByTagName("*")
 var el = document.createElement("UL")
 var tagList = "H2;H3;H4;H5;H6;"
 var j=0; // Running number for header tags
 for (var i=0;i < obj.length;i++)
  if (tagList.indexOf(obj[i].tagName+";")>=0) {
   j++;
   var eLI = document.createElement("LI")
   var eBookmark = document.createElement("A")
   eBookmark.id  = "destHeader" +j
   var eALink = document.createElement("A")
   eALink.href = "#" + eBookmark.id
   var eLIText = document.createTextNode(getTextContent(obj[i]))
   obj[i].appendChild(eBookmark)
   eLI.className="toc" + obj[i].tagName

   eALink.appendChild(eLIText)  
   eLI.appendChild(eALink)
   el.appendChild(eLI)
  }
 return el
}

function ie_getElementsByTagName(str) {
 if (str=="*")
  return document.all
 else
  return document.all.tags(str)
}

if (document.all)
 document.getElementsByTagName = ie_getElementsByTagName

function doLoad() {
 var el = getHeaders()

 var firstDiv = document.getElementsByTagName("h2").item(0);
 var body = firstDiv.parentNode;
 var newDiv = document.createElement("div");
 var title = document.createElement("h2");
 title.appendChild(document.createTextNode("Innhald"));
 newDiv.appendChild(title);
 newDiv.appendChild(getHeaders());
 body.insertBefore(newDiv, firstDiv);
}

window.onload =doLoad
