  
function toc(element, targetSelector) {
    
    var headerTypes = 'h2,h3';
	var headers = jQuery(':header', element).filter(function() {
		return jQuery(this).is(headerTypes);
	});

	  
	var uniqueSuffix = ("" + Math.random()).substring(2);

    var toc='';
    var level;
    var prevLevel = 0;

	
    headers.each(function(i) {
    	
		level = parseInt(this.tagName.substr(1)) - 1;
		var diff = level - prevLevel;
		for(var j = 0; j < diff; j++) {
		    toc += '<ul>\n';
		}
		for(var k = diff; k < 0; k++) {
		    toc += '</ul>\n';
		}
		
		
		var anchor = "tocjump_" + uniqueSuffix + "_" + i;
		var jElem = jQuery(this);
		toc += '<li><a href="#' + anchor + '">' + jElem.text() + '</a></li>\n'; 
		
		jElem.attr("id", anchor);
		
		prevLevel = level;
	});

	 
	for(var k = 0; k < prevLevel; k++) {
	    toc += '</ul>\n';
	}
	 
	jQuery(targetSelector).append(toc);
};

