/*
 * Copyright 2003 Mike McCormack for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "resource.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
  IDS_LANCONNECTION "LAN Connection"
  IDS_CERT_CA_INVALID   "The certificate is issued by an unknown or untrusted publisher."
  IDS_CERT_DATE_INVALID "The date on the certificate is invalid."
  IDS_CERT_CN_INVALID   "The name on the certificate does not match the site."
  IDS_CERT_ERRORS       "There is at least one unspecified security problem with this certificate."
}

IDD_PROXYDLG DIALOG 36, 24, 220, 146
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Enter Network Password"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Please enter your username and password:", -1, 6, 6, 210, 15
 LTEXT "Proxy", -1, 6, 26, 50, 18
 LTEXT "Realm", -1, 6, 46, 50, 18
 LTEXT "User", -1, 6, 66, 50, 18
 LTEXT "Password", -1, 6, 86, 50, 18
 LTEXT "", IDC_PROXY, 60, 26, 150, 14, 0
 LTEXT "", IDC_REALM, 60, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 60, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 60, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Save this password (insecure)", IDC_SAVEPASSWORD,
           60, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 90, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Cancel", IDCANCEL, 154, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_AUTHDLG DIALOG 36, 24, 220, 146
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Authentication Required"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Please enter your username and password:", -1, 6, 6, 210, 15
 LTEXT "Server", -1, 6, 26, 50, 18
 LTEXT "Realm", -1, 6, 46, 50, 18
 LTEXT "User", -1, 6, 66, 50, 18
 LTEXT "Password", -1, 6, 86, 50, 18
 LTEXT "", IDC_SERVER, 60, 26, 150, 14, 0
 LTEXT "", IDC_REALM, 60, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 60, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 60, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Save this password (insecure)", IDC_SAVEPASSWORD,
           60, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 90, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Cancel", IDCANCEL, 154, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_INVCERTDLG DIALOG 3, 24, 250, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Security Warning"
FONT 8, "MS Shell Dlg"
{
 LTEXT "There is a problem with the certificate for this site.", -1, 40, 6, 200, 20
 LTEXT "", IDC_CERT_ERROR, 40, 26, 200, 20
 LTEXT "Do you want to continue anyway?", -1, 40, 46, 200, 20
 PUSHBUTTON "Yes", IDOK, 40, 66, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "No", IDCANCEL, 100, 66, 56, 14, WS_GROUP | WS_TABSTOP
}

#define WINE_FILEDESCRIPTION_STR "Wine Internet Connectivity"
#define WINE_FILENAME_STR "wininet.dll"
#define WINE_FILEVERSION 6,0,2800,1106
#define WINE_FILEVERSION_STR "6.0.2800.1106"
#define WINE_PRODUCTVERSION 6,0,2800,1106
#define WINE_PRODUCTVERSION_STR "6.0.2800.1106"

#include "wine/wine_common_ver.rc"
