// File: /include/js/Shared/ClientHandlers/ActivationHandler/ActivationHandler.js
// Desc: Activation handler
// $Revision: 16$
// $Date: 5/14/2007 12:10:34 PM$
// $Author: Donnie Tognazzini$
// $NoKeywords$

/******************************************************************************
  Dependencies:

    Shared/Extensions/Object.js
    Shared/XML/XML.js
    Shared/XML/Exceptions.js
    Shared/Http/HTTP.js
    Shared/Http/URL.js
    Shared/Messages/Exceptions.js
    Shared/Messages/RequestMessages.js
    Shared/Messages/ResponseMessages.js

 ******************************************************************************/

/******************************************************************************
  ACT_ActivationHandler C'tor

    Parameters:
        [in] source
        [in] version
        [in] os
        [in] setCarrierInfoSucceededCallback
        [in] setCarrierInfoFailedCallback
        [in] verifyPhoneSucceededCallback
        [in] verifyPhoneFailedCallback

 ******************************************************************************/
function ACT_ActivationHandler( source,
                                version,
                                os,
                                setCarrierInfoSucceededCallback,
                                setCarrierInfoFailedCallback,
                                verifyPhoneSucceededCallback,
                                verifyPhoneFailedCallback )
{
    this.m_source    = source;
    this.m_version   = version;
    this.m_os        = os;

    this.m_onSetCarrierInfoSucceeded  = setCarrierInfoSucceededCallback;
    this.m_onSetCarrierInfoFailed     = setCarrierInfoFailedCallback;
    this.m_onVerifyPhoneSucceeded     = verifyPhoneSucceededCallback;
    this.m_onVerifyPhoneFailed        = verifyPhoneFailedCallback;

    var self = this;

    // HTTP client for SetCarrierInfo messages
    this.m_setCarrierInfoHttpClient  = new HttpClient( );
    this.m_setCarrierInfoHttpClient.onError        = function( errorMessage )
    {
        self.handleSetCarrierInfoError( errorMessage );
    };
    this.m_setCarrierInfoHttpClient.onSuccess      = function( xmlResponse )
    {
        self.handleSetCarrierInfoResponse( xmlResponse );
    };
    // HTTP client for VerifyPhone messages
    this.m_verifyPhoneHttpClient  = new HttpClient( );
    this.m_verifyPhoneHttpClient.onError        = function( errorMessage )
    {
        self.handleVerifyPhoneError( errorMessage );
    };
    this.m_verifyPhoneHttpClient.onSuccess      = function( xmlResponse )
    {
        self.handleVerifyPhoneResponse( xmlResponse );
    };
}

ACT_ActivationHandler.prototype =
{
    StopAllRequests : function( )
    {
        try
        {
            try
            {
                this.m_setCarrierInfoHttpClient.reset( );
            }
            catch ( e )
            {
                EX_Log( "ACT_ActivationHandler::StopAllRequests( ) - stopping set carrier info request:\n" + e.message );
            }

            try
            {
                this.m_verifyPhoneHttpClient.reset( );
            }
            catch ( e )
            {
                EX_Log( "ACT_ActivationHandler::StopAllRequests( ) - stopping verify phone request:\n" + e.message );
            }
        }
        catch ( e )
        {
            EX_ASSERT_NO_EXCEPTIONS( e, "ACT_ActivationHandler::StopAllRequests( )" );
        }
    },

    IsSetCarrierInfoRequestInProgress : function( )
    {
        try
        {
            return this.m_setCarrierInfoHttpClient.IsRequestInProgress( );
        }
        catch ( e )
        {
            EX_ASSERT_NO_EXCEPTIONS( e, "ACT_ActivationHandler::IsSetCarrierInfoRequestInProgress( )" );
        }
    },

    IsVerifyPhoneRequestInProgress : function( )
    {
        try
        {
            return this.m_verifyPhoneHttpClient.IsRequestInProgress( );
        }
        catch ( e )
        {
            EX_ASSERT_NO_EXCEPTIONS( e, "ACT_ActivationHandler::IsVerifyPhoneRequestInProgress( )" );
        }
    },

    /**************************************************************************
       Invoke callback functions
     **************************************************************************/

    invokeOnSetCarrierInfoSucceededCallback:function( responseMessage )
    {
        this.m_onSetCarrierInfoSucceeded( responseMessage );
    },

    invokeOnSetCarrierInfoFailedCallback:function( statusMessage )
    {
        this.m_onSetCarrierInfoFailed( statusMessage );
    },

    invokeOnVerifyPhoneSucceededCallback:function( responseMessage )
    {
        this.m_onVerifyPhoneSucceeded( responseMessage );
    },

    invokeOnVerifyPhoneFailedCallback:function( statusMessage )
    {
        this.m_onVerifyPhoneFailed( statusMessage );
    },

    /**************************************************************************
       SetCarrierInfo methods
     **************************************************************************/

    setCarrierInfo:function( accountNumber,
                             uString,
                             carrierId )
    {
        try
        {
            var requestMessage = new MSG_SetCarrierInfoRequest( this.m_source,
                                                                this.m_version,
                                                                this.m_os,
                                                                accountNumber,
                                                                uString,
                                                                carrierId );

            this.m_setCarrierInfoHttpClient.sendRequest( HTTP_VERB_POST,
                                                         VM_URL.WS1,
                                                         VM_URL.WS2,
                                                         "text/xml",
                                                         requestMessage.asXML( ) );
        }
        catch ( e )
        {
            this.invokeOnSetCarrierInfoFailedCallback( "Failed to send SetCarrierInfo message" );
        }
    },

    handleSetCarrierInfoResponse:function( xmlResponse )
    {
        try
        {
            var responseMessage = new MSG_SetCarrierInfoResponse( xmlResponse );

            this.invokeOnSetCarrierInfoSucceededCallback( responseMessage );
        }
        catch ( e )
        {
            // Failed to parse/process the response
            this.invokeOnSetCarrierInfoFailedCallback( "Failed to process SetCarrierInfo response" );
        }
    },

    handleSetCarrierInfoError:function( errorMessage )
    {
        this.invokeOnSetCarrierInfoFailedCallback( errorMessage );
    },

    /**************************************************************************
       VerifyPhone methods
     **************************************************************************/

    verifyPhone:function( accountNumber,
                          uString,
                          verificationCode,
                          phoneCC,
                          phoneNN )
    {
        try
        {
            var requestMessage = new MSG_VerifyPhoneRequest( this.m_source,
                                                             this.m_version,
                                                             this.m_os,
                                                             accountNumber,
                                                             uString,
                                                             verificationCode,
                                                             phoneCC,
                                                             phoneNN );

            this.m_verifyPhoneHttpClient.sendRequest( HTTP_VERB_POST,
                                                      VM_URL.WS1,
                                                      VM_URL.WS2,
                                                      "text/xml",
                                                      requestMessage.asXML( ) );
        }
        catch ( e )
        {
            EX_Log( "ACT_ActivationHandler::verifyPhone( )\n" + e.message );
            this.invokeOnVerifyPhoneFailedCallback( "Failed to send VerifyPhone message" );
        }
    },

    handleVerifyPhoneResponse:function( xmlResponse )
    {
        try
        {
            var responseMessage = new MSG_VerifyPhoneResponse( xmlResponse );

            this.invokeOnVerifyPhoneSucceededCallback( responseMessage );
        }
        catch ( e )
        {
            EX_Log( "ACT_ActivationHandler::handleVerifyPhoneResponse( )\n" + e.message );
            this.invokeOnVerifyPhoneFailedCallback( "Failed to process VerifyPhone response" );
        }
    },

    handleVerifyPhoneError:function( errorMessage )
    {
        try
        {
            this.invokeOnVerifyPhoneFailedCallback( errorMessage );
        }
        catch ( e )
        {
            EX_Log( "ACT_ActivationHandler::handleVerifyPhoneError( )\n" + e.message );
        }
    }
}

