home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / netscape / javascript / NativeDate.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-09  |  15.1 KB  |  1,164 lines

  1. package com.netscape.javascript;
  2.  
  3. import java.lang.reflect.Constructor;
  4. import java.text.DateFormat;
  5. import java.util.Date;
  6. import java.util.TimeZone;
  7.  
  8. public class NativeDate extends RescopeableObject {
  9.    private static final double HalfTimeDomain = 8.64E15;
  10.    private static final double HoursPerDay = (double)24.0F;
  11.    private static final double MinutesPerHour = (double)60.0F;
  12.    private static final double SecondsPerMinute = (double)60.0F;
  13.    private static final double msPerSecond = (double)1000.0F;
  14.    private static final double MinutesPerDay = (double)1440.0F;
  15.    private static final double SecondsPerDay = (double)86400.0F;
  16.    private static final double SecondsPerHour = (double)3600.0F;
  17.    private static final double msPerDay = (double)8.64E7F;
  18.    private static final double msPerHour = (double)3600000.0F;
  19.    private static final double msPerMinute = (double)60000.0F;
  20.    private static final boolean TZO_WORKAROUND = false;
  21.    private static final int MAXARGS = 7;
  22.    private static String[] wtb = new String[]{"am", "pm", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday", "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december", "gmt", "ut", "utc", "est", "edt", "cst", "cdt", "mst", "mdt", "pst", "pdt"};
  23.    private static int[] ttb = new int[]{0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 10000, 10000, 10000, 10300, 10240, 10360, 10300, 10420, 10360, 10480, 10420};
  24.    private static String js_NaN_date_str = "Invalid Date";
  25.    private static String[] days = new String[]{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
  26.    private static String[] months = new String[]{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
  27.    private static final TimeZone thisTimeZone = TimeZone.getDefault();
  28.    private static final double LocalTZA;
  29.    private static DateFormat timeZoneFormatter;
  30.    private static final DateFormat localeDateFormatter;
  31.    private double date;
  32.    // $FF: synthetic field
  33.    private static Class class$com$netscape$javascript$NativeDate;
  34.    // $FF: synthetic field
  35.    private static Class class$java$lang$String;
  36.  
  37.    private static double LocalTime(double var0) {
  38.       return var0 + LocalTZA + DaylightSavingTA(var0);
  39.    }
  40.  
  41.    private static int msFromTime(double var0) {
  42.       double var2 = var0 % (double)1000.0F;
  43.       if (var2 < (double)0.0F) {
  44.          var2 += (double)1000.0F;
  45.       }
  46.  
  47.       return (int)var2;
  48.    }
  49.  
  50.    public String getClassName() {
  51.       return "Date";
  52.    }
  53.  
  54.    private static int MonthFromTime(double var0) {
  55.       int var2 = DayWithinYear(var0);
  56.       int var3 = 31;
  57.       if (var2 < 31) {
  58.          return 0;
  59.       } else {
  60.          var3 += InLeapYear(var0) ? 29 : 28;
  61.          if (var2 < var3) {
  62.             return 1;
  63.          } else {
  64.             var3 += 31;
  65.             if (var2 < var3) {
  66.                return 2;
  67.             } else {
  68.                var3 += 30;
  69.                if (var2 < var3) {
  70.                   return 3;
  71.                } else {
  72.                   var3 += 31;
  73.                   if (var2 < var3) {
  74.                      return 4;
  75.                   } else {
  76.                      var3 += 30;
  77.                      if (var2 < var3) {
  78.                         return 5;
  79.                      } else {
  80.                         var3 += 31;
  81.                         if (var2 < var3) {
  82.                            return 6;
  83.                         } else {
  84.                            var3 += 31;
  85.                            if (var2 < var3) {
  86.                               return 7;
  87.                            } else {
  88.                               var3 += 30;
  89.                               if (var2 < var3) {
  90.                                  return 8;
  91.                               } else {
  92.                                  var3 += 31;
  93.                                  if (var2 < var3) {
  94.                                     return 9;
  95.                                  } else {
  96.                                     var3 += 30;
  97.                                     return var2 < var3 ? 10 : 11;
  98.                                  }
  99.                               }
  100.                            }
  101.                         }
  102.                      }
  103.                   }
  104.                }
  105.             }
  106.          }
  107.       }
  108.    }
  109.  
  110.    public static double parse(String var0) {
  111.       return date_parseString(var0);
  112.    }
  113.  
  114.    public double jsFunction_getUTCDate() {
  115.       return this.date != this.date ? this.date : (double)DateFromTime(this.date);
  116.    }
  117.  
  118.    public static double jsFunction_setUTCDate(Context var0, Scriptable var1, Object[] var2, Function var3) {
  119.       return makeDate(var1, var2, 1, false, var3);
  120.    }
  121.  
  122.    private static double MakeDay(double var0, double var2, double var4) {
  123.       var0 += Math.floor(var2 / (double)12.0F);
  124.       var2 %= (double)12.0F;
  125.       if (var2 < (double)0.0F) {
  126.          var2 += (double)12.0F;
  127.       }
  128.  
  129.       boolean var8 = DaysInYear((int)var0) == 366;
  130.       double var9 = Math.floor(TimeFromYear(var0) / (double)8.64E7F);
  131.       double var11 = DayFromMonth((int)var2, var8);
  132.       double var6 = var9 + var11 + var4 - (double)1.0F;
  133.       return var6;
  134.    }
  135.  
  136.    public static void finishInit(Scriptable var0, FunctionObject var1, Scriptable var2) throws PropertyException {
  137.       ((ScriptableObject)var2).defineProperty("toGMTString", var2.get("toUTCString", var2), 2);
  138.       String[] var3 = new String[]{"setSeconds", "setUTCSeconds", "setMinutes", "setUTCMinutes", "setHours", "setUTCHours", "setMonth", "setUTCMonth", "setFullYear", "setUTCFullYear"};
  139.       short[] var4 = new short[]{2, 2, 3, 3, 4, 4, 2, 2, 3, 3};
  140.  
  141.       for(int var5 = 0; var5 < var3.length; ++var5) {
  142.          Object var6 = var2.get(var3[var5], var2);
  143.          ((FunctionObject)var6).setLength(var4[var5]);
  144.       }
  145.  
  146.       String[] var7 = new String[]{"UTC", "parse"};
  147.       ((ScriptableObject)var1).defineFunctionProperties(var7, class$com$netscape$javascript$NativeDate != null ? class$com$netscape$javascript$NativeDate : (class$com$netscape$javascript$NativeDate = class$("com.netscape.javascript.NativeDate")), 2);
  148.       ((NativeDate)var2).date = ScriptRuntime.NaN;
  149.    }
  150.  
  151.    public double jsFunction_getUTCHours() {
  152.       return this.date != this.date ? this.date : (double)HourFromTime(this.date);
  153.    }
  154.  
  155.    public static double jsFunction_setUTCHours(Context var0, Scriptable var1, Object[] var2, Function var3) {
  156.       return makeTime(var1, var2, 4, false, var3);
  157.    }
  158.  
  159.    private static int DaysInYear(int var0) {
  160.       return var0 % 4 != 0 || var0 % 100 == 0 && var0 % 400 != 0 ? 365 : 366;
  161.    }
  162.  
  163.    private static boolean InLeapYear(double var0) {
  164.       return DaysInYear(YearFromTime(var0)) == 366;
  165.    }
  166.  
  167.    private static int DayWithinYear(double var0) {
  168.       int var2 = YearFromTime(var0);
  169.       return (int)(Day(var0) - DayFromYear((double)var2));
  170.    }
  171.  
  172.    public Object getDefaultValue(Class var1) {
  173.       if (var1 == null) {
  174.          var1 = ScriptRuntime.StringClass;
  175.       }
  176.  
  177.       return super.getDefaultValue(var1);
  178.    }
  179.  
  180.    public String js_toLocaleString() {
  181.       if (this.date != this.date) {
  182.          return js_NaN_date_str;
  183.       } else {
  184.          Date var1 = new Date((long)this.date);
  185.          return localeDateFormatter.format(var1);
  186.       }
  187.    }
  188.  
  189.    private static double date_msecFromDate(double var0, double var2, double var4, double var6, double var8, double var10, double var12) {
  190.       double var14 = MakeDay(var0, var2, var4);
  191.       double var16 = MakeTime(var6, var8, var10, var12);
  192.       double var18 = MakeDate(var14, var16);
  193.       return var18;
  194.    }
  195.  
  196.    public static Object js_Date(Context var0, Object[] var1, Function var2, boolean var3) {
  197.       if (!var3) {
  198.          return date_format(Now());
  199.       } else {
  200.          NativeDate var4 = new NativeDate();
  201.          if (var1.length == 0) {
  202.             var4.date = Now();
  203.             return var4;
  204.          } else if (var1.length == 1) {
  205.             double var13;
  206.             if (!(var1[0] instanceof String)) {
  207.                var13 = ScriptRuntime.toNumber(var1[0]);
  208.             } else {
  209.                String var14 = (String)var1[0];
  210.                var13 = date_parseString(var14);
  211.             }
  212.  
  213.             var4.date = TimeClip(var13);
  214.             return var4;
  215.          } else {
  216.             double[] var5 = new double[7];
  217.             int var6 = 0;
  218.  
  219.             do {
  220.                if (var6 < var1.length) {
  221.                   double var7 = ScriptRuntime.toNumber(var1[var6]);
  222.                   if (var7 != var7 || Double.isInfinite(var7)) {
  223.                      var4.date = ScriptRuntime.NaN;
  224.                      return var4;
  225.                   }
  226.  
  227.                   var5[var6] = ScriptRuntime.toInteger(var1[var6]);
  228.                } else {
  229.                   var5[var6] = (double)0.0F;
  230.                }
  231.  
  232.                ++var6;
  233.             } while(var6 < 7);
  234.  
  235.             if (var5[0] >= (double)0.0F && var5[0] <= (double)99.0F) {
  236.                var5[0] += (double)1900.0F;
  237.             }
  238.  
  239.             if (var5[2] < (double)1.0F) {
  240.                var5[2] = (double)1.0F;
  241.             }
  242.  
  243.             double var9 = MakeDay(var5[0], var5[1], var5[2]);
  244.             double var11 = MakeTime(var5[3], var5[4], var5[5], var5[6]);
  245.             var11 = MakeDate(var9, var11);
  246.             var11 = internalUTC(var11);
  247.             var4.date = TimeClip(var11);
  248.             return var4;
  249.          }
  250.       }
  251.    }
  252.  
  253.    public double jsFunction_getUTCMonth() {
  254.       return this.date != this.date ? this.date : (double)MonthFromTime(this.date);
  255.    }
  256.  
  257.    public static double jsFunction_setUTCMonth(Context var0, Scriptable var1, Object[] var2, Function var3) {
  258.       return makeDate(var1, var2, 2, false, var3);
  259.    }
  260.  
  261.    public double jsFunction_getMinutes() {
  262.       return this.date != this.date ? this.date : (double)MinFromTime(LocalTime(this.date));
  263.    }
  264.  
  265.    private static double MakeTime(double var0, double var2, double var4, double var6) {
  266.       return ((var0 * (double)60.0F + var2) * (double)60.0F + var4) * (double)1000.0F + var6;
  267.    }
  268.  
  269.    private static double makeTime(Scriptable var0, Object[] var1, int var2, boolean var3, Function var4) {
  270.       double[] var6 = new double[4];
  271.       NativeDate var21 = checkInstance(var0, var4);
  272.       double var22 = var21.date;
  273.       if (var22 != var22) {
  274.          return var22;
  275.       } else {
  276.          if (var1.length == 0) {
  277.             var1 = ScriptRuntime.padArguments(var1, 1);
  278.          }
  279.  
  280.          int var5 = 0;
  281.  
  282.          while(true) {
  283.             if (var5 < var1.length && var5 < var2) {
  284.                var6[var5] = ScriptRuntime.toNumber(var1[var5]);
  285.                if (var6[var5] == var6[var5] && !Double.isInfinite(var6[var5])) {
  286.                   var6[var5] = ScriptRuntime.toInteger(var6[var5]);
  287.                   ++var5;
  288.                   continue;
  289.                }
  290.  
  291.                var21.date = ScriptRuntime.NaN;
  292.                return var21.date;
  293.             }
  294.  
  295.             double var15;
  296.             if (var3) {
  297.                var15 = LocalTime(var22);
  298.             } else {
  299.                var15 = var22;
  300.             }
  301.  
  302.             var5 = 0;
  303.             int var24 = var1.length;
  304.             double var7;
  305.             if (var2 >= 4 && var5 < var24) {
  306.                var7 = var6[var5++];
  307.             } else {
  308.                var7 = (double)HourFromTime(var15);
  309.             }
  310.  
  311.             double var9;
  312.             if (var2 >= 3 && var5 < var24) {
  313.                var9 = var6[var5++];
  314.             } else {
  315.                var9 = (double)MinFromTime(var15);
  316.             }
  317.  
  318.             double var11;
  319.             if (var2 >= 2 && var5 < var24) {
  320.                var11 = var6[var5++];
  321.             } else {
  322.                var11 = (double)SecFromTime(var15);
  323.             }
  324.  
  325.             double var13;
  326.             if (var2 >= 1 && var5 < var24) {
  327.                var13 = var6[var5++];
  328.             } else {
  329.                var13 = (double)msFromTime(var15);
  330.             }
  331.  
  332.             double var17 = MakeTime(var7, var9, var11, var13);
  333.             double var19 = MakeDate(Day(var15), var17);
  334.             if (var3) {
  335.                var19 = internalUTC(var19);
  336.             }
  337.  
  338.             var22 = TimeClip(var19);
  339.             var21.date = var22;
  340.             return var22;
  341.          }
  342.       }
  343.    }
  344.  
  345.    public static double jsFunction_setMinutes(Context var0, Scriptable var1, Object[] var2, Function var3) {
  346.       return makeTime(var1, var2, 3, true, var3);
  347.    }
  348.  
  349.    private static double TimeClip(double var0) {
  350.       if (var0 == var0 && var0 != Double.POSITIVE_INFINITY && var0 != Double.NEGATIVE_INFINITY && !(Math.abs(var0) > 8.64E15)) {
  351.          return var0 > (double)0.0F ? Math.floor(var0) : Math.ceil(var0);
  352.       } else {
  353.          return ScriptRuntime.NaN;
  354.       }
  355.    }
  356.  
  357.    public double jsFunction_getMilliseconds() {
  358.       return this.date != this.date ? this.date : (double)msFromTime(LocalTime(this.date));
  359.    }
  360.  
  361.    public static double jsFunction_setMilliseconds(Context var0, Scriptable var1, Object[] var2, Function var3) {
  362.       return makeTime(var1, var2, 1, true, var3);
  363.    }
  364.  
  365.    // $FF: synthetic method
  366.    private static Class class$(String var0) {
  367.       try {
  368.          return Class.forName(var0);
  369.       } catch (ClassNotFoundException var2) {
  370.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  371.       }
  372.    }
  373.  
  374.    public double jsFunction_getUTCMinutes() {
  375.       return this.date != this.date ? this.date : (double)MinFromTime(this.date);
  376.    }
  377.  
  378.    public static double jsFunction_setUTCMinutes(Context var0, Scriptable var1, Object[] var2, Function var3) {
  379.       return makeTime(var1, var2, 3, false, var3);
  380.    }
  381.  
  382.    public double jsFunction_getDay() {
  383.       return this.date != this.date ? this.date : (double)WeekDay(LocalTime(this.date));
  384.    }
  385.  
  386.    public double jsFunction_getSeconds() {
  387.       return this.date != this.date ? this.date : (double)SecFromTime(LocalTime(this.date));
  388.    }
  389.  
  390.    public double jsFunction_getUTCMilliseconds() {
  391.       return this.date != this.date ? this.date : (double)msFromTime(this.date);
  392.    }
  393.  
  394.    private static double Day(double var0) {
  395.       return Math.floor(var0 / (double)8.64E7F);
  396.    }
  397.  
  398.    private static double TimeWithinDay(double var0) {
  399.       double var2 = var0 % (double)8.64E7F;
  400.       if (var2 < (double)0.0F) {
  401.          var2 += (double)8.64E7F;
  402.       }
  403.  
  404.       return var2;
  405.    }
  406.  
  407.    public double jsFunction_getUTCDay() {
  408.       return this.date != this.date ? this.date : (double)WeekDay(this.date);
  409.    }
  410.  
  411.    public static double jsFunction_setUTCMilliseconds(Context var0, Scriptable var1, Object[] var2, Function var3) {
  412.       return makeTime(var1, var2, 1, false, var3);
  413.    }
  414.  
  415.    public static double jsFunction_setSeconds(Context var0, Scriptable var1, Object[] var2, Function var3) {
  416.       return makeTime(var1, var2, 2, true, var3);
  417.    }
  418.  
  419.    public double js_valueOf() {
  420.       return this.date;
  421.    }
  422.  
  423.    private static String date_format(double var0) {
  424.       StringBuffer var2 = new StringBuffer(60);
  425.       double var3 = LocalTime(var0);
  426.       int var5 = (int)Math.floor((LocalTZA + DaylightSavingTA(var0)) / (double)60000.0F);
  427.       int var6 = var5 / 60 * 100 + var5 % 60;
  428.       String var7 = Integer.toString(DateFromTime(var3));
  429.       String var8 = Integer.toString(HourFromTime(var3));
  430.       String var9 = Integer.toString(MinFromTime(var3));
  431.       String var10 = Integer.toString(SecFromTime(var3));
  432.       String var11 = Integer.toString(var6 > 0 ? var6 : -var6);
  433.       int var12 = YearFromTime(var3);
  434.       String var13 = Integer.toString(var12 > 0 ? var12 : -var12);
  435.       var2.append(days[WeekDay(var3)]);
  436.       var2.append(" ");
  437.       var2.append(months[MonthFromTime(var3)]);
  438.       if (var7.length() == 1) {
  439.          var2.append(" 0");
  440.       } else {
  441.          var2.append(" ");
  442.       }
  443.  
  444.       var2.append(var7);
  445.       if (var8.length() == 1) {
  446.          var2.append(" 0");
  447.       } else {
  448.          var2.append(" ");
  449.       }
  450.  
  451.       var2.append(var8);
  452.       if (var9.length() == 1) {
  453.          var2.append(":0");
  454.       } else {
  455.          var2.append(":");
  456.       }
  457.  
  458.       var2.append(var9);
  459.       if (var10.length() == 1) {
  460.          var2.append(":0");
  461.       } else {
  462.          var2.append(":");
  463.       }
  464.  
  465.       var2.append(var10);
  466.       if (var6 > 0) {
  467.          var2.append(" GMT+");
  468.       } else {
  469.          var2.append(" GMT-");
  470.       }
  471.  
  472.       for(int var14 = var11.length(); var14 < 4; ++var14) {
  473.          var2.append("0");
  474.       }
  475.  
  476.       var2.append(var11);
  477.       if (timeZoneFormatter != null) {
  478.          var2.append(" (");
  479.          Date var15 = new Date((long)var0);
  480.          var2.append(timeZoneFormatter.format(var15));
  481.          var2.append(") ");
  482.       } else {
  483.          var2.append(" ");
  484.       }
  485.  
  486.       if (var12 < 0) {
  487.          var2.append("-");
  488.       }
  489.  
  490.       for(int var16 = var13.length(); var16 < 4; ++var16) {
  491.          var2.append("0");
  492.       }
  493.  
  494.       var2.append(var13);
  495.       return var2.toString();
  496.    }
  497.  
  498.    private static double DaylightSavingTA(double var0) {
  499.       Date var2 = new Date((long)var0);
  500.       return thisTimeZone.inDaylightTime(var2) ? (double)3600000.0F : (double)0.0F;
  501.    }
  502.  
  503.    private static double date_parseString(String var0) {
  504.       int var3 = -1;
  505.       int var4 = -1;
  506.       int var5 = -1;
  507.       int var6 = -1;
  508.       int var7 = -1;
  509.       int var8 = -1;
  510.       char var9 = '\u0000';
  511.       char var10 = '\u0000';
  512.       int var11 = 0;
  513.       int var12 = -1;
  514.       double var13 = (double)-1.0F;
  515.       char var15 = 0;
  516.       int var16 = 0;
  517.       boolean var17 = false;
  518.       if (var0 == null) {
  519.          return ScriptRuntime.NaN;
  520.       } else {
  521.          var16 = var0.length();
  522.  
  523.          while(var11 < var16) {
  524.             var9 = var0.charAt(var11);
  525.             ++var11;
  526.             if (var9 > ' ' && var9 != ',' && var9 != '-') {
  527.                if (var9 != '(') {
  528.                   if ('0' > var9 || var9 > '9') {
  529.                      if (var9 != '/' && var9 != ':' && var9 != '+' && var9 != '-') {
  530.                         int var29;
  531.                         for(var29 = var11 - 1; var11 < var16; ++var11) {
  532.                            var9 = var0.charAt(var11);
  533.                            if (('A' > var9 || var9 > 'Z') && ('a' > var9 || var9 > 'z')) {
  534.                               break;
  535.                            }
  536.                         }
  537.  
  538.                         if (var11 <= var29 + 1) {
  539.                            return ScriptRuntime.NaN;
  540.                         }
  541.  
  542.                         int var19 = wtb.length;
  543.  
  544.                         while(true) {
  545.                            --var19;
  546.                            if (var19 < 0) {
  547.                               break;
  548.                            }
  549.  
  550.                            if (date_regionMatches(wtb[var19], 0, var0, var29, var11 - var29)) {
  551.                               int var20 = ttb[var19];
  552.                               if (var20 != 0) {
  553.                                  if (var20 == 1) {
  554.                                     if (var6 > 12 || var6 < 0) {
  555.                                        return ScriptRuntime.NaN;
  556.                                     }
  557.  
  558.                                     var6 += 12;
  559.                                  } else if (var20 <= 13) {
  560.                                     if (var4 >= 0) {
  561.                                        return ScriptRuntime.NaN;
  562.                                     }
  563.  
  564.                                     var4 = var20 - 2;
  565.                                  } else {
  566.                                     var13 = (double)(var20 - 10000);
  567.                                  }
  568.                               }
  569.                               break;
  570.                            }
  571.                         }
  572.  
  573.                         if (var19 < 0) {
  574.                            return ScriptRuntime.NaN;
  575.                         }
  576.  
  577.                         var15 = 0;
  578.                      } else {
  579.                         var15 = var9;
  580.                      }
  581.                   } else {
  582.                      for(var12 = var9 - 48; var11 < var16 && '0' <= (var9 = var0.charAt(var11)) && var9 <= '9'; ++var11) {
  583.                         var12 = var12 * 10 + var9 - 48;
  584.                      }
  585.  
  586.                      if (var15 != '+' && var15 != '-') {
  587.                         if (var12 < 70 && (var15 != '/' || var4 < 0 || var5 < 0 || var3 >= 0)) {
  588.                            if (var9 == ':') {
  589.                               if (var6 < 0) {
  590.                                  var6 = var12;
  591.                               } else {
  592.                                  if (var7 >= 0) {
  593.                                     return ScriptRuntime.NaN;
  594.                                  }
  595.  
  596.                                  var7 = var12;
  597.                               }
  598.                            } else if (var9 == '/') {
  599.                               if (var4 < 0) {
  600.                                  var4 = var12 - 1;
  601.                               } else {
  602.                                  if (var5 >= 0) {
  603.                                     return ScriptRuntime.NaN;
  604.                                  }
  605.  
  606.                                  var5 = var12;
  607.                               }
  608.                            } else {
  609.                               if (var11 < var16 && var9 != ',' && var9 > ' ' && var9 != '-') {
  610.                                  return ScriptRuntime.NaN;
  611.                               }
  612.  
  613.                               if (var17 && var12 < 60) {
  614.                                  if (var13 < (double)0.0F) {
  615.                                     var13 -= (double)var12;
  616.                                  } else {
  617.                                     var13 += (double)var12;
  618.                                  }
  619.                               } else if (var6 >= 0 && var7 < 0) {
  620.                                  var7 = var12;
  621.                               } else if (var7 >= 0 && var8 < 0) {
  622.                                  var8 = var12;
  623.                               } else {
  624.                                  if (var5 >= 0) {
  625.                                     return ScriptRuntime.NaN;
  626.                                  }
  627.  
  628.                                  var5 = var12;
  629.                               }
  630.                            }
  631.                         } else {
  632.                            if (var3 >= 0) {
  633.                               return ScriptRuntime.NaN;
  634.                            }
  635.  
  636.                            if (var9 > ' ' && var9 != ',' && var9 != '/' && var11 < var16) {
  637.                               return ScriptRuntime.NaN;
  638.                            }
  639.  
  640.                            var3 = var12 < 100 ? var12 + 1900 : var12;
  641.                         }
  642.                      } else {
  643.                         var17 = true;
  644.                         if (var12 < 24) {
  645.                            var12 *= 60;
  646.                         } else {
  647.                            var12 = var12 % 100 + var12 / 100 * 60;
  648.                         }
  649.  
  650.                         if (var15 == '+') {
  651.                            var12 = -var12;
  652.                         }
  653.  
  654.                         if (var13 != (double)0.0F && var13 != (double)-1.0F) {
  655.                            return ScriptRuntime.NaN;
  656.                         }
  657.  
  658.                         var13 = (double)var12;
  659.                      }
  660.  
  661.                      var15 = 0;
  662.                   }
  663.                } else {
  664.                   int var18 = 1;
  665.  
  666.                   while(var11 < var16) {
  667.                      var9 = var0.charAt(var11);
  668.                      ++var11;
  669.                      if (var9 == '(') {
  670.                         ++var18;
  671.                      } else if (var9 == ')') {
  672.                         --var18;
  673.                         if (var18 <= 0) {
  674.                            break;
  675.                         }
  676.                      }
  677.                   }
  678.                }
  679.             } else {
  680.                var10 = var0.charAt(var11);
  681.                if (var9 == '-' && '0' <= var10 && var10 <= '9') {
  682.                   var15 = var9;
  683.                }
  684.             }
  685.          }
  686.  
  687.          if (var3 >= 0 && var4 >= 0 && var5 >= 0) {
  688.             if (var8 < 0) {
  689.                var8 = 0;
  690.             }
  691.  
  692.             if (var7 < 0) {
  693.                var7 = 0;
  694.             }
  695.  
  696.             if (var6 < 0) {
  697.                var6 = 0;
  698.             }
  699.  
  700.             if (var13 == (double)-1.0F) {
  701.                double var30 = date_msecFromDate((double)var3, (double)var4, (double)var5, (double)var6, (double)var7, (double)var8, (double)0.0F);
  702.                return internalUTC(var30);
  703.             } else {
  704.                double var1 = date_msecFromDate((double)var3, (double)var4, (double)var5, (double)var6, (double)var7, (double)var8, (double)0.0F);
  705.                var1 += var13 * (double)60000.0F;
  706.                return var1;
  707.             }
  708.          } else {
  709.             return ScriptRuntime.NaN;
  710.          }
  711.       }
  712.    }
  713.  
  714.    public String js_toString() {
  715.       return this.date != this.date ? js_NaN_date_str : date_format(this.date);
  716.    }
  717.  
  718.    private static double TimeFromYear(double var0) {
  719.       return DayFromYear(var0) * (double)8.64E7F;
  720.    }
  721.  
  722.    public double jsFunction_getFullYear() {
  723.       return this.date != this.date ? this.date : (double)YearFromTime(LocalTime(this.date));
  724.    }
  725.  
  726.    public static double jsFunction_setFullYear(Context var0, Scriptable var1, Object[] var2, Function var3) {
  727.       return makeDate(var1, var2, 3, true, var3);
  728.    }
  729.  
  730.    private static NativeDate checkInstance(Scriptable var0, Function var1) {
  731.       if (var0 != null && var0 instanceof NativeDate) {
  732.          return (NativeDate)var0;
  733.       } else {
  734.          Object[] var2 = new Object[]{((NativeFunction)var1).names[0]};
  735.          throw Context.reportRuntimeError(Context.getMessage("msg.incompat.call", var2));
  736.       }
  737.    }
  738.  
  739.    private static double MakeDate(double var0, double var2) {
  740.       return var0 * (double)8.64E7F + var2;
  741.    }
  742.  
  743.    private static double makeDate(Scriptable var0, Object[] var1, int var2, boolean var3, Function var4) {
  744.       double[] var6 = new double[3];
  745.       NativeDate var17 = checkInstance(var0, var4);
  746.       double var18 = var17.date;
  747.       if (var1.length == 0) {
  748.          var1 = ScriptRuntime.padArguments(var1, 1);
  749.       }
  750.  
  751.       int var5 = 0;
  752.  
  753.       while(true) {
  754.          if (var5 < var1.length && var5 < var2) {
  755.             var6[var5] = ScriptRuntime.toNumber(var1[var5]);
  756.             if (var6[var5] == var6[var5] && !Double.isInfinite(var6[var5])) {
  757.                var6[var5] = ScriptRuntime.toInteger(var6[var5]);
  758.                ++var5;
  759.                continue;
  760.             }
  761.  
  762.             var17.date = ScriptRuntime.NaN;
  763.             return var17.date;
  764.          }
  765.  
  766.          double var13;
  767.          if (var18 != var18) {
  768.             if (var1.length < 3) {
  769.                return ScriptRuntime.NaN;
  770.             }
  771.  
  772.             var13 = (double)0.0F;
  773.          } else if (var3) {
  774.             var13 = LocalTime(var18);
  775.          } else {
  776.             var13 = var18;
  777.          }
  778.  
  779.          var5 = 0;
  780.          int var20 = var1.length;
  781.          double var7;
  782.          if (var2 >= 3 && var5 < var20) {
  783.             var7 = var6[var5++];
  784.          } else {
  785.             var7 = (double)YearFromTime(var13);
  786.          }
  787.  
  788.          double var9;
  789.          if (var2 >= 2 && var5 < var20) {
  790.             var9 = var6[var5++];
  791.          } else {
  792.             var9 = (double)MonthFromTime(var13);
  793.          }
  794.  
  795.          double var11;
  796.          if (var2 >= 1 && var5 < var20) {
  797.             var11 = var6[var5++];
  798.          } else {
  799.             var11 = (double)DateFromTime(var13);
  800.          }
  801.  
  802.          var11 = MakeDay(var7, var9, var11);
  803.          double var15 = MakeDate(var11, TimeWithinDay(var13));
  804.          if (var3) {
  805.             var15 = internalUTC(var15);
  806.          }
  807.  
  808.          var18 = TimeClip(var15);
  809.          var17.date = var18;
  810.          return var18;
  811.       }
  812.    }
  813.  
  814.    private static double DayFromYear(double var0) {
  815.       return (double)365.0F * (var0 - (double)1970.0F) + Math.floor((var0 - (double)1969.0F) / (double)4.0F) - Math.floor((var0 - (double)1901.0F) / (double)100.0F) + Math.floor((var0 - (double)1601.0F) / (double)400.0F);
  816.    }
  817.  
  818.    public double jsFunction_getYear() {
  819.       return this.date != this.date ? this.date : (double)(YearFromTime(LocalTime(this.date)) - 1900);
  820.    }
  821.  
  822.    public double jsFunction_getUTCFullYear() {
  823.       return this.date != this.date ? this.date : (double)YearFromTime(this.date);
  824.    }
  825.  
  826.    private static int YearFromTime(double var0) {
  827.       int var2 = (int)Math.floor(var0 / (double)8.64E7F / (double)366.0F) + 1970;
  828.       int var3 = (int)Math.floor(var0 / (double)8.64E7F / (double)365.0F) + 1970;
  829.       if (var3 < var2) {
  830.          int var5 = var2;
  831.          var2 = var3;
  832.          var3 = var5;
  833.       }
  834.  
  835.       while(var3 > var2) {
  836.          int var4 = (var3 + var2) / 2;
  837.          if (TimeFromYear((double)var4) > var0) {
  838.             var3 = var4 - 1;
  839.          } else if (TimeFromYear((double)var4) <= var0) {
  840.             int var6 = var4 + 1;
  841.             if (TimeFromYear((double)var6) > var0) {
  842.                return var4;
  843.             }
  844.  
  845.             var2 = var4 + 1;
  846.          }
  847.       }
  848.  
  849.       return var2;
  850.    }
  851.  
  852.    private static int HourFromTime(double var0) {
  853.       double var2 = Math.floor(var0 / (double)3600000.0F) % (double)24.0F;
  854.       if (var2 < (double)0.0F) {
  855.          var2 += (double)24.0F;
  856.       }
  857.  
  858.       return (int)var2;
  859.    }
  860.  
  861.    private static int MinFromTime(double var0) {
  862.       double var2 = Math.floor(var0 / (double)60000.0F) % (double)60.0F;
  863.       if (var2 < (double)0.0F) {
  864.          var2 += (double)60.0F;
  865.       }
  866.  
  867.       return (int)var2;
  868.    }
  869.  
  870.    private static int SecFromTime(double var0) {
  871.       double var2 = Math.floor(var0 / (double)1000.0F) % (double)60.0F;
  872.       if (var2 < (double)0.0F) {
  873.          var2 += (double)60.0F;
  874.       }
  875.  
  876.       return (int)var2;
  877.    }
  878.  
  879.    public double jsFunction_getTime() {
  880.       return this.date;
  881.    }
  882.  
  883.    public double jsFunction_getUTCSeconds() {
  884.       return this.date != this.date ? this.date : (double)SecFromTime(this.date);
  885.    }
  886.  
  887.    public double jsFunction_getTimezoneOffset() {
  888.       return this.date != this.date ? this.date : (this.date - LocalTime(this.date)) / (double)60000.0F;
  889.    }
  890.  
  891.    public double jsFunction_setTime(double var1) {
  892.       this.date = TimeClip(var1);
  893.       return this.date;
  894.    }
  895.  
  896.    public static double jsFunction_setUTCSeconds(Context var0, Scriptable var1, Object[] var2, Function var3) {
  897.       return makeTime(var1, var2, 2, false, var3);
  898.    }
  899.  
  900.    public static double jsFunction_setUTCFullYear(Context var0, Scriptable var1, Object[] var2, Function var3) {
  901.       return makeDate(var1, var2, 3, false, var3);
  902.    }
  903.  
  904.    public double jsFunction_setYear(double var1) {
  905.       if (var1 == var1 && !Double.isInfinite(var1)) {
  906.          if (this.date != this.date) {
  907.             this.date = (double)0.0F;
  908.          }
  909.  
  910.          if (var1 >= (double)0.0F && var1 <= (double)99.0F) {
  911.             var1 += (double)1900.0F;
  912.          }
  913.  
  914.          double var3 = MakeDay(var1, (double)MonthFromTime(this.date), (double)DateFromTime(this.date));
  915.          double var5 = MakeDate(var3, TimeWithinDay(this.date));
  916.          var5 = internalUTC(var5);
  917.          this.date = TimeClip(var5);
  918.          return this.date;
  919.       } else {
  920.          this.date = ScriptRuntime.NaN;
  921.          return this.date;
  922.       }
  923.    }
  924.  
  925.    private static int WeekDay(double var0) {
  926.       double var2 = Day(var0) + (double)4.0F;
  927.       var2 %= (double)7.0F;
  928.       if (var2 < (double)0.0F) {
  929.          var2 += (double)7.0F;
  930.       }
  931.  
  932.       return (int)var2;
  933.    }
  934.  
  935.    private static double Now() {
  936.       return (double)System.currentTimeMillis();
  937.    }
  938.  
  939.    private static double internalUTC(double var0) {
  940.       return var0 - LocalTZA - DaylightSavingTA(var0 - LocalTZA);
  941.    }
  942.  
  943.    public static double UTC(Context var0, Scriptable var1, Object[] var2, Function var3) {
  944.       double[] var4 = new double[7];
  945.       int var5 = 0;
  946.  
  947.       do {
  948.          if (var5 < var2.length) {
  949.             double var6 = ScriptRuntime.toNumber(var2[var5]);
  950.             if (var6 != var6 || Double.isInfinite(var6)) {
  951.                return ScriptRuntime.NaN;
  952.             }
  953.  
  954.             var4[var5] = ScriptRuntime.toInteger(var2[var5]);
  955.          } else {
  956.             var4[var5] = (double)0.0F;
  957.          }
  958.  
  959.          ++var5;
  960.       } while(var5 < 7);
  961.  
  962.       if (var4[0] >= (double)0.0F && var4[0] <= (double)99.0F) {
  963.          var4[0] += (double)1900.0F;
  964.       }
  965.  
  966.       if (var4[2] < (double)1.0F) {
  967.          var4[2] = (double)1.0F;
  968.       }
  969.  
  970.       double var8 = date_msecFromDate(var4[0], var4[1], var4[2], var4[3], var4[4], var4[5], var4[6]);
  971.       var8 = TimeClip(var8);
  972.       return var8;
  973.    }
  974.  
  975.    public double jsFunction_getHours() {
  976.       return this.date != this.date ? this.date : (double)HourFromTime(LocalTime(this.date));
  977.    }
  978.  
  979.    public String js_toUTCString() {
  980.       if (this.date != this.date) {
  981.          return js_NaN_date_str;
  982.       } else {
  983.          StringBuffer var1 = new StringBuffer(60);
  984.          String var2 = Integer.toString(DateFromTime(this.date));
  985.          String var3 = Integer.toString(HourFromTime(this.date));
  986.          String var4 = Integer.toString(MinFromTime(this.date));
  987.          String var5 = Integer.toString(SecFromTime(this.date));
  988.          int var6 = YearFromTime(this.date);
  989.          String var7 = Integer.toString(var6 > 0 ? var6 : -var6);
  990.          var1.append(days[WeekDay(this.date)]);
  991.          var1.append(", ");
  992.          if (var2.length() == 1) {
  993.             var1.append("0");
  994.          }
  995.  
  996.          var1.append(var2);
  997.          var1.append(" ");
  998.          var1.append(months[MonthFromTime(this.date)]);
  999.          if (var6 < 0) {
  1000.             var1.append(" -");
  1001.          } else {
  1002.             var1.append(" ");
  1003.          }
  1004.  
  1005.          for(int var8 = var7.length(); var8 < 4; ++var8) {
  1006.             var1.append("0");
  1007.          }
  1008.  
  1009.          var1.append(var7);
  1010.          if (var3.length() == 1) {
  1011.             var1.append(" 0");
  1012.          } else {
  1013.             var1.append(" ");
  1014.          }
  1015.  
  1016.          var1.append(var3);
  1017.          if (var4.length() == 1) {
  1018.             var1.append(":0");
  1019.          } else {
  1020.             var1.append(":");
  1021.          }
  1022.  
  1023.          var1.append(var4);
  1024.          if (var5.length() == 1) {
  1025.             var1.append(":0");
  1026.          } else {
  1027.             var1.append(":");
  1028.          }
  1029.  
  1030.          var1.append(var5);
  1031.          var1.append(" GMT");
  1032.          return var1.toString();
  1033.       }
  1034.    }
  1035.  
  1036.    public static double jsFunction_setHours(Context var0, Scriptable var1, Object[] var2, Function var3) {
  1037.       return makeTime(var1, var2, 4, true, var3);
  1038.    }
  1039.  
  1040.    static {
  1041.       LocalTZA = (double)thisTimeZone.getRawOffset();
  1042.  
  1043.       try {
  1044.          Class[] var0 = new Class[]{class$java$lang$String != null ? class$java$lang$String : (class$java$lang$String = class$("java.lang.String"))};
  1045.          Object[] var1 = new Object[]{"zzz"};
  1046.          Class var2 = Class.forName("java.text.SimpleDateFormat");
  1047.          Constructor var3 = var2.getDeclaredConstructor(var0);
  1048.          timeZoneFormatter = (DateFormat)var3.newInstance(var1);
  1049.       } catch (Exception var4) {
  1050.          timeZoneFormatter = null;
  1051.       }
  1052.  
  1053.       localeDateFormatter = DateFormat.getDateTimeInstance(1, 1);
  1054.    }
  1055.  
  1056.    private static boolean date_regionMatches(String var0, int var1, String var2, int var3, int var4) {
  1057.       boolean var5 = false;
  1058.       int var6 = var0.length();
  1059.  
  1060.       for(int var7 = var2.length(); var4 > 0 && var1 < var6 && var3 < var7 && Character.toLowerCase(var0.charAt(var1)) == Character.toLowerCase(var2.charAt(var3)); --var4) {
  1061.          ++var1;
  1062.          ++var3;
  1063.       }
  1064.  
  1065.       if (var4 == 0) {
  1066.          var5 = true;
  1067.       }
  1068.  
  1069.       return var5;
  1070.    }
  1071.  
  1072.    private static boolean isFinite(double var0) {
  1073.       return var0 == var0 && var0 != Double.POSITIVE_INFINITY && var0 != Double.NEGATIVE_INFINITY;
  1074.    }
  1075.  
  1076.    public double jsFunction_getDate() {
  1077.       return this.date != this.date ? this.date : (double)DateFromTime(LocalTime(this.date));
  1078.    }
  1079.  
  1080.    public static double jsFunction_setDate(Context var0, Scriptable var1, Object[] var2, Function var3) {
  1081.       return makeDate(var1, var2, 1, true, var3);
  1082.    }
  1083.  
  1084.    private static double DayFromMonth(int var0, boolean var1) {
  1085.       double[] var2 = new double[]{(double)0.0F, (double)31.0F, (double)59.0F, (double)90.0F, (double)120.0F, (double)151.0F, (double)181.0F, (double)212.0F, (double)243.0F, (double)273.0F, (double)304.0F, (double)334.0F};
  1086.       double[] var3 = new double[]{(double)0.0F, (double)31.0F, (double)60.0F, (double)91.0F, (double)121.0F, (double)152.0F, (double)182.0F, (double)213.0F, (double)244.0F, (double)274.0F, (double)305.0F, (double)335.0F};
  1087.       return var1 ? var3[var0] : var2[var0];
  1088.    }
  1089.  
  1090.    public double jsFunction_getMonth() {
  1091.       return this.date != this.date ? this.date : (double)MonthFromTime(LocalTime(this.date));
  1092.    }
  1093.  
  1094.    public static double jsFunction_setMonth(Context var0, Scriptable var1, Object[] var2, Function var3) {
  1095.       return makeDate(var1, var2, 2, true, var3);
  1096.    }
  1097.  
  1098.    private static int DateFromTime(double var0) {
  1099.       int var2 = DayWithinYear(var0);
  1100.       int var4 = 30;
  1101.       if (var2 <= 30) {
  1102.          return var2 + 1;
  1103.       } else {
  1104.          int var3 = var4;
  1105.          var4 += InLeapYear(var0) ? 29 : 28;
  1106.          if (var2 <= var4) {
  1107.             return var2 - var3;
  1108.          } else {
  1109.             var3 = var4;
  1110.             var4 += 31;
  1111.             if (var2 <= var4) {
  1112.                return var2 - var3;
  1113.             } else {
  1114.                var3 = var4;
  1115.                var4 += 30;
  1116.                if (var2 <= var4) {
  1117.                   return var2 - var3;
  1118.                } else {
  1119.                   var3 = var4;
  1120.                   var4 += 31;
  1121.                   if (var2 <= var4) {
  1122.                      return var2 - var3;
  1123.                   } else {
  1124.                      var3 = var4;
  1125.                      var4 += 30;
  1126.                      if (var2 <= var4) {
  1127.                         return var2 - var3;
  1128.                      } else {
  1129.                         var3 = var4;
  1130.                         var4 += 31;
  1131.                         if (var2 <= var4) {
  1132.                            return var2 - var3;
  1133.                         } else {
  1134.                            var3 = var4;
  1135.                            var4 += 31;
  1136.                            if (var2 <= var4) {
  1137.                               return var2 - var3;
  1138.                            } else {
  1139.                               var3 = var4;
  1140.                               var4 += 30;
  1141.                               if (var2 <= var4) {
  1142.                                  return var2 - var3;
  1143.                               } else {
  1144.                                  var3 = var4;
  1145.                                  var4 += 31;
  1146.                                  if (var2 <= var4) {
  1147.                                     return var2 - var3;
  1148.                                  } else {
  1149.                                     var3 = var4;
  1150.                                     var4 += 30;
  1151.                                     return var2 <= var4 ? var2 - var3 : var2 - var4;
  1152.                                  }
  1153.                               }
  1154.                            }
  1155.                         }
  1156.                      }
  1157.                   }
  1158.                }
  1159.             }
  1160.          }
  1161.       }
  1162.    }
  1163. }
  1164.