################################################################################
##
##  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.
##
################################################################################

# Symbols

# Shared by DateChooser, DateField, CalendarLayout
dayNamesShortest=S,M,T,W,T,F,S

# Shared by DateChooser, DateField
firstDayOfWeek=0
yearSymbol=

# Localizable Strings


# Alert

okLabel=OK
yesLabel=Yes
noLabel=No
cancelLabel=Cancel

# ProgressBar

label=LOADING %3%%


# Developer RTE Section


# ColorPicker

notImplemented='{0}' not implemented yet.

# Loader

notLoadable=Unable to load '{0}'.

# NavBar

errWrongType=ERROR: The dataProvider of '{0}' must be String, ViewStack, Array, or IList.
errWrongContainer=ERROR: The dataProvider of '{0}' must not contain objects of type flash.display.DisplayObject.

# components using interaction (Tree)

unknownInput=Unknown inputType '{0}'.

# videoClasses.CuePointManager

wrongTime=Time must be number.
wrongName=Name cannot be undefined or null.
wrongTimeName=Time must be number and/or name must not be undefined or null.
wrongFormat=Unexpected cuePoint parameter format.
wrongType=Type must be number.
incorrectType=Type must be 0, 1 or 2.
wrongDisabled=Disabled must be number.
wrongNumParams=Num params must be number.
unexpectedEnd=Unexpected end of cuePoint param string.
cannotDisable=Cannot disable actionscript cue points.
undefinedArray=CuePoint.array undefined.
wrongIndex=CuePoint.index must be number between -1 and cuePoint.array.length.
undefinedParameter=CuePoint parameter undefined.

# videoClasses.NCManager

invalidCall=Cannot call reconnect on an http connection.

# videoClasses.SMILManager

rootNotFound=URL: '{0}' No root node found; if file is an flv, it must have a .flv extension.
rootNotSMIL=URL: '{0}' Root node not smil: '{1}'.
missingAttributes=URL: '{0}' Tag '{1}' requires attributes id, width, and height. Width and height must be numbers greater than or equal to 0.
tagNotFound=URL: '{0}' At least one video of ref tag is required.
missingAttributeSrc=URL: '{0}' Attribute src is required in '{1}' tag.

# videoClasses.VideoError

errorMessages=Unable to make connection to server or to find FLV on server.,\
			  No matching cue point found.,\
			  Illegal cue point.,\
			  Invalid seek.,\
			  Invalid contentPath.,\
			  Invalid XML.,\
			  No bitrate match; must be no default FLV.,\
			  Cannot delete default VideoPlayer.

# videoClasses.VideoPlayer

nullURL=Null URL sent to VideoPlayer.load.
badArgs=Bad args to _play.

# videoClasses.FPADManager

missingRoot=URL: '{0}' No root node found; if URL is for an FLV, it must have a .flv extension and take no parameters.
notfpad=URL: '{0}' Root node not fpad.
missingProxy=URL: '{0}' fpad xml requires proxy tag.

# TextInput, TextArea

unsupportedMode=IMEMode '{0}' not supported.

# AccImpl

requiredField=Required Field
