package org.akaza.openclinica.i18n.util;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.ResourceBundle;
public class HtmlUtils {
/**
* Generates the necessary Javascript code to create a localized
* CalendarPopup object. It adjusts: First day of the week Day headers Month
* names Month abbreviations "Today" text
*
* @param varname
* Javascript variable name for the CalendarPopup object
* @param divname
* <div> name to use for the calendar
* @return a String with the Javacript code
* @author Nacho M. Castejon and Jose Martinez Garcia, BAP Health
*/
public static String getCalendarPopupCode(String varname, String divname) {
StringBuffer out = new StringBuffer();
out.append("var " + varname + " = new CalendarPopup(\"" + divname + "\");");
// Following line have been added for year and month navigation combo
//out.append(varname+".showNavigationDropdowns();");
int weekStart = Calendar.getInstance(ResourceBundleProvider.getLocale()).getFirstDayOfWeek();
if (weekStart == Calendar.SUNDAY)
out.append(varname + ".setWeekStartDay(0);");
if (weekStart == Calendar.MONDAY)
out.append(varname + ".setWeekStartDay(1);");
DateFormatSymbols dfs = new DateFormatSymbols(ResourceBundleProvider.getLocale());
String[] weekDays = dfs.getShortWeekdays();
String[] monthNames = dfs.getMonths();
String[] monthAbbrev = dfs.getShortMonths();
out.append(varname + ".setDayHeaders(");
out.append("\"" + weekDays[1].substring(0, 1).toUpperCase(ResourceBundleProvider.getLocale()) + "\"");
for (int i = 2; i < weekDays.length; i++)
out.append(",\"" + weekDays[i].substring(0, 1).toUpperCase(ResourceBundleProvider.getLocale()) + "\"");
out.append(");");
out.append(varname + ".setMonthNames(");
out.append("\"" + capitalize(monthNames[0]) + "\"");
for (int i = 1; i < monthNames.length - 1; i++)
out.append(",\"" + capitalize(monthNames[i]) + "\"");
out.append(");");
out.append(varname + ".setMonthAbbreviations(");
out.append("\"" + capitalize(monthAbbrev[0]) + "\"");
for (int i = 1; i < monthAbbrev.length - 1; i++)
out.append(",\"" + capitalize(monthAbbrev[i]) + "\"");
out.append(");");
ResourceBundle reswords = ResourceBundleProvider.getWordsBundle();
out.append(varname + ".setTodayText(\"" + reswords.getString("today") + "\");");
return out.toString();
}
/**
* Capitalize the first letter of a String.
*
* @param s
* String to capitalize
* @return Capitalized string
*/
private static String capitalize(String s) {
char chars[] = s.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
return new String(chars);
}
/**
* This class parses a date String like "12/10/2007" into an int[] array
* such as {12, 10, 2007} for use, among others, in creating a
* GregorianClandar object. The method assumes a default database format of
* "12/10/2007" or "MM/dd/yyyy".
*
* @param dateString
* A String like "12/10/2007".
* @return An int array made up of month, day, year (three components, in
* that order). If the dateString argument is invalid or empty,
* returns an empty array.
* @see java.util.GregorianCalendar
*/
private static int[] parseDateToArray(String dateString) {
int[] intArray = new int[3];
if (dateString == null || "".equalsIgnoreCase(dateString)) {
intArray = new int[] {};
return intArray;
}
String[] values = dateString.split("/");
if (values == null || values.length < 3) {
intArray = new int[] {};
return intArray;
}
for (int i = 0; i < intArray.length; i++) {
try {
intArray[i] = Integer.parseInt(values[i]);
} catch (NumberFormatException nfe) {
// the method argument is not a valid date, or in the expected
// format
intArray = new int[] {};
return intArray;
}
}
return intArray;
}
/**
* Parse a date String like "12/10/2007" into an array, then create a
* GregorianCalendar object, returning a Date object for formatting. This
* class assumes a format pattern of MM/dd/yyyy.
*
* @param _date
* A String like "12/10/2007" . If the argument cannot be parsed
* into three segments, then the method returns null.
* @return A java.util.Date object
*/
public static synchronized Date parseDateValue(String _date) {
int[] intArr = parseDateToArray(_date);
Calendar calendar = null;
// check simple validity of date values
if (intArr.length == 0 || intArr.length < 3 || intArr[0] > 12 || intArr[1] > 31) {
return null;
} else {
// new GregorianCalendar(year,month,day)
calendar = new GregorianCalendar(intArr[2], intArr[0] - 1, intArr[1]);
}
return calendar.getTime();
}
}