function runAfterHead(template_dir)
{
	var i = document.URL.indexOf('?');
	if (i > -1 && document.URL.substring(i+1, document.URL.length).indexOf('print=') > -1) {
		nl = document.getElementsByTagName("head");

		if (typeof(ns) != 'undefined' && ns != null) {
			le = document.createElement('link');
			le.setAttribute('href', template_dir + 'print.css');
			le.setAttribute('rel', 'stylesheet');
			le.setAttribute('type', 'text/css');
			le.setAttribute('media', 'screen');
			nl[0].appendChild(le);	
		} else {
			document.write('<link rel="stylesheet" href="' + template_dir + 
				'print.css" type="text/css" media="screen" />');
		}
	}
}

function runAfterBody(template_dir)
{
	try
	{
		var codeHighlighter = new CSharpCodeHighlighter();
		codeHighlighter.AddRegExReplacement(/\[\.\.\.\]/g,
			"<img src='" + template_dir + "images/codecollapsed.gif' alt='[collapsed code]' border='0' />");
		codeHighlighter.ProcessTags('pre', 'csharp', 'customTypes', 'customValueTypes');
		
		codeHighlighter = new MSILCodeHighlighter();
		codeHighlighter.ProcessTags('pre', 'msil', 'customTypes');
		
		codeHighlighter = new X86CodeHighlighter();
		codeHighlighter.ProcessTags('pre', 'x86', 'customTypes');
	}
	catch (e) { }

	var i = document.URL.indexOf('?');
	if (i > -1 && document.URL.substring(i+1, document.URL.length).indexOf('print=') > -1) {
		try { buildLinkPrinterTables(); }
		catch (e) { }
	}

	try
	{
		if (document.URL.indexOf('tabs') == -1)
			replaceTabsWithSpacesInPreTags();
	}
	catch (e) { }
}

function StringSplit(str, splitChar, maxLength)
{ 
	var array = str.split(splitChar);
	
	var output = "";
	var startPos = 0;
	for (var i = 0; i < array.length; i++)
	{
		if ((output.length - startPos + array[i].length) > maxLength) {
			startPos += output.length;
			output += " ";
		}
		output += (output != "" ? splitChar : "") + array[i];
	}
	
	return output;
}

function buildLinkPrinterTables()
{
	var divNodes = document.getElementsByTagName('div'); // listOfLinks
	var linkPrinterClass = "linkPrinterTable";
	
	for (var i = 0; i < divNodes.length; i++)
	{
		var div = divNodes[i];
		
		if (div.id == 'listOfLinks') {
			var linksDictionary = new Object;	
		
			var aNodes = div.parentNode.getElementsByTagName('a');
			
			var table;
			var tr;
			var td1, td2;
			
			if (aNodes.length > 0) {
				table = document.createElement('table');
				table.className = linkPrinterClass;
				div.appendChild(table);
				
				tr = document.createElement('tr');
				tr.className = linkPrinterClass;
				td1 = document.createElement('th');
				td1.className = linkPrinterClass;
				td2 = document.createElement('th');
				td2.className = linkPrinterClass;
				
				table.appendChild(tr);
				tr.appendChild(td1);
				tr.appendChild(td2);

				td1.innerHTML = "Title";
				td2.innerHTML = "Reference";
			}
			
			for (var j = 0; j < aNodes.length; j++)
			{
				var a = aNodes[j];
				
				if (a.href != "" && a.href.indexOf('http://') > -1 && a.href.indexOf('mailto:') == -1 && a.href.indexOf('cuttingedge.it') == -1 && linksDictionary[a.href] == null) {
					linksDictionary[a.href] = a.href;
					tr = document.createElement('tr');
					tr.className = linkPrinterClass;
					td1 = document.createElement('td');
					td1.className = linkPrinterClass;
					td2 = document.createElement('td');
					td2.className = linkPrinterClass;
					
					table.appendChild(tr);
					tr.appendChild(td1);
					tr.appendChild(td2);
					
					td1.innerHTML = a.title == "" ? a.text : a.title;
					td2.innerHTML = StringSplit(a.href, '/', 100);
				}
			}
		}		
	}
}
