// File: /include/js/Shared/Views/RegisterView.js
// Desc: Register view
// $Revision: 30$
// $Date: 5/14/2007 12:10:36 PM$
// $Author: Donnie Tognazzini$
// $NoKeywords$

/******************************************************************************
  VM_RegisterView
 ******************************************************************************/
function VM_RegisterView( viewController )
{
    try
    {
        UTILS.inheritFromBase( this, "VM_RegisterView", "#registerViewFrame" );

        // Initialize members
        this.m_viewController       = viewController;
        this.m_submitButton         = document.getElementById( "btnRegisterSubmit" );
        this.m_cellNumberTextArea   = new NANPPhoneInput( "txtRegisterCellNumber", "btnRegisterSubmit" );
        this.m_pinTextArea          = new PasswordInput( "txtRegisterPIN", "btnRegisterSubmit" );
        this.m_emailTextArea        = new EmailInput( "txtRegisterEmail", "btnRegisterSubmit" );

        // Event handlers
        this.bindToEvent( this.m_submitButton , "click", this.onRegistrationSubmit );
        this.bindToEvent( "RegistrationSuccess" );
        this.bindToEvent( "RegistrationFailure" );
        this.bindToEvent( "viewStateChange" );
    }
    catch( e )
    {
        EX_ASSERT_NO_EXCEPTIONS( e, "VM_RegisterView::VM_RegisterView( )" );
    }
}

var VM_RegisterView_prototype =
{
    DEFAULT_MESSAGE             : "Please enter the following information to register:",
    REGISTRATION_FAILED_MESSAGE : "Registration failed. Please try again.",
    CELL_NUMBER_MESSAGE         : "Please enter your 10-digit cell phone number.",
    PIN_INVALID_MESSAGE         : "Please enter a 4-10 digit PIN (numeric characters only).",

    /***************************************************************************
     ***************************************************************************
      Event handlers
     ***************************************************************************
     ***************************************************************************/

    onRegistrationSubmit: function( e )
    {
        try
        {
            if ( this.m_viewController.m_accountHandler.IsAuthenticationRequestInProgress( ) )
            {
                // Ignore if request already in progress
                return;
            }

            var cellNumber = this.m_cellNumberTextArea.GetValidatedInput( this.CELL_NUMBER_MESSAGE, this.CELL_NUMBER_MESSAGE );

            if ( cellNumber === null )
            {
                return;
            }

            var PIN = this.m_pinTextArea.GetValidatedInput( this.PIN_INVALID_MESSAGE, this.PIN_INVALID_MESSAGE );

            if ( PIN === null )
            {
                return;
            }

            PREF_GetPreferences( ).CellNumber.set( cellNumber );

            this.enableSubmitButton( false /* disable */ );

            CW_GetMessageArea( ).display( "Connecting, please wait...", CW_GetMessageArea( ).MESSAGE_TYPE_STATUS );

            this.m_viewController.m_accountHandler.registerAccount( cellNumber, PIN, this.m_emailTextArea.GetValue( ) );
        }
        catch ( e )
        {
            EX_ASSERT_NO_EXCEPTIONS( e, "VM_RegisterView::onRegistrationSubmit( )" );
        }
    },

    onRegistrationSuccess: function( e, responseMessage )
    {
        try
        {
            this.enableSubmitButton( true /* enable */ );

            switch ( responseMessage.m_status )
            {
            case MSG_ResponseStatus.SUCCESS:
                {
                    this.m_viewController.updateQueryString( responseMessage.m_uString );

                    PREF_GetPreferences( ).AuthInfo.set( { accountNumber: responseMessage.m_account,
                                                           uString:       responseMessage.m_uString } );

                    this.m_viewController.onGetAccountInfo( );

                    break;
                }

            case MSG_ResponseStatus.GENERAL_ERROR:
            default:
                {
                    CW_GetMessageArea( ).display( responseMessage.m_statusMsg, CW_GetMessageArea( ).MESSAGE_TYPE_ALERT );
                    break;
                }

            case MSG_ResponseStatus.REGA_PIN_MISMATCH:
                {
                    PREF_GetPreferences( ).AuthInfo.reset( );
                    this.m_viewController.viewState.set( this.m_viewController.VIEW_STATE_SHOW_LOGIN );

                    CW_GetMessageArea( ).display( responseMessage.m_statusMsg, CW_GetMessageArea( ).MESSAGE_TYPE_ALERT );
                    break;
                }
            }
        }
        catch ( e )
        {
            EX_ASSERT_NO_EXCEPTIONS( e, "VM_RegisterView::onRegistrationSuccess( )" );
        }
    },

    onRegistrationFailure: function( e, statusMessage )
    {
        try
        {
            this.enableSubmitButton( true /* enable */ );

            CW_GetMessageArea( ).display( this.REGISTRATION_FAILED_MESSAGE, CW_GetMessageArea( ).MESSAGE_TYPE_ALERT );

            EX_Log( "VM_RegisterView::onRegistrationFailure( ) : " + statusMessage );
        }
        catch ( e )
        {
            EX_ASSERT_NO_EXCEPTIONS( e, "VM_RegisterView::onRegistrationFailure( )" );
        }
    },

    /***************************************************************************
     ***************************************************************************
      View painting methods
     ***************************************************************************
     ***************************************************************************/

    onviewStateChange: function( e, oldState, newState )
    {
        try
        {
            if ( newState == this.m_viewController.VIEW_STATE_SHOW_REGISTER )
            {
                CW_GetMessageArea( ).display( this.DEFAULT_MESSAGE, CW_GetMessageArea( ).MESSAGE_TYPE_STATUS );

                this.m_cellNumberTextArea.Set( PREF_GetPreferences( ).CellNumber.get( ) );
                this.m_pinTextArea.jInput.val( "" );
                UTILS.adjustHeight( );
            }
        }
        catch ( e )
        {
            EX_ASSERT_NO_EXCEPTIONS( e, "VM_RegisterView::onviewStateChange( )" );
        }
    },

    /***************************************************************************
     ***************************************************************************
      Set methods
     ***************************************************************************
     ***************************************************************************/

    enableSubmitButton : function( enabled )
    {
        if ( enabled )
        {
            this.m_submitButton.disabled = false;
            $( this.m_submitButton ).removeClass( "disabled" );
        }
        else
        {
            this.m_submitButton.disabled = true;
            $( this.m_submitButton ).addClass( "disabled" );
        }
    }
};
