/*
 * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code 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 General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
//
//


// HTTP status code
#define IDS_HTTP_STATUS_FORBIDDEN           403
#define IDS_HTTP_STATUS_REQUEST_TIMEOUT     408
#define IDS_HTTP_STATUS_SERVER_ERROR        500
#define IDS_HTTP_STATUS_SERVICE_UNAVAIL     503



#define IDS_HTTP_INSTRUCTION_REQUEST_TIMEOUT           2408
#define IDS_HTTP_INSTRUCTION_SERVICE_UNAVAIL           2503
#define IDS_HTTP_INSTRUCTION_FORBIDDEN                 2403
#define IDS_HTTP_INSTRUCTION_SERVER_NOT_REACHABLE      2035
#define IDS_HTTP_INSTRUCTION_UNKNOWN_ERROR             2036
#define IDS_HTTP_STATUS_OTHER                          2037

#define IDS_DOWNLOAD_STATUS_RETRY           3004

#define IDD_DOWNLOAD_DIALOG             105
#define IDI_JAVA                        114
#define IDI_MASTHEAD                    115
#define IDC_DOWNLOAD_PROGRESS           1006
#define IDC_DOWNLOAD_INFO               1007
#define IDC_DOWNLOAD_STATUS             1008
#define IDC_DOWNLOAD_ANIMATE            1009
#define IDS_ERROR_CAPTION               2004
#define IDS_HOURSMINUTESECOND           2007
#define IDS_HOURMINUTESECOND            2008
#define IDS_MINUTESECOND                2009
#define IDS_SECOND                      2010
#define IDS_DISK_FULL_ERROR             2023
#define IDS_DISK_FULL_ERROR_CAPTION     2024
#define IDS_DISK_WRITE_ERROR            2025
#define IDS_DISK_WRITE_ERROR_CAPTION    2026
#define IDS_HTTP_STATUS_SERVER_NOT_REACHABLE  2028
#define IDS_FATAL_ERROR                 2029
#define IDS_ERROR_DOWNLOADING_BUNDLE_PROPERTIES 2030
#define IDS_ERROR_MALFORMED_BUNDLE_PROPERTIES 2031
#define IDS_ERROR_MALFORMED_URL         2032

#define IDS_DOWNLOAD_CANCEL_CAPTION            2038
#define IDS_DOWNLOAD_CANCEL_INSTRUCTION        2039
#define IDS_DOWNLOAD_CANCEL_MESSAGE            2040

// codes for download and install dialog
#define IDC_MASTHEAD_TEXT               116
#define IDC_DOWNLOAD_MASTHEAD           121
#define IDC_TIME_REMAINING              122
#define IDC_DOWNLOAD_TEXT               123

// codes for download retry dialog
#define IDS_DOWNLOAD_RETRY              130
#define IDS_DOWNLOAD_RETRY_TEXT         131

#define IDS_DOWNLOAD_UNPACKING          3900
#define IDS_DOWNLOAD                    4000
#define IDS_DOWNLOAD_TEXT               4001

// codes for completion cleanup
#define IDS_FILE_UPDATE_ERROR           4101
#define IDS_FILE_DELETE_ERROR           4103
#define IDS_JAVA_HOME_ERROR             4104
#define IDS_KERNEL_HOME_ERROR           4105
#define IDS_JBROKER_ERROR               4106

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        128
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1016
#define _APS_NEXT_SYMED_VALUE           103
#endif
#endif
