/**********************************************************************************
 * 
 * LastChangedDate:		$Date: 2006-08-11 10:18:36 +0200 (Fri, 11 Aug 2006) $
 * LastChangedRevision	$Rev: 41 $
 * LastChangedBy:		$Author: $
 * HeadURL:				$URL: http://linux/cd/rdbm/trunk/httpdocs/js/event.js $
 * ID:					$Id: event.js 41 2006-08-11 08:18:36Z  $
 * 
/**********************************************************************************/

nl.xd.util.Event = function() {
	var listeners = [] ;
	
	return {
		addListener: function( element , type , func ) {
			listeners.push( [ element , type , func ] ) ;
			
			if ( element.addEventListener ) {
				element.addEventListener( type , func , false ) ;
			} else if ( element.attachEvent ) {
				element.attachEvent( 'on' + type , func ) ;
			} ;
		} ,
		removeListener: function( element , type , func ) {
			if ( element.removeEventListener ) {
				element.removeEventListener( type , func , false ) ;
			} else if ( element.detachEvent ) {
				element.detachEvent( 'on' + type , func ) ;
			} ;
			
			var index = -1 ;
			
			for ( var i = 0; i < listeners.length; i++ ) {
			 	var listener = listeners[ i ] ;
			 	
				if ( listener && listener[ 2 ] == func && listener[ 0 ] == element && listener[ 1 ] == type ) {
					index = i ;
				} ;
			} ;
			
			if ( index >= 0 ) {
				delete listeners[ index ];
			} ;
			
			return true;
		} ,
		unload: function() {
			if ( listeners && listeners.length > 0 ) {
				for ( var i = 0; i < listeners.length; ++i ) {
					this.removeListener( listeners[ i ][ 0 ] , listeners[ i ][ 1 ] , listeners[ i ][ 2 ] ) ;
				} ;
			} ;
		}
	} ;
} () ;

nl.xd.util.Event.addListener( window , 'unload' , function() { nl.xd.util.Event.unload() ; } ) ;
