/*
Copyright (�) 2012-13 Vladimir Lyubimov
Copyright (�) 2012-15 Miranda NG project (http://miranda-ng.org)

all portions of this codebase are copyrighted to the people
listed in contributors.txt.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

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.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

//HELPME: need new icons for TTB bottons

#include "StartupSilence.h"

HINSTANCE hInst;
int hLangpack;
HANDLE hSSMenuToggleOnOff;
HANDLE GetIconHandle(char *szIcon);
HANDLE hOptionsInitialize;
HANDLE hTTBarloaded = NULL;
HANDLE Buttons = NULL;
INT_PTR CALLBACK DlgProcOptions(HWND, UINT, WPARAM, LPARAM);
int InitializeOptions(WPARAM wParam,LPARAM lParam);
int DisablePopup(WPARAM wParam, LPARAM lParam);
int ModulesLoaded(WPARAM wParam, LPARAM lParam);
static int CreateTTButtons(WPARAM wParam, LPARAM lParam);
void RemoveTTButtons();
void EnablePopupModule();
BYTE Enabled;
DWORD delay;
BYTE PopUp;
DWORD PopUpTime;
BYTE MenuItem;
BYTE TTBButtons;
BYTE DefSound;
BYTE DefPopup;
BYTE DefEnabled;
BYTE NonStatusAllow;
BYTE timer;
char hostname[MAX_PATH] = "";
char EnabledComp[MAX_PATH] = "";
char DelayComp[MAX_PATH] = "";
char PopUpComp[MAX_PATH] = "";
char PopUpTimeComp[MAX_PATH] = "";
char MenuitemComp[MAX_PATH] = "";
char TTBButtonsComp[MAX_PATH] = "";
char DefSoundComp[MAX_PATH] = "";
char DefPopupComp[MAX_PATH] = "";
char DefEnabledComp[MAX_PATH] = "";
char NonStatusAllowComp[MAX_PATH] = "";

static LIST<void> ttbButtons(1);

PLUGININFOEX pluginInfo={
	sizeof(PLUGININFOEX),
	__PLUGIN_NAME,
	PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
	__DESC,
	__AUTHOR,
	__AUTHOREMAIL,
	__COPYRIGHT,
	__AUTHORWEB,
	UNICODE_AWARE,
	// {7B856B6A-D48F-4f54-B8D6-C8D86D02FFC2}
	{0x7b856b6a, 0xd48f, 0x4f54, {0xb8, 0xd6, 0xc8, 0xd8, 0x6d, 0x2, 0xff, 0xc2}}
};

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
	hInst = hinstDLL;
	return TRUE;
}

extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
{
	return &pluginInfo;
}

INT_PTR StartupSilence()
{
	InitSettings();
	HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
	mir_forkthread((pThreadFunc)AdvSt, NULL);
	CreateServiceFunction(SS_SERVICE_NAME, SturtupSilenceEnabled);
	CreateServiceFunction(SS_SILENCE_CONNECTION, SilenceConnection);
	IsMenu();
	HookEvent(ME_OPT_INITIALISE, InitializeOptions);
	return 0;
}

extern "C" __declspec(dllexport) int Load(void)
{
	mir_getLP(&pluginInfo);
	StartupSilence();
	return 0;
}

extern "C" __declspec(dllexport) int Unload(void)
{
	if (hTTBarloaded != NULL){
		UnhookEvent(hTTBarloaded);
	}
	return 0;
}

int ModulesLoaded(WPARAM wParam, LPARAM lParam)
{
	HookEvent(ME_POPUP_FILTER, DisablePopup);
	hTTBarloaded = HookEvent(ME_TTB_MODULELOADED, CreateTTButtons);
	if (TTBButtons == 1 && hTTBarloaded != NULL) {
		Icon_Register(hInst, "Toolbar/"MENU_NAME, iconttbList, SIZEOF(iconttbList), MENU_NAME);
		RemoveTTButtons();
		CreateTTButtons(0,0);
	}
	return 0;
}

int DisablePopup(WPARAM wParam, LPARAM lParam)
{
	if (DefEnabled == 1 && DefPopup == 0)      //All popups are blocked
		return 1;

	if ( (NonStatusAllow == 1) // while startup allow popups for unread mail notification from MRA, keepstatus ... other services?
		|| ((DefPopup == 1 && DefEnabled == 1) && timer !=2) ) //also filtered only: We do not run next lines every time
		                                                     //if "Filtered only..." is unchecked --->
		{
			MCONTACT hContact = wParam;
			if (hContact != NULL)
			{
				char* cp = GetContactProto(hContact);
				if ( !strcmp(cp, "Weather") || !strcmp(cp, "mRadio") )
					return 0;
				return 1;
			}
			else return 0;//or allow popups for unread mail notification from MRA, keepstatus ... other services?
		}
	else if (timer == 2)
			return 1;	//block all popups at startup
	return 0;	//---> just allow all popups with this return
}

void EnablePopupModule()
{
	if (ServiceExists(POPUPONOFF) && db_get_b(NULL,"Popup", "ModuleIsEnabled", 0) == 0) {
		CallService(POPUPONOFF, NULL, NULL);
	}
}

void InitSettings()
{
	if(gethostname(hostname, SIZEOF(hostname)) == 0){
		mir_snprintf(EnabledComp, SIZEOF(EnabledComp), "%s_Enabled", hostname);
		mir_snprintf(DelayComp, SIZEOF(DelayComp), "%s_Delay", hostname);
		mir_snprintf(PopUpComp, SIZEOF(PopUpComp), "%s_PopUp", hostname);
		mir_snprintf(PopUpTimeComp, SIZEOF(PopUpTimeComp), "%s_PopUpTime", hostname);
		mir_snprintf(MenuitemComp, SIZEOF(MenuitemComp), "%s_MenuItem", hostname);
		mir_snprintf(TTBButtonsComp, SIZEOF(TTBButtonsComp), "%s_TTBButtons", hostname);
		mir_snprintf(DefSoundComp, SIZEOF(DefSoundComp), "%s_DefSound", hostname);
		mir_snprintf(DefPopupComp, SIZEOF(DefPopupComp), "%s_DefPopup", hostname);
		mir_snprintf(DefEnabledComp, SIZEOF(DefEnabledComp), "%s_DefEnabled", hostname);
		mir_snprintf(NonStatusAllowComp, SIZEOF(NonStatusAllowComp), "%s_NonStatusAllow", hostname);
	}
	//first run on the host, initial setting
	if (!(delay = db_get_dw(NULL, MODULE_NAME, DelayComp, 0)))
		DefSettings();
	//or load host settings
	else LoadSettings();
}
void DefSettings()
{
	db_set_dw(NULL, MODULE_NAME, DelayComp, 20);
	db_set_b(NULL, MODULE_NAME, EnabledComp, 1);
	db_set_b(NULL, MODULE_NAME, PopUpComp, 1);
	db_set_dw(NULL, MODULE_NAME, PopUpTimeComp, 5);
	db_set_b(NULL, MODULE_NAME, MenuitemComp, 1);
	db_set_b(NULL, MODULE_NAME, TTBButtonsComp, 0);
	db_set_b(NULL, MODULE_NAME, DefSoundComp, 1);
	db_set_b(NULL, MODULE_NAME, DefPopupComp, 0);
	db_set_b(NULL, MODULE_NAME, DefEnabledComp, 0);
	db_set_b(NULL, MODULE_NAME, NonStatusAllowComp, 1);
	LoadSettings();
}
void LoadSettings()
{
	Enabled = db_get_b(NULL, MODULE_NAME, EnabledComp, 0);
	delay = db_get_dw(NULL, MODULE_NAME, DelayComp, 0);
	PopUp = db_get_b(NULL, MODULE_NAME, PopUpComp, 0);
	PopUpTime = db_get_dw(NULL, MODULE_NAME, PopUpTimeComp, 0);
	MenuItem = db_get_b(NULL, MODULE_NAME, MenuitemComp, 0);
	TTBButtons = db_get_b(NULL, MODULE_NAME, TTBButtonsComp, 0);
	DefSound = db_get_b(NULL, MODULE_NAME, DefSoundComp, 0);
	DefPopup = db_get_b(NULL, MODULE_NAME, DefPopupComp, 0);
	DefEnabled = db_get_b(NULL, MODULE_NAME, DefEnabledComp, 0);
	NonStatusAllow = db_get_b(NULL, MODULE_NAME, NonStatusAllowComp, 0);
	if (PopUpTime < 1)
		PopUpTime = (DWORD)1;
	if (PopUpTime > 30)
		PopUpTime = (DWORD)30;
	if (delay < 10)
		delay = (DWORD)10;
	if (delay > 300)
		delay = (DWORD)300;
	db_set_dw(NULL, MODULE_NAME, DelayComp, delay);
	db_set_dw(NULL, MODULE_NAME, PopUpTimeComp, PopUpTime);
}

void IsMenu()
{
	if (MenuItem == 1) {
		Icon_Register(hInst, MENU_NAME, iconList, SIZEOF(iconList), MENU_NAME);
		InitMenu();
	}
}

static INT_PTR AdvSt()
{
		if ((Enabled == 1)){
			POPUPDATAT ppd = {0};
			TCHAR * lptzText =L"";
			db_set_b(NULL, "Skin", "UseSound", 0);
			EnablePopupModule();

			if (PopUp == 1) {
				lptzText = NonStatusAllow == 1 ? ALL_DISABLED_FLT : ALL_DISABLED;
				ppd.lchIcon = (HICON)CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)(NonStatusAllow == 1 ? GetIconHandle(ALL_ENABLED_FLT) : GetIconHandle(MENU_NAME)));
				ppd.lchContact = NULL;
				ppd.iSeconds = PopUpTime;
				wcsncpy_s(ppd.lptzText, lptzText, _TRUNCATE);
				lptzText = TranslateT(MENU_NAME);
				wcsncpy_s(ppd.lptzContactName, lptzText, _TRUNCATE);
				PUAddPopupT(&ppd);
			}

			timer = 2;
			Sleep(delay * 1000);
			timer = 0;

			if (PopUp == 1) {
				lptzText = (DefEnabled == 1 && DefPopup == 1) ? TranslateT(ALL_ENABLED_FLT) : ALL_ENABLED;
				ppd.lchIcon = (HICON)CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)((DefEnabled == 1 && DefPopup == 1) ? GetIconHandle(ALL_ENABLED_FLT) : GetIconHandle(MENU_NAME)));
				wcsncpy_s(ppd.lptzText, lptzText, _TRUNCATE);
				PUAddPopupT(&ppd);
			}
			if (DefEnabled == 1) { //predefined sound setting
				db_set_b(NULL, "Skin", "UseSound", DefSound);
			}
			else db_set_b(NULL, "Skin", "UseSound", 1); //or enable sounds every starts
		}
	return 0;
}

static INT_PTR SturtupSilenceEnabled(WPARAM wParam, LPARAM lParam)
{
	db_set_b(NULL, MODULE_NAME, EnabledComp, !Enabled);
	LoadSettings();
	if (MenuItem == 1)
		UpdateMenu();
	if (PopUp == 1) {
		TCHAR * lptzText = Enabled == 1 ? S_MODE_CHANGEDON : S_MODE_CHANGEDOFF;
		POPUPDATAT ppd = {0};
		ppd.lchIcon = (HICON)CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)(Enabled == 1 ? GetIconHandle(ENABLE_SILENCE) : GetIconHandle(DISABLE_SILENCE)));
		ppd.lchContact = NULL;
		ppd.iSeconds = PopUpTime;
		wcsncpy_s(ppd.lptzText, lptzText, _TRUNCATE);
		lptzText = TranslateT(MENU_NAME);
		wcsncpy_s(ppd.lptzContactName, lptzText, _TRUNCATE);
		PUAddPopupT(&ppd);
	}
	return 0;
}

static INT_PTR SilenceConnection(WPARAM wParam, LPARAM lParam)
{
	timer = (BYTE)wParam;
//	if (timer == 2) //commented for now
//		db_set_b(NULL, "Skin", "UseSound", 0);
//	else db_set_b(NULL, "Skin", "UseSound", 1);
	return 0;
}

static INT_PTR InitMenu()
{
	CLISTMENUITEM mi = {sizeof(mi)};
	mi.flags = CMIM_ALL;
	mi.position = 100000000;
	mi.icolibItem = GetIconHandle(MENU_NAME);
	mi.pszPopupName = MENU_NAME;
	mi.pszService = SS_SERVICE_NAME;
	hSSMenuToggleOnOff = Menu_AddMainMenuItem(&mi);
	UpdateMenu();
	return 0;
}

void UpdateMenu()
{
	CLISTMENUITEM mi = {sizeof(mi)};
	mi.pszName = (Enabled == 1 ? DISABLE_SILENCE : ENABLE_SILENCE);
	mi.flags = CMIM_NAME | CMIM_ALL;
	mi.icolibItem = (Enabled == 1 ? GetIconHandle(DISABLE_SILENCE) : GetIconHandle(ENABLE_SILENCE));
	CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hSSMenuToggleOnOff, (LPARAM)&mi);
	UpdateTTB();
}

void UpdateTTB()
{
	if (hTTBarloaded != NULL && TTBButtons == 1)
		CallService(MS_TTB_SETBUTTONSTATE, (WPARAM)Buttons, (Enabled == 1 ?  0 : TTBST_PUSHED));
}

static int CreateTTButtons(WPARAM wParam, LPARAM lParam)
{
	TTBButton ttb = {sizeof(ttb)};
	ttb.dwFlags = (Enabled == 1 ? 0 : TTBBF_PUSHED) | TTBBF_VISIBLE | TTBBF_ASPUSHBUTTON;
	ttb.pszService = SS_SERVICE_NAME;
	ttb.hIconHandleDn = GetIconHandle(DISABLE_SILENCETTB);
	ttb.hIconHandleUp = GetIconHandle(ENABLE_SILENCETTB);
	ttb.name = TTBNAME;
	ttb.pszTooltipUp = SS_IS_ON;
	ttb.pszTooltipDn = SS_IS_OFF;
	Buttons = TopToolbar_AddButton(&ttb);
	if (Buttons)
		ttbButtons.insert(Buttons);
	return 0;
}

void RemoveTTButtons()
{
	for (int i=ttbButtons.getCount()-1; i >= 0; i--)
		CallService(MS_TTB_REMOVEBUTTON, (WPARAM)ttbButtons[i], 0);
	ttbButtons.destroy();
}

HANDLE GetIconHandle(char *szIcon)
{
	char szSettingName[64];
	mir_snprintf(szSettingName, SIZEOF(szSettingName), "%s_%s", MENU_NAME, szIcon);
	return Skin_GetIconHandle(szSettingName);
}

int InitializeOptions(WPARAM wParam,LPARAM lParam)
{
	OPTIONSDIALOGPAGE odp = {sizeof(odp)};
	odp.position = 0;
	odp.hInstance = hInst;
	odp.pszTemplate = MAKEINTRESOURCEA(IDD_SSOPT);
	odp.pszGroup = LPGEN("Events");//FIXME: move to...Group?
	odp.pszTitle = MENU_NAME;
	odp.groupPosition = 910000000;
	odp.flags = ODPF_BOLDGROUPS;
	odp.pfnDlgProc = DlgProcOptions;
	Options_AddPage(wParam, &odp);
	return 0;
}

static INT_PTR CALLBACK DlgProcOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg) {
	case WM_INITDIALOG: {
		TranslateDialogDefault(hwndDlg);
		static BOOL initDlg=FALSE;
		LoadSettings();
		SetDlgItemText(hwndDlg,  IDC_HST, mir_a2t(hostname));
		CheckDlgButton(hwndDlg, IDC_DELAY, (Enabled == 1) ? BST_CHECKED : BST_UNCHECKED);
		SendDlgItemMessage(hwndDlg, IDC_SSSPIN, UDM_SETBUDDY, (WPARAM)GetDlgItem(hwndDlg, IDC_SSTIME), 0);
		SendDlgItemMessage(hwndDlg, IDC_SSSPIN, UDM_SETRANGE32, 10, 300);
		SendDlgItemMessage(hwndDlg, IDC_SSSPIN, UDM_SETPOS, 0, MAKELONG((delay), 0));
		SendDlgItemMessage(hwndDlg, IDC_SSTIME, EM_LIMITTEXT, (WPARAM)3, 0);

		CheckDlgButton(hwndDlg, IDC_DELAY2, (PopUp == 1) ? BST_CHECKED : BST_UNCHECKED);
		SendDlgItemMessage(hwndDlg, IDC_SSSPIN2, UDM_SETBUDDY, (WPARAM)GetDlgItem(hwndDlg, IDC_SSPOPUPTIME), 0);
		SendDlgItemMessage(hwndDlg, IDC_SSSPIN2, UDM_SETRANGE32, 1, 30);
		SendDlgItemMessage(hwndDlg, IDC_SSSPIN2, UDM_SETPOS, 0, MAKELONG((PopUpTime), 0));
		SendDlgItemMessage(hwndDlg, IDC_SSPOPUPTIME, EM_LIMITTEXT, (WPARAM)3, 0);

		CheckDlgButton(hwndDlg, IDC_MENU, (MenuItem == 1) ? BST_CHECKED : BST_UNCHECKED);

		CheckDlgButton(hwndDlg, IDC_TTB, (TTBButtons == 1) ? BST_CHECKED : BST_UNCHECKED);

		CheckDlgButton(hwndDlg, IDC_DEFPOPUP, (DefPopup == 1) ? BST_CHECKED : BST_UNCHECKED);
		CheckDlgButton(hwndDlg, IDC_DEFSOUNDS, (DefSound == 1) ? BST_CHECKED : BST_UNCHECKED);
		CheckDlgButton(hwndDlg, IDC_RESTORE, (DefEnabled == 1) ? BST_CHECKED : BST_UNCHECKED);
		CheckDlgButton(hwndDlg, IDC_NONSTATUSES, (NonStatusAllow == 1) ? BST_CHECKED : BST_UNCHECKED);
		}
		break;

	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDC_SSTIME:
			DWORD min;
			if ((HWND)lParam != GetFocus() || HIWORD(wParam) != EN_CHANGE) return FALSE;
				min = GetDlgItemInt(hwndDlg, IDC_SSTIME, NULL, FALSE);
			if (min == 0 && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_SSTIME)))
				SendDlgItemMessage(hwndDlg, IDC_SSSPIN, UDM_SETPOS, 0, MAKELONG((short) 1, 0));
			delay = (DWORD)db_set_dw(NULL, MODULE_NAME, DelayComp, (DWORD)(SendDlgItemMessage(hwndDlg, IDC_SSSPIN, UDM_GETPOS, 0, 0)));
			break;

		case IDC_SSPOPUPTIME:
			if ((HWND)lParam != GetFocus() || HIWORD(wParam) != EN_CHANGE) return FALSE;
				min = GetDlgItemInt(hwndDlg, IDC_SSPOPUPTIME, NULL, FALSE);
			if (min == 0 && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_SSPOPUPTIME)))
				SendDlgItemMessage(hwndDlg, IDC_SSSPIN2, UDM_SETPOS, 0, MAKELONG((short) 1, 0));
			PopUpTime = (DWORD)db_set_dw(NULL, MODULE_NAME, PopUpTimeComp, (DWORD)(SendDlgItemMessage(hwndDlg, IDC_SSSPIN2, UDM_GETPOS, 0, 0)));
			break;

		case IDC_DELAY:
			CallService(SS_SERVICE_NAME, 0, 0);
			break;

		case IDC_DELAY2:
			if (!ServiceExists(POPUPONOFF)) {
				MessageBox(0, NEEDPOPUP, NOTICE, MB_OK);
				CheckDlgButton(hwndDlg, IDC_DELAY2, BST_UNCHECKED);
				PopUp = (BYTE)db_set_b(NULL, MODULE_NAME, PopUpComp, 0);
			}
			else PopUp = (BYTE)db_set_b(NULL, MODULE_NAME, PopUpComp, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_DELAY2) == BST_CHECKED ? 1 : 0));
			break;

		case IDC_MENU:
			MenuItem = (BYTE)db_set_b(NULL, MODULE_NAME, MenuitemComp, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_MENU) == BST_CHECKED ? 1 : 0));
			break;

		case IDC_TTB:
			if (!hTTBarloaded) {
				MessageBox(0, NEEDTTBMOD, NOTICE, MB_OK);
				CheckDlgButton(hwndDlg, IDC_TTB, BST_UNCHECKED);
				TTBButtons = (BYTE)db_set_b(NULL, MODULE_NAME, TTBButtonsComp, 0);
			}
			else TTBButtons = (BYTE)db_set_b(NULL, MODULE_NAME, TTBButtonsComp, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_TTB) == BST_CHECKED ? 1 : 0));
			break;

		case IDC_DEFPOPUP:
			db_set_b(NULL, MODULE_NAME, DefPopupComp, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_DEFPOPUP) == BST_CHECKED ? 1 : 0));
			DefPopup = db_get_b(NULL, MODULE_NAME, DefPopupComp, 0);
			break;

		case IDC_DEFSOUNDS:
			db_set_b(NULL, MODULE_NAME, DefSoundComp, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_DEFSOUNDS) == BST_CHECKED ? 1 : 0));
			DefSound = db_get_b(NULL, MODULE_NAME, DefSoundComp, 0);
			break;

		case IDC_RESTORE:
			db_set_b(NULL, MODULE_NAME, DefEnabledComp, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_RESTORE) == BST_CHECKED ? 1 : 0));
			DefEnabled = db_get_b(NULL, MODULE_NAME, DefEnabledComp, 0);
			break;

		case IDC_NONSTATUSES:
			db_set_b(NULL, MODULE_NAME, NonStatusAllowComp, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_NONSTATUSES) == BST_CHECKED ? 1 : 0));
			NonStatusAllow = db_get_b(NULL, MODULE_NAME, NonStatusAllowComp, 0);
			break;

		case IDC_RESETDEFAULT:
			DefSettings();
			CheckDlgButton(hwndDlg, IDC_DELAY, (Enabled == 1) ? BST_CHECKED : BST_UNCHECKED);
			SendDlgItemMessage(hwndDlg, IDC_SSSPIN, UDM_SETPOS, 0, MAKELONG((delay), 0));
			CheckDlgButton(hwndDlg, IDC_DELAY2, (PopUp == 1) ? BST_CHECKED : BST_UNCHECKED);
			SendDlgItemMessage(hwndDlg, IDC_SSSPIN2, UDM_SETPOS, 0, MAKELONG((PopUpTime), 0));
			CheckDlgButton(hwndDlg, IDC_MENU, (MenuItem == 1) ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hwndDlg, IDC_TTB, (TTBButtons == 1) ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hwndDlg, IDC_DEFPOPUP, (DefPopup == 1) ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hwndDlg, IDC_DEFSOUNDS, (DefSound == 1) ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hwndDlg, IDC_RESTORE, (DefEnabled == 1) ? BST_CHECKED : BST_UNCHECKED);
			CheckDlgButton(hwndDlg, IDC_NONSTATUSES, (NonStatusAllow == 1) ? BST_CHECKED : BST_UNCHECKED);
			break;
		}
		break;
	case WM_NOTIFY:
	case WM_DESTROY:
		break;
	}
	return FALSE;
}