function enhancePage() {

	if (!document.getElementsByTagName) return;

	/****************************************************************************************
	The following scripts enhance older browsers in lieu of support for the CSS3 selectors.
	They can be removed once there is sufficient support for CSS3.
	****************************************************************************************/

	if (document.getElementById("navlist")) { //Apply different styling to last item on main navigation
		var nav=document.getElementById("navlist");
		var items=nav.getElementsByTagName("li");
		for (var i=0; i<items.length; i++) {
			var item=items[i];
			if (i==items.length-1) {
				item.style.backgroundImage="none";
			}
		}
	}

	if (document.getElementById("subnav")) { //Apply different styling to last item on sub-navigation
		var nav=document.getElementById("subnav");
		var items=nav.getElementsByTagName("li");
		for (var i=0; i<items.length; i++) {
			var item=items[i];
			if (i==items.length-1) {
				item.style.borderBottom="0";
			}
		}
	}

	if (document.getElementById("details")) { //Apply different styling to last item on details panels
		var items=document.getElementsByClassName("item");
		for (var i=0; i<items.length; i++) {
			var item=items[i];
			if (i==items.length-1) {
				item.style.borderBottom="0";
			}
		}
	}

	if (document.getElementById("listings_table")) { //Apply different styling to last table heading on listings table
		var table=document.getElementById("listings_table");
		var items=table.getElementsByTagName("th");
		for (var i=0; i<items.length; i++) {
			var item=items[i];
			if (i==items.length-1) {
				item.style.borderRight="0";
			}
		}
	}

	if (document.getElementById("details_table")) { //Apply tiger striping to details table
		var table=document.getElementById("details_table");
		var items=table.getElementsByTagName("tr");
		var alt=0;
		for (var i=0; i<items.length; i++) {
			var item=items[i];
			if (alt==0) {
				item.style.backgroundColor="#ebebeb";
				alt=1;
			} else {
				alt=0;
			}
		}
	}

	/****************************************************************************************
	General document enhancement
	****************************************************************************************/

	var anchors = document.getElementsByTagName("a"); //Open external links in new window
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") anchor.target = "_blank";
	}

	var $images = document.getElementsByTagName("img"); //Determine rollover states for image
	for (var i=0; i<$images.length; i++) {
		var $image = $images[i];
		if ($image.getAttribute("rel")) {
			var $original_image=$image.src;
			setAttribute($image,"onmouseover","switchImage('"+$image.getAttribute("rel")+"','"+$image.id+"');");
			setAttribute($image,"onmouseout","switchImage('"+$original_image+"','"+$image.id+"');");
		}
	}

	var $images = document.getElementsByTagName("input"); //Determine rollover states for form input buttons
	for (var i=0; i<$images.length; i++) {
		var $image = $images[i];
		if ($image.getAttribute("rel")) {
			var $original_image=$image.src;
			setAttribute($image,"onmouseover","switchImage('"+$image.getAttribute("rel")+"','"+$image.id+"');");
			setAttribute($image,"onmouseout","switchImage('"+$original_image+"','"+$image.id+"');");
		}
	}

	$(document).ready(function(){ //Email address obfuscation (relies on JQuery)
		$('a.email').each(function(){
			e = this.rel.replace('/','@');
			this.href = 'mailto:' + e;
			$(this).text(e);
		});
	});

}

document.getElementsByClassName = function($class) { //Get array of elements on class name
	var $results = Array();
	var $elements = document.getElementsByTagName("*");
	for (var $i=0; $i<$elements.length; $i++) {
		var $classes = $elements[$i].className.split(" ");
		for (var $j=0; $j<$classes.length; $j++) {
			if ($classes[$j] == $class) {
				$results[$results.length] = $elements[$i];
			}
		}
	}
	return $results;
}

function setAttribute (object, attributeName, attributeValue) { //Set attribute method
	var attributeNode = document.createAttribute (attributeName);
	attributeNode.value = attributeValue;
	object.setAttributeNode (attributeNode);
} 

function switchImage(src,trg) { //Image switch method
	var target=document.getElementById(trg);
	target.src=src;
	return false;
}

window.onload=enhancePage;