/*============================================================================*/
        /* Public Functions                                                           */
        /*============================================================================*/

        public void Destroy()
        {
            _source.STATE_CHANGE -= HandleStateChange;

            _source.PRE_INITIALIZE  -= HandlePreInitialize;
            _source.INITIALIZE      -= HandleInitialize;
            _source.POST_INITIALIZE -= HandlePostInitialize;

            _source.PRE_SUSPEND  -= HandlePreSuspend;
            _source.SUSPEND      -= HandleSuspend;
            _source.POST_SUSPEND -= HandlePostSuspend;

            _source.PRE_RESUME  -= HandlePreResume;
            _source.RESUME      -= HandleResume;
            _source.POST_RESUME -= HandlePostResume;

            _source.PRE_DESTROY  -= HandlePreDestroy;
            _source.DESTROY      -= HandleDestroy;
            _source.POST_DESTROY -= HandlePostDestroy;

            _source      = null;
            _destination = null;
        }
		/*============================================================================*/
		/* Public Functions                                                           */
		/*============================================================================*/

		public void Destroy()
		{
			_source.STATE_CHANGE -= HandleStateChange;

			_source.PRE_INITIALIZE -= HandlePreInitialize;
			_source.INITIALIZE -= HandleInitialize;
			_source.POST_INITIALIZE -= HandlePostInitialize;

			_source.PRE_SUSPEND -= HandlePreSuspend;
			_source.SUSPEND -= HandleSuspend;
			_source.POST_SUSPEND -= HandlePostSuspend;

			_source.PRE_RESUME -= HandlePreResume;
			_source.RESUME -= HandleResume;
			_source.POST_RESUME -= HandlePostResume;

			_source.PRE_DESTROY -= HandlePreDestroy;
			_source.DESTROY -= HandleDestroy;
			_source.POST_DESTROY -= HandlePostDestroy;

			_source = null;
			_destination = null;
		}
        /*============================================================================*/
        /* Constructor                                                                */
        /*============================================================================*/

        public LifecycleEventRelay(ILifecycleEvent source, IEventDispatcher destination)
        {
            _source      = source;
            _destination = destination;

            _source.STATE_CHANGE += HandleStateChange;

            _source.PRE_INITIALIZE  += HandlePreInitialize;
            _source.INITIALIZE      += HandleInitialize;
            _source.POST_INITIALIZE += HandlePostInitialize;

            _source.PRE_SUSPEND  += HandlePreSuspend;
            _source.SUSPEND      += HandleSuspend;
            _source.POST_SUSPEND += HandlePostSuspend;

            _source.PRE_RESUME  += HandlePreResume;
            _source.RESUME      += HandleResume;
            _source.POST_RESUME += HandlePostResume;

            _source.PRE_DESTROY  += HandlePreDestroy;
            _source.DESTROY      += HandleDestroy;
            _source.POST_DESTROY += HandlePostDestroy;
        }
		/*============================================================================*/
		/* Constructor                                                                */
		/*============================================================================*/

		public LifecycleEventRelay (ILifecycleEvent source, IEventDispatcher destination)
		{
			_source = source;
			_destination = destination;

			_source.STATE_CHANGE += HandleStateChange;

			_source.PRE_INITIALIZE += HandlePreInitialize;
			_source.INITIALIZE += HandleInitialize;
			_source.POST_INITIALIZE += HandlePostInitialize;

			_source.PRE_SUSPEND += HandlePreSuspend;
			_source.SUSPEND += HandleSuspend;
			_source.POST_SUSPEND += HandlePostSuspend;

			_source.PRE_RESUME += HandlePreResume;
			_source.RESUME += HandleResume;
			_source.POST_RESUME += HandlePostResume;

			_source.PRE_DESTROY += HandlePreDestroy;
			_source.DESTROY += HandleDestroy;
			_source.POST_DESTROY += HandlePostDestroy;
		}