/*
+--------------------------------------------------------------------
| Version	Date		Comment
| 3.01		2004/11/19	initial version
|
| Copyright (c) 2004 Rosman (http://www.rosman.co.at)
| Credits: Peter-Paul Koch (http://www.quirksmode.org)
+--------------------------------------------------------------------
| Purpose
| dhtml support
+--------------------------------------------------------------------
| Usage
| var _dhtml ( boolean)
| 	browser support for dhtml
| function position ( _name )
| 	create position object by finding x and y coordinates on the
| 	browser area for a named object
| function getobj ( _name )
| 	browser independand get object by name function
| function visible ( _name, _flag )
| 	set visibility to _flag (bool) for object named _name
| function uniquevisible ( _name ) {
| 	make object named _name visible and the last object displayed
| 	using this function invisible
+--------------------------------------------------------------------
| Appl. Dependencies:  -
+--------------------------------------------------------------------
| Author(s): Johan Rosman <johan@rosman.co.at>
+--------------------------------------------------------------------

+--------------------------------------------------------------------
| Version History:
+--------------------------------------------------------------------
| Version	Date		Comment
+--------------------------------------------------------------------
| 3.01		2004/11/19	initial version
+--------------------------------------------------------------------
*/

/* for testing what a browser supports :
if (document.getElementById) alert ("id" );
if (document.all) alert ("all");
if (document.layers) alert ( "layers");
/* ... */
if ( !window._dhtml_js ) {

	// variable to enable dependency / multiple calls check
	var _dhtml_js = true;

	// exported variable(s)
	var _dhtml = (document.getElementById || document.all || document.layers);
	var _displayed = '';

	function position ( _name ) {
		var _obj = new getobj ( _name );
		this.x = 0;
		this.y = 0;
		if (_obj.obj.offsetParent) {
			var _tmpobj = _obj.obj
			while (_tmpobj.offsetParent) {
				this.y += _tmpobj.offsetTop;
				_tmpobj = _tmpobj.offsetParent;
			}
			var _tmpobj = _obj.obj
			while (_tmpobj.offsetParent) {
				this.x += _tmpobj.offsetLeft;
				_tmpobj = _tmpobj.offsetParent;
			}
		} else {
			if (_obj.obj.x) this.x += _obj.obj.x;
			if (_obj.obj.y) this.y += _obj.obj.y;
		}
	} // position

	// browser independand get object by name function
	function getobj ( _name ) {
		if ( document.getElementById ) {
			if ( this.obj = document.getElementById(_name) ) {
				this.style = document.getElementById(_name).style;
			}
		} else if ( document.all ) {
			if ( this.obj = document.all[_name] ) {
				this.style = document.all[_name].style;
			}
		} else if ( document.layers ) {
			if ( this.obj = getobj_NN4 ( document, _name ) ) {
				this.style = this.obj;
			}
		}
	}

	// internal helper function for getobj
	function getobj_NN4 ( _obj, _name ) {
		var _x = _obj.layers;
		var _found_layer;
		for (var _i=0; _i<_x.length; _i++) {
			if (_x[_i].id == _name)
				_found_layer = _x[_i];
			else if (_x[_i].layers.length)
				var _tmp = getobj_NN4(_x[_i],_name);
			if (_tmp) _found_layer = _tmp;
		}
		return _found_layer;
	}

	// set visibility flag
	function visible ( _name, _flag ) {
		if (!_dhtml) return;
		if ( _name == '' ) _name = _displayed;
		if ( _name != '' ) {
			var _x = new getobj ( _name );
			if ( _x.style ) {
				_x.style.visibility = ( _flag ) ? 'visible' : 'hidden'
				if (( _name == _displayed ) && ( !_flag )) { _displayed = ''; }
			}
		}
	}

	// set visibility flag unique for one object
	function uniquevisible ( _name ) {
		if (!_dhtml) return;
		if ( _name != _displayed ) {
			if ( _displayed ) visible ( _displayed, false );
			visible ( _name, true );
			_displayed = _name;
		}
	}
}

