// PRINT.JS

// Print Preview
function print_preview() {
	// Switch the stylesheet
	setActiveStyleSheet('Print Preview');
	// Create preview message
	add_preview_message();
	// Scroll back to the top
	backToTop();
}

function add_preview_message(){
var main_content = document.getElementById('Content');
var main_body = main_content.parentNode;
	if (document.getElementById){
		
		var preview_message = document.createElement('div');
		preview_message.id = 'PreviewMessage';
	
		// Create Heading
		var preview_header = document.createElement('h3');
		var preview_header_text = document.createTextNode('This is a print preview of this page');
		preview_header.appendChild(preview_header_text);
		
		// Create paragraph
		var preview_para = document.createElement('p');
		var preview_para_text = document.createTextNode('Without this message of course. ');
		preview_para.appendChild(preview_para_text);
		
		// Create links list
		var preview_list = document.createElement('ul');
		
		var print_function_item = document.createElement('li');
		var print_function_link = document.createElement('a');
			print_function_link.onclick = function(){ window.print(); return false; };
			print_function_link.setAttribute('href', '#');
		var print_function_link_text = document.createTextNode('Print this page');
		print_function_link.appendChild(print_function_link_text);
		print_function_item.appendChild(print_function_link);
		
		var toggle_hidden_item = document.createElement('li');
		var toggle_hidden_link = document.createElement('a');
			toggle_hidden_link.onclick = function(){ toggleHidden(); return false; };
			toggle_hidden_link.setAttribute('href', '#');
			toggle_hidden_link.id = 'ToggleHidden';
		var toggle_hidden_link_text = document.createTextNode('Hide Comments and Further Sources');
		toggle_hidden_link.appendChild(toggle_hidden_link_text);
		toggle_hidden_item.appendChild(toggle_hidden_link);
		
		var cancel_function_item = document.createElement('li');
		var cancel_function_link = document.createElement('a');
			cancel_function_link.onclick = function(){ cancel_print_preview(); return false; };
			cancel_function_link.setAttribute('href', '#');
		var cancel_function_link_text = document.createTextNode('Return to the existing page');
		cancel_function_link.appendChild(cancel_function_link_text);
		cancel_function_item.appendChild(cancel_function_link);
		
		preview_list.appendChild(print_function_item);
		if (document.getElementById("Sources") && document.getElementById("Comments"))
			preview_list.appendChild(toggle_hidden_item);
		preview_list.appendChild(cancel_function_item);
		
		// Put it all toegether
		preview_message.appendChild(preview_header); 
		preview_message.appendChild(preview_para);
		preview_message.appendChild(preview_list);
		main_body.insertBefore(preview_message, main_content);
	}
}

function cancel_print_preview() {
	// Destroy the preview message
	var print_preview = document.getElementById('PreviewMessage');
	var main_body = print_preview.parentNode;
	main_body.removeChild(print_preview);
	// Switch back stylesheet
	setActiveStyleSheet('default');
	if (document.getElementById("Sources") && document.getElementById("Comments")) {
		if (document.getElementById("Sources").style.display == "none" || document.getElementById("Comments") == "none") {
			document.getElementById("Sources").style.display = "block";
			document.getElementById("Comments").style.display = "block";
		}
	}
	return;
}

function setActiveStyleSheet(title) {
	var i, a, main;
	for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
	if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
		a.disabled = true;
		if(a.getAttribute("title") == title) a.disabled = false;
		}
	}
}

function toggleHidden() {
	if (document.getElementById("Sources").style.display == "none" || document.getElementById("Comments") == "none") {
		document.getElementById("Sources").style.display = "block";
		document.getElementById("Comments").style.display = "block";
		document.getElementById("ToggleHidden").innerHTML = "Hide Comments and Further Sources"
	} else {
		document.getElementById("Sources").style.display = "none";
		document.getElementById("Comments").style.display = "none";
		document.getElementById("ToggleHidden").innerHTML = "Show Comments and Further Sources"
	}
}

// Smooth Scrolling
function backToTop() {
	var x1 = x2 = x3 = 0;
	var y1 = y2 = y3 = 0;

	if (document.documentElement) {
		x1 = document.documentElement.scrollLeft || 0;
		y1 = document.documentElement.scrollTop || 0;
	}

	if (document.body) {
		x2 = document.body.scrollLeft || 0;
		y2 = document.body.scrollTop || 0;
	}

	x3 = window.scrollX || 0;
	y3 = window.scrollY || 0;

	var x = Math.max(x1, Math.max(x2, x3));
	var y = Math.max(y1, Math.max(y2, y3));

	window.scrollTo(Math.floor(x / 2), Math.floor(y / 2));

	if (x > 0 || y > 0) {
		window.setTimeout("backToTop()", 25);
	}
}

function createToolLinks () {
	if (!document.getElementsByTagName) return;
	
	// Create Print Link
	var printItem = document.createElement('li');
		printItem.setAttribute('id','PrintPage');
	var printLink = document.createElement('a');
		printLink.onclick = function(){ print_preview(); return false; };
		printLink.setAttribute('href', '#');
	var printLinkText = document.createTextNode('Print this page');
		printLink.appendChild(printLinkText);
		printItem.appendChild(printLink);
	var printLinkLocation = document.getElementById('Tools').getElementsByTagName('ul');
		printLinkLocation[0].appendChild(printItem);
	
	// Make Back to top link use smooth scolling
	var topLinkLocation = document.getElementById('Top').getElementsByTagName('a');
		topLinkLocation[0].onclick = function(){ backToTop(); return false; }
}

window.onload = function() {
	createToolLinks();
}