You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2012/12/13 15:33:43 UTC

svn commit: r1421312 [1/4] - in /myfaces/tomahawk/trunk: core/src/main/java/org/apache/myfaces/custom/calendar/ core/src/main/resources/org/apache/myfaces/custom/calendar/resource/ core20/src/main/java/org/apache/myfaces/custom/calendar/ core20/src/mai...

Author: werpu
Date: Thu Dec 13 14:33:42 2012
New Revision: 1421312

URL: http://svn.apache.org/viewvc?rev=1421312&view=rev
Log:
 TOMAHAWK-1647

Modified:
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/calendar/HtmlCalendarRenderer.java
    myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/calendar/resource/date.js
    myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/calendar/resource/popcalendar.js
    myfaces/tomahawk/trunk/core20/src/main/java/org/apache/myfaces/custom/calendar/HtmlCalendarRenderer.java
    myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/date.js
    myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/calendar/HtmlCalendarRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/calendar/HtmlCalendarRenderer.java?rev=1421312&r1=1421311&r2=1421312&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/calendar/HtmlCalendarRenderer.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/calendar/HtmlCalendarRenderer.java Thu Dec 13 14:33:42 2012
@@ -327,7 +327,7 @@ public class HtmlCalendarRenderer
             String calendarVar = JavascriptUtils.getValidJavascriptName(
                     inputCalendar.getClientId(facesContext) + "CalendarVar", false);
 
-            writer.writeText(calendarVar + "=new org_apache_myfaces_PopupCalendar();\n", null);
+            writer.writeText(calendarVar + "=new org.apache.myfaces.PopupCalendar();\n", null);
             writer.writeText(getLocalizedLanguageScript(facesContext, symbols,
                     timeKeeper.getFirstDayOfWeek(), inputCalendar, calendarVar) + "\n", null);
             // pass the selectMode attribute

Modified: myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/calendar/resource/date.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/calendar/resource/date.js?rev=1421312&r1=1421311&r2=1421312&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/calendar/resource/date.js (original)
+++ myfaces/tomahawk/trunk/core/src/main/resources/org/apache/myfaces/custom/calendar/resource/date.js Thu Dec 13 14:33:42 2012
@@ -40,911 +40,771 @@
 // in java a lot of methods are declared static to ensure they do not
 // accidentally change the object state. But this is very inconvenient to
 // do in javascript as static function names must include the "namespace"
-// prefix, eg org_apache_myfaces_dateformat_SimpleDateFormatter_foo().
+// prefix, eg org.apache.myfaces.dateformat.SimpleDateFormatter_foo().
 // Instead, all these methods are implemented as non-static member methods.
 // In addition, private methods have an underscore added to the start of
 // the name. Note also that the constructor for a java.util.Date object takes
 // a year relative to 1900, while javascript takes one relative to 0AD.
 //----------------------------------------------------------------------------
 
+window.org = window.org || {};
+org.apache = org.apache || {};
+org.apache.myfaces = org.apache.myfaces || {};
+org.apache.myfaces.dateformat = org.apache.myfaces.dateformat || {};
+
+if (!org.apache.myfaces.dateformat.DateFormatSymbols) {
 // Constructor for DateFormatSymbols class
-org_apache_myfaces_dateformat_DateFormatSymbols = function()
-{
-  this.eras = new Array('BC', 'AD');
-  this.months = new Array(
-    'January', 'February', 'March', 'April',
-    'May', 'June', 'July', 'August', 'September', 'October',
-    'November', 'December', 'Undecimber');
-  this.shortMonths = new Array(
-    'Jan', 'Feb', 'Mar', 'Apr',
-    'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
-    'Nov', 'Dec', 'Und');
-  this.weekdays = new Array(
-    'Sunday', 'Monday', 'Tuesday',
-    'Wednesday', 'Thursday', 'Friday', 'Saturday');
-  this.shortWeekdays = new Array(
-    'Sun', 'Mon', 'Tue',
-    'Wed', 'Thu', 'Fri', 'Sat');
-  this.ampms = new Array('AM', 'PM');
-  this.zoneStrings = new Array(new Array(0, 'long-name', 'short-name'));
-  var threshold = new Date();
-  threshold.setYear(threshold.getYear()-80);
-  this.twoDigitYearStart = threshold;
-}
+    org.apache.myfaces.dateformat.DateFormatSymbols = function () {
+        this.eras = new Array('BC', 'AD');
+        this.months = new Array(
+                'January', 'February', 'March', 'April',
+                'May', 'June', 'July', 'August', 'September', 'October',
+                'November', 'December', 'Undecimber');
+        this.shortMonths = new Array(
+                'Jan', 'Feb', 'Mar', 'Apr',
+                'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
+                'Nov', 'Dec', 'Und');
+        this.weekdays = new Array(
+                'Sunday', 'Monday', 'Tuesday',
+                'Wednesday', 'Thursday', 'Friday', 'Saturday');
+        this.shortWeekdays = new Array(
+                'Sun', 'Mon', 'Tue',
+                'Wed', 'Thu', 'Fri', 'Sat');
+        this.ampms = new Array('AM', 'PM');
+        this.zoneStrings = new Array(new Array(0, 'long-name', 'short-name'));
+        var threshold = new Date();
+        threshold.setYear(threshold.getYear() - 80);
+        this.twoDigitYearStart = threshold;
+    };
 
 // Constructor for ParserContext class
-org_apache_myfaces_dateformat_ParserContext = function(dow)
-{
-  this.newIndex=0;
-  this.invalid = false;
-  this.firstDayOfWeek = dow;
-  this.ambigousYear=false;
-  this.ambigousWeekYear=false;
-  
-  this.year=0;
-  this.month=0;
-  this.day=1;
-  this.dayOfWeek=0;
-  this.hour=0;
-  this.hourAmpm;
-  this.min=0;
-  this.sec=0;
-  this.ampm=0;
-  
-  this.weekYear=0;
-  this.weekOfWeekYear=0;
-}
+    org.apache.myfaces.dateformat.ParserContext = function (dow) {
+        this.newIndex = 0;
+        this.invalid = false;
+        this.firstDayOfWeek = dow;
+        this.ambigousYear = false;
+        this.ambigousWeekYear = false;
+
+        this.year = 0;
+        this.month = 0;
+        this.day = 1;
+        this.dayOfWeek = 0;
+        this.hour = 0;
+        this.hourAmpm;
+        this.min = 0;
+        this.sec = 0;
+        this.ampm = 0;
+
+        this.weekYear = 0;
+        this.weekOfWeekYear = 0;
+    };
 
 // constructor for WeekDate class
-org_apache_myfaces_dateformat_WeekDate = function(year, week)
-{
-  this.year = year;
-  this.week = week;
-}
+    org.apache.myfaces.dateformat.WeekDate = function (year, week) {
+        this.year = year;
+        this.week = week;
+    };
 
 // constructor for StringBuffer class
-org_apache_myfaces_dateformat_StringBuffer = function(s)
-{
-  if (s == null)
-    this.str = "";
-  else
-    this.str = s;
-
-  var proto = org_apache_myfaces_dateformat_StringBuffer.prototype;    
-  proto.append = function(s)
-  {
-    this.str = this.str + s;
-  }
-
-  proto.toString = function()
-  {
-    return this.str;
-  }
-}
+    org.apache.myfaces.dateformat.StringBuffer = function (s) {
+        if (s == null)
+            this.str = "";
+        else
+            this.str = s;
+
+        var proto = org.apache.myfaces.dateformat.StringBuffer.prototype;
+        proto.append = function (s) {
+            this.str = this.str + s;
+        }
+
+        proto.toString = function () {
+            return this.str;
+        }
+    };
 
 // Constructor for SimpleDateFormatter class
-org_apache_myfaces_dateformat_SimpleDateFormatter = function(pattern, symbols, firstDayOfWeek)
-{
-  this._construct(pattern, symbols, firstDayOfWeek);
-}
+    org.apache.myfaces.dateformat.SimpleDateFormatter = function (pattern, symbols, firstDayOfWeek) {
+        this._construct(pattern, symbols, firstDayOfWeek);
+    };
 
 // static initialisation block; requires constructor for SimpleDateFormatter
 // to run first in order to create the prototype object that this block
 // attaches methods and constants to.
-{
-var proto = org_apache_myfaces_dateformat_SimpleDateFormatter.prototype;
-
-proto.MSECS_PER_SEC = 1000;
-proto.MSECS_PER_MIN = 60 * proto.MSECS_PER_SEC;
-proto.MSECS_PER_HOUR = 60 * proto.MSECS_PER_MIN;
-proto.MSECS_PER_DAY = 24 * proto.MSECS_PER_HOUR;
-proto.MSECS_PER_WEEK = 7 * proto.MSECS_PER_DAY;
-  
-proto.MONTH_LEN = 
-[
-  0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
-];
-
-proto._getIsoWeekDate = function(date)
-{
-  var year = date.getFullYear();
-  var month = date.getMonth() + 1;
-  var day = date.getDate();
-
-  var a,b,c,d,e,f,g,s,n;
-
-  if (month <= 2)
-  {
-    a = year - 1;
-    b = Math.floor(a/4) - Math.floor(a/100) + Math.floor(a/400);
-    c = Math.floor((a-1)/4) - Math.floor((a-1)/100) + Math.floor((a-1)/400);
-    s = b - c;
-    e = 0;
-    f = day - 1 + 31*(month-1);
-  }
-  else
-  {
-    a = year;
-    b = Math.floor(a/4) - Math.floor(a/100) + Math.floor(a/400);
-    c = Math.floor((a-1)/4) - Math.floor((a-1)/100) + Math.floor((a-1)/400);
-    s = b - c;
-    e = s + 1;
-    f = day + Math.floor((153*(month-3) + 2)/5) + 58 + s;       
-  }
-
-  g = (a + b) % 7;
-  d = (f + g - e) % 7;
-  n = f + 3 - d;
-
-  if (n<0)
-  {
-    // previous year
-    var resultWeek = 53 - Math.floor((g-s)/5);
-    return new org_apache_myfaces_dateformat_WeekDate(year-1, resultWeek);
-  }
-  else if (n > (364+s))
-  {
-    // next year
-    var resultWeek = 1;
-    return new org_apache_myfaces_dateformat_WeekDate(year+1, resultWeek);
-  }
-  else
-  {
-    // current year
-    var resultWeek = Math.floor(n/7) + 1;
-    return new org_apache_myfaces_dateformat_WeekDate(year, resultWeek);
-  }
-}
-
-proto._isLeapYear = function(year)
-{
-  return ((year%4 == 0) && (year%100 != 0)) || (year%400 == 0);
-}
-
-proto._dayOfWeek = function(year, month, day)
-{
-  month -= 2;
-  if (month < 1)
-  {
-    month += 12;
-    --year;
-  }
-
-  var cent = Math.floor(year / 100);
-  year %= 100;
-  
-  var base =
-    Math.floor((26 * month - 2) / 10)
-    + day
-    + year
-      + Math.floor(year/4)
-      + Math.floor(cent/4)
-      + (5*cent);
-
-  var dow = base % 7;
-  return dow;  
-}
-
-proto._getWeekDate = function(date, firstDayOfWeek)
-{
-  var year = date.getFullYear();
-  var month = date.getMonth() + 1;
-  var day = date.getDate();
-  
-  var thisIsLeapYear = this._isLeapYear(year);
-
-  var dayOfYear = day + this.MONTH_LEN[month-1];
-  if (thisIsLeapYear && (month>2))
-  {
-    ++dayOfYear;
-  }
-
-  var jan1Weekday = this._dayOfWeek(year, 1, 1);
-
-  var pivotOffset = firstDayOfWeek - jan1Weekday;
-  if (pivotOffset > 3)
-  {
-    pivotOffset -= 7;
-  }
-  else if (pivotOffset < -3)
-  {
-    pivotOffset += 7;
-  }
-  
-  var dayOffset = dayOfYear-1;
-  if (dayOffset < pivotOffset)
-  {
-    var prevIsLeapYear = this._isLeapYear(year-1);
-    if ((pivotOffset==3) || ((pivotOffset==2) && prevIsLeapYear))
-    {
-      return new org_apache_myfaces_dateformat_WeekDate(year-1, 53);
-    }
-    return new org_apache_myfaces_dateformat_WeekDate(year-1, 52);
-  }
-
-  var daysFromFirstWeekStart = (dayOfYear - 1 - pivotOffset);
-  var weekNumber = Math.floor(daysFromFirstWeekStart/7) + 1;  
-
-  if ((weekNumber < 53)
-      || (pivotOffset == -3)
-      || (pivotOffset == -2 && thisIsLeapYear))
-  {
-    return new org_apache_myfaces_dateformat_WeekDate(year, weekNumber);
-  }
-  else
-  {
-    return new org_apache_myfaces_dateformat_WeekDate(year+1, 1);
-  }
-}
-
-proto._getStartOfWeekYear = function(year, firstDayOfWeek)
-{
-  var d1 = new Date(year, 0, 1, 0, 0, 0);
-  var firstDayOfYear = d1.getDay();
-  var dayDiff = firstDayOfWeek - firstDayOfYear;
-  var dayShift;
-  if (dayDiff >= 4)
-  {
-    dayShift = 7 - dayShift;
-  }
-  else if (dayDiff >= 0)
-  {
-    dayShift = dayDiff;
-  }
-  else if (dayDiff >= -3)
-  {
-    dayShift = dayDiff;
-  }
-  else
-  {
-    dayShift = 7 + dayDiff;
-  }
-
-  var weekYearStartMsecs = d1.getTime() + (dayShift * this.MSECS_PER_DAY);
-  return weekYearStartMsecs;
-}
-
-proto._getDateForWeekDate = function(
-  year, week, day,
-  hour, min, sec,
-  firstDayOfWeek)
-{
-  var msecsBase = this._getStartOfWeekYear(year, firstDayOfWeek);
-  var msecsOffset = (week-1) * this.MSECS_PER_WEEK;
-  msecsOffset += (day-1) * this.MSECS_PER_DAY;
-  msecsOffset += hour * this.MSECS_PER_HOUR;
-  msecsOffset += min * this.MSECS_PER_MIN;
-  msecsOffset += sec * this.MSECS_PER_SEC;
-  
-  var finalDate = new Date();
-  finalDate.setTime(msecsBase + msecsOffset);
-  return finalDate;
-}
-
-proto._fullYearFromDate = function(year)
-{
-  if (year < 1900)
-  {
-    return year+1900;
-  }
-  else
-  {
-    return year;
-  }
-}
-
-proto._createDateFromContext = function(context)
-{
-  var date;
-  if (context.weekOfWeekYear != 0)
-  {
-    date = this._getDateForWeekDate(
-      context.weekYear, context.weekOfWeekYear, context.day,
-      context.hour, context.min, context.sec,
-      context.firstDayOfWeek);
-  }
-  else
-  {
-    date = new Date(
-      context.year, context.month, context.day,
-      context.hour, context.min, context.sec);
-  }
-  return date;
-}
-
-proto._substr = function(s, start, len)
-{
-  var s2 = s.substring(start);
-  if (s2.length <= len)
-    return s2;
-  else
-    return s2.substring(0, len);
-}
-
-proto._parseOps = function(symbols, yearIsWeekYear, firstDayOfWeek, ops, dateStr)
-{
-  var context = new org_apache_myfaces_dateformat_ParserContext(firstDayOfWeek);
-
-  var dateIndex = 0;
-  var dateStrLen = dateStr.length;
-  for(var i=0; (i<ops.length) && (dateIndex < dateStrLen); ++i)
-  {
-    var op = ops[i];
-    var optype = op.substring(0, 2);
-    var opval = op.substring(2);
-
-    if (optype == "f:")
-    {
-      this._parsePattern(symbols, yearIsWeekYear, context, opval, dateStr, dateIndex);
-
-      if ((context.newIndex < 0) || context.invalid)
-        break;
-
-      dateIndex = context.newIndex;
-    }
-    else if (optype =="q:" || optype == "l:")
-    {
-      var oplen = opval.length;
-      var s = this._substr(dateStr, dateIndex, oplen);
-      if (opval != s)
-      {
-        context.invalid = true;
-        break;
-      }
-      dateIndex += oplen;
-    }
-  }
-
-  return context;
-}
-
-proto._parsePattern = function(
-  symbols, yearIsWeekYear, context, patternSub, dateStr, dateIndex)
-{
-  var c = patternSub.charAt(0);
-  var patlen = patternSub.length;
-
-  if (c == 'y')
-  {
-    var year = this._parseNum(context, dateStr, 4, dateIndex);
-    if ((context.newIndex-dateIndex) < 4)
-    {
-      context.year = year;
-      context.ambiguousYear = true;
-    }
-    else
-    {
-      context.year = year;
-      context.ambiguousYear = false;
-    }
-
-    if (yearIsWeekYear)
-    {
-      // There is a "ww" pattern present, so set weekYear as well as year.
-      context.weekYear = context.year;
-      context.ambiguousWeekYear = context.ambiguousYear;
-    }
-  }
-  else if (c == 'x')
-  {
-    // extension to standard java.text.SimpleDateFormat class, to support the
-    // JODA "weekYear" formatter.
-    var year = this._parseNum(context, dateStr, 4, dateIndex);
-    if ((context.newIndex-dateIndex) < 4)
-    {
-      context.weekYear = year;
-      context.ambiguousWeekYear = true;
-    }
-    else
-    {
-      context.weekYear = year;
-      context.ambiguousWeekYear = false;
-    }
-  }
-  else if (c == 'M')
-  {
-    if (patlen == 3)
-    {
-      var fragment = this._substr(dateStr, dateIndex, 3);
-      var index = this._parseIndexOf(context, symbols.shortMonths, fragment);
-      if (index != -1)
-      {
-        context.month = index;
-      }
-    }
-    else if (patlen >= 4)
     {
-      var fragment = dateStr.substring(dateIndex);
-      var index = this._parsePrefixOf(context, symbols.months, fragment);
-      if (index != -1)
-      {
-        context.month = index;
-      }
-    }
-    else
-    {
-      context.month = this._parseNum(context, dateStr, 2, dateIndex) - 1;
-    }
-  }
-  else if (c == 'd')
-  {
-    context.day = this._parseNum(context, dateStr, 2, dateIndex);
-  }
-  else if (c == 'E')
-  {
-    if (patlen <= 3)
-    {
-      var fragment = dateStr.substring(dateIndex, dateIndex+3);
-      var index = this._parseIndexOf(context, symbols.shortWeekdays, fragment);
-      if (index != -1)
-      {
-        context.dayOfWeek = index;
-      }
-    }
-    else
-    {
-      var fragment = dateStr.substring(dateIndex);
-      var index = this._parsePrefixOf(context, symbols.weekdays, fragment);
-      if (index != -1)
-      {
-        context.dayOfWeek = index;
-      }
-    }
-  }
-  else if (c == 'H')
-  {
-    context.hour = this._parseNum(context, dateStr, 2, dateIndex);
-  }
-  else if (c == 'h')
-  {
-    context.hourAmpm = this._parseNum(context, dateStr, 2, dateIndex);
-  }
-  else if (c == 'm')
-  {
-    context.min = this._parseNum(context, dateStr, 2, dateIndex);
-  }
-  else if (c == 's')
-  {
-    context.sec = this._parseNum(context, dateStr, 2, dateIndex);
-  }
-  else if (c == 'a')
-  {
-    context.ampm = this._parseString(context, dateStr, dateIndex, symbols.ampms);
-  }
-  else if (c == 'w')
-  {
-    context.weekOfWeekYear = this._parseNum(context, dateStr, 2, dateIndex);
-  }
-  else
-  {
-    context.invalid = true;
-  }
-}
-
-proto._parseInt = function(value)
-{
-  var sum = 0;
-  for(var i=0;i<value.length;i++)
-  {
-    var c = value.charAt(i);
+        var proto = org.apache.myfaces.dateformat.SimpleDateFormatter.prototype;
 
-    if(c<'0'||c>'9')
-    {
-      return -1;
-    }
-    sum = sum*10+(c-'0');
-  }
-  return sum;
-}
-
-proto._parseNum = function(context, dateStr, nChars, dateIndex)
-{
-  // Try to convert the most possible characters (posCount). If that fails,
-  // then try again without the last character. Repeat until successful
-  // numeric conversion occurs.
-  var nToParse = Math.min(nChars, dateStr.length - dateIndex);
-  for(var i=nToParse;i>0;i--)
-  {
-    var numStr = dateStr.substring(dateIndex,dateIndex+i);
-    var value = this._parseInt(numStr);
-    if(value == -1)
-      continue;
-
-    context.newIndex = dateIndex+i;
-    return value;
-  }
-
-  context.newIndex = -1;
-  context.invalid = true;
-  return -1;
-}
-
-proto._parseIndexOf = function(context, array, value)
-{
-  for (var i = 0; i < array.length; ++i)
-  {
-    var s = array[i];
-    if (value == s)
-    {
-      context.newIndex += s.length;
-      return i;
-    }
-  }
-  context.invalid = true;
-  context.newIndex = -1;
-  return -1;
-}
-
-proto._parsePrefixOf = function(context, array, value)
-{
-  for (var i=0; i <array.length; ++i)
-  {
-    var s = array[i];
-    if (value.indexOf(s) == 0)
-    {
-      context.newIndex += s.length;
-      return i;
-    }
-  }
-  context.invalid = true;
-  context.newIndex = -1;
-  return -1;
-}
-
-proto._parseString = function(context, dateStr, dateIndex, strings)
-{
-  var fragment = dateStr.substr(dateIndex);
-  return this._parsePrefixOf(context, strings, fragment);
-}
-
-proto._parsePostProcess = function(symbols, context)
-{
-  if (context.ambiguousYear)
-  {
-    context.year += 1900;
-    var date = this._createDateFromContext(context);
-    var threshold = symbols.twoDigitYearStart;
-    if (date.getTime() < threshold.getTime())
-    {
-      context.year += 100;
-    }
-  }
-  
-  if (context.year <= 0) {
-    context.year = new Date().getFullYear();
-  }
-
-  if (context.hourAmpm > 0)
-  {
-    if (context.ampm == 1)
-    {
-      context.hour = context.hourAmpm + 12;
-      if (context.hour == 24)
-        context.hour = 0;
-    }
-    else
-    {
-      context.hour = context.hourAmpm;
-    }
-  }
-}
-
-proto._formatOps = function(symbols, yearIsWeekYear, firstDayOfWeek, ops, date)
-{
-  var context = new org_apache_myfaces_dateformat_ParserContext(firstDayOfWeek);
-
-  context.year = date.getFullYear();
-  context.month = date.getMonth();
-  context.day = date.getDate();
-  context.dayOfWeek = date.getDay();
-  context.hour = date.getHours();
-  context.min = date.getMinutes();
-  context.sec = date.getSeconds();
-  
-  context.ampm = (context.hour < 12) ? 0 : 1;
-  
-  var weekDate = this._getWeekDate(date, firstDayOfWeek);
-  context.weekYear = weekDate.year;
-  context.weekOfWeekYear = weekDate.week;
-  
-  var str = new org_apache_myfaces_dateformat_StringBuffer();
-  for(var i=0; i<ops.length; ++i)
-  {
-    var op = ops[i];
-    var optype = op.substring(0, 2);
-    var opval = op.substring(2);
+        proto.MSECS_PER_SEC = 1000;
+        proto.MSECS_PER_MIN = 60 * proto.MSECS_PER_SEC;
+        proto.MSECS_PER_HOUR = 60 * proto.MSECS_PER_MIN;
+        proto.MSECS_PER_DAY = 24 * proto.MSECS_PER_HOUR;
+        proto.MSECS_PER_WEEK = 7 * proto.MSECS_PER_DAY;
+
+        proto.MONTH_LEN =
+                [
+                    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
+                ];
+
+        proto._getIsoWeekDate = function (date) {
+            var year = date.getFullYear();
+            var month = date.getMonth() + 1;
+            var day = date.getDate();
+
+            var a, b, c, d, e, f, g, s, n;
+
+            if (month <= 2) {
+                a = year - 1;
+                b = Math.floor(a / 4) - Math.floor(a / 100) + Math.floor(a / 400);
+                c = Math.floor((a - 1) / 4) - Math.floor((a - 1) / 100) + Math.floor((a - 1) / 400);
+                s = b - c;
+                e = 0;
+                f = day - 1 + 31 * (month - 1);
+            }
+            else {
+                a = year;
+                b = Math.floor(a / 4) - Math.floor(a / 100) + Math.floor(a / 400);
+                c = Math.floor((a - 1) / 4) - Math.floor((a - 1) / 100) + Math.floor((a - 1) / 400);
+                s = b - c;
+                e = s + 1;
+                f = day + Math.floor((153 * (month - 3) + 2) / 5) + 58 + s;
+            }
+
+            g = (a + b) % 7;
+            d = (f + g - e) % 7;
+            n = f + 3 - d;
+
+            if (n < 0) {
+                // previous year
+                var resultWeek = 53 - Math.floor((g - s) / 5);
+                return new org.apache.myfaces.dateformat.WeekDate(year - 1, resultWeek);
+            }
+            else if (n > (364 + s)) {
+                // next year
+                var resultWeek = 1;
+                return new org.apache.myfaces.dateformat.WeekDate(year + 1, resultWeek);
+            }
+            else {
+                // current year
+                var resultWeek = Math.floor(n / 7) + 1;
+                return new org.apache.myfaces.dateformat.WeekDate(year, resultWeek);
+            }
+        };
+
+        proto._isLeapYear = function (year) {
+            return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
+        };
+
+        proto._dayOfWeek = function (year, month, day) {
+            month -= 2;
+            if (month < 1) {
+                month += 12;
+                --year;
+            }
+
+            var cent = Math.floor(year / 100);
+            year %= 100;
+
+            var base =
+                    Math.floor((26 * month - 2) / 10)
+                            + day
+                            + year
+                            + Math.floor(year / 4)
+                            + Math.floor(cent / 4)
+                            + (5 * cent);
+
+            var dow = base % 7;
+            return dow;
+        };
+
+        proto._getWeekDate = function (date, firstDayOfWeek) {
+            var year = date.getFullYear();
+            var month = date.getMonth() + 1;
+            var day = date.getDate();
+
+            var thisIsLeapYear = this._isLeapYear(year);
+
+            var dayOfYear = day + this.MONTH_LEN[month - 1];
+            if (thisIsLeapYear && (month > 2)) {
+                ++dayOfYear;
+            }
+
+            var jan1Weekday = this._dayOfWeek(year, 1, 1);
+
+            var pivotOffset = firstDayOfWeek - jan1Weekday;
+            if (pivotOffset > 3) {
+                pivotOffset -= 7;
+            }
+            else if (pivotOffset < -3) {
+                pivotOffset += 7;
+            }
+
+            var dayOffset = dayOfYear - 1;
+            if (dayOffset < pivotOffset) {
+                var prevIsLeapYear = this._isLeapYear(year - 1);
+                if ((pivotOffset == 3) || ((pivotOffset == 2) && prevIsLeapYear)) {
+                    return new org.apache.myfaces.dateformat.WeekDate(year - 1, 53);
+                }
+                return new org.apache.myfaces.dateformat.WeekDate(year - 1, 52);
+            }
+
+            var daysFromFirstWeekStart = (dayOfYear - 1 - pivotOffset);
+            var weekNumber = Math.floor(daysFromFirstWeekStart / 7) + 1;
+
+            if ((weekNumber < 53)
+                    || (pivotOffset == -3)
+                    || (pivotOffset == -2 && thisIsLeapYear)) {
+                return new org.apache.myfaces.dateformat.WeekDate(year, weekNumber);
+            }
+            else {
+                return new org.apache.myfaces.dateformat.WeekDate(year + 1, 1);
+            }
+        };
+
+        proto._getStartOfWeekYear = function (year, firstDayOfWeek) {
+            var d1 = new Date(year, 0, 1, 0, 0, 0);
+            var firstDayOfYear = d1.getDay();
+            var dayDiff = firstDayOfWeek - firstDayOfYear;
+            var dayShift;
+            if (dayDiff >= 4) {
+                dayShift = 7 - dayShift;
+            }
+            else if (dayDiff >= 0) {
+                dayShift = dayDiff;
+            }
+            else if (dayDiff >= -3) {
+                dayShift = dayDiff;
+            }
+            else {
+                dayShift = 7 + dayDiff;
+            }
+
+            var weekYearStartMsecs = d1.getTime() + (dayShift * this.MSECS_PER_DAY);
+            return weekYearStartMsecs;
+        };
+
+        proto._getDateForWeekDate = function (year, week, day, hour, min, sec, firstDayOfWeek) {
+            var msecsBase = this._getStartOfWeekYear(year, firstDayOfWeek);
+            var msecsOffset = (week - 1) * this.MSECS_PER_WEEK;
+            msecsOffset += (day - 1) * this.MSECS_PER_DAY;
+            msecsOffset += hour * this.MSECS_PER_HOUR;
+            msecsOffset += min * this.MSECS_PER_MIN;
+            msecsOffset += sec * this.MSECS_PER_SEC;
+
+            var finalDate = new Date();
+            finalDate.setTime(msecsBase + msecsOffset);
+            return finalDate;
+        };
+
+        proto._fullYearFromDate = function (year) {
+            if (year < 1900) {
+                return year + 1900;
+            }
+            else {
+                return year;
+            }
+        };
+
+        proto._createDateFromContext = function (context) {
+            var date;
+            if (context.weekOfWeekYear != 0) {
+                date = this._getDateForWeekDate(
+                        context.weekYear, context.weekOfWeekYear, context.day,
+                        context.hour, context.min, context.sec,
+                        context.firstDayOfWeek);
+            }
+            else {
+                date = new Date(
+                        context.year, context.month, context.day,
+                        context.hour, context.min, context.sec);
+            }
+            return date;
+        };
+
+        proto._substr = function (s, start, len) {
+            var s2 = s.substring(start);
+            if (s2.length <= len)
+                return s2;
+            else
+                return s2.substring(0, len);
+        };
+
+        proto._parseOps = function (symbols, yearIsWeekYear, firstDayOfWeek, ops, dateStr) {
+            var context = new org.apache.myfaces.dateformat.ParserContext(firstDayOfWeek);
+
+            var dateIndex = 0;
+            var dateStrLen = dateStr.length;
+            for (var i = 0; (i < ops.length) && (dateIndex < dateStrLen); ++i) {
+                var op = ops[i];
+                var optype = op.substring(0, 2);
+                var opval = op.substring(2);
+
+                if (optype == "f:") {
+                    this._parsePattern(symbols, yearIsWeekYear, context, opval, dateStr, dateIndex);
+
+                    if ((context.newIndex < 0) || context.invalid)
+                        break;
+
+                    dateIndex = context.newIndex;
+                }
+                else if (optype == "q:" || optype == "l:") {
+                    var oplen = opval.length;
+                    var s = this._substr(dateStr, dateIndex, oplen);
+                    if (opval != s) {
+                        context.invalid = true;
+                        break;
+                    }
+                    dateIndex += oplen;
+                }
+            }
+
+            return context;
+        };
+
+        proto._parsePattern = function (symbols, yearIsWeekYear, context, patternSub, dateStr, dateIndex) {
+            var c = patternSub.charAt(0);
+            var patlen = patternSub.length;
+
+            if (c == 'y') {
+                var year = this._parseNum(context, dateStr, 4, dateIndex);
+                if ((context.newIndex - dateIndex) < 4) {
+                    context.year = year;
+                    context.ambiguousYear = true;
+                }
+                else {
+                    context.year = year;
+                    context.ambiguousYear = false;
+                }
+
+                if (yearIsWeekYear) {
+                    // There is a "ww" pattern present, so set weekYear as well as year.
+                    context.weekYear = context.year;
+                    context.ambiguousWeekYear = context.ambiguousYear;
+                }
+            }
+            else if (c == 'x') {
+                // extension to standard java.text.SimpleDateFormat class, to support the
+                // JODA "weekYear" formatter.
+                var year = this._parseNum(context, dateStr, 4, dateIndex);
+                if ((context.newIndex - dateIndex) < 4) {
+                    context.weekYear = year;
+                    context.ambiguousWeekYear = true;
+                }
+                else {
+                    context.weekYear = year;
+                    context.ambiguousWeekYear = false;
+                }
+            }
+            else if (c == 'M') {
+                if (patlen == 3) {
+                    var fragment = this._substr(dateStr, dateIndex, 3);
+                    var index = this._parseIndexOf(context, symbols.shortMonths, fragment);
+                    if (index != -1) {
+                        context.month = index;
+                    }
+                }
+                else if (patlen >= 4) {
+                    var fragment = dateStr.substring(dateIndex);
+                    var index = this._parsePrefixOf(context, symbols.months, fragment);
+                    if (index != -1) {
+                        context.month = index;
+                    }
+                }
+                else {
+                    context.month = this._parseNum(context, dateStr, 2, dateIndex) - 1;
+                }
+            }
+            else if (c == 'd') {
+                context.day = this._parseNum(context, dateStr, 2, dateIndex);
+            }
+            else if (c == 'E') {
+                if (patlen <= 3) {
+                    var fragment = dateStr.substring(dateIndex, dateIndex + 3);
+                    var index = this._parseIndexOf(context, symbols.shortWeekdays, fragment);
+                    if (index != -1) {
+                        context.dayOfWeek = index;
+                    }
+                }
+                else {
+                    var fragment = dateStr.substring(dateIndex);
+                    var index = this._parsePrefixOf(context, symbols.weekdays, fragment);
+                    if (index != -1) {
+                        context.dayOfWeek = index;
+                    }
+                }
+            }
+            else if (c == 'H') {
+                context.hour = this._parseNum(context, dateStr, 2, dateIndex);
+            }
+            else if (c == 'h') {
+                context.hourAmpm = this._parseNum(context, dateStr, 2, dateIndex);
+            }
+            else if (c == 'm') {
+                context.min = this._parseNum(context, dateStr, 2, dateIndex);
+            }
+            else if (c == 's') {
+                context.sec = this._parseNum(context, dateStr, 2, dateIndex);
+            }
+            else if (c == 'a') {
+                context.ampm = this._parseString(context, dateStr, dateIndex, symbols.ampms);
+            }
+            else if (c == 'w') {
+                context.weekOfWeekYear = this._parseNum(context, dateStr, 2, dateIndex);
+            }
+            else {
+                context.invalid = true;
+            }
+        };
+
+        proto._parseInt = function (value) {
+            var sum = 0;
+            for (var i = 0; i < value.length; i++) {
+                var c = value.charAt(i);
+
+                if (c < '0' || c > '9') {
+                    return -1;
+                }
+                sum = sum * 10 + (c - '0');
+            }
+            return sum;
+        };
+
+        proto._parseNum = function (context, dateStr, nChars, dateIndex) {
+            // Try to convert the most possible characters (posCount). If that fails,
+            // then try again without the last character. Repeat until successful
+            // numeric conversion occurs.
+            var nToParse = Math.min(nChars, dateStr.length - dateIndex);
+            for (var i = nToParse; i > 0; i--) {
+                var numStr = dateStr.substring(dateIndex, dateIndex + i);
+                var value = this._parseInt(numStr);
+                if (value == -1)
+                    continue;
+
+                context.newIndex = dateIndex + i;
+                return value;
+            }
+
+            context.newIndex = -1;
+            context.invalid = true;
+            return -1;
+        };
+
+        proto._parseIndexOf = function (context, array, value) {
+            for (var i = 0; i < array.length; ++i) {
+                var s = array[i];
+                if (value == s) {
+                    context.newIndex += s.length;
+                    return i;
+                }
+            }
+            context.invalid = true;
+            context.newIndex = -1;
+            return -1;
+        };
+
+        proto._parsePrefixOf = function (context, array, value) {
+            for (var i = 0; i < array.length; ++i) {
+                var s = array[i];
+                if (value.indexOf(s) == 0) {
+                    context.newIndex += s.length;
+                    return i;
+                }
+            }
+            context.invalid = true;
+            context.newIndex = -1;
+            return -1;
+        };
+
+        proto._parseString = function (context, dateStr, dateIndex, strings) {
+            var fragment = dateStr.substr(dateIndex);
+            return this._parsePrefixOf(context, strings, fragment);
+        };
+
+        proto._parsePostProcess = function (symbols, context) {
+            if (context.ambiguousYear) {
+                context.year += 1900;
+                var date = this._createDateFromContext(context);
+                var threshold = symbols.twoDigitYearStart;
+                if (date.getTime() < threshold.getTime()) {
+                    context.year += 100;
+                }
+            }
+
+            if (context.year <= 0) {
+                context.year = new Date().getFullYear();
+            }
+
+            if (context.hourAmpm > 0) {
+                if (context.ampm == 1) {
+                    context.hour = context.hourAmpm + 12;
+                    if (context.hour == 24)
+                        context.hour = 0;
+                }
+                else {
+                    context.hour = context.hourAmpm;
+                }
+            }
+        };
+
+        proto._formatOps = function (symbols, yearIsWeekYear, firstDayOfWeek, ops, date) {
+            var context = new org.apache.myfaces.dateformat.ParserContext(firstDayOfWeek);
+
+            context.year = date.getFullYear();
+            context.month = date.getMonth();
+            context.day = date.getDate();
+            context.dayOfWeek = date.getDay();
+            context.hour = date.getHours();
+            context.min = date.getMinutes();
+            context.sec = date.getSeconds();
+
+            context.ampm = (context.hour < 12) ? 0 : 1;
+
+            var weekDate = this._getWeekDate(date, firstDayOfWeek);
+            context.weekYear = weekDate.year;
+            context.weekOfWeekYear = weekDate.week;
+
+            var str = new org.apache.myfaces.dateformat.StringBuffer();
+            for (var i = 0; i < ops.length; ++i) {
+                var op = ops[i];
+                var optype = op.substring(0, 2);
+                var opval = op.substring(2);
+
+                if (optype == "f:") {
+                    this._formatPattern(symbols, context, opval, yearIsWeekYear, str);
+                    if (context.invalid)
+                        break;
+                }
+                else if (optype == "l:") {
+                    str.append(opval);
+                }
+                else if (optype == "q:") {
+                    str.append(opval);
+                }
+            }
+
+            if (context.invalid)
+                return null;
+            else
+                return str.toString();
+        };
+
+        proto._formatPattern = function (symbols, context, patternSub, yearIsWeekYear, out) {
+            var c = patternSub.charAt(0);
+            var patlen = patternSub.length;
+
+            if (c == 'y') {
+                if (!yearIsWeekYear)
+                    this._formatNum(context.year, patlen <= 3 ? 2 : 4, true, out);
+                else
+                    this._formatNum(context.weekYear, patlen <= 3 ? 2 : 4, true, out);
+            }
+            else if (c == 'x') {
+                this._formatNum(context.weekYear, patlen <= 3 ? 2 : 4, true, out);
+            }
+            else if (c == 'M') {
+                if (patlen == 3) {
+                    out.append(symbols.shortMonths[context.month]);
+                }
+                else if (patlen >= 4) {
+                    out.append(symbols.months[context.month]);
+                }
+                else {
+                    this._formatNum(context.month + 1, patlen, false, out);
+                }
+            }
+            else if (c == 'd') {
+                this._formatNum(context.day, patlen, false, out);
+            }
+            else if (c == 'E') {
+                if (patlen <= 3) {
+                    out.append(symbols.shortWeekdays[context.dayOfWeek]);
+                }
+                else {
+                    out.append(symbols.weekdays[context.dayOfWeek]);
+                }
+            }
+            else if (c == 'H') {
+                this._formatNum(context.hour, patlen, false, out);
+            }
+            else if (c == 'h') {
+                var hour = context.hour;
+                if (hour == 0) {
+                    hour = 12;
+                }
+                else if (hour > 12) {
+                    hour = hour - 12;
+                }
+                this._formatNum(hour, patlen, false, out);
+            }
+            else if (c == 'm') {
+                this._formatNum(context.min, patlen, false, out);
+            }
+            else if (c == 's') {
+                this._formatNum(context.sec, patlen, false, out);
+            }
+            else if (c == 'a') {
+                out.append(symbols.ampms[context.ampm]);
+            }
+            else if (c == 'w') {
+                this._formatNum(context.weekOfWeekYear, patlen, false, out);
+            }
+            else {
+                context.invalid = true;
+            }
+        };
+
+        proto._formatNum = function (num, length, ensureLength, out) {
+            var str = "" + num;
+
+            while (str.length < length) {
+                str = "0" + str;
+            }
+
+            if (ensureLength && str.length > length) {
+                str = str.substr(str.length - length);
+            }
+
+            out.append(str);
+        };
+
+        proto._appendToArray = function (array, obj) {
+            array[array.length] = obj;
+        };
+
+        proto._isLetter = function (c) {
+            if ((c >= 'a') && (c <= 'z')) return true;
+            if ((c >= 'A') && (c <= 'Z'))  return true;
+            return false;
+        };
+
+        proto._analysePattern = function (pattern) {
+            var patternIndex = 0;
+            var patternLen = pattern.length;
+            var lastChar = 0;
+            var patternSub = null;
+            var quoteMode = false;
+
+            var ops = new Array();
+
+            while (patternIndex < patternLen) {
+                var currentChar = pattern.charAt(patternIndex);
+                var nextChar;
+
+                if (patternIndex < patternLen - 1) {
+                    nextChar = pattern.charAt(patternIndex + 1);
+                }
+                else {
+                    nextChar = 0;
+                }
+
+                if (currentChar == '\'' && lastChar != '\\') {
+                    if (patternSub != null) {
+                        this._appendToArray(ops, patternSub.toString());
+                        patternSub = null;
+                    }
+                    quoteMode = !quoteMode;
+                }
+                else if (quoteMode) {
+                    if (patternSub == null) {
+                        patternSub = new org.apache.myfaces.dateformat.StringBuffer("q:");
+                    }
+                    patternSub.append(currentChar);
+                }
+                else {
+                    if (currentChar == '\\' && lastChar != '\\') {
+                        // do nothing
+                    }
+                    else {
+                        if (patternSub == null) {
+                            if (this._isLetter(currentChar)) {
+                                patternSub = new org.apache.myfaces.dateformat.StringBuffer("f:");
+                            }
+                            else {
+                                patternSub = new org.apache.myfaces.dateformat.StringBuffer("l:");
+                            }
+                        }
+
+                        patternSub.append(currentChar);
+                        if (currentChar != nextChar) {
+                            this._appendToArray(ops, patternSub.toString());
+                            patternSub = null;
+                        }
+                    }
+                }
+
+                patternIndex++;
+                lastChar = currentChar;
+            }
+
+            if (patternSub != null) {
+                this._appendToArray(ops, patternSub.toString());
+            }
+
+            return ops;
+        };
+
+        proto._hasWeekPattern = function (ops) {
+            var wwPresent = false;
+            var xxPresent = false;
+            for (var i = 0; i < ops.length; ++i) {
+                var s = ops[i];
+                wwPresent = wwPresent || (s.indexOf("f:ww") == 0);
+                xxPresent = xxPresent || (s.indexOf("f:xx") == 0);
+            }
 
-    if (optype == "f:")
-    {
-      this._formatPattern(symbols, context, opval, yearIsWeekYear, str);
-      if (context.invalid)
-        break;
-    }
-    else if (optype == "l:")
-    {
-      str.append(opval);
-    }
-    else if (optype == "q:")
-    {
-      str.append(opval);
-    }
-  }
-
-  if (context.invalid)
-    return null;
-  else
-    return str.toString();  
-}
-
-proto._formatPattern = function(
-  symbols, context, patternSub, yearIsWeekYear, out)
-{
-  var c = patternSub.charAt(0);
-  var patlen = patternSub.length;
-
-  if (c=='y')
-  {
-    if (!yearIsWeekYear)
-      this._formatNum(context.year, patlen <= 3 ? 2 : 4, true, out);
-    else
-      this._formatNum(context.weekYear, patlen <= 3 ? 2 : 4, true, out);
-  }
-  else if (c=='x')
-  {
-    this._formatNum(context.weekYear,patlen <= 3 ? 2 : 4, true, out);
-  }
-  else if (c=='M')
-  {
-     if (patlen == 3)
-     {
-       out.append(symbols.shortMonths[context.month]);
-     }
-     else if (patlen >= 4) {
-       out.append(symbols.months[context.month]);
-     }
-     else
-     {
-       this._formatNum(context.month+1,patlen, false, out);
-     }
-  }
-  else if (c=='d')
-  {
-    this._formatNum(context.day,patlen, false, out);
-  }
-  else if (c=='E')
-  {
-      if (patlen <= 3)
-      {
-        out.append(symbols.shortWeekdays[context.dayOfWeek]);
-      }
-      else
-      {
-        out.append(symbols.weekdays[context.dayOfWeek]);
-      }
-  }
-  else if(c=='H')
-  {
-    this._formatNum(context.hour, patlen, false, out);
-  }
-  else if (c=='h')
-  {
-    var hour = context.hour;
-    if (hour == 0) 
-    {
-      hour = 12;
-    }
-    else if (hour > 12)
-    {
-      hour = hour - 12;
-    }
-    this._formatNum(hour, patlen, false, out);
-  }
-  else if (c=='m')
-  {
-    this._formatNum(context.min, patlen, false, out);
-  }
-  else if (c=='s')
-  {
-    this._formatNum(context.sec, patlen, false, out);
-  }
-  else if (c=='a')
-  {
-    out.append(symbols.ampms[context.ampm]);
-  }
-  else if (c=='w')
-  {
-    this._formatNum(context.weekOfWeekYear, patlen, false, out);
-  }
-  else
-  {
-    context.invalid = true;
-  }
-}
-
-proto._formatNum = function(num, length, ensureLength, out)
-{
-  var str = "" + num;
-
-  while(str.length<length)
-  {
-    str = "0" + str;
-  }
-
-  if (ensureLength && str.length > length)
-  {
-    str = str.substr(str.length - length);
-  }
-
-  out.append(str);
-}
-
-proto._appendToArray = function(array, obj)
-{
-  array[array.length] = obj;
-}
-
-proto._isLetter = function(c)
-{
-  if ((c>= 'a') && (c<='z')) return true;
-  if ((c>='A') && (c<='Z'))  return true;
-  return false;
-}
-
-proto._analysePattern = function(pattern)
-{
-  var patternIndex = 0;
-  var patternLen = pattern.length;
-  var lastChar = 0;
-  var patternSub = null;
-  var quoteMode = false;
-
-  var ops = new Array();
-
-  while (patternIndex < patternLen)
-  {
-      var currentChar = pattern.charAt(patternIndex);
-      var nextChar;
-
-      if (patternIndex < patternLen - 1)
-      {
-          nextChar = pattern.charAt(patternIndex + 1);
-      }
-      else
-      {
-          nextChar = 0;
-      }
-
-      if (currentChar == '\'' && lastChar != '\\')
-      {
-          if (patternSub != null)
-          {
-              this._appendToArray(ops, patternSub.toString());
-              patternSub = null;
-          }
-          quoteMode = !quoteMode;
-      }
-      else if (quoteMode)
-      {
-          if (patternSub == null)
-          {
-              patternSub = new org_apache_myfaces_dateformat_StringBuffer("q:");
-          }
-          patternSub.append(currentChar);
-      }
-      else
-      {
-          if (currentChar == '\\' && lastChar != '\\')
-          {
-              // do nothing
-          }
-          else
-          {
-              if (patternSub == null)
-              {
-                  if (this._isLetter(currentChar))
-                  {
-                      patternSub = new org_apache_myfaces_dateformat_StringBuffer("f:");
-                  }
-                  else
-                  {
-                      patternSub = new org_apache_myfaces_dateformat_StringBuffer("l:");
-                  }
-              }
-
-              patternSub.append(currentChar);
-              if (currentChar != nextChar)
-              {
-                  this._appendToArray(ops, patternSub.toString());
-                  patternSub = null;
-              }
-          }
-      }
-
-      patternIndex++;
-      lastChar = currentChar;
-  }
-
-  if (patternSub != null)
-  {
-      this._appendToArray(ops, patternSub.toString());
-  }
-
-  return ops;
-}
-
-proto._hasWeekPattern = function(ops)
-{
-  var wwPresent = false;
-  var xxPresent = false;
-  for(var i=0; i<ops.length; ++i)
-  {
-    var s = ops[i];
-    wwPresent = wwPresent || (s.indexOf("f:ww")==0);
-    xxPresent = xxPresent || (s.indexOf("f:xx")==0);
-  }
-  
-  return wwPresent && !xxPresent;
-}
+            return wwPresent && !xxPresent;
+        };
 
 // Constructor for SimpleDateFormatter class
-proto._construct = function(pattern, symbols, firstDayOfWeek)
-{
-  if (symbols == null)
-  {
-    this.symbols = new org_apache_myfaces_dateformat_DateFormatSymbols();
-  }
-  else
-  {
-    this.symbols = symbols;
-  }
-
-  this.ops = this._analysePattern(pattern);
-  this.yearIsWeekYear = this._hasWeekPattern(this.ops);
-  
-  if (firstDayOfWeek != null)
-    this.firstDayOfWeek = firstDayOfWeek;
-  else
-    this.firstDayOfWeek = 1;
-}
-
-proto.setFirstDayOfWeek = function(dow)
-{
-  this.firstDayOfWeek = dow;
-}
-
-proto.parse = function(dateStr)
-{
-  if ((dateStr == null) || (dateStr.length == 0))
-    return null;
-    
-  var context = this._parseOps(
-    this.symbols, this.yearIsWeekYear, this.firstDayOfWeek, this.ops,
-    dateStr); 
-
-  if (context.invalid)
-  {
-    return null;
-  }
-  
-  this._parsePostProcess(this.symbols, context);
-  return this._createDateFromContext(context);
-}
-
-proto.format = function(date)
-{
-  return this._formatOps(
-    this.symbols, this.yearIsWeekYear, this.firstDayOfWeek, this.ops,
-    date);
-}
-
-proto.getWeekDate = function(date)
-{
-  return this._getWeekDate(date, this.firstDayOfWeek);
-}
-
-proto.getDateForWeekDate = function(wdate)
-{
-  return this._getDateForWeekDate(wdate.year, wdate.week, 1, 0, 0, 0, this.firstDayOfWeek);
-}
+        proto._construct = function (pattern, symbols, firstDayOfWeek) {
+            if (symbols == null) {
+                this.symbols = new org.apache.myfaces.dateformat.DateFormatSymbols();
+            }
+            else {
+                this.symbols = symbols;
+            }
+
+            this.ops = this._analysePattern(pattern);
+            this.yearIsWeekYear = this._hasWeekPattern(this.ops);
+
+            if (firstDayOfWeek != null)
+                this.firstDayOfWeek = firstDayOfWeek;
+            else
+                this.firstDayOfWeek = 1;
+        };
+
+        proto.setFirstDayOfWeek = function (dow) {
+            this.firstDayOfWeek = dow;
+        };
+
+        proto.parse = function (dateStr) {
+            if ((dateStr == null) || (dateStr.length == 0))
+                return null;
+
+            var context = this._parseOps(
+                    this.symbols, this.yearIsWeekYear, this.firstDayOfWeek, this.ops,
+                    dateStr);
+
+            if (context.invalid) {
+                return null;
+            }
+
+            this._parsePostProcess(this.symbols, context);
+            return this._createDateFromContext(context);
+        };
+
+        proto.format = function (date) {
+            return this._formatOps(
+                    this.symbols, this.yearIsWeekYear, this.firstDayOfWeek, this.ops,
+                    date);
+        };
+
+        proto.getWeekDate = function (date) {
+            return this._getWeekDate(date, this.firstDayOfWeek);
+        };
+
+        proto.getDateForWeekDate = function (wdate) {
+            return this._getDateForWeekDate(wdate.year, wdate.week, 1, 0, 0, 0, this.firstDayOfWeek);
+        };
+
+    } // end of static init block for SimpleDateFormatter class
 
-} // end of static init block for SimpleDateFormatter class
\ No newline at end of file
+}
\ No newline at end of file