function injectTableHighlighting()
{
	var charts = document.getElementById('charts');
	var rows = charts.getElementsByTagName('tr');
	for (var j = 0; j < rows.length; j++) {
		rows[j].onmouseover = function() {
			this.className += '_hover';
		}
		rows[j].onmouseout = function() {	
			this.className = this.className.replace('_hover', '');
		}
	}
}

var playingId = null;
function play(id, src)
{
	var player = document.getElementById("mp3player");
	var playerImg = document.getElementById("play_" + id);
	// first stop other players
	if (id != playingId && playingId != null) {
		player.innerHTML = "";
		document.getElementById("play_" + playingId).src = _TEMPLATE_URL + "images/play.gif";
	}
	// play
	if (player.innerHTML == '') {
		playingId = id;
		playerImg.src = _TEMPLATE_URL + "images/stop.gif";
		player.innerHTML =
    	"<object type=\"application/x-shockwave-flash\" data=\"" + _TEMPLATE_URL + "emff_standard.swf\" width=\"0\" height=\"0\">"
    	+ "<param name=\"movie\" value=\"" + _TEMPLATE_URL + "templates/emff_standard.swf\">"
    	+ "<param name=\"quality\" value=\"high\">"
    	+ "<param name=\"FlashVars\" value=\"src=" + encodeURIComponent(src) + "&amp;autostart=yes\">"
    	+ "<\/object>";
    }
    // stop
    else {
    	playingId = null;
		playerImg.src = _TEMPLATE_URL + "images/play.gif";
    	player.innerHTML = "";
    }
}

function jump2Id(s, t)
{
	var source = document.getElementById(s);
	var target = document.getElementById(t);
	var sourceOffset = getCumulativeOffset(source);
	var sourceScrollOffset = getCumulativeScrollOffset(source);
	var targetOffset = getCumulativeOffset(target);
	parent.window.scrollTo(0, targetOffset.top - (sourceOffset.top - sourceScrollOffset.top));
}

document.viewport =
{
	getDimensions: function() {
	
    	var dimensions = new Object();
    	
    	dimensions.width = self['innerWidth'] || (document.documentElement['clientWidth'] || document.body['clientWidth']);
    	dimensions.height = self['innerHeight'] || (document.documentElement['clientHeight'] || document.body['clientHeight']);

    	return dimensions;
  	},

  	getWidth: function() {
    	return this.getDimensions().width;
  	},

  	getHeight: function() {
  		return this.getDimensions().height;
  	}
};

function getDimensions(elem)
{
    var display = elem.style.display;
    if (display != 'none' && display != null) // Safari bug
		return {width: elem.offsetWidth, height: elem.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = elem.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = elem.clientWidth;
    var originalHeight = elem.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
}
  
function getCumulativeOffset(elem)
{
	var top = 0;
	var left = 0;
    do {
		top += elem.offsetTop || 0;
		left += elem.offsetLeft || 0;
		elem = elem.offsetParent;
    } while (elem);
	return {top: top, left: left};
}

function getCumulativeScrollOffset(elem)
{
    var top = 0;
    var left = 0;
    do {
		top += elem.scrollTop || 0;
		left += elem.scrollLeft || 0;
		elem = elem.parentNode;
    } while (elem);
	return {top: top, left: left};
}