/**********************************************************************************
 * 
 * LastChangedDate:		$Date: 2007-01-12 08:06:05 +0100 (Fri, 12 Jan 2007) $
 * LastChangedRevision	$Rev: 33 $
 * LastChangedBy:		$Author: $
 * HeadURL:				$URL: http://linux/cd/balance/trunk/httpdocs/js/nl/xd/util/event.js $
 * ID:					$Id: event.js 33 2007-01-12 07:06:05Z  $
 * 
/**********************************************************************************/

// Create namespace
if ( ! window.nl.xd.util ) {
	window.nl.xd.util = {} ;
} ;

// Event Class
nl.xd.util.Event = function() {
	var listeners = [] ;
	
	return {
		addListener: function( element , type , func ) {
			listeners[ listeners.length ] = [ 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() ; } ) ;
