/**********************************************************************************
 * 
 * LastChangedDate:		$Date: 2006-07-04 13:25:51 +0200 (Tue, 04 Jul 2006) $
 * LastChangedRevision	$Rev: 5 $
 * LastChangedBy:		$Author: $
 * HeadURL:				$URL: http://linux/cd/geuzenvloot/trunk/js/dom.js $
 * ID:					$Id: dom.js 5 2006-07-04 11:25:51Z  $
 * 
/**********************************************************************************/

nl.xd.util.DOM = function() {
	var ua = navigator.userAgent.toLowerCase() ;
	var isOpera = ( ua.indexOf( 'opera' ) != -1 ) ;
	var isIE = ( ua.indexOf( 'msie' ) != -1 && ! isOpera ) ;
	
	/**
	 * static methods
	 */
	return {
		get: function( id ) {
			return document.getElementById( id ) ;
		} ,
		getParent: function( element , tagName , className ) {
			if ( tagName == null ) {
				return element.parentNode ;
			} else {
				while ( element.tagName != null ) {
					if ( ( element.tagName.toLowerCase() == tagName ) && ( className == null || this.hasClass( element , className ) ) ) {
						return element ;
					} ;
					
					element = element.parentNode ;
				} ;
				
				return element ;
			} ;
		} ,
		hasClass: function( element , className ) {
			var re = new RegExp( '(?:^|\\s+)' + className + '(?:\\s+|$)' ) ;
			
			return re.test( element[ 'className' ] ) ;
		} ,
		addClass: function( element , className ) {
			if ( this.hasClass( element , className ) ) {
				return ;
			} ;
			
			element[ 'className' ] = [ element[ 'className' ] , className ].join( ' ' ) ;
		} ,
		removeClass: function( element , className ) {
			if ( ! this.hasClass( element , className ) ) {
				return ;
			} ;
			
			var re = new RegExp( '(?:^|\\s+)' + className + '(?:\\s+|$)' , 'g' ) ;
			var c = element[ 'className' ] ;
			
			element[ 'className' ] = c.replace( re , ' ' ) ;
		} ,
		replaceClass: function( element , oldClassName , newClassName ) {
			this.removeClass( element , oldClassName ) ;
			this.addClass( element , newClassName ) ;
		} ,
		position: function( element ) {
			if ( element.parentNode === null ) {
				return false ;
            } ;
            
            var parent = element.offsetParent ;
            var pos = [ element.offsetLeft , element.offsetTop ] ;
            
            while ( parent != null ) {
            	pos[ 0 ] += parent.offsetLeft ;
            	pos[ 1 ] += parent.offsetTop ;
            	
            	parent = parent.offsetParent ;
            } ;
			
			return pos ;
		}
	} ;
} () ;
