function showTab(obj, tabId)
{
	var uls = document.getElementsByTagName("ul");
	for (var i=0; i<uls.length; i++)
	{
		if (uls[i].className == "hbuttons")
		{
			for(var j=0; j<uls[i].childNodes.length; j++)
			{
				uls[i].childNodes[j].className = "";
			}
			break;
		}
	}
	obj.className = "sel";
	var className = "tabContent";
	for (var i=1; i<6; i++)
		document.getElementById("tab_" + i).className = className;

	var tab = document.getElementById(tabId);
	tab.className = "sel " + className;
}

/**
* Position value on a UserScale to be directly above div. Adjust
* for width of value and ticker position
*/
function positionUserScaleTicker(id)
{
	alert("bla");
	var v = document.getElementById("userScaleValue_" + id);
	var t = document.getElementById("userScaleTicker_" + id);
	
	v.style.left = 
		Math.floor(
			Math.min(
				Math.max(
					0, 
					t.offsetLeft - v.offsetWidth/2), 
				t.parentNode.offsetWidth - v.offsetWidth)) 
		+ 'px';
}

/**
* Adds an event listener to a specified object
* @param object elm object on which to attach the listener
* @param string evType event type (ie.: click)
* @param string fn function to execute when event is triggered
* @param bool useCapture use event capturing and bubbling
*/
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}
	else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	}
	else {
		elm['on' + evType] = fn;
	}
}


