/*

MAgen.dll: Miranda plugin for mail.ru message exchange.

Copyright 2005-2010 Lenik.
Project home at http://www.lenik.ru/win32/magent
Author contact: lenik@lenik.ru

This program is free software.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

*/

void SetValue(HANDLE hContact,unsigned char *proto,unsigned char *str,HWND hwndDlg,unsigned long id)
{
DBCONTACTGETSETTING cgs;
DBVARIANT dbv;

cgs.szModule = proto;
cgs.szSetting = str;
cgs.pValue = &dbv;
if(CallService(MS_DB_CONTACT_GETSETTING,(WPARAM)hContact,(LPARAM)&cgs) == 0)
    {
    SetDlgItemText(hwndDlg,id,dbv.pszVal);
    DBFreeVariant(&dbv);
    }
else{
    SetDlgItemText(hwndDlg,id,"-internal-error-");
    }
}

static BOOL CALLBACK MRIM_UI_DlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
    {
    case WM_INITDIALOG:
        TranslateDialogDefault(hwndDlg);
        return(TRUE);
    case WM_NOTIFY:
        {
        switch(((LPNMHDR)lParam)->idFrom)
            {
            case 0:
                {
                switch (((LPNMHDR)lParam)->code)
                    {
                    case PSN_INFOCHANGED:
                        {
                        char* szProto;
                        HANDLE hContact = (HANDLE)((LPPSHNOTIFY)lParam)->lParam;

                        if(hContact == NULL)
                            szProto = ProtoName;
                        else szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);

                        if(szProto == NULL)
                            break;

                        //MessageBox(NULL,"CHANGED","UserInfo",MB_OK);
                        SetValue(hContact,ProtoName,DB_SETTING_EMAIL,hwndDlg,IDC_EMAIL);
                        SetValue(hContact,ProtoName,"Location",hwndDlg,IDC_UI_LOCATION);
                        }
                    break;
                    }
                }
                break;
            }
        }
        break;
    case WM_COMMAND:
        switch(LOWORD(wParam))
            {
            case IDCANCEL:
                SendMessage(GetParent(hwndDlg),msg,wParam,lParam);
            break;
            }
        break;
    }
return(FALSE);
}

int MRIM_OnDetailsInit(WPARAM wParam,LPARAM lParam)
{
char* szProto;
OPTIONSDIALOGPAGE odp;

szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,lParam,0);
if(((szProto == NULL)||(strcmp(szProto,ProtoName))) && lParam)
    return(0);

odp.cbSize = sizeof(odp);
odp.hIcon = NULL;
odp.hInstance = HInstance;
odp.pfnDlgProc = MRIM_UI_DlgProc;
odp.position = -1900000000;
odp.pszTemplate = MAKEINTRESOURCE(IDD_INFO_MAGENT);
odp.pszTitle = Translate(ProtoName);

CallService(MS_USERINFO_ADDPAGE,wParam,(LPARAM)&odp);

return(0);
}
