
#ifndef __SCRIBE_DEFS_H
#define __SCRIBE_DEFS_H

////////////////////////////////////////////////////////////////////////////////////////////
// Options
#define OPT_UserName				"UserName"			//(char*)
#define OPT_EmailAddr				"EmailAddr"			//(char*)
#define OPT_ReplyToEmail			"ReplyToEmail"		//(char*)
#define OPT_SigFile					"SigFile"			//(char*)
#define OPT_SmtpServer				"SmtpServer"		//(char*)
#define OPT_SmtpName				"SmtpName"			//(char*)
#define OPT_SmtpAuth				"SmtpAuth"			//(bool)
#define OPT_EncryptedSmtpPassword	"SmtpEPw"			//(void*)
#define	OPT_Pop3Type				"Pop3Type"			//(int)
#define	OPT_Pop3Protocol			"Pop3Protocol"		//(char*) one of the PROTOCOL_??? defs
#define OPT_Pop3Server				"Pop3Server"		//(char*)
#define OPT_Pop3Name				"Pop3Name"			//(char*)
#define OPT_EncryptedPop3Password	"Pop3EPw"			//(void*)
#define OPT_Pop3CheckEvery			"Pop3CheckEvery"	//(char*)
#define OPT_Pop3LeaveOnServer		"Pop3LeaveOnServer"	//(bool)(int)
#define OPT_Pop3Folder				"Pop3Folder"		//(char*)
#define OPT_ReceiveSpamIds			"SpamIds"			//(char*)
#define OPT_QuoteReply				"ReplyQuote"		//(bool)(int)
#define OPT_QuoteReplyStr			"ReplyQuoteStr"		//(char*)
#define OPT_ReplyWithSig			"ReplyWithSig"		//(bool)(int)
#define OPT_LogFile					"LogFile"			//(char*)
#define OPT_LogFormat				"LogFmt"			//(int)
#define OPT_MinimizeToTray			"MinToTray"			//(bool)(int)
#define OPT_SplitterPos				"SplitterPos"		//(int)	
#define OPT_WordWrap				"WordWrap"			//(bool)(int)
#define OPT_CheckForDialUp			"CheckDialUp"		//(bool)(int)
#define OPT_EditorFont				"EditorFont"		//(binary)
#define OPT_ReplyXml				"ReplyXml"			//(char*)
#define OPT_ForwardXml				"ForwardXml"		//(char*)
#define OPT_WrapAtColumn			"WrapAtColumn"		//(int)
#define OPT_SoftwareKey				"SoftwareKey"		//(char*)
#define OPT_NewMailSoundFile		"NewMailSound"		//(char*)
#define OPT_CheckDefaultEmail		"DefMailer"			//(bool)
#define OPT_UseSocks				"UseSocks5"			//(bool)
#define OPT_Socks5Server			"Socks5Server"		//(char*)
#define OPT_Socks5UserName			"Socks5Name"		//(char*)
#define OPT_Socks5Password			"Socks5Psw"			//(char*)
#define OPT_Pop3OnStart				"Pop3OnStart"		//(bool)
#define OPT_Pop3DefAction			"Pop3DefAction"		//(bool)
#define OPT_RecipientFromClipboard	"ClipRecip"			//(bool)
#define OPT_GridLines				"GridLines"			//(bool)
#define OPT_PreviewLines			"PreviewLines"		//(bool)
#define OPT_MaxEmailSize			"MaxEmailSize"		//(int)
#define OPT_ToolbarText				"ToolText"			//(bool)
#define OPT_WindowState				"WndState"			//(int)  Maximized=1, Normal=0, Minimized=-1
#define OPT_DefCodePage				"DefCodePage"		//(int)
#define OPT_ConfirmDelete			"ConfirmDel"		//(bool)
#define OPT_AccountName				"AccName"			//(char*)
#define OPT_AccountPlugins			"AccPlugins"		//(char*)
#define OPT_DefaultSendAccount		"DefSend"			//(int)
#define OPT_AccIdentName			"AccIdent"			//(char*)
#define OPT_AccIdentKey				"AccKey"			//(char*)
#define OPT_AccIdentEmail			"AccEmail"			//(char*)
#define OPT_AccIdentReply			"AccReply"			//(char*)
#define OPT_AccIdentSig				"AccSig"			//(char*)
#define OPT_NewMailNotify			"NewMailNotify"		//(bool)
#define OPT_CurrentIdentity			"CurId"				//(int)	
#define OPT_DefaultAlternative		"DefAlt"			//(int) 0=text/plain, 1=text/html
#define OPT_BoldUnread				"BdUnread"			//(int)
#define OPT_ReplyXml				"ReplyXml"			//(char*)
#define OPT_ForwardXml				"ForwardXml"		//(char*)
#define OPT_DateFormat				"DateFormat"		//(int)
#define OPT_UiLanguage				"UiLang"			//(int)
#define OPT_UiFontSize				"UiFontSize"		//(int)
#define OPT_CreateFoldersIfMissing	"CreateIfMissing"	//(int)
#define OPT_LocalCalendarColour		"LocCalCol"			//(int)Rgb24(x, x, x)
#define OPT_HttpProxy				"HttpPr"			//(char*)
#define OPT_ThreadMessages			"ThreadMsg"			//(int)
#define OPT_PersonalFolders			"Folders"			//(char*)
#define OPT_GlyphSub				"GlyphSub"			//(bool)
#define OPT_WorkOffline				"Offline"			//(bool)
#define OPT_PrefCharset1			"PrefCs1"			//(char*)
#define OPT_PrefCharset2			"PrefCs2"			//(char*)
#define OPT_DebugTrace				"DbgTrc"			//(bool)
#define OPT_UserPermPassword		"UsrPermPwd"		//(binary)
#define OPT_AccPermRead				"AccPermRd"			//(ScribePerm)
#define OPT_AccPermWrite			"AccPermWr"			//(ScribePerm)
#define OPT_BayesFilterMode			"BayesMode"			//(ScribeBayesianFilterMode)
#define OPT_BayesMoveTo				"BayesMvTo"			//(char*)
#define OPT_BayesUserWhiteList		"BayesWhiteLst"		//(char*)
#define OPT_BayesHam				"BayesHam"			//(int)
#define OPT_BayesSpam				"BayesSpam"			//(int)
#define OPT_BayesFalsePositives		"BayesFalsePos"		//(int)
#define OPT_BayesFalseNegitives		"BayesFalseNeg"		//(int)
#define OPT_PrintSettings			"PrintOpts"			//(char*)
#define OPT_AutoDeleteExe			"AutoDelExe"		//(bool)(int)
#define OPT_MarkReadAfterPreview	"PreRead"			//(bool)(int)
#define OPT_ExtraHeaders			"XtrHeaders"		//(char*)
#define OPT_CalendarViewPos			"CalViewPos"		//(char*)

// Lgi conf options
#define OPT_AdminPassword			"admin-psw"			// in the tag "scribe"

// Old options, now unused
//#define OPT_SmtpPassword			"SmtpPsw"			//(char*)
//#define OPT_Pop3Password			"Pop3Password"		//(char*)
//#define OPT_Pop3MsgsOnServer		"Pop3MsgsOnServer"	//(int)
//#define OPT_WrapReceived			"WrapReceived"		//(bool)(int)
//#define OPT_EditControl			"EditCtrl"			//(int) 0=8bit+CP, 1=Utf16, 2=Html, 3=Plugin
//#define OPT_ReadControl			"ReadCtrl"			//(int) 0=8bit+CP, 1=Utf16, 2=Html, 3=Plugin

// Folder opt's
#define OPT_Inbox					"Folder-0"
#define OPT_Outbox					"Folder-1"
#define OPT_Sent					"Folder-2"
#define OPT_Trash					"Folder-3"
#define OPT_Contacts				"Folder-4"
#define OPT_Templates				"Folder-5"
#define OPT_Filters					"Folder-6"
#define OPT_Calendar				"Folder-7"

#define OPT_Title					"Title"
#define OPT_First					"FirstName"
#define OPT_Last					"SurName"
#define OPT_Email					"Email"
#define OPT_Nick					"Nick"
#define OPT_Spouse					"Spouse"
#define OPT_Note					"Note"
#define OPT_Uid						"Uid"
#define OPT_TimeZone				"TZ"

#define OPT_HomeStreet				"Street"
#define OPT_HomeSuburb				"Suburb"
#define OPT_HomePostcode			"Postcode"
#define OPT_HomeState				"State"
#define OPT_HomeCountry				"Country"
#define OPT_HomePhone				"Home"
#define OPT_HomeMobile				"Mobile"
#define OPT_HomeIM					"ICQ"
#define OPT_HomeFax					"Fax"
#define OPT_HomeWebPage				"WebPage"

#define OPT_WorkStreet				"WkStreet"
#define OPT_WorkSuburb				"WkSuburb"
#define OPT_WorkPostcode			"WkPostcode"
#define OPT_WorkState				"WkState"
#define OPT_WorkCountry				"WkCountry"
#define OPT_WorkPhone				"Work"
#define OPT_WorkMobile				"WkMobile"
#define OPT_WorkIM					"WkIM"
#define OPT_WorkFax					"WkFax"
#define OPT_WorkWebPage				"WkWebPage"
#define OPT_Company					"Company"

#define OPT_CustomFld1				"CustomFld1"
#define OPT_CustomVal1				"CustomVal1"
#define OPT_CustomFld2				"CustomFld2"
#define OPT_CustomVal2				"CustomVal2"
#define OPT_CustomFld3				"CustomFld3"
#define OPT_CustomVal3				"CustomVal3"
#define OPT_CustomFld4				"CustomFld4"
#define OPT_CustomVal4				"CustomVal4"

// Clipboard formats
#define CFSTR_SCRIBE_THING			"Scribe-MailItem"
#define CFSTR_SCRIBE_FOLDER			"Scribe-Folder"

// Protocol names
#define PROTOCOL_POP3				"POP3"
#define PROTOCOL_IMAP4_FETCH		"IMAP4(fetch)"
#define PROTOCOL_IMAP4				"IMAP4(full)"
#define PROTOCOL_CALENDAR			"Calendar"
#define PROTOCOL_POP_OVER_HTTP		"PopOverHttp"
#define PROTOCOL_MAPI				"MAPI"

// File names
#define ICONS_FILE					"_icons.gif"
#define ABOUT_IMG_FILE				"_about.gif"
#define TOOLBAR_FILE				"_toolbar.gif"

////////////////////////////////////////////////////////////////////////////////////////////
// Defines

// Window messages
#define ShareMemName				"ScribeSharedMem"
#define M_SCRIBE_CMD				(M_USER + 0x301)
#define M_SCRIBE_OPEN_THING			(M_USER + 0x302)
#define M_SCRIBE_ITEM_SELECT		(M_USER + 0x303)
#define M_SCRIBE_ALLOC_PLUGINS		(M_USER + 0x304)
#define M_SCRIBE_NEW_MAIL			(M_USER + 0x305)
#define M_SCRIBE_THREAD_ITEM		(M_USER + 0x306)	// MailTransferEvent *e=MsgB(m), AccountletThread *t=MsgB(m)
#define M_SCRIBE_THREAD_ASK			(M_USER + 0x307)	// AccountletThread *t=MsgB(m)
#define M_SCRIBE_THREAD_DONE		(M_USER + 0x308)	// Accountlet *a=MsgB(m)
#define M_SCRIBE_LOG_MSG			(M_USER + 0x309)	// List<LogEntry> *l=MsgA(m), LogEntry *e=MsgB(m)
#define M_SCRIBE_MSG				(M_USER + 0x30a)	// char *Msg=MsgA(m), bool AskOptions=MsgB(m);
#define M_ACCOUNTLET_THREAD_DONE	(M_USER + 0x30b)	// (Accountlet*)MsgA(m)

#define IDC_STATIC					-1
#define IDC_ATTACHMENT				501
#define IDC_INTERNET_HEADER			502
#define IDC_TEST					503
#define IDC_ATTACHMENTS				504
#define IDC_SET_TO					505
#define IDC_ENTRY					506
#define IDC_REPLYALL				509
#define IDC_FORWARD					510
#define IDC_TO						513
#define IDC_SEND					515
#define IDC_REPLY					516
#define IDC_REMOVE_STR				517
#define IDC_FROM					600
#define IDC_LAUNCH_HTML				602
#define IDC_SET_FROM				603

#ifndef IDM_OPEN
#define	IDM_OPEN					111
#endif
#define	IDM_LOAD					112
#ifndef IDM_SAVE
#define	IDM_SAVE					113
#endif
#ifndef	IDM_SAVEAS
#define	IDM_SAVEAS					114
#endif
#define IDM_SAVE_CLOSE				118
#ifndef IDM_CLOSE
#define	IDM_CLOSE					119
#endif
#define IDM_EXPORT					120

#define	IDM_UNDO					201
#define	IDM_REDO					202

#define IDM_TO						311
#define IDM_CC						312
#define IDM_RENAME					314
#define IDM_EMPTY					315
#define IDM_EDIT					316
#define IDM_BCC						317

#define IDM_CREATE_SUB				400
#define IDM_PROPERTIES				402
#define IDM_SET_READ				403
#define IDM_SET_UNREAD				404
#define IDM_EMAIL_GROUP				405
#define IDM_ATTACH_FILE				406
#define IDM_IMPORT_BEOS_PPL			407
#define IDM_IMPORT_BEOS_MAIL		408
#define IDM_MARK_SEND				409
#define IDM_IMPORT_OUTLOOK_CONTACTS	410
#define IDM_CALENDAR				411
#define IDM_COLLECT_MAIL			412
#define IDM_DELETE_AS_SPAM			413
#define IDM_ITEM_FILTER				414
#define IDM_HIGH_PRIORITY			415
#define IDM_LOW_PRIORITY			416
#define IDM_READ_RECEIPT			417
#define IDM_THREAD					418
#define IDM_SELECT_THREAD			419
#define IDM_DELETE_THREAD			420
#define IDM_IGNORE_THREAD			421
#define	IDM_BROWSE_FOLDER			423
#define IDM_MERGE_FILE				424
#define IDM_PREV_MSG				425
#define IDM_NEXT_MSG				426
#define IDM_SEND_MSG				427
#define IDM_DELETE_MSG				428


#define IDM_SEND_FROM				6000
#define IDM_NEW_FROM_TEMPLATE		7000
#define IDM_RECEIVE_FROM			8000
#define IDM_RECEIVE_MAIL			8998
#define IDM_RECEIVE_ALL				8999
#define IDM_PREVIEW_FROM			9000
#define IDM_PREVIEW_POP3			9999

// Status bar panes
#ifndef STATUS_MAX
#define	STATUS_NORMAL				0
#define	STATUS_MAX					1
#endif

// Icons indexs
#define ICON_CLOSED_FOLDER			0
#define ICON_OPEN_FOLDER			1
#define ICON_READ_MAIL				2
#define ICON_UNREAD_MAIL			3
#define ICON_CONTACT				4
#define ICON_UNSENT_MAIL			5
#define ICON_TO						6
#define ICON_CC						7
#define ICON_UNKNOWN				8
#define ICON_READ_ATT_MAIL			9
#define ICON_UNREAD_ATT_MAIL		10
#define ICON_BCC					11
#define ICON_TRASH					12
#define ICON_FILTER					13
#define ICON_PAPER_CLIP				14
#define ICON_PRIORITY_BLACK			15
#define ICON_PRIORITY_HIGH			16
#define ICON_PRIORITY_LOW			17
#define ICON_FLAGS_BLACK			18
#define ICON_FLAGS_REPLY			19
#define ICON_FLAGS_FORWARD			20
#define ICON_FLAGS_MARK				21
#define ICON_FOLDER_MAIL			29
#define ICON_FOLDER_CONTACTS		30
#define ICON_FOLDER_FILTERS			31
#define ICON_FOLDER_CALENDAR		32
#define ICON_DISABLED_FOLDER		33
#define ICON_MAILBOX				34
#define ICON_CALENDAR				35
#define ICON_REMOTE_FOLDER_CLOSED	36
#define ICON_REMOTE_FOLDER_OPEN		37
#define ICON_CONTACT_GROUP			38

#define IMG_NEW_MAIL				0
#define IMG_NEW_CONTACT				1
#define IMG_SEND					2
#define IMG_RECEIVE					3
#define IMG_REPLY					4
#define IMG_REPLY_ALL				5
#define IMG_FORWARD					6
#define IMG_PRINT					7
#define IMG_PREV_ITEM				8
#define IMG_NEXT_ITEM				9
#define IMG_TRASH					10
#define IMG_SAVE					11
#define IMG_SAVE_AND_CLOSE			12
#define IMG_ATTACH_FILE				13
#define IMG_PREVIEW					14
#define IMG_CALENDAR				15
#define IMG_DELETE_SPAM				16
#define IMG_SEARCH					17
#define IMG_HIGH_PRIORITY			18
#define IMG_LOW_PRIORITY			19
#define IMG_READ_RECEIPT			20
#define IMG_THREADS					21
#define IMG_CAL_DAY					22
#define IMG_CAL_WEEK				23
#define IMG_CAL_MONTH				24
#define IMG_CAL_YEAR				25
#define IMG_CAL_UNDEFINED			26
#define IMG_CAL_PREV				27
#define IMG_CAL_BACK				28
#define IMG_CAL_TODAY				29
#define IMG_CAL_FORWARD				30
#define IMG_CAL_NEXT				31
#define IMG_CAL_CONFIG				32

#define TOOL_NEWMAIL				0
#define TOOL_SEND					1
#define TOOL_RECEIVE				2
#define TOOL_REPLY					3
#define TOOL_REPLYALL				4
#define TOOL_FORWARD				5
#define TOOL_PRINT					6

// Magic numbers
enum ScribeItemTypes
{
	MAGIC_NONE						= 0x00000000,
	MAGIC_BASE						= 0xAAFF0000,
	MAGIC_MAIL						= (MAGIC_BASE+1),	// Mail item
	MAGIC_CONTACT					= (MAGIC_BASE+2),	// Contact item
	MAGIC_FOLDER					= (MAGIC_BASE+3),	// Folder of items
	MAGIC_MAILBOX					= (MAGIC_BASE+4),	// Root of mail tree (nothing-abstract)
	MAGIC_ATTACHMENT				= (MAGIC_BASE+5),	// Mail attachment
	MAGIC_ANY						= (MAGIC_BASE+6),	// Trash folder type (accepts any object)
	MAGIC_FILTER					= (MAGIC_BASE+7),	// Used to match messages against
	MAGIC_FOLDER_2					= (MAGIC_BASE+8),	// Folder v2
	MAGIC_CONDITION					= (MAGIC_BASE+9),	// Filter condition
	MAGIC_ACTION					= (MAGIC_BASE+10),	// Filter action
	MAGIC_CALENDAR					= (MAGIC_BASE+11),	// Calendar event
	MAGIC_ATTENDEE					= (MAGIC_BASE+12),	// Event attendee
	MAGIC_GROUP						= (MAGIC_BASE+13),	// Group of contacts
	MAGIC_MAX						= (MAGIC_BASE+14)	// One past the end
};

// Folders
#define FOLDER_INBOX				0
#define FOLDER_OUTBOX				1
#define FOLDER_SENT					2
#define FOLDER_TRASH				3
#define FOLDER_CONTACTS				4
#define FOLDER_TEMPLATES			5
#define FOLDER_FILTERS				6
#define FOLDER_CALENDAR				7
#define FOLDER_GROUPS				8
#define FOLDER_MAX					9

// Mail flags
#define	MAIL_SENT					0x00000001
#define	MAIL_RECEIVED				0x00000002
#define	MAIL_CREATED				0x00000004	// If this flag is set then the user
												// wants to send the mail on the next
												// run. When the user just saves a new
												// message in the outbox this isn't set
												// and isn't sent until they go in and
												// say "send". At which point this flag
												// is set and the message sent
#define	MAIL_FORWARDED				0x00000008
#define	MAIL_REPLYED				0x00000010
#define	MAIL_ATTACHMENTS			0x00000020
#define	MAIL_READ					0x00000040
#define MAIL_MARK					0x00000080
#define MAIL_READY_TO_SEND			0x00000100
#define MAIL_READ_RECEIPT			0x00000200
#define MAIL_IGNORE					0x00000400

#define MAIL_BAYES_HAM				0x00010000	// Bayesian classified originally as ham
#define MAIL_BAYES_SPAM				0x00020000	// Bayesian classified originally as spam

// Update Flags
#define UPDATE_TREE					1
#define UPDATE_LIST					2

// Mail fields
#define FIELD_FLAGS					1
#define FIELD_TO					2
#define FIELD_CC					3
#define FIELD_FROM					4
#define FIELD_REPLY					5
#define FIELD_SUBJECT				6
#define FIELD_TEXT					7
#define FIELD_MESSAGE_ID			8
#define FIELD_DATE					9	// received date
#define FIELD_INTERNET_HEADER		10

// Contact fields
#define FIELD_FIRST_NAME			11
#define FIELD_LAST_NAME				12
#define FIELD_EMAIL_ADDR			13
#define FIELD_HOME_STREET			14
#define FIELD_HOME_SUBURB			15
#define FIELD_HOME_POSTCODE			16
#define FIELD_HOME_STATE			17
#define FIELD_HOME_COUNTRY			18
#define FIELD_WORK_PHONE			19	// this was already defined
#define FIELD_HOME_PHONE			20
#define FIELD_HOME_MOBILE			21
#define FIELD_HOME_IM				22
#define FIELD_HOME_FAX				23
#define FIELD_HOME_WEBPAGE			24
#define FIELD_NICK					25
#define FIELD_SPOUSE				26
#define FIELD_NOTE					27
#define FIELD_PLUGIN_ASSOC			28

// More fields
#define FIELD_SIZE					29
#define FIELD_DATE_SENT				30
#define FIELD_COLUMN				31
#define FIELD_BCC					32
#define FIELD_MIME_TYPE				33
#define FIELD_PRIORITY				34
#define FIELD_FOLDER_OPEN			35
#define FIELD_CODE_PAGE				36
#define FIELD_MARK_COLOUR			37
#define FIELD_ALTERNATE_HTML		38
#define FIELD_CONTENT_ID			39

// Filter fields
#define FIELD_FILTER_NAME			40
#define FIELD_CONDITION				41
#define FIELD_ACTION				42
#define FIELD_COND_FIELD			43
#define FIELD_COND_OPERATOR			44
#define FIELD_COND_VALUE			45
#define FIELD_ACT_TYPE				46
#define FIELD_ACT_ARG				47
#define FIELD_DIGEST_INDEX			48
#define FIELD_COMBINE_OP			49
#define FIELD_FILTER_INDEX			50
#define FIELD_COND_SOURCE			51
#define FIELD_FILTER_SCRIPT			52
#define FIELD_COND_NOT				53
#define FIELD_STOP_FILTERING		54

// Calendar fields
#define FIELD_CAL_START				60
#define FIELD_CAL_END				61
#define FIELD_CAL_SUBJECT			62
#define FIELD_CAL_LOCATION			63
#define FIELD_CAL_REMINDER_TIME		64
#define FIELD_CAL_REMINDER_ACTION	65
#define FIELD_CAL_REMINDER_ARG		66
#define FIELD_CAL_SHOW_TIME_AS		67
#define FIELD_CAL_RECUR_PERIOD		68
#define FIELD_CAL_RECUR_EVERY		69
#define FIELD_CAL_RECUR_FLAGS		70
#define FIELD_CAL_RECUR_START		71
#define FIELD_CAL_RECUR_END			72
#define FIELD_CAL_NOTES				73

// Attendee fields
#define FIELD_ATTENDEE_NAME			80
#define FIELD_ATTENDEE_EMAIL		81
#define FIELD_ATTENDEE_ATTENDENCE	82
#define FIELD_ATTENDEE_NOTE			83
#define FIELD_ATTENDEE_RESPONSE		84

// 2nd lot of contact fields
#define FIELD_WORK_STREET			90
#define FIELD_WORK_SUBURB			91
#define FIELD_WORK_POSTCODE			92
#define FIELD_WORK_STATE			93
#define FIELD_WORK_COUNTRY			94
// #define FIELD_WORK_PHONE is previously defined
#define FIELD_WORK_MOBILE			95
#define FIELD_WORK_IM				96
#define FIELD_WORK_FAX				97
#define FIELD_WORK_WEBPAGE			98
#define FIELD_COMPANY				99

#define FIELD_CONTACT_CUST_FLD1		100
#define FIELD_CONTACT_CUST_VAL1		101
#define FIELD_CONTACT_CUST_FLD2		102
#define FIELD_CONTACT_CUST_VAL2		103
#define FIELD_CONTACT_CUST_FLD3		104
#define FIELD_CONTACT_CUST_VAL3		105
#define FIELD_CONTACT_CUST_FLD4		106
#define FIELD_CONTACT_CUST_VAL4		107

// Misc additional fields
#define FIELD_LABEL					110 // Mail label
#define FIELD_CHARSET				111
#define FIELD_ALT_EMAIL				112
#define FIELD_UID					113
#define FIELD_TITLE					114
#define FIELD_TIMEZONE				115
#define FIELD_REFERENCES			116
#define FIELD_SERVER_UID			117 // char *Mail::ServerUid
#define FIELD_FOLDER_PERM_READ		118
#define FIELD_FOLDER_PERM_WRITE		119
#define FIELD_GROUP_NAME			120
#define FIELD_HTML_CHARSET			121
#define FIELD_ADDRESSED_TO			122
#define FIELD_GROUP_LIST			123

#define FIELD_MAX					124

// Folder fields... (don't ask why they're not in the same range)
#define FIELD_FOLDER_TYPE			1000
#define FIELD_FOLDER_NAME			1001
#define FIELD_UNREAD				1002
#define FIELD_SORT					1003

// Status update on send / receive
#if defined WIN32
#define STATUS_UPDATE_RES			50
#elif defined BEOS
#define STATUS_UPDATE_RES			1000
#endif

// Scribe field def
#define FTYPE_NONE					0
#define FTYPE_STRING				1
#define FTYPE_DATE					2
#define FTYPE_FILESIZE				3
#define FTYPE_BOOLEAN				4
#define FTYPE_INT					5

// Enums
enum ScribePerm
{
	PermRequireNone = 0,
	PermRequireUser = 1,
	PermRequireAdmin = 2
};

enum ScribeAccessType
{
	ScribeReadAccess,
	ScribeWriteAccess
};

enum ScribeBayesianFilterMode
{
	BayesOff = 0,
	BayesTrain = 1,
	BayesFilter = 2
};

// Colours
#define LC_MAIL_PREVIEW				(LC_MAXIMUM+1)
#define LC_UNREAD_COUNT				(LC_MAXIMUM+2)

// File utility macros
#define SizeStrField(Var)			(sizeof(short)+SizeofStr(Var))
#define SizeIntField(Var)			(sizeof(short)+sizeof(ulong)+sizeof(Var))
#define SizeObjField(Var)			(sizeof(short)+sizeof(ulong)+(Var).Sizeof())

#define WriteStrField(Id, Var)		{ f << ((short)Id); WriteStr(f, Var); }
#define WriteIntField(Id, Var)		{ f << ((short)Id); f << ((ulong)sizeof(Var)); f << Var; }
#define WriteObjField(Id, Var)		{ f << ((short)Id); f << ((ulong)(Var).Sizeof()); (Var).Serialize(f, Write); }

#define ReadStrField(Id, Var)		case Id: Var = ReadStr(f PassDebugArgs); break
#define ReadIntField(Id, Var)		case Id: { int32 FieldSize; f >> FieldSize; f >> Var; } break
#define ReadObjField(Id, Var)		case Id: { int32 FieldSize; f >> FieldSize; (Var).Serialize(f, Write); } break

// Misc
#ifndef MainWnd
#define	MainWnd						((ScribeWnd*)GApp::ObjInstance()->AppWnd)
#endif
#define	VIEW_PULSE_RATE				100

#ifdef WIN32
#define DefaultWideCharset			"ucs-2"
#else
#define DefaultWideCharset			"utf-32"
#endif

#endif
