#include "Mra.h"
#include "proto.h"
#include "MraPlaces.h"



struct FieldNames
{
	BYTE dwCode;
	LPWSTR lpszText;
};



static const FieldNames GenderField[]=
{
	{1,		L"Male"},
	{2,		L"Female"},
	{-1,	NULL}
};

static const FieldNames MonthField[]=
{
	{1,		L"January"},
	{2,		L"February"},
	{3,		L"March"},
	{4,		L"April"},
	{5,		L"May"},
	{6,		L"June"},
	{7,		L"July"},
	{8,		L"August"},
	{9,		L"September"},
	{10,	L"October"},
	{11,	L"November"},
	{12,	L"December"},
	{-1,	NULL}
};

static const FieldNames ZodiakField[]=
{
	{1,		L"Aries"},
	{2,		L"Taurus"},
	{3,		L"Gemini"},
	{4,		L"Cancer"},
	{5,		L"Leo"},
	{6,		L"Virgo"},
	{7,		L"Libra"},
	{8,		L"Scorpio"},
	{9,		L"Sagitarius"},
	{10,	L"Capricorn"},
	{11,	L"Aquarius"},
	{12,	L"Pisces"},
	{-1,	NULL}
};






void ResetComboBox(HWND hWndCombo)
{
	DWORD dwItem;

	SendMessage(hWndCombo,CB_RESETCONTENT,0,0);
	dwItem=SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)L"");
	SendMessage(hWndCombo,CB_SETITEMDATA,dwItem,0);
	SendMessage(hWndCombo,CB_SETCURSEL,dwItem,0);
}


void InitComboBox(HWND hWndCombo,FieldNames *lpNames)
{
	DWORD dwItem;

	ResetComboBox(hWndCombo);

	for (SIZE_T i=0;lpNames[i].lpszText;i++)
	{
		dwItem=SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)TranslateW(lpNames[i].lpszText));
		SendMessage(hWndCombo,CB_SETITEMDATA,dwItem,lpNames[i].dwCode);
	}
}


void InitComboBoxNumders(HWND hWndCombo,DWORD dwStart,DWORD dwEnd)
{
	DWORD dwItem;
	WCHAR szBuff[MAX_PATH];

	ResetComboBox(hWndCombo);

	for (DWORD i=dwStart;i<=dwEnd;i++)
	{
		mir_sntprintf(szBuff,SIZEOF(szBuff),L"%lu",i);
		dwItem=SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)szBuff);
		SendMessage(hWndCombo,CB_SETITEMDATA,dwItem,i);
	}
}


INT_PTR CALLBACK AdvancedSearchDlgProc(HWND hWndDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
	switch(message){
	case WM_INITDIALOG:
		{
			HWND hWndCombo;
			DWORD dwItem;
			WCHAR wszBuff[MAX_PATH];
			SYSTEMTIME stTime;
			GetLocalTime(&stTime);

			//InitComboBox(GetDlgItem(hWndDlg,IDC_EMAIL_DOMAIN),(FieldNames*)DomainField);
			{
				hWndCombo=GetDlgItem(hWndDlg,IDC_EMAIL_DOMAIN);
				ResetComboBox(hWndCombo);
				for (SIZE_T i=0;lpcszMailRuDomains[i];i++)
				{
					MultiByteToWideChar(MRA_CODE_PAGE,0,lpcszMailRuDomains[i],-1,wszBuff,SIZEOF(wszBuff));
					SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)wszBuff);
				}
			}
			InitComboBox(GetDlgItem(hWndDlg,IDC_GENDER),(FieldNames*)GenderField);
			InitComboBoxNumders(GetDlgItem(hWndDlg,IDC_AGERANGE_FROM),1,100);
			InitComboBoxNumders(GetDlgItem(hWndDlg,IDC_AGERANGE_TO),1,100);
			InitComboBoxNumders(GetDlgItem(hWndDlg,IDC_BIRTHDAY_DAY),1,31);
			InitComboBox(GetDlgItem(hWndDlg,IDC_BIRTHDAY_MONTH),(FieldNames*)MonthField);
			InitComboBoxNumders(GetDlgItem(hWndDlg,IDC_BIRTHDAY_YEAR),1900,(DWORD)stTime.wYear);
			InitComboBox(GetDlgItem(hWndDlg,IDC_ZODIAK),(FieldNames*)ZodiakField);

			hWndCombo=GetDlgItem(hWndDlg,IDC_COUNTRY);
			ResetComboBox(hWndCombo);
			for(SIZE_T i=0;mrapPlaces[i].lpszData;i++)
			{
				if (mrapPlaces[i].dwCityID==0 && mrapPlaces[i].dwPlaceID==0)
				{
					dwItem=SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)mrapPlaces[i].lpszData);
					SendMessage(hWndCombo,CB_SETITEMDATA,dwItem,mrapPlaces[i].dwCountryID);
				}
			}


			ResetComboBox(GetDlgItem(hWndDlg,IDC_CITY));

			if (DB_Mra_GetByte(NULL,"AdvancedSearchRemember",MRA_DEFAULT_SEARCH_REMEMBER))
			{
				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_GENDER,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchGender",0),0);
				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_AGERANGE_FROM,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchAgeFrom",0),0);
				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_AGERANGE_TO,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchAgeTo",0),0);
				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BIRTHDAY_MONTH,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchBirthDayMonth",0),0);
				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BIRTHDAY_DAY,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchBirthDayDay",0),0);

				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_ZODIAK,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchZodiakID",0),0);


				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_COUNTRY,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchCountryID",0),0);
				SendMessageW(hWndDlg,WM_COMMAND,(WPARAM)MAKELONG(IDC_COUNTRY,CBN_SELCHANGE),(LPARAM)GetDlgItem(hWndDlg,IDC_COUNTRY));

				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_STATE,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchStateID",0),0);
				SendMessageW(hWndDlg,WM_COMMAND,(WPARAM)MAKELONG(IDC_STATE,CBN_SELCHANGE),(LPARAM)GetDlgItem(hWndDlg,IDC_STATE));

				SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_CITY,CB_SETCURSEL,DB_Mra_GetWord(NULL,"AdvancedSearchCityID",0),0);


				CHECK_DLG_BUTTON(hWndDlg,IDC_ONLINEONLY,DB_Mra_GetByte(NULL,"AdvancedSearchOnlineOnly",FALSE));
				CHECK_DLG_BUTTON(hWndDlg,IDC_CHK_REMEMBER,TRUE);
			}
			TranslateDialogDefault(hWndDlg);
		}
		return(TRUE);
	case WM_DESTROY:
		{
			/*dwUserSize=GET_DLG_ITEM_TEXTA(hWndDlg,IDC_EMAIL_USER,szUser,SIZEOF(szUser));
			dwDomainSize=GET_DLG_ITEM_TEXTA(hWndDlg,IDC_EMAIL_DOMAIN,szDomain,SIZEOF(szDomain));

			dwNickNameSize=GET_DLG_ITEM_TEXT(hWndDlg,IDC_NICK,wszNickName,SIZEOF(wszNickName));

			dwFirstNameSize=GET_DLG_ITEM_TEXT(hWndDlg,IDC_FIRSTNAME,wszFirstName,SIZEOF(wszFirstName));

			dwLastNameSize=GET_DLG_ITEM_TEXT(hWndDlg,IDC_LASTNAME,wszLastName,SIZEOF(wszLastName));*/

			DB_Mra_SetWord(NULL,"AdvancedSearchGender",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_GENDER,CB_GETCURSEL,0,0));
			DB_Mra_SetWord(NULL,"AdvancedSearchAgeFrom",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_AGERANGE_FROM,CB_GETCURSEL,0,0));
			DB_Mra_SetWord(NULL,"AdvancedSearchAgeTo",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_AGERANGE_TO,CB_GETCURSEL,0,0));
			DB_Mra_SetWord(NULL,"AdvancedSearchBirthDayMonth",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BIRTHDAY_MONTH,CB_GETCURSEL,0,0));
			DB_Mra_SetWord(NULL,"AdvancedSearchBirthDayDay",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_BIRTHDAY_DAY,CB_GETCURSEL,0,0));

			DB_Mra_SetWord(NULL,"AdvancedSearchZodiakID",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_ZODIAK,CB_GETCURSEL,0,0));

			DB_Mra_SetWord(NULL,"AdvancedSearchCityID",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_CITY,CB_GETCURSEL,0,0));
			DB_Mra_SetWord(NULL,"AdvancedSearchStateID",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_STATE,CB_GETCURSEL,0,0));
			DB_Mra_SetWord(NULL,"AdvancedSearchCountryID",SEND_DLG_ITEM_MESSAGE(hWndDlg,IDC_COUNTRY,CB_GETCURSEL,0,0));

			DB_Mra_SetByte(NULL,"AdvancedSearchOnlineOnly",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_ONLINEONLY));
			DB_Mra_SetByte(NULL,"AdvancedSearchRemember",IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_CHK_REMEMBER));
		}
		break;
	case WM_COMMAND:
		switch(LOWORD(wParam)) {
		case IDOK:
			SendMessage(GetParent(hWndDlg),WM_COMMAND,MAKEWPARAM(IDOK,BN_CLICKED),(LPARAM)GetDlgItem(GetParent(hWndDlg),IDOK));
			break;
		case IDC_AGERANGE_FROM:
		case IDC_AGERANGE_TO:
			if (HIWORD(wParam)==CBN_SELCHANGE)
			{
				if (LOWORD(wParam)==IDC_AGERANGE_FROM)
				{
					DWORD dwAgeFrom,dwAgeTo;

					dwAgeFrom=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_AGERANGE_FROM);
					dwAgeTo=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_AGERANGE_TO);
					if (dwAgeFrom==0) dwAgeFrom++;
					InitComboBoxNumders(GetDlgItem(hWndDlg,IDC_AGERANGE_TO),dwAgeFrom,100);
					SendMessage(GetDlgItem(hWndDlg,IDC_AGERANGE_TO),CB_SETCURSEL,((dwAgeTo-dwAgeFrom)+1),0);
				}
				SendMessage(GetDlgItem(hWndDlg,IDC_BIRTHDAY_YEAR),CB_SETCURSEL,0,0);
			}
			break;
		case IDC_BIRTHDAY_DAY:
		case IDC_BIRTHDAY_MONTH:
		case IDC_BIRTHDAY_YEAR:
			if (HIWORD(wParam)==CBN_SELCHANGE)
			{
				DWORD dwAge;
				SYSTEMTIME stTime={0};

				stTime.wYear=(WORD)GET_CURRENT_COMBO_DATA(hWndDlg,IDC_BIRTHDAY_YEAR);
				stTime.wMonth=(WORD)GET_CURRENT_COMBO_DATA(hWndDlg,IDC_BIRTHDAY_MONTH);
				stTime.wDay=(WORD)GET_CURRENT_COMBO_DATA(hWndDlg,IDC_BIRTHDAY_DAY);

				dwAge=GetYears(&stTime);
				SendMessage(GetDlgItem(hWndDlg,IDC_AGERANGE_FROM),CB_SETCURSEL,dwAge,0);
				SendMessage(GetDlgItem(hWndDlg,IDC_AGERANGE_TO),CB_SETCURSEL,dwAge,0);
				SendMessage(GetDlgItem(hWndDlg,IDC_ZODIAK),CB_SETCURSEL,0,0);
			}
			break;
		case IDC_ZODIAK:
			if (HIWORD(wParam)==CBN_SELCHANGE)
			{
				SendMessage(GetDlgItem(hWndDlg,IDC_BIRTHDAY_DAY),CB_SETCURSEL,0,0);
				SendMessage(GetDlgItem(hWndDlg,IDC_BIRTHDAY_MONTH),CB_SETCURSEL,0,0);
				//SendMessage(GetDlgItem(hWndDlg,IDC_BIRTHDAY_YEAR),CB_SETCURSEL,0,0);
			}
			break;
		case IDC_COUNTRY:
			if (HIWORD(wParam)==CBN_SELCHANGE)
			{
				HWND hWndCombo;
				DWORD dwItem,dwCountryID;

				dwCountryID=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_COUNTRY);
				hWndCombo=GetDlgItem(hWndDlg,IDC_STATE);
				SendMessage(hWndCombo,CB_RESETCONTENT,0,0);
				ResetComboBox(GetDlgItem(hWndDlg,IDC_CITY));
				dwItem=SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)L"");
				SendMessage(hWndCombo,CB_SETITEMDATA,dwItem,0);
				SendMessage(hWndCombo,CB_SETCURSEL,dwItem,0);

				for(SIZE_T i=0;mrapPlaces[i].lpszData;i++)
				{
					if (mrapPlaces[i].dwCountryID==dwCountryID && mrapPlaces[i].dwCityID && mrapPlaces[i].dwPlaceID==0)
					{
						dwItem=SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)mrapPlaces[i].lpszData);
						SendMessage(hWndCombo,CB_SETITEMDATA,dwItem,mrapPlaces[i].dwCityID);
					}
				}
			}
			break;
		case IDC_STATE:
			if (HIWORD(wParam)==CBN_SELCHANGE)
			{
				HWND hWndCombo;
				DWORD dwItem,dwCountryID,dwStateID;

				dwCountryID=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_COUNTRY);
				dwStateID=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_STATE);
				hWndCombo=GetDlgItem(hWndDlg,IDC_CITY);
				SendMessage(hWndCombo,CB_RESETCONTENT,0,0);
				dwItem=SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)L"");
				SendMessage(hWndCombo,CB_SETITEMDATA,dwItem,0);
				SendMessage(hWndCombo,CB_SETCURSEL,dwItem,0);

				for(SIZE_T i=0;mrapPlaces[i].lpszData;i++)
				{
					if (mrapPlaces[i].dwCountryID==dwCountryID && mrapPlaces[i].dwCityID==dwStateID && mrapPlaces[i].dwPlaceID)
					{
						dwItem=SendMessage(hWndCombo,CB_ADDSTRING,0,(LPARAM)mrapPlaces[i].lpszData);
						SendMessage(hWndCombo,CB_SETITEMDATA,dwItem,mrapPlaces[i].dwPlaceID);
					}
				}
			}
			break;
		default:
			break;
		}
		break;
	default:
		break;
	}
return(FALSE);
}


DWORD AdvancedSearchFromDlg(HWND hWndDlg)
{
	DWORD dwRequestFlags=0;
	CHAR szUser[MAX_PATH],szDomain[MAX_PATH];
	WCHAR wszNickName[MAX_PATH],wszFirstName[MAX_PATH],wszLastName[MAX_PATH];
	SIZE_T dwUserSize,dwDomainSize,dwNickNameSize,dwFirstNameSize,dwLastNameSize;
	DWORD dwSex,dwDate1,dwDate2,dwCityID,dwZodiak,dwBirthdayMonth,dwBirthdayDay,dwCountryID,dwOnline;


	dwUserSize=GET_DLG_ITEM_TEXTA(hWndDlg,IDC_EMAIL_USER,szUser,SIZEOF(szUser));
	dwDomainSize=GET_DLG_ITEM_TEXTA(hWndDlg,IDC_EMAIL_DOMAIN,szDomain,SIZEOF(szDomain));
	if (dwUserSize && dwDomainSize)
	{
		SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_USER);
		SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_DOMAIN);
	}

	dwNickNameSize=GET_DLG_ITEM_TEXT(hWndDlg,IDC_NICK,wszNickName,SIZEOF(wszNickName));
	if (dwNickNameSize) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_NICKNAME);

	dwFirstNameSize=GET_DLG_ITEM_TEXT(hWndDlg,IDC_FIRSTNAME,wszFirstName,SIZEOF(wszFirstName));
	if (dwFirstNameSize) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME);

	dwLastNameSize=GET_DLG_ITEM_TEXT(hWndDlg,IDC_LASTNAME,wszLastName,SIZEOF(wszLastName));
	if (dwLastNameSize) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_LASTNAME);

	dwSex=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_GENDER);
	if (dwSex) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_SEX);

	dwDate1=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_AGERANGE_FROM);
	if (dwDate1) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_DATE1);

	dwDate2=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_AGERANGE_TO);
	if (dwDate2) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_DATE2);

	dwCityID=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_CITY);
	if (dwCityID==0) dwCityID=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_STATE);
	if (dwCityID) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_CITY_ID);

	dwZodiak=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_ZODIAK);
	if (dwZodiak) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_ZODIAC);

	dwBirthdayMonth=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_BIRTHDAY_MONTH);
	if (dwBirthdayMonth) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH);

	dwBirthdayDay=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_BIRTHDAY_DAY);
	if (dwBirthdayMonth) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY);

	dwCountryID=GET_CURRENT_COMBO_DATA(hWndDlg,IDC_COUNTRY);
	if (dwCountryID) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID);


	dwOnline=IS_DLG_BUTTON_CHECKED(hWndDlg,IDC_ONLINEONLY);
	if (dwOnline) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_ONLINE);

return(MraSendCommand_WPRequestW(NULL,ACKTYPE_SEARCH,dwRequestFlags,szUser,dwUserSize,szDomain,dwDomainSize,wszNickName,dwNickNameSize,wszFirstName,dwFirstNameSize,wszLastName,dwLastNameSize,dwSex,dwDate1,dwDate2,dwCityID,dwZodiak,dwBirthdayMonth,dwBirthdayDay,dwCountryID,dwOnline));
}