var events = [] ;
var gid = 0 ;
function add_event_handler ( oTarget, sEventType, fnHandler ) 
{
//alert( 'assigning for ' + oTarget.id + ' on ' + sEventType + fnHandler ) ;
	if ( oTarget.addEventListener ) 
	{ //for DOM-compliant browsers
		oTarget.addEventListener( sEventType, fnHandler, false ) ;
	} 
	else if ( oTarget.attachEvent && 'mouseover' != sEventType && 'mouseout' != sEventType ) 
	{ //for IE
		oTarget.attachEvent( "on" + sEventType, fnHandler);
	} 
	else 
	{ //for all others
		oTarget[ "on" + sEventType] = fnHandler;
	}

	if ( '' == oTarget.id )
		oTarget.id = gid++ ;
//alert( 'assigning ' + fnHandler + ' to ' + oTarget.id + ' on ' + sEventType ) ;		
	//remember assigned handler
	if ( undefined == events[ oTarget.id] )
		events[ oTarget.id] = [] ;
	events[ oTarget.id][ sEventType ] = fnHandler ;
};

function get_assigned_event_handler( oTarget, sEventType )  
{
	var fnHandler = events[ oTarget.id ][ sEventType ] ;
	return fnHandler ;
}

function remove_event_handler( oTarget, sEventType ) 
{
	var fnHandler = events[ oTarget.id][ sEventType ] ;
//alert(  'detaching ' + fnHandler + ' to ' + oTarget.id + ' on ' + sEventType ) ;	
	if ( undefined == fnHandler )
	{
		//alert( 'not found for ' + oTarget.id ) ;
		return ;
	}
	

	if (oTarget.removeEventListener) 
	{ //for DOM-compliant browsers
		oTarget.removeEventListener( sEventType, fnHandler, false );
	} 
	else if (oTarget.detachEvent  && 'mouseover' != sEventType && 'mouseout' != sEventType ) 
	{ //for IE
		oTarget.detachEvent( "on" + sEventType, fnHandler);
	} 
	else { //for all others
		oTarget[ "on" + sEventType] = null;
	}
};