
//	loosely based on Peter-Paul Koch's TOC script at quirksmode.org
	
	function createTOC(IDrootToBeTOCed) {
		var bugRiddenCrashPronePieceOfJunk = (navigator.userAgent.indexOf('MSIE 5') != -1 && navigator.userAgent.indexOf('Mac') != -1
); 
		if (bugRiddenCrashPronePieceOfJunk) {
			return;
		}
		
		var verifyIRTBT;
		if (document.getElementById) {
			verifyIRTBT = document.getElementById(IDrootToBeTOCed);
			if (verifyIRTBT) {
			var pth = document.getElementById(IDrootToBeTOCed);
			var c = pth.childNodes;
			} else {return}
		} // ie6/win, moz
		else if (document.all) {
			verifyIRTBT = document.all[IDrootToBeTOCed];
			if (verifyIRTBT) {
			var pth = document.all[IDrootToBeTOCed];
			var c = document.all[IDrootToBeTOCed].childNodes;
			} else {return}
		} // ie5-5x/win
		
				
		var ya = document.createElement('a');
		ya.id = 'indicetop';
		ya.setAttribute("name","indicetop");//alert(ya.getAttribute("name"));
		pth.insertBefore(ya,pth.firstChild);
		
		
		var y = document.createElement('div');
		y.id = 'toc';
		var a = y.appendChild(document.createElement('h2'));
		a.innerHTML = '';
		a.innerHTML = '&raquo; Indice';
		var z = y.appendChild(document.createElement('div'));
		
		
		var toBeTOCced = new Array();
		var cap = 0;
		
		for (var i=0;i<c.length;i++) {
			if (c[i].nodeName.indexOf('DIV') != -1 && c[i].className == 'indice') {
				c[i].style.display = "none"; continue;
			}
			if (c[i].nodeName.indexOf('H1') != -1 && !titScheda) {
				var regExpS=/<\S[^>]*>/g;
				var titSchedaNo = c[i].innerHTML.replace(regExpS,"");
				var titScheda = titSchedaNo.replace("'","\\'");
			}
			if (c[i].nodeType != 1) continue; // per Netscape e moz
			if (c[i].nodeName.indexOf('DIV') != -1 && c[i].className == 'capitolo' || c[i].nodeName.indexOf('DIV') != -1 && c[i].className == 'appendice') {
				cap += 1;
				c[i].id = 'capitolo'+cap;
				var isThisTitle = c[i].childNodes;
				for (itt=0;itt<isThisTitle.length;itt++) {
					if (isThisTitle[itt].nodeType != 1) continue; // per Netscape e moz
					if (isThisTitle[itt].nodeName.indexOf('H2') != -1) {
						isThisTitle[itt].id = c[i].id+'h2'; 
						var regExpT=/<\S[^>]*>/g;
						var titCapNo = isThisTitle[itt].innerHTML.replace(regExpT,"");
						var titCap = titCapNo.replace("'","\\'"); break;
					}
				}
				
				var autoHR = document.createElement("hr");
				var pback = document.createElement("p");
				pback.className = "tocTools";
				// link torna
				var backlink = document.createElement("strong");
				var backlinkA = document.createElement("a");
				backlinkA.setAttribute("href", "#indicetop");
				backlinkA.setAttribute("title", "torna all'indice");
				backlinkA.style.fontWeight = "bold";
				backlinkA.appendChild(document.createTextNode("Indice"));
				backlink.appendChild(backlinkA);
				
				pback.appendChild(backlink);
				pth.insertBefore(autoHR,c[i].nextSibling);
				pth.insertBefore(pback,c[i].nextSibling);
			}
		
			var u = c[i].nodeName;
			if (u.indexOf('H1') != -1 || u.indexOf('H2') != -1 || u.indexOf('H6') != -1 || u.indexOf('HR') != -1) continue;
			else if (c[i].nodeName.indexOf('H') != -1) {
				if(!Array.prototype.push) {
					Array.prototype.push = function() {
						for(var j=0;j<arguments.length;j++){
							this[this.length] = arguments[j]; 
						}
						return this.length;
					}
				}
				toBeTOCced.push(c[i]);
				c[i].id = 'extra'+i;
			}
			
			else if (c[i].nodeName.indexOf('DIV') != -1 && c[i].className != 'indice') {
				var x = c[i].childNodes;
				for (var h=0;h<x.length;h++) {
					
					if (x[h].nodeName.indexOf('H') != -1) {
						if(!Array.prototype.push) {
							Array.prototype.push = function() {
								for(var g=0;g<arguments.length;g++){
									this[this.length] = arguments[g]; 
								}
								return this.length;
							}
						}
						toBeTOCced.push(x[h]);
					}
				}
			}			
		}
		
		
		for (var i=0;i<toBeTOCced.length;i++) {
			var b = document.createElement('a');
			var regExp=/<\S[^>]*>/g;
			b.innerHTML = toBeTOCced[i].innerHTML.replace(regExp,"");
			b.setAttribute("title", toBeTOCced[i].innerHTML.replace(regExp,""));
			
			var hChilds = toBeTOCced[i].childNodes;
			var txtNomeAncora = "";
			for (var hNumChild=0;hNumChild<hChilds.length;hNumChild++) {
				if (hChilds[hNumChild].nodeName.indexOf('A') != -1 && (hChilds[hNumChild].name!=0 || hChilds[hNumChild].id!=0) != false) {
					if (hChilds[hNumChild].name!=0) {
						txtNomeAncora = hChilds[hNumChild].name;
						b.href = '#'+txtNomeAncora;
						break;
					}
					if (hChilds[hNumChild].id!=0) {
						txtNomeAncora = hChilds[hNumChild].id;
						b.href = '#'+txtNomeAncora;
						break;
					}
					break;
				}
				if (hNumChild==hChilds.length-1) {
					var regExpW=/[^\w]/g;
					var txtNomeAncora=((toBeTOCced[i].innerHTML.replace(regExp,"")).replace(regExpW,"")).toLowerCase().slice(0,59);
					toBeTOCced[i].setAttribute("id", txtNomeAncora);
					b.href = '#'+txtNomeAncora;
				}
			}
			
			
			if (toBeTOCced[i].id.indexOf('extra') != -1) {
				if (toBeTOCced[i].nodeName == 'H3') {
					var tmp = document.createElement('h3');
					var q = tmp.appendChild(b);
					z.appendChild(tmp);
					tmp.className += ' extraH3';
				}
				if (toBeTOCced[i].nodeName == 'H4') {
					var tmp = document.createElement('h4');
					var q = tmp.appendChild(b);
					z.appendChild(tmp);
					tmp.className += ' extraH4';
				}
				if (toBeTOCced[i].nodeName == 'H5') {
					var tmp = document.createElement('h5');
					var q = tmp.appendChild(b);
					z.appendChild(tmp);
					tmp.className += ' extraH5';
				}
				if (toBeTOCced[i].nodeName == 'H6') {
					var tmp = document.createElement('h6');
					var q = tmp.appendChild(b);
					z.appendChild(tmp);
					tmp.className += ' extraH6';
				}
			}
			
			else if (toBeTOCced[i].nodeName == 'H2') {
				var tmp = document.createElement('p');
				var q = tmp.appendChild(b);
				z.appendChild(tmp);
				tmp.className = 'N';
			}
			else if (toBeTOCced[i].nodeName == 'H3') {
				var tmp = document.createElement('p');
				var q = tmp.appendChild(b);
				z.appendChild(tmp);
				tmp.className = 'N';
			}
			else if (toBeTOCced[i].nodeName == 'H4') {
				var tmp = document.createElement('p');
				var q = tmp.appendChild(b);
				z.appendChild(tmp);
				tmp.className = 'N';
			}
			else if (toBeTOCced[i].nodeName == 'H5') {
				var tmp = document.createElement('p');
				var q = tmp.appendChild(b);
				z.appendChild(tmp);
				tmp.className = 'NN';
			}
			else if (toBeTOCced[i].nodeName == 'H6') {
				var tmp = document.createElement('p');
				var q = tmp.appendChild(b);
				z.appendChild(tmp);
				tmp.className = 'NNN';
			}
			
			
			var tmp2 = document.createElement('a');
			tmp2.id = 'link' + i;
			
			
			toBeTOCced[i].parentNode.insertBefore(tmp2,toBeTOCced[i]);
		}
		
		
		for (var da = 0;da<c.length;da++) { // 070307 MOD "da<=c.length" IN "da<c.length"
			if (c[da].nodeType != 1) continue; // per Netscape e moz
			if (c[da].className == 'capitolo' || c[da].className == 'appendice') {
				pth.insertBefore(y,c[da])
				
				var yhr = document.createElement('hr');
				pth.insertBefore(yhr,y.nextSibling);
				
				break;
			}
		}
		
		
		var loc = document.location.href;
		if (loc.indexOf('#') != -1) {
			var whichA = loc.slice(loc.indexOf('#'));
			self.location.href = whichA;
		}
		
	}

addLoadEvent(function() {createTOC('rootTOC')})

