/*
 * Copyright 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_BROWSE_OPEN DIALOG 10, 10, 200, 70
STYLE DS_MODALFRAME | WS_CAPTION
CAPTION "Atverti URL"
FONT 8, "MS Shell Dlg"
{
    LTEXT "Nurodykite URL, kurį norite atverti su interneto naršykle",-1 ,30, 5, 150, 16
    LTEXT "Atverti:", -1, 2, 32, 25, 15
    EDITTEXT IDC_BROWSE_OPEN_URL, 30, 30, 160, 13
    DEFPUSHBUTTON "&Gerai", IDOK, 30, 50, 50, 15
    PUSHBUTTON "&Atsisakyti", IDCANCEL, 90, 50, 50, 15
}

IDR_BROWSE_MAIN_MENU MENU
{
    POPUP "&Failas"
    {
        POPUP "&Naujas"
        {
            MENUITEM "&Langas",                 ID_BROWSE_NEW_WINDOW
        }
        MENUITEM "&Atverti...",                 ID_BROWSE_OPEN
        MENUITEM "&Išsaugoti",                  ID_BROWSE_SAVE
        MENUITEM "Išsaugoti &kaip...",          ID_BROWSE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "Spaudinio &formatas...",      ID_BROWSE_PRINT_FORMAT
        MENUITEM "S&pausdinti...",              ID_BROWSE_PRINT
        MENUITEM "Spaudinio pe&ržiūra...",      ID_BROWSE_PRINT_PREVIEW
        MENUITEM SEPARATOR
        MENUITEM "&Savybės...",                 ID_BROWSE_PROPERTIES
        MENUITEM "&Užverti",                    ID_BROWSE_QUIT
    }
    POPUP "&Rodymas"
    {
        POPUP "&Įrankių juosta"
        {
            MENUITEM "Į&prastinė juosta",       ID_BROWSE_BAR_STD
            MENUITEM "&Adreso juosta",          ID_BROWSE_BAR_ADDR
        }
    }
    POPUP "&Adresynas"
    {
        MENUITEM "Į&rašyti į adresyną...",      ID_BROWSE_ADDFAV
        MENUITEM SEPARATOR
    }
    POPUP "&Žinynas"
    {
        MENUITEM "&Apie interneto naršyklę...", ID_BROWSE_ABOUT
    }
}

STRINGTABLE
{
    IDS_TB_BACK             "Atgal"
    IDS_TB_FORWARD          "Pirmyn"
    IDS_TB_STOP             "Stabdyti"
    IDS_TB_REFRESH          "Atnaujinti"
    IDS_TB_HOME             "Pradžia"
    IDS_TB_PRINT            "Spausdinti"
}

STRINGTABLE
{
    IDS_ADDRESS             "Adresas"
}
