var agt = navigator.userAgent.toLowerCase();
var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));

if (is_ie) {
	window.onbeforeprint = OnBeforePrint;
	window.onafterprint = OnAfterPrint;
}

function getElementsByClassName(oElm, strTagName, strClassName)
{
	var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for (var i=0; i<arrElements.length; i++) {
		oElement = arrElements[i];      
		if(oRegExp.test(oElement.className)) {
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

function OnBeforePrint()
{
	ReplaceTags(true);
}

function OnAfterPrint()
{
	ReplaceTags(false);
}

function ReplaceTags(bBeforePrint)
{
	var pTags = null;
	if (bBeforePrint) {
		pTags = getElementsByClassName(document, "p", "gdlcode");
	} else {
		pTags = getElementsByClassName(document, "pre", "gdlcode");
	}

	if (pTags != null) {
		for (i=0; i<pTags.length; i++) {
			var newTag;
			if (bBeforePrint) {
				newTag = document.createElement("pre");
				newTag.className = "gdlcode";
			} else {
				newTag = document.createElement("p");
				newTag.className = "gdlcode";
			}
			for (j=0; j<pTags[i].childNodes.length; j++) {
				var newChild = pTags[i].childNodes[j].cloneNode(true);
				newTag.appendChild(newChild);
			}
			pTags[i].parentNode.replaceChild(newTag, pTags[i]);
		}
	}
}
