// Zs cross browser DHTML lib
// IE4+, NS4, NS6+, Opera 6+ (5+?)
//
// el = get_elem_by_id(id)
// ww = get_window_width()
// wh = get_window_height()
// w = get_width(el)
// set_width(el, w)
// h = get_height(el)
// set_height(el, h)
// l = get_left(el)
// set_left(el, l)
// t = get_top(el)
// set_top(el, t)
// set_pos(el, l, t)
// v = get_visible(el)
// set_visible(el, v)


var stddom = document.all || document.getElementById;
var is_ns4 = document.layers;

// fetch an element by its id, analogous to document.getElementById(id) where available
function get_elem_by_id(id)
{
	res = false;
	if (document.getElementById)
		res = document.getElementById(id);
	else if (document.all)
		res = document.all[id];
	else if (is_ns4)
		res = _ns4_get_elem_by_id(document, id);
	return res;
}
// NS4 needs special treatment as layers within layers are not visible from the top level.
// So we have to search for those.
function _ns4_get_elem_by_id(doc, id)
{
	res = false;
	if (doc[id])
		res = doc[id];
	else {
		layers = doc.layers;
		for (i = 0; !res && i < layers.length; ++i) {
			res = _ns4_get_elem_by_id(layers[i].document, id)
		}
	}
	return res;
}

function get_window_width()
{
	ww = false;
	if (stddom)
		ww = parseInt(window.offsetWidth); //GTK does not work
	else if (is_ns4)
		ww = window.innerWidth;
	return ww;
}
function get_window_height()
{
	wh = false;
	if (stddom)
		wh = parseInt(window.offsetHeight);	// GTK does not work
	else if (is_ns4)
		wh = window.innerHeight;
	return wh;
}

// get element dimensions
function get_width(el)
{
	w = false;
	if (stddom)
		w = parseInt(el.offsetWidth);
	else if (is_ns4)
		w = el.clip.width;
	return w;
}
function get_height(el)
{
	h = false;
	if (stddom)
		h = parseInt(el.offsetHeight);
	else if (is_ns4)
		h = el.clip.height;
	return h;
}

// get / set element position
function get_left(el)
{
	l = false;
	if (stddom)
		l = parseInt(el.style.left);
	else if (is_ns4)
		l = el.left;
	return l;
}
function set_left(el, l)
{
	if (stddom)
		el.style.left = l;
	else if (is_ns4)
		el.left = l;
}

function get_right(el)
{
	l = false;
	if (stddom)
		l = parseInt(el.style.right);
	else if (is_ns4)
		l = el.right;
	return l;
}
function set_right(el, l)
{
	if (stddom)
		el.style.right = l;
	else if (is_ns4)
		el.right = l;
}

function get_top(el)
{
	t = false;
	if (stddom)
		t = parseInt(el.style.top);
	else if (is_ns4)
		t = el.top;
	return t;
}
function set_top(el, t)
{
	if (stddom)
		el.style.top = t;
	else if (is_ns4)
		el.top = t;
}

function set_pos(el, x, y)
{
	set_left(el, x);
	set_top(el, y);
}

// get / set element visibility
// determine visibility status for an element, return true for visible and false for invisible
function get_visible(el)
{
	v = false;
	if (stddom)
		v = el.style.visibility;
	else if (is_ns4)
		v = el.visibility;
	if (v == 'show' || v == 'visible')
		v = true;
	// if v indicates an inherited value, we need to determine the vvisibility of the parent element.
	else if (v == 'inherit' || v == '') {
		p = _get_parent(el);
		if (p && p != window)
			v = get_visible(p);
		else
			v = true;
	} else
		v = false;
	return v;
}		
// helper for get_visible: find the parent element for a given element
function _get_parent(el)
{
	p = false;
	if (stddom)
		p = el.parentElement;
	else if (is_ns4 && el.parentLayer)
		p = el.parentLayer;
	return p;
}

function set_visible(el, visible)
{
	if (stddom) {
		if (visible)
			el.style.visibility = 'visible';
		else
			el.style.visibility = 'hidden';
	} else if (is_ns4) {
		if (visible)
			el.visibility = 'visible';
		else
			el.visibility = 'hidden';
	}
}


