var modalboxdisplayed=null;

// ----- public ----------
function hideshow(i)
{
	if (document.getElementById)
	{
		current = document.getElementById(i).style.display;
		if (current != 'block') {current = 'block';} else {current = 'none'}
		document.getElementById(i).style.display = current;
	}
	else if (document.all)
	{
		current = document.all[i].style.display;
		if (current != 'block') {current = 'block';} else {current = 'none'}
		document.all[i].style.display = current;
	}
}


function hideModal() {
	returnObjById('modalbg').style.visibility = "hidden";
	if (modalboxdisplayed != null)
	  modalboxdisplayed.style.visibility = "hidden";
	modalboxdisplayed = null;
}

// Usage: showModal('ID', 'header text', 'body text'). The modal box has to have buttons of its own.
function showModal(name, head, body) {
	if (name != null) obj = returnObjById(name);
	if (name == null) obj = null;
	hideModal();
	modalboxdisplayed = obj;
	returnObjById('modalbg').style.visibility = "visible";
	if (obj != null) {
		obj.style.visibility = "visible";
		getElementByClassName(obj, "*", "modalboxhead").innerHTML = head;
		getElementByClassName(obj, "*", "modalboxbody").innerHTML = body;
	}
}

// ------ utility --------
function returnObjById( id )
{
    if (document.getElementById)
        var returnVar = document.getElementById(id);
    else if (document.all)
        var returnVar = document.all[id];
    else if (document.layers)
        var returnVar = document.layers[id];
    return returnVar;
}

function getElementByClassName(oElm, strTagName, strClassName){
	return getElementsByClassName(oElm, strClassName)[0];
}

function getElementsByClassName(oElm, classname){
	var inc=0
	// var alltags=document.all? document.all : document.getElementsByTagName("*")
	var alltags=oElm.all? oElm.all : oElm.getElementsByTagName("*")
	customcollection = new Array();
	for (i=0; i<alltags.length; i++){
		// nm = ""+ alltags[i].className;
		//if (alltags[i].className==classname) {
		if (alltags[i].className.indexOf(classname) >= 0) {
			customcollection[inc++]=alltags[i]
		}
	}
	return customcollection;
}

function getPageMousePos(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	// posx and posy contain the mouse position relative to the document
	// Do something with this information
	return Array(posx, posy);
}

// ----- util: browser tests ---------

var ie5=document.all
var ns6=document.getElementById&&!document.all

function iecompattest(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

// ---- util: events --------------

function ignoreEvent(event) {
	event.preventDefault();
	event.stopPropagation();
}

// ---- util: pix positions -------

function getRelativeOffsets(obj) {
	node = obj;
	x = 0;
	y = 0;
	rx = obj.offsetLeft;
	ry = obj.offsetTop;
	rset = false;
	while (node != null && rset == false) {
		// alert(node.id+" top: "+node.offsetTop+" "+node.style.position+" offsetparent: "+node.offsetParent);
		if (node.offsetLeft) x += node.offsetLeft;
		if (node.offsetTop) y += node.offsetTop;
		if (node.style && node.style.position == 'relative' && !rset ) {rset = true;}
		if (rset == false) { rx = x; ry = y; }
		node = node.offsetParent;
	}
	return new Array(rx,ry);
}

function getAbsoluteOffsets(obj) {
	node = obj;
	x = 0;
	y = 0;
	rx = obj.offsetLeft;
	ry = obj.offsetTop;
	rset = false;
	while (node != null) {
		// alert(node.id+" top: "+node.offsetTop+" "+node.style.position+" offsetparent: "+node.offsetParent);
		if (node.offsetLeft) x += node.offsetLeft;
		if (node.offsetTop) y += node.offsetTop;
		node = node.offsetParent;
	}
	return new Array(x,y);
}

function translatePx(str) {
	return str.replace("px", "") - 0;
}
