/**************************************************************
 *
 * 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.
 *
 *************************************************************/

#define __RSC

#ifndef UUI_IDS_HRC
#include <ids.hrc>
#endif
#ifndef UUI_UNKNOWNAUTH_HRC
#include <unknownauthdlg.hrc>
#endif

ModalDialog DLG_UUI_UNKNOWNAUTH
{
	HelpId = HID_DLG_UNKNOWNAUTH_UUI ;
	Border = TRUE ;
	Moveable = TRUE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 136, 79 ) ;
	Size = MAP_APPFONT ( DLG_WIDTH, DLG_HEIGHT ) ;
	Text [ en-US ] = "Website Certified by an Unknown Authority" ;

	FixedImage IMG_WARN
	{
		Pos = MAP_APPFONT ( RSC_SP_DLG_INNERBORDER_LEFT, RSC_SP_DLG_INNERBORDER_TOP ) ;
		Size = MAP_APPFONT ( DLG_WARMIMG_WIDTH, DLG_WARMIMG_HEIGHT ) ;

		Fixed = Image
		{
			/* ImageBitmap = Bitmap { File = "certificate_40x56.png"; }; */
		};
	};


	PushButton PB_VIEW__CERTIFICATE
	{
		HelpID = "uui:PushButton:DLG_UUI_UNKNOWNAUTH:PB_VIEW__CERTIFICATE" ;
		Pos = MAP_APPFONT ( DLG_TEXT_START_X, RSC_SP_DLG_INNERBORDER_TOP + DLG_TEXT_1_HEIGHT + RSC_SP_CTRL_GROUP_Y ) ;
		Size = MAP_APPFONT ( 70, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "Examine Certificate..." ;
	};

	HelpButton PB_HELP
	{
		Pos = MAP_APPFONT ( DLG_CTLBTN_HELP_START_X, DLG_CTLBTN_START_Y ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "Help" ;
	};

	PushButton PB_OK
	{
		HelpID = "uui:PushButton:DLG_UUI_UNKNOWNAUTH:PB_OK" ;
		Pos = MAP_APPFONT ( DLG_CTLBTN_OK_START_X, DLG_CTLBTN_START_Y ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "OK" ;
	};

	CancelButton PB_CANCEL
	{
		Pos = MAP_APPFONT ( DLG_CTLBTN_CANCEL_START_X, DLG_CTLBTN_START_Y ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
	};

	RadioButton RB_ACCEPT_1
	{
		HelpID = "uui:RadioButton:DLG_UUI_UNKNOWNAUTH:RB_ACCEPT_1" ;
		Pos = MAP_APPFONT ( DLG_TEXT_START_X, DLG_RADIOBTN_START_Y ) ;
		Size = MAP_APPFONT ( 182, RSC_CD_RADIOBUTTON_HEIGHT ) ;
		Text [ en-US ] = "Accept this certificate temporarily for this session" ;
		Check = TRUE ;
	};

	RadioButton RB_DONTACCEPT_2
	{
		HelpID = "uui:RadioButton:DLG_UUI_UNKNOWNAUTH:RB_DONTACCEPT_2" ;
		Pos = MAP_APPFONT ( DLG_TEXT_START_X, DLG_RADIOBTN_START_Y + RSC_CD_RADIOBUTTON_HEIGHT ) ;
		Size = MAP_APPFONT ( 182, RSC_CD_RADIOBUTTON_HEIGHT ) ;
		Text [ en-US ] = "Do not accept this certificate and do not connect to this Web site" ;
	};

	FixedText FT_LABEL_1
	{
		Pos = MAP_APPFONT ( DLG_TEXT_START_X, RSC_SP_DLG_INNERBORDER_TOP ) ;
		Size = MAP_APPFONT ( 190, DLG_TEXT_1_HEIGHT ) ;
		Text [ en-US ] = "No Text" ;
		Border = FALSE ;
		WordBreak = TRUE ;
	};

	FixedLine FL_LINE
	{
		Pos = MAP_APPFONT ( 0, DLG_CTLBTN_START_Y - RSC_SP_FLGR_INNERBORDER_TOP - RSC_CD_FIXEDLINE_HEIGHT ) ;
		Size = MAP_APPFONT ( DLG_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
	};
};

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