#include "private.h"   // Class Definitions 



BOOL PromptToGoOffline(VOID);
BOOL PromptToGoOnline(VOID);
BOOL CALLBACK GoOfflinePromptDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
        LPARAM lParam);
BOOL CALLBACK GoOnlinePromptDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
        LPARAM lParam);

// Make sure that Notification Sinks are apartment model and hence are always called back
// on the same thread making it unnecessary to use any critical sections -- APPCOMPAT





// TRUE means that the state now is Online
// FALSE means that the user chose to remain Offline

BOOL
OnConnectedNotification(void)
{
    BOOL fRet = TRUE;
            
    // Check to see if the user is offline and wants to "go online"
    if((IsGlobalOffline()))
    {
        //Ask the user with a dialog
        fRet = PromptToGoOnline();
    }  

    return fRet;
}

// TRUE means that the state now is Offline
// FALSE means that the user chose to remain Online

BOOL
OnDisconnectedNotification(void)
{      
    BOOL fRet = TRUE;
    // Check to see if the user wants to go offline
    if(!(IsGlobalOffline()))
    {
        //Ask the user with a dialog, if the user says yes, then
        // toggle to offline mode by calling wininet
        fRet = PromptToGoOffline();
    }

        
    return fRet;

}
    

BOOL PromptToGoOffline(VOID)
{

    // run the dialog
    BOOL fRet = DialogBoxParam(MLGetHinst(),MAKEINTRESOURCE(IDD_GO_OFFLINE_DLG),
            NULL,GoOfflinePromptDlgProc,(LPARAM) 0);

    return fRet;
}

/*******************************************************************

        NAME:           GoOfflinePromptDlgProc

        SYNOPSIS:       Dialog proc for Go Offline dialog

********************************************************************/
BOOL CALLBACK GoOfflinePromptDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
        LPARAM lParam)
{
    switch (uMsg) {
    case WM_INITDIALOG:
        SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0,
                SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
        return TRUE;
        break;
    case WM_COMMAND:
        switch (wParam) {
        case IDOK:
            SetGlobalOffline(TRUE); 
            EndDialog(hDlg,TRUE);
            return TRUE;
            break;
        case IDCANCEL:            
            EndDialog(hDlg,FALSE);
            return TRUE;
            break;
        default:
            break;
        }
        break;
   default:
        break;
   }

    return FALSE;
}


BOOL PromptToGoOnline(VOID)
{

    // run the dialog
    BOOL fRet = DialogBoxParam(MLGetHinst(),MAKEINTRESOURCE(IDD_GO_ONLINE_DLG),
            NULL,GoOnlinePromptDlgProc,(LPARAM) 0);

    return fRet;
}

/*******************************************************************

        NAME:           GoOnlinePromptDlgProc

        SYNOPSIS:       Dialog proc for Go Online dialog

********************************************************************/
BOOL CALLBACK GoOnlinePromptDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
        LPARAM lParam)
{
    switch (uMsg) {
    case WM_INITDIALOG:
        return TRUE;
        break;
    case WM_COMMAND:
        switch (wParam) {
        case IDOK:
            SetGlobalOffline(FALSE); 
            EndDialog(hDlg,TRUE);
            return TRUE;
            break;
        case IDCANCEL: 
            EndDialog(hDlg,FALSE);
            return TRUE;
            break;
         default:
            break;
        }
        break;
    default:
        break;
    }

    return FALSE;
}