// -- file start --


jQuery.fn.insertToC = function( tocID, excluding, linkTitle, msg) {


    // -- function --
    getHeaderLevel = function( header)  {
      return parseInt( header.replace( /h/i, '') );
    } // function getHeaderLevel


    // -- function --
    buildToC = function( excludedElms) {

      // find all lower-level header elements
      var  $headers;
      if( excludedElms == '') {
	$headers = $( ':header');
      } else {
	$headers = $( ':header:not(' + excludedElms + ')');
      }
  
      var  defaultID = 'jquery.tableofcontents-';
      var  previousLevel = 0;
      var  toc = '';
      // get substructure on each element
      $headers.each( function( idx, vrbl) {
	  // store ID
	  var  headerID = this.id;
	  // treat case of empty ID
	  if( headerID == '') {
	    headerID = defaultID + this.tagName + '-' + idx;
	    this.id = headerID;
	  } // if headerID

	  // header text
	  var  $header = $(this);
	  var  headerText = $header.text(); 
	  // canonicalize
	  headerText = headerText.replace( /^\n*\t* *\n*\t* *\n*\t* */g, '');
	  headerText = headerText.replace( /\n*\t* *\n*\t* *\n*\t* *$/g, '');

	  // determine level
	  var  currentLevel = getHeaderLevel( this.tagName);
	  // build ToC structure
	  var  levelDelta = currentLevel - previousLevel;
	  if( levelDelta > 0) {	// higher level
	    toc += '<ul><li>';
	  } else if( levelDelta < 0) { // lower level
	    toc += '</li></ul><li>';
	  } else {			// same level
	    toc += '</li><li>';
	  }
	  toc += '<a title="' + linkTitle + '" href="#' + headerID + '">' + headerText + '</a>';
	  // store level for later
	  previousLevel = currentLevel;
	});	// $headers.each
      toc += '</li></ul>'
      return toc;
    } // function buildToC


    // -- main --
    // invoke only upon finished loading
    $(function()
      {
	// replace any existing content, such as fall-back by preliminary message
	$(tocID).empty();
	$(tocID).append( msg);
	// add new content (after removing the message again)
	var  toc = buildToC( excluding);
	$(tocID).empty();
	$(tocID).append( toc);
      });
};  // jQuery.fn.insertToC


// -- file end --
