// File: /include/js/Shared/ClientHandlers/SMSHandler/SMSHandler.js
// Desc: SMS handler
// $Revision: 3$
// $Date: 5/14/2007 12:10:36 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

 ******************************************************************************/

/******************************************************************************
  SMS_SMSHandler C'tor

    Parameters:
        [in] source
        [in] version
        [in] os
        [in] sendSMSucceededCallback
        [in] sendSMSFailedCallback

 ******************************************************************************/
function SMS_SMSHandler( source,
                         version,
                         os,
                         sendSMSucceededCallback,
                         sendSMSFailedCallback )
{
    this.m_source    = source;
    this.m_version   = version;
    this.m_os        = os;

    this.m_onSendSMSSucceeded  = sendSMSucceededCallback;
    this.m_onSendSMSFailed     = sendSMSFailedCallback;

    var self = this;

    // HTTP client for SendSMS messages
    this.m_sendSMSHttpClient  = new HttpClient( );
    this.m_sendSMSHttpClient.onError        = function( errorMessage )
    {
        self.handleSendSMSError( errorMessage );
    };
    this.m_sendSMSHttpClient.onSuccess      = function( xmlResponse )
    {
        self.handleSendSMSResponse( xmlResponse );
    };
}

SMS_SMSHandler.prototype =
{
    IsRequestInProgress: function( )
    {
        return this.m_sendSMSHttpClient.IsRequestInProgress( );
    },

    /**************************************************************************
       Invoke callback functions
     **************************************************************************/

    invokeOnSendSMSSucceededCallback:function( responseMessage )
    {
        this.m_onSendSMSSucceeded( responseMessage );
    },

    invokeOnSendSMSFailedCallback:function( statusMessage )
    {
        this.m_onSendSMSFailed( statusMessage );
    },

    /**************************************************************************
       SendSMS methods
     **************************************************************************/

    sendSMS:function( accountNumber,
                      uString,
                      sendToPhoneNumber,
                      sendToCarrierID,
                      sendFromPreference,
                      message )
    {
        try
        {
            var requestMessage = new MSG_SendSMSRequest( this.m_source,
                                                         this.m_version,
                                                         this.m_os,
                                                         accountNumber,
                                                         uString,
                                                         sendToPhoneNumber,
                                                         sendToCarrierID,
                                                         sendFromPreference,
                                                         message );

            this.m_sendSMSHttpClient.sendRequest( HTTP_VERB_POST,
                                                  VM_URL.WX1,
                                                  VM_URL.WX2,
                                                  "text/xml",
                                                  requestMessage.asXML( ) );
        }
        catch ( e )
        {
            this.invokeOnSendSMSFailedCallback( "Failed to send SendSMS message" );
        }
    },

    handleSendSMSResponse:function( xmlResponse )
    {
        try
        {
            var responseMessage = new MSG_SendSMSResponse( xmlResponse );

            this.invokeOnSendSMSSucceededCallback( responseMessage );
        }
        catch ( e )
        {
            // Failed to parse/process the response
            this.invokeOnSendSMSFailedCallback( "Failed to process SendSMS response" );
        }
    },

    handleSendSMSError:function( errorMessage )
    {
        this.invokeOnSendSMSFailedCallback( errorMessage );
    }
}
