/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License") ; you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/

 // include ------------------------------------------------------------------
#include <sfx2/sfx.hrc>
#include "helpid.hrc"
#include <cuires.hrc>
#include "optinet2.hrc"

 // pragma -------------------------------------------------------------------

/************************************************************************/
/* Proxy server                                                         */
/************************************************************************/

TabPage RID_SVXPAGE_INET_PROXY
{
	HelpId = HID_OPTIONS_PROXY ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Text [ en-US ] = "Proxy" ;
									#define GB_TYPES_TOP 3
									#define GB_TYPES_LEFT 6
	FixedLine GB_SETTINGS
	{
		Pos = MAP_APPFONT ( GB_TYPES_LEFT, GB_TYPES_TOP ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Settings" ;
	};
	FixedText FT_PROXYMODE
	{
		Pos = MAP_APPFONT ( 12, GB_TYPES_TOP + 13 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "Proxy s~erver" ;
	};
	ListBox LB_PROXYMODE
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_INET_PROXY:LB_PROXYMODE" ;
		Pos = MAP_APPFONT ( 65, GB_TYPES_TOP + 11 ) ;
		Size = MAP_APPFONT ( 49, 48 ) ;
		Border = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "None" ;		> ;
			< "System" ;	> ;
			< "Manual" ;	> ;
		};
	};
	String ST_PROXY_FROM_BROWSER
	{
		Text [ en-US ] = "Use browser settings" ;
	};
	FixedText FT_HTTP_PROXY
	{
		Pos = MAP_APPFONT ( 12, GB_TYPES_TOP + 29 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "HT~TP proxy" ;
	};
	Edit ED_HTTP_PROXY
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_HTTP_PROXY" ;
		Pos = MAP_APPFONT ( 65, GB_TYPES_TOP + 27 ) ;
		Size = MAP_APPFONT ( 123, 12 ) ;
		Border = TRUE ;
	};

	#define FT_PORT_WIDTH	37
	#define ED_PORT_WIDTH	20
	#define ED_PORT_COL		229

	FixedText FT_HTTP_PORT
	{
		Pos = MAP_APPFONT ( 190, GB_TYPES_TOP + 29 ) ;
		Size = MAP_APPFONT ( FT_PORT_WIDTH, 8 ) ;
		Right = TRUE ;
		Text [ en-US ] = "~Port" ;
	};
	Edit ED_HTTP_PORT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_HTTP_PORT" ;
		Pos = MAP_APPFONT ( ED_PORT_COL, GB_TYPES_TOP + 27 ) ;
		Size = MAP_APPFONT ( ED_PORT_WIDTH, 12 ) ;
		Border = TRUE ;
	};

	FixedText FT_HTTPS_PROXY
	{
		Pos = MAP_APPFONT ( 12, GB_TYPES_TOP + 45 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "HTTP~S proxy" ;
	};
	Edit ED_HTTPS_PROXY
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_HTTPS_PROXY" ;
		Pos = MAP_APPFONT ( 65, GB_TYPES_TOP + 43 ) ;
		Size = MAP_APPFONT ( 123, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_HTTPS_PORT
	{
		Pos = MAP_APPFONT ( 190, GB_TYPES_TOP + 45 ) ;
		Size = MAP_APPFONT ( FT_PORT_WIDTH, 8 ) ;
		Right = TRUE ;
		Text [ en-US ] = "P~ort" ;
	};
	Edit ED_HTTPS_PORT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_HTTPS_PORT" ;
		Pos = MAP_APPFONT ( ED_PORT_COL, GB_TYPES_TOP + 43 ) ;
		Size = MAP_APPFONT ( ED_PORT_WIDTH, 12 ) ;
		Border = TRUE ;
	};

	FixedText FT_FTP_PROXY
	{
		Pos = MAP_APPFONT ( 12, GB_TYPES_TOP + 61 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "~FTP proxy" ;
	};
	Edit ED_FTP_PROXY
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_FTP_PROXY" ;
		Pos = MAP_APPFONT ( 65, GB_TYPES_TOP + 59 ) ;
		Size = MAP_APPFONT ( 123, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_FTP_PORT
	{
		Pos = MAP_APPFONT ( 190, GB_TYPES_TOP + 61 ) ;
		Size = MAP_APPFONT ( FT_PORT_WIDTH, 8 ) ;
		Right = TRUE ;
		Text [ en-US ] = "P~ort" ;
	};
	Edit ED_FTP_PORT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_FTP_PORT" ;
		Pos = MAP_APPFONT ( ED_PORT_COL, GB_TYPES_TOP + 59 ) ;
		Size = MAP_APPFONT ( ED_PORT_WIDTH, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_SOCKS_PROXY
	{
		Pos = MAP_APPFONT ( 12, GB_TYPES_TOP + 77 ) ;
		Size = MAP_APPFONT ( 50, 10 ) ;
		Text [ en-US ] = "~SOCKS proxy" ;
	};
	Edit ED_SOCKS_PROXY
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_SOCKS_PROXY" ;
		Pos = MAP_APPFONT ( 65, GB_TYPES_TOP + 75 ) ;
		Size = MAP_APPFONT ( 123, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_SOCKS_PORT
	{
		Pos = MAP_APPFONT ( 190, GB_TYPES_TOP + 77 ) ;
		Size = MAP_APPFONT ( FT_PORT_WIDTH, 8 ) ;
		Right = TRUE ;
		Text [ en-US ] = "Po~rt" ;
	};
	Edit ED_SOCKS_PORT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_SOCKS_PORT" ;
		Pos = MAP_APPFONT ( ED_PORT_COL, GB_TYPES_TOP + 75 ) ;
		Size = MAP_APPFONT ( ED_PORT_WIDTH, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_NOPROXYFOR
	{
		Pos = MAP_APPFONT ( 12, GB_TYPES_TOP + 93 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "~No proxy for:" ;
	};
	Edit ED_NOPROXYFOR
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_PROXY:ED_NOPROXYFOR" ;
		Pos = MAP_APPFONT ( 65, GB_TYPES_TOP + 91 ) ;
		Size = MAP_APPFONT ( 123, 12 ) ;
		Border = TRUE ;
	};
	FixedText ED_NOPROXYDESC
	{
		Pos = MAP_APPFONT ( 190, GB_TYPES_TOP + 93 ) ;
		Size = MAP_APPFONT ( 56, 8 ) ;
		Text [ en-US ] = "Separator ;" ;
	};
	FixedLine GB_DNS
	{
		Pos = MAP_APPFONT ( 6, 100 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "DNS server" ;
	};
	RadioButton RB_DNS_AUTO
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_INET_PROXY:RB_DNS_AUTO" ;
		Pos = MAP_APPFONT ( 12, 111 ) ;
		Size = MAP_APPFONT ( 236, 10 ) ;
		Text [ en-US ] = "~Automatic" ;
	};
	RadioButton RB_DNS_MANUAL
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_INET_PROXY:RB_DNS_MANUAL" ;
		Pos = MAP_APPFONT ( 12, 124 ) ;
		Size = MAP_APPFONT ( 75, 10 ) ;
		Text [ en-US ] = "~Manual" ;
	};
	PatternField ED_DNS
	{
		HelpID = "cui:PatternField:RID_SVXPAGE_INET_PROXY:ED_DNS" ;
		Pos = MAP_APPFONT ( 90, 126 ) ;
		Size = MAP_APPFONT ( 66, 12 ) ;
		Border = TRUE ;
		LiteralMask = "   .   .   .   " ;
		EditMask = "nnnLnnnLnnnLnnn" ;
		StrictFormat = TRUE ;
	};
	String ST_MSG_255_0
	{
		Text [ en-US ] = "is not a valid entry for this field. Please specify a value between 0 and 255." ;
	};
	String ST_MSG_255_1
	{
		Text [ en-US ] = "is not a valid entry for this field. Please specify a value between 1 and 255." ;
	};
};
/************************************************************************/
/* Search                                                               */
/************************************************************************/
TabPage RID_SVXPAGE_INET_SEARCH
{
	HelpId = HID_OPTIONS_SEARCH ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( TP_WIDTH, TP_HEIGHT ) ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Text [ en-US ] = "Search" ;

	#define GB_SEARCH_LEFT 6
	#define GB_SEARCH_TOP 3
	FixedLine GB_SEARCH
	{
		Pos = MAP_APPFONT ( GB_SEARCH_LEFT, GB_SEARCH_TOP ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Search in" ;
	};
	ListBox LB_SEARCH
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_INET_SEARCH:LB_SEARCH" ;
		Pos = MAP_APPFONT ( 12, GB_SEARCH_TOP + 11 ) ;
		Size = MAP_APPFONT ( 39, 120 ) ;
		Border = TRUE ;
		AutoHScroll = TRUE ;
	};
	#define LABEL_START_XPOS (GB_SEARCH_LEFT + 6 + 39 + 5 )
	#define LABEL_LEN 64
	#define EDIT_START_XPOS (LABEL_START_XPOS + LABEL_LEN + 3)
	FixedText FT_SEARCH_NAME
	{
		Pos = MAP_APPFONT ( LABEL_START_XPOS, GB_SEARCH_TOP + 13 ) ;
		Size = MAP_APPFONT ( LABEL_LEN, 8 ) ;
		Text [ en-US ] = "~Name" ;
	};
	Edit ED_SEARCH_NAME
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_SEARCH:ED_SEARCH_NAME" ;
		Pos = MAP_APPFONT ( EDIT_START_XPOS, GB_SEARCH_TOP + 11 ) ;
		Size = MAP_APPFONT ( 125, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_SEARCH
	{
		Pos = MAP_APPFONT ( LABEL_START_XPOS, GB_SEARCH_TOP + 27 ) ;
		Size = MAP_APPFONT ( LABEL_LEN, 8 ) ;
		Text [ en-US ] = "Type" ;
	};
	RadioButton RB_AND
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_INET_SEARCH:RB_AND" ;
		Pos = MAP_APPFONT ( EDIT_START_XPOS, GB_SEARCH_TOP + 26 ) ;
		Size = MAP_APPFONT ( 125, 10 ) ;
		Check = TRUE ;
		Text [ en-US ] = "~And" ;
	};
	RadioButton RB_OR
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_INET_SEARCH:RB_OR" ;
		Pos = MAP_APPFONT ( EDIT_START_XPOS, GB_SEARCH_TOP + 39 ) ;
		Size = MAP_APPFONT ( 125, 10 ) ;
		Text [ en-US ] = "~Or" ;
	};
	RadioButton RB_EXACT
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_INET_SEARCH:RB_EXACT" ;
		Pos = MAP_APPFONT ( EDIT_START_XPOS, GB_SEARCH_TOP + 52 ) ;
		Size = MAP_APPFONT ( 125, 10 ) ;
		Text [ en-US ] = "E~xact" ;
	};
	FixedText FT_URL
	{
		Pos = MAP_APPFONT ( LABEL_START_XPOS, GB_SEARCH_TOP + 67 ) ;
		Size = MAP_APPFONT ( LABEL_LEN, 8 ) ;
		Text [ en-US ] = "~Prefix" ;
	};
	Edit ED_URL
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_SEARCH:ED_URL" ;
		Pos = MAP_APPFONT ( EDIT_START_XPOS, GB_SEARCH_TOP + 65 ) ;
		Size = MAP_APPFONT ( 125, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_POSTFIX
	{
		Pos = MAP_APPFONT ( LABEL_START_XPOS, GB_SEARCH_TOP + 82 ) ;
		Size = MAP_APPFONT ( LABEL_LEN, 8 ) ;
		Text [ en-US ] = "Su~ffix" ;
	};
	Edit ED_POSTFIX
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_SEARCH:ED_POSTFIX" ;
		Pos = MAP_APPFONT ( EDIT_START_XPOS, GB_SEARCH_TOP + 80 ) ;
		Size = MAP_APPFONT ( 125, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_SEPARATOR
	{
		Pos = MAP_APPFONT ( LABEL_START_XPOS, GB_SEARCH_TOP + 97 ) ;
		Size = MAP_APPFONT ( LABEL_LEN, 8 ) ;
		Text [ en-US ] = "~Separator" ;
	};
	Edit ED_SEPARATOR
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_SEARCH:ED_SEPARATOR" ;
		Pos = MAP_APPFONT ( EDIT_START_XPOS, GB_SEARCH_TOP + 95 ) ;
		Size = MAP_APPFONT ( 42, 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_CASE
	{
		Pos = MAP_APPFONT ( LABEL_START_XPOS, GB_SEARCH_TOP + 112 ) ;
		Size = MAP_APPFONT ( LABEL_LEN, 8 ) ;
		Text [ en-US ] = "~Case match" ;
	};
	ListBox ED_CASE
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_INET_SEARCH:ED_CASE" ;
		Pos = MAP_APPFONT ( EDIT_START_XPOS, GB_SEARCH_TOP + 110 ) ;
		Size = MAP_APPFONT ( 42, 48 ) ;
		Border = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "None" ;	> ;
			< "Upper" ;	> ;
			< "Lower" ;	> ;
		};
	};

	#define PB_SEARCH_POS_Y		TP_HEIGHT - RSC_CD_PUSHBUTTON_HEIGHT - RSC_SP_TBPG_INNERBORDER_BOTTOM
	#define PB_SEARCH_POS_X1	TP_WIDTH - ( RSC_CD_PUSHBUTTON_WIDTH * 4 ) - ( RSC_SP_CTRL_GROUP_X * 3 ) - RSC_SP_TBPG_INNERBORDER_RIGHT
	#define PB_SEARCH_POS_X2	TP_WIDTH - ( RSC_CD_PUSHBUTTON_WIDTH * 3 ) - ( RSC_SP_CTRL_GROUP_X * 2 ) - RSC_SP_TBPG_INNERBORDER_RIGHT
	#define PB_SEARCH_POS_X3	TP_WIDTH - ( RSC_CD_PUSHBUTTON_WIDTH * 2 ) - ( RSC_SP_CTRL_GROUP_X * 1 ) - RSC_SP_TBPG_INNERBORDER_RIGHT
	#define PB_SEARCH_POS_X4	TP_WIDTH - RSC_CD_PUSHBUTTON_WIDTH - RSC_SP_TBPG_INNERBORDER_RIGHT
	PushButton PB_NEW
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_SEARCH:PB_NEW" ;
		Pos = MAP_APPFONT ( PB_SEARCH_POS_X1, PB_SEARCH_POS_Y ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "N~ew" ;
	};
	PushButton PB_ADD
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_SEARCH:PB_ADD" ;
		Pos = MAP_APPFONT (PB_SEARCH_POS_X2, PB_SEARCH_POS_Y ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Add" ;
	};
	PushButton PB_CHANGE
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_SEARCH:PB_CHANGE" ;
		Pos = MAP_APPFONT ( PB_SEARCH_POS_X3, PB_SEARCH_POS_Y ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Modify" ;
	};
	PushButton PB_DELETE
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_SEARCH:PB_DELETE" ;
		Pos = MAP_APPFONT ( PB_SEARCH_POS_X4, PB_SEARCH_POS_Y ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Delete" ;
	};
	String MSG_MODIFY
	{
		Text [ en-US ] = "Do you want to accept the current modification?" ;
	};
};


/************************************************************************/
/* Scripting                                                            */
/************************************************************************/

TabPage RID_SVXPAGE_INET_SECURITY
{
	HelpID = "cui:TabPage:RID_SVXPAGE_INET_SECURITY" ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( TP_WIDTH, TP_HEIGHT ) ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Text [ en-US ] = "Security" ;
	FixedLine FL_SEC_SECURITYOPTIONS
	{
		Pos = MAP_APPFONT ( COL_0, ROW_0 ) ;
		Size = MAP_APPFONT ( COL_4-COL_0, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Security options and warnings" ;
	};
	FixedText FI_SEC_SECURITYOPTIONS
	{
		Pos = MAP_APPFONT ( COL_1, ROW_1 ) ;
		Size = MAP_APPFONT ( COL_2-COL_1, 3*RSC_CD_FIXEDLINE_HEIGHT ) ;
		Wordbreak = TRUE ;
		Text [ en-US ] = "Adjust security related options and define warnings for hidden information in documents." ;
	};
	PushButton PB_SEC_SECURITYOPTIONS
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_SECURITYOPTIONS" ;
		Pos = MAP_APPFONT ( COL_3, ROW_2a ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "Options..." ;
	};
	FixedLine FL_SEC_PASSWORDS
	{
		Pos = MAP_APPFONT ( COL_0, ROW_2 - 2 ) ;
		Size = MAP_APPFONT ( COL_4-COL_0, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Passwords for web connections" ;
	};
	CheckBox CB_SEC_SAVEPASSWORDS
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_INET_SECURITY:CB_SEC_SAVEPASSWORDS" ;
		Pos = MAP_APPFONT ( COL_1, ROW_3 - 4 ) ;
		Size = MAP_APPFONT ( COL_2-COL_1, 16 ) ;
		Wordbreak = TRUE ;
		Text [ en-US ] = "Persistently save passwords for web connections" ;
	};
	PushButton PB_SEC_CONNECTIONS
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_CONNECTIONS" ;
		Pos = MAP_APPFONT ( COL_3, ROW_3-1 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "Connections..." ;
	};
	CheckBox CB_SEC_MASTERPASSWORD
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_INET_SECURITY:CB_SEC_MASTERPASSWORD" ;
		Pos = MAP_APPFONT ( COL_1a, ROW_4 ) ;
		Size = MAP_APPFONT ( COL_2-COL_1a, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Protected by a master password (recommended)" ;
	};
	FixedText FI_SEC_MASTERPASSWORD
	{
		Pos = MAP_APPFONT ( COL_1a, ROW_4a ) ;
		Size = MAP_APPFONT ( COL_2-COL_1a, 4*RSC_CD_FIXEDLINE_HEIGHT ) ;
		Wordbreak = TRUE ;
		Text [ en-US ] = "Passwords are protected by a master password. You will be asked to enter it once per session, if %PRODUCTNAME retrieves a password from the protected password list." ;
	};
	PushButton PB_SEC_MASTERPASSWORD
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_MASTERPASSWORD" ;
		Pos = MAP_APPFONT ( COL_3, ROW_4a ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "Master Password..." ;
	};
	FixedLine FL_SEC_MACROSEC
	{
		Pos = MAP_APPFONT ( COL_0, ROW_5 ) ;
		Size = MAP_APPFONT ( COL_4-COL_0, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Macro security" ;
	};
	FixedText FI_SEC_MACROSEC
	{
		Pos = MAP_APPFONT ( COL_1, ROW_6 ) ;
		Size = MAP_APPFONT ( COL_2-COL_1, 3*RSC_CD_FIXEDLINE_HEIGHT ) ;
		Wordbreak = TRUE ;
		Text [ en-US ] = "Adjust the security level for executing macros and specify trusted macro developers." ;
	};
	PushButton PB_SEC_MACROSEC
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_MACROSEC" ;
		Pos = MAP_APPFONT ( COL_3, ROW_6-2 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "Macro Security..." ;
	};
	String STR_SEC_NOPASSWDSAVE
	{
		Text [ en-US ] = "Disabling the function to persistently store passwords deletes the list of passwords stored and resets the master password.\n\nDo you want to delete password list and reset master password?" ;
	};
};

ErrorBox RID_SVXERR_OPT_PROXYPORTS
{
	BUTTONS = WB_OK ;
	Message [ en-US ] = "Invalid value!\n\nThe maximum value for a port number is 65535." ;
};

// RID_SVXDLG_OPT_JAVASCRIPT_DISABLE -----------------------------------------

ModalDialog RID_SVXDLG_OPT_JAVASCRIPT_DISABLE
{
	HelpID = "cui:ModalDialog:RID_SVXDLG_OPT_JAVASCRIPT_DISABLE" ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 150, 81 ) ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	FixedImage IMG_JSCPT_WARNING
	{
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 30, 30 ) ;
	};
	FixedText FT_JSCPT_WARNING
	{
		Pos = MAP_APPFONT ( 39, 6 ) ;
		Size = MAP_APPFONT ( 195, 36 ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "Please note that with Java\nyou disable Javascript as well.\n\nDo you still want to disable Java?" ;
	};
	CheckBox CB_JSCPT_DISABLE
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_OPT_JAVASCRIPT_DISABLE:CB_JSCPT_DISABLE" ;
		Pos = MAP_APPFONT ( 39, 45 ) ;
		Size = MAP_APPFONT ( 195, 12 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~Don't show warning again" ;
	};
	OKButton BTN_JSCPT_YES
	{
		Pos = MAP_APPFONT ( 41, 61 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
	CancelButton BTN_JSCPT_NO
	{
		Pos = MAP_APPFONT ( 94, 61 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		DefButton = TRUE ;
	};
};

// *******************************************************************

TabPage RID_SVXPAGE_INET_MAIL
{
	HelpID = HID_OPTIONS_MAIL ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Hide = TRUE ;

	FixedLine FL_MAIL
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Sending documents as e-mail attachments" ;
	};

	FixedImage FI_MAILERURL
	{
		Pos = MAP_APPFONT ( 5, 21 ) ;
		Size = MAP_APPFONT ( 6, 6 ) ;
		Hide = TRUE;
	};

	FixedText FT_MAILERURL
	{
		Pos = MAP_APPFONT ( 14, 20 ) ;
		Size = MAP_APPFONT ( 43, 8 ) ;
		Text [ en-US ] = "~E-mail program" ;
	};

	Edit ED_MAILERURL
	{
		HelpID = "cui:Edit:RID_SVXPAGE_INET_MAIL:ED_MAILERURL" ;
		Pos = MAP_APPFONT ( 60, 18 ) ;
		Size = MAP_APPFONT ( 171, 12 ) ;
		Border = TRUE;
	};

	PushButton PB_MAILERURL
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_INET_MAIL:PB_MAILERURL" ;
		Pos = MAP_APPFONT ( 234, 17 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		Text = "..." ;
	};

	String STR_DEFAULT_FILENAME
	{
		Text [ en-US ] = "All files (*.*)" ;
	};
};

 // ******************************************************************* EOF
