/* эта функция вставляет якоря <a name="..."> в заголовки <h1>, ..., обрабатываемый уровень заголовка передается в параметре lvl */

function makeAnchors(lvl) {

  /* получили список заголовков текущего уровня, находящихся внутри нужного <div> */

  if(hlist=document.getElementById('content').getElementsByTagName('h'+lvl))

    /* для каждого из них... */

    for(i=0;i<hlist.length;i++)

      /* ...создаем обертку <a name="...">...</a>. Класс нам понадобится не для CSS, а для того, чтобы различать уровни вложенности при сборке оглавления */

      hlist[i].innerHTML='<a name="toc'+lvl+'_'+i+'" class=toc'+lvl+'>'+hlist[i].innerHTML+'</a>';

}



/* эта функция возвращает оглавление в виде набора элементов списка <li>. В параметрах передается набор обрабатываемых уровней заголовков */

function toc() {

  /* если не задан набор уровней, то берем все 6 */

  var levels=new Array;

  if(!arguments) levels=[1,2,3,4,5,6]

  else

    for(j=0;j<arguments.length;j++)

      levels[j]=arguments[j];

  var alist='';

  /* создаем якоря в заголовках */

  for(j in levels) makeAnchors(levels[j]);

  /* получаем список свежесозданных якорей */

  if(hlist=document.getElementById('content').getElementsByTagName('a'))

  {

    /* для каждого из них... */

    for(j=0;j<hlist.length;j++)

      /* если случайно зацепили ненужный якорь, например, <a href="...">, то отбрасываем его */

      if(hlist[j].name&&hlist[j].name.substring(0,3)=='toc')

        /* собираем список, здесь классы для отдельных элементов <li> нужны уже именно для CSS, чтобы выделить уровни визуально */

        alist+='<li class="'+hlist[j].className+'"><a href="#'+hlist[j].name+'">'+hlist[j].innerHTML+'</a></li>\n';

  }

  return alist;

}

