/*
 * Copyright 2014 Google Inc.
 * 
 * Licensed 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.
 */
package com.google.gwt.i18n.shared.impl.cldr;

// DO NOT EDIT - GENERATED FROM CLDR AND ICU DATA
//  cldrVersion=25
//  date=$Date: 2013-08-27 20:07:13 +0200 (Tue, 27 Aug 2013) $
//  number=$Revision: 9280 $
//  type=ar

/**
 * Implementation of DateTimeFormatInfo for the "ar_JO" locale.
 */
public class DateTimeFormatInfoImpl_ar_JO extends DateTimeFormatInfoImpl_ar_001 {

  @Override
  public int firstDayOfTheWeek() {
    return 6;
  }

  @Override
  public String[] monthsFull() {
    return new String[] {
        "كانون الثاني",
        "شباط",
        "آذار",
        "نيسان",
        "أيار",
        "حزيران",
        "تموز",
        "آب",
        "أيلول",
        "تشرين الأول",
        "تشرين الثاني",
        "كانون الأول"
    };
  }

  @Override
  public String[] monthsNarrow() {
    return new String[] {
        "ك",
        "ش",
        "آ",
        "ن",
        "أ",
        "ح",
        "ت",
        "آ",
        "أ",
        "ت",
        "ت",
        "ك"
    };
  }

  @Override
  public String[] monthsShort() {
    return new String[] {
        "كانون الثاني",
        "شباط",
        "آذار",
        "نيسان",
        "أيار",
        "حزيران",
        "تموز",
        "آب",
        "أيلول",
        "تشرين الأول",
        "تشرين الثاني",
        "كانون الأول"
    };
  }

  @Override
  public int weekendEnd() {
    return 6;
  }

  @Override
  public int weekendStart() {
    return 5;
  }
}
