// Stupid browser-detect
var IE = (navigator.appName.indexOf('Microsoft') != -1) ? true : false ;

// Parse <pre> tags
var pre_array = document.getElementsByTagName('pre');
for (var i = 0; i < pre_array.length; i++) {
	var pre = pre_array[i].innerHTML;
	var length = 0;

	// What? IE does stupid shit differently? NO WAI!!!
	if (IE) {
		pre = pre.split("\n");
		length = pre.length;
	} else {
		pre = pre.split('<br>');
		length = pre.length - 1;
	}

	// creates a <table> element and a <tbody> element
	table = document.createElement("table");
	tbody = document.createElement("tbody");

	// creating all cells
	for (var j = 0; j < length; j++) {

		// Assign cell HTML
		var html = pre[j];
		if ( (html == '') && (j != (pre.length-1) ) ) { html = '&nbsp;'; }

		// Determine cell classes
        if (j == (length - 1)) {
            cell_number_class = 'number line_' + (j + 1) + ' last';
            cell_code_class   = 'code-line last'
        } else {
            cell_number_class = 'number line_' + (j + 1);
            cell_code_class   = 'code-line'
        }

		// creates a <tr> element
		tr = document.createElement("tr");

		// Create line number cell
		cell_number = document.createElement("td");
		text_node = document.createTextNode("");
		cell_number.appendChild(text_node);
		cell_number.className = cell_number_class;
		tr.appendChild(cell_number);

		// Create code cell
		cell_code = document.createElement("td");
		cell_code.innerHTML = html;
		cell_code.className = cell_code_class;
		tr.appendChild(cell_code);

		// appends the row <tr> into <tbody>
		tbody.appendChild(tr);
	}
	// appends <tbody> into <table>
	table.appendChild(tbody);
	table.className = 'code';
	// Appends each table next to the corresponding <pre> element
	pre_array[i].parentNode.insertBefore(table, pre_array[i].nextSibling );
}
// Have to do this in reverse; otherwise the above code freaks out.
for (var i = (pre_array.length-1); i >= 0; i--) {
	pre_array[i].parentNode.removeChild(pre_array[i]);
}
