// Copyright (c) 1999  Microsoft Corporation.  All Rights Reserved.
// AdminDlg.cpp : implementation file
//

#include "stdafx.h"
#include "coptdlg.h"
#include "password.h"

extern DWORD g_helpIDArray[][2];
extern int g_helpIDArraySize;

/////////////////////////////////////////////////////////////////////////////
// CPasswordDlg dialog


CPasswordDlg::CPasswordDlg(IMSDVDAdm* pDvdAdm)
{
    m_pDvdAdm = pDvdAdm;
    m_reason = PASSWORDDLG_CHANGE;
    m_bVerified = FALSE;
    m_szPassword[0] = TEXT('\0');
}

/*************************************************************/
/* Name: OnInitDialog
/* Description: 
/*************************************************************/
LRESULT CPasswordDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    HWND ctlNewPassword = GetDlgItem(IDC_EDIT_NEW_PASSWORD);
	HWND ctlConfirmNew = GetDlgItem(IDC_EDIT_CONFIRM_NEW);
    HWND ctlPassword = GetDlgItem(IDC_EDIT_PASSWORD);

    HWND staticNewPassword = GetDlgItem(IDC_STATIC_NEW_PASSWORD);
	HWND staticConfirmNew = GetDlgItem(IDC_STATIC_CONFIRM_NEW);
    HWND staticPassword = GetDlgItem(IDC_STATIC_PASSWORD);

    if (!ctlNewPassword || !ctlConfirmNew || !ctlPassword)
        return S_FALSE;

    if (!staticNewPassword || !staticConfirmNew || !staticPassword)
        return S_FALSE;

    ::SendMessage(ctlNewPassword, EM_LIMITTEXT, MAX_PASSWD, 0);
    ::SendMessage(ctlConfirmNew, EM_LIMITTEXT, MAX_PASSWD, 0);
    ::SendMessage(ctlPassword, EM_LIMITTEXT, MAX_PASSWD, 0);

    ::SetWindowText(ctlNewPassword, _T(""));
    ::SetWindowText(ctlConfirmNew, _T(""));
    ::SetWindowText(ctlPassword, _T(""));

    if (m_reason == PASSWORDDLG_VERIFY) {
        ::ShowWindow(ctlNewPassword, SW_HIDE);
        ::ShowWindow(staticNewPassword, SW_HIDE);
        ::ShowWindow(ctlConfirmNew, SW_HIDE);
        ::ShowWindow(staticConfirmNew, SW_HIDE);
    }

    else if (m_reason == PASSWORDDLG_CHANGE) {
        ::ShowWindow(ctlNewPassword, SW_SHOW);
        ::ShowWindow(staticNewPassword, SW_SHOW);
        ::ShowWindow(ctlConfirmNew, SW_SHOW);
        ::ShowWindow(staticConfirmNew, SW_SHOW);
        
        if(COptionsDlg::IsNewAdmin())  { //New Admin people
            ::ShowWindow(ctlPassword, SW_HIDE);
            ::ShowWindow(staticPassword, SW_HIDE);
        }
        else {
            ::ShowWindow(ctlPassword, SW_SHOW);
            ::ShowWindow(staticPassword, SW_SHOW);
        }
    }
    return TRUE;
}

/*************************************************************/
/* Name: OnContextMenu
/* Description: Display help message for a control
/*************************************************************/
LRESULT CPasswordDlg::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
{
    HWND hwnd = (HWND) wParam; 
    DWORD controlId = ::GetDlgCtrlID(hwnd);

    POINT pt;
    pt.x = GET_X_LPARAM(lParam); 
    pt.y = GET_Y_LPARAM(lParam); 

    if (controlId == 0) { 
        ::ScreenToClient(hwnd, &pt);
        hwnd = ::ChildWindowFromPoint(hwnd, pt);
        controlId = ::GetDlgCtrlID(hwnd);
    }

    for (int i=0; i<g_helpIDArraySize; i++) {
        if (controlId && controlId == g_helpIDArray[i][0]) {
            if (controlId <= IDC_APPLY)
                ::WinHelp(hwnd, TEXT("windows.hlp"), HELP_CONTEXTMENU, (DWORD_PTR)g_helpIDArray);
            else
                ::WinHelp(hwnd, TEXT("dvdplay.hlp"), HELP_CONTEXTMENU, (DWORD_PTR)g_helpIDArray);
        }
    }

    return 0;
}

/*************************************************************/
/* Name: OnOK
/* Description: password change requested
/*************************************************************/
LRESULT CPasswordDlg::OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{

    USES_CONVERSION;
    HWND ctlPassword = GetDlgItem(IDC_EDIT_PASSWORD);
    TCHAR szPassword[MAX_PASSWD];
    ::GetWindowText(ctlPassword, szPassword, MAX_PASSWD);

    HWND ctlNewPassword = GetDlgItem(IDC_EDIT_NEW_PASSWORD);
    TCHAR szNewPassword[MAX_PASSWD];
    ::GetWindowText(ctlNewPassword, szNewPassword, MAX_PASSWD);

	HWND ctlConfirmNew = GetDlgItem(IDC_EDIT_CONFIRM_NEW);
    TCHAR szConfirmNew[MAX_PASSWD];
    ::GetWindowText(ctlConfirmNew, szConfirmNew, MAX_PASSWD);

    HRESULT hr = S_OK;
    if (m_reason == PASSWORDDLG_CHANGE) {
        if(lstrcmp(szNewPassword, szConfirmNew) != 0)
        {
            DVDMessageBox(hWndCtl, IDS_PASSOWRD_CONFIRM_WRONG);
            ::SetWindowText(ctlConfirmNew, _T(""));
            ::SetFocus(ctlConfirmNew);
            return FALSE;
        }
        
        if(COptionsDlg::IsNewAdmin())  //New Admin people
        {
            hr = m_pDvdAdm->ChangePassword(L"", L"", T2OLE(szNewPassword));
        }
        else   //Old Admin people
        {
            hr = m_pDvdAdm->ChangePassword(L"", T2OLE(szPassword), T2OLE(szNewPassword));
            if (hr == E_ACCESSDENIED) {
                DVDMessageBox(hWndCtl, IDS_PASSWORD_INCORRECT);
                ::SetWindowText(ctlPassword, _T(""));
                ::SetFocus(ctlPassword);
                return FALSE;
            }
        }
        if (FAILED(hr)) {
            DVDMessageBox(hWndCtl, IDS_PASSWORD_CHANGE_FAIL);
            ::SetWindowText(ctlPassword, _T(""));
            ::SetFocus(ctlPassword);
            return FALSE;
        }                
    }

    else if (m_reason == PASSWORDDLG_VERIFY) {
        VARIANT_BOOL fRight;
        hr = m_pDvdAdm->ConfirmPassword(L"", T2OLE(szPassword), &fRight);
        if (fRight == VARIANT_FALSE) {
            DVDMessageBox(hWndCtl, IDS_PASSWORD_INCORRECT);
            ::SetFocus(ctlPassword);
            lstrcpy(m_szPassword, szPassword);
            m_bVerified = FALSE;
            return FALSE;
        }
        else {
            lstrcpy(m_szPassword, szPassword);
            m_bVerified = TRUE;
        }
    }

	EndDialog(wID);
    return 0;
}

/*************************************************************/
/* Name: OnCancel
/* Description: 
/*************************************************************/
LRESULT CPasswordDlg::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
    m_bVerified = FALSE;
	EndDialog(wID);
    return 0;
}