/*
 * Copyright 2009-2010 Aurimas Fišeras <aurimas@gmail.com>
 *
 * 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"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL

IDD_PROXYDLG DIALOG 36, 24, 250, 154
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Įveskite tinklo slaptažodį"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Įveskite savo naudotojo vardą ir slaptažodį:", -1, 40, 6, 150, 15
 LTEXT "Įgaliot. serv.", -1, 40, 26, 50, 10
 LTEXT "Sritis", -1, 40, 46, 50, 10
 LTEXT "Naudotojas", -1, 40, 66, 50, 10
 LTEXT "Slaptažodis", -1, 40, 86, 50, 10
 LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0
 LTEXT "" IDC_REALM, 80, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "Į&rašyti šį slaptažodį (nesaugu)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Gerai", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Atsisakyti", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_AUTHDLG DIALOG 36, 24, 250, 154
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Reikalingas tapatumo nustatymas"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Įveskite savo naudotojo vardą ir slaptažodį:", -1, 40, 6, 150, 15
 LTEXT "Serveris", -1, 40, 26, 50, 10
 LTEXT "Sritis", -1, 40, 46, 50, 10
 LTEXT "Naudotojas", -1, 40, 66, 50, 10
 LTEXT "Slaptažodis", -1, 40, 86, 50, 10
 LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0
 LTEXT "" IDC_REALM, 80, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "Į&rašyti šį slaptažodį (nesaugu)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Gerai", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Atsisakyti", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_INVCERTDLG DIALOG 3, 24, 250, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Įspėjimas apie saugumą"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Yra nesklandumų su šios svetainės liudijimu.", -1, 40, 6, 200, 20
 LTEXT "", IDC_CERT_ERROR, 40, 26, 200, 20
 LTEXT "Ar vistiek norite tęsti?", -1, 40, 46, 200, 20
 PUSHBUTTON "Taip", IDOK, 40, 66, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Ne", IDCANCEL, 100, 66, 56, 14, WS_GROUP | WS_TABSTOP
}

STRINGTABLE
{
  IDS_LANCONNECTION "Vietinio tinklo ryšys"
  IDS_CERT_CA_INVALID   "Liudijimas yra išduotas nežinomo arba nepatikimo leidėjo."
  IDS_CERT_DATE_INVALID "Liudijimo data yra neteisinga."
  IDS_CERT_CN_INVALID   "Liudijimo pavadinimas neatitinka svetainės."
  IDS_CERT_ERRORS       "Yra mažiausiai viena nenustatyta saugumo problema su šiuo liudijimu."
}
