/**************************************************************
 *
 * 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.
 *
 *************************************************************/

#include "datefunc.hrc"

Resource RID_DATE_FUNCTION_DESCRIPTIONS
{
	Resource DATE_FUNCDESC_DiffWeeks
	{
		String 1 // description					DiffWeeks
		{
			Text [ en-US ] = "Calculates the number of weeks in a specific period" ;
		};
		String 2 // name of parameter 1			DiffWeeks
		{
			Text [ en-US ] = "Start date" ;
		};
		String 3 // description of parameter 1	DiffWeeks
		{
			Text [ en-US ] = "First day of the period" ;
		};
		String 4 // name of parameter 2			DiffWeeks
		{
			Text [ en-US ] = "End date" ;
		};
		String 5 // description of parameter 2	DiffWeeks
		{
			Text [ en-US ] = "Last day of the period" ;
		};
		String 6 // name of parameter 3			DiffWeeks
		{
			Text [ en-US ] = "Type" ;
		};
		String 7 // description of parameter 3	DiffWeeks
		{
			Text [ en-US ] = "Type of calculation: Type=0 means the time interval, Type=1 means calendar weeks." ;
		};
	};

	Resource DATE_FUNCDESC_DiffMonths
	{
		String 1 // description					DiffMonths
		{
			Text [ en-US ] = "Determines the number of months in a specific period." ;
		};
		String 2 // name of parameter 1			DiffMonths
		{
			Text [ en-US ] = "Start date" ;
		};
		String 3 // description of parameter 1	DiffMonths
		{
			Text [ en-US ] = "First day of the period." ;
		};
		String 4 // name of parameter 2			DiffMonths
		{
			Text [ en-US ] = "End date" ;
		};
		String 5 // description of parameter 2	DiffMonths
		{
			Text [ en-US ] = "Last day of the period." ;
		};
		String 6 // name of parameter 3			DiffMonths
		{
			Text [ en-US ] = "Type" ;
		};
		String 7 // description of parameter 3	DiffMonths
		{
			Text [ en-US ] = "Type of calculation: Type=0 means the time interval, Type=1 means calendar months." ;
		};
	};

	Resource DATE_FUNCDESC_DiffYears
	{
		String 1 // description					DiffYears
		{
			Text [ en-US ] = "Calculates the number of years in a specific period." ;
		};
		String 2 // name of parameter 1			DiffYears
		{
			Text [ en-US ] = "Start date" ;
		};
		String 3 // description of parameter 1	DiffYears
		{
			Text [ en-US ] = "First day of the period" ;
		};
		String 4 // name of parameter 2			DiffYears
		{
			Text [ en-US ] = "End date" ;
		};
		String 5 // description of parameter 2	DiffYears
		{
			Text [ en-US ] = "Last day of the period" ;
		};
		String 6 // name of parameter 3			DiffYears
		{
			Text [ en-US ] = "Type" ;
		};
		String 7 // description of parameter 3	DiffYears
		{
			Text [ en-US ] = "Type of calculation: Type=0 means the time interval, Type=1 means calendar years." ;
		};
	};

	Resource DATE_FUNCDESC_IsLeapYear
	{
		String 1 // description					IsLeapYear
		{
			Text [ en-US ] = "Returns 1 (TRUE) if the date is a day of a leap year, otherwise 0 (FALSE)." ;
		};
		String 2 // name of parameter 1			IsLeapYear
		{
			Text [ en-US ] = "Date" ;
		};
		String 3 // description of parameter 1	IsLeapYear
		{
			Text [ en-US ] = "Any day in the desired year" ;
		};
	};

	Resource DATE_FUNCDESC_DaysInMonth
	{
		String 1 // description					DaysInMonth
		{
			Text [ en-US ] = "Returns the number of days of the month in which the date entered occurs" ;
		};
		String 2 // name of parameter 1			DaysInMonth
		{
			Text [ en-US ] = "Date" ;
		};
		String 3 // description of parameter 1	DaysInMonth
		{
			Text [ en-US ] = "Any day in the desired month" ;
		};
	};

	Resource DATE_FUNCDESC_DaysInYear
	{
		String 1 // description					DaysInYear
		{
			Text [ en-US ] = "Returns the number of days of the year in which the date entered occurs." ;
		};
		String 2 // name of parameter 1			DaysInYear
		{
			Text [ en-US ] = "Date" ;
		};
		String 3 // description of parameter 1	DaysInYear
		{
			Text [ en-US ] = "Any day in the desired year" ;
		};
	};

	Resource DATE_FUNCDESC_WeeksInYear
	{
		String 1 // description					WeeksInYear
		{
			Text [ en-US ] = "Returns the number of weeks of the year in which the date entered occurs" ;
		};
		String 2 // name of parameter 1			WeeksInYear
		{
			Text [ en-US ] = "Date" ;
		};
		String 3 // description of parameter 1	WeeksInYear
		{
			Text [ en-US ] = "Any day in the desired year" ;
		};
	};

	Resource DATE_FUNCDESC_Rot13
	{
		String 1 // description					Rot13
		{
			Text [ en-US ] = "Encrypts or decrypts a text using the ROT13 algorithm" ;
		};
		String 2 // name of parameter 1			Rot13
		{
			Text [ en-US ] = "Text" ;
		};
		String 3 // description of parameter 1	Rot13
		{
			Text [ en-US ] = "Text to be encrypted or text already encrypted" ;
		};
	};
};


Resource RID_DATE_FUNCTION_NAMES
{
	String DATE_FUNCNAME_DiffWeeks
	{
		Text [ en-US ] = "WEEKS" ;
	};
	String DATE_FUNCNAME_DiffMonths
	{
		Text [ en-US ] = "MONTHS" ;
	};
	String DATE_FUNCNAME_DiffYears
	{
		Text [ en-US ] = "YEARS" ;
	};
	String DATE_FUNCNAME_IsLeapYear
	{
		Text [ en-US ] = "ISLEAPYEAR" ;
	};
	String DATE_FUNCNAME_DaysInMonth
	{
		Text [ en-US ] = "DAYSINMONTH" ;
	};
	String DATE_FUNCNAME_DaysInYear
	{
		Text [ en-US ] = "DAYSINYEAR" ;
	};
	String DATE_FUNCNAME_WeeksInYear
	{
		Text [ en-US ] = "WEEKSINYEAR" ;
	};
	String DATE_FUNCNAME_Rot13
	{
		Text [ en-US ] = "ROT13" ;
	};
};


Resource RID_DATE_DEFFUNCTION_NAMES
{

	StringArray DATE_DEFFUNCNAME_DiffWeeks
	{
		ItemList =
		{
			< "WOCHEN" ;	> ;
			< "WEEKS" ;		> ;
		};
	};
	StringArray DATE_DEFFUNCNAME_DiffMonths
	{
		ItemList =
		{
			< "MONATE" ;	> ;
			< "MONTHS" ;	> ;
		};
	};
	StringArray DATE_DEFFUNCNAME_DiffYears
	{
		ItemList =
		{
			< "JAHRE" ;	> ;
			< "YEARS" ;	> ;
		};
	};
	StringArray DATE_DEFFUNCNAME_IsLeapYear
	{
		ItemList =
		{
			< "ISTSCHALTJAHR" ;	> ;
			< "ISLEAPYEAR" ;	> ;
		};
	};
	StringArray DATE_DEFFUNCNAME_DaysInMonth
	{
		ItemList =
		{
			< "TAGEIMMONAT" ;	> ;
			< "DAYSINMONTH" ;	> ;
		};
	};
	StringArray DATE_DEFFUNCNAME_DaysInYear
	{
		ItemList =
		{
			< "TAGEIMJAHR" ;	> ;
			< "DAYSINYEAR" ;	> ;
		};
	};
	StringArray DATE_DEFFUNCNAME_WeeksInYear
	{
		ItemList =
		{
			< "WOCHENIMJAHR" ;	> ;
			< "WEEKSINYEAR" ;	> ;
		};
	};
	StringArray DATE_DEFFUNCNAME_Rot13
	{
		ItemList =
		{
			< "ROT13" ;	> ;
			< "ROT13" ;	> ;
		};
	};
};

// ********************************************************************** EOF
