Mega Code Archive

 
Categories / JavaScript DHTML / Development
 

Demo all methods in Date class

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!--  * +-------------------------------------------------------------------------+  * | jsPro - Date Test Page                                                  |  * +-------------------------------------------------------------------------+  * | Copyright (C) 2001-2003 Stuart Wigley                                   |  * +-------------------------------------------------------------------------+  * | This library is free software; you can redistribute it and/or modify it |  * | under the terms of the GNU Lesser General Public License as published by|  * | the Free Software Foundation; either version 2.1 of the License, or (at |  * | your option) any later version.                                         |  * |                                                                         |  * | This library is distributed in the hope that it will be useful, but     |  * | WITHOUT ANY WARRANTY; without even the implied warranty of              |  * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |  * | General Public License for more details.                                |  * |                                                                         |  * | You should have received a copy of the GNU Lesser General Public License|  * | along with this library; if not, write to the Free Software Foundation, |  * | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA             |  * +-------------------------------------------------------------------------+  * | Authors:   Stuart Wigley <stuartwigley@yahoo.co.uk>                     |  * +-------------------------------------------------------------------------+  * $Id: date.html,v 1.5 2003/10/01 10:02:15 wigleys Exp $ --> <html>     <head>         <title>jsPro - Date</title>         <!-- error.js -->         <script type="text/javascript"> /**  * +-------------------------------------------------------------------------+  * | jsPro - Error                                                           |  * +-------------------------------------------------------------------------+  * | Copyright (C) 2001-2003 Stuart Wigley                                   |  * +-------------------------------------------------------------------------+  * | This library is free software; you can redistribute it and/or modify it |  * | under the terms of the GNU Lesser General Public License as published by|  * | the Free Software Foundation; either version 2.1 of the License, or (at |  * | your option) any later version.                                         |  * |                                                                         |  * | This library is distributed in the hope that it will be useful, but     |  * | WITHOUT ANY WARRANTY; without even the implied warranty of              |  * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |  * | General Public License for more details.                                |  * |                                                                         |  * | You should have received a copy of the GNU Lesser General Public License|  * | along with this library; if not, write to the Free Software Foundation, |  * | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA             |  * +-------------------------------------------------------------------------+  * | Authors:   Stuart Wigley <stuartwigley@yahoo.co.uk>                     |  * |            Randolph Fielding <gator4life@cinci.rr.com>                  |  * +-------------------------------------------------------------------------+  * $Id: error.js,v 1.15 2003/09/22 04:41:10 gator4life Exp $  */ /**  * Property used in <code>Error.handleError</code> to specify how errors are  * reported. Permissable values are:  *  * 0    No errors are reported.  * 1    Report the error name and error message using the status bar of the  *      active browser window.  * 2    Report the error name and error message using an alert box.  * 3    Report the error name, error message and debug message using an alert  *      box.  * 4    Report the error name, error message and debug message using a debug  *      window. An instance of the Debug() class must be available.  */ Error.prototype.debugLevel = 4; /**  * Uses <code>Error.debugLevel</code> to control how errors are reported. If  * <code>Error.debugLevel</code> is set to 4, you must substitute the name of  * your <code>Debug()</code> instance for <code>oDebug</code> in the line  * <code>var jsProDebugWindow = oDebug</code>.  *  * @summary             handles thrown exceptions  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 09/03/03  * @interface           <code>Error.handleError()</code>  * @requires            <code>Debug.print(vMixedValue, sMessageType)</code>  * @see                 <code>Debug()</code>  * @see                 <code>Debug.print()</code>  */ Error.prototype.handleError = function() {     var sDebugMessage = this.debug;     var sErrorMessage = (sDebugMessage) ? sDebugMessage : '';     switch (this.debugLevel) {         case 0 :             break;         case 1 :             window.status = this.name + ': ' + this.message;             break;         case 2 :             window.alert(this.name + '\n\n' + this.message);             break;         case 3 :             window.alert(this.name + '\n\n' + this.message + '\n\n' + sErrorMessage);             break;         case 4 :             var jsProDebugWindow = oDebug;             if (jsProDebugWindow) {                 var oDebugWindow = jsProDebugWindow.debugWindow;                 if (oDebugWindow && !oDebugWindow.closed) {                     jsProDebugWindow.print(this.name + ' ' + this.message + ' ' + sErrorMessage, 1);                 }             }     } } /**  * Creates an object that is a subclass of Error for handling  * ArrayIndexOutOfBounds exceptions.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 06/27/03  * @interface           <code>new ArrayIndexOutOfBoundsException(sMethodName,  *                      iIndex, iArrayLength)</code>  * @param sMethodName   the name of the method where the exception was thrown  * @param iIndex        the index of a hypothetical array member attempting to  *                      be accessed  * @param iArrayLength  the length of the array  */ function ArrayIndexOutOfBoundsException(sMethodName, iIndex, iArrayLength) {     this.name = 'ArrayIndexOutOfBoundsException';     this.message = sMethodName + ' has been accessed with an illegal index that is either negative or greater than the size of the array.';     this.debug = 'Attempting to access index ' + iIndex.toString() + ', but array has an index range of 0 to ' + (iArrayLength - 1).toString() + '.'; } ArrayIndexOutOfBoundsException.prototype = new Error(); /**  * Creates an object that is a subclass of Error for handling IllegalArgument  * exceptions.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 07/24/03  * @interface           <code>new IllegalArgumentException(sMethodName,  *                      vExpectedArgs, iActualArgs)</code>  * @param sMethodName   the name of the method where the exception was thrown  * @param vExpectedArgs the number of arguments expected  * @param iActualArgs   the number of arguments received  */ function IllegalArgumentException(sMethodName, vExpectedArgs, iActualArgs) {     this.name = 'IllegalArgumentException';     this.message = sMethodName + ' has been passed an illegal number of arguments.';     this.debug = 'Expected ' + vExpectedArgs.toString() + ' argument(s), but received ' + iActualArgs.toString() + ' argument(s).'; } IllegalArgumentException.prototype = new Error(); /**  * Creates an object that is a subclass of Error for handling IllegalValue  * exceptions.  *  * @author              Randolph Fielding  * @version             1.0, 09/22/03  * @interface           <code>new IllegalValueException(sMethodName,  *                      sVariableName, vExpectedVal, vActualVal)</code>  * @param sMethodName   the name of the method where the exception was thrown  * @param sVariableName the name of the variable containing the illegal value  * @param vExpectedVal  the value expected in the variable containing the  *                      illegal value  * @param vActualVal    the value currently in the variable containing the  *                      illegal value  */ function IllegalValueException(sMethodName, sVariableName, vExpectedVal, vActualVal) {     this.name = 'IllegalValueException';     this.message = sMethodName + ' has encountered an illegal value in variable ' + sVariableName + '.'     this.debug = 'Expected a value of ' + vExpectedVal.toString() + ', but contains a value of ' + vActualVal.toString() + '.' } IllegalValueException.prototype = new Error(); /**  * Creates an object that is a subclass of Error for handling  * MethodNotAvailable exceptions.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 06/27/03  * @interface           <code>new MethodNotAvailableException(sMethodName,  *                      sMethodNameNA)</code>  * @param sMethodName   the name of the method where the exception was thrown  * @param sMethodNameNA the name of the method that was not available  */ function MethodNotAvailableException(sMethodName, sMethodNameNA) {     this.name = 'MethodNotAvailableException';     this.message = 'A method has been called that is not available.';     this.debug = sMethodName + ' attempted to call ' + sMethodNameNA + '.'; } MethodNotAvailableException.prototype = new Error(); /**  * Creates an object that is a subclass of Error for handling  * PropertyNotAvailable exceptions.  *  * @author              Randolph Fielding  * @version             1.1, 08/01/03  * @interface           <code>new PropertyNotAvailableException(sMethodName,  *                      sPropNameNA)</code>  * @param sMethodName   the name of the method where the exception was thrown  * @param sPropNameNA   the name of the property that was not available  */ function PropertyNotAvailableException(sMethodName, sPropNameNA) {     this.name = 'PropertyNotAvailableException';     this.message = 'A property has been accessed that is not available.';     this.debug = sMethodName + ' attempted to access ' + sPropNameNA + '.'; } PropertyNotAvailableException.prototype = new Error(); /**  * Creates an object that is a subclass of Error for handling TypeMismatch  * exceptions.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 07/24/03  * @interface           <code>new TypeMismatchException(sMethodName,  *                      sExpectedType, sActualType)</code>  * @param sMethodName   the name of the method where the exception was thrown  * @param sExpectedType the name of the expected type of an argument  * @param sActualType   the name of the actual type of an argument  */ function TypeMismatchException(sMethodName, sExpectedType, sActualType) {     this.name = 'TypeMismatchException';     this.message = sMethodName + ' has been passed an argument with an illegal or inappropriate type.';     this.debug = 'Expected an argument with a type of ' + sExpectedType + ', but received an argument with a type of ' + sActualType + '.'; } TypeMismatchException.prototype = new Error(); /**  * Creates an object that is a subclass of Error for handling Unknown  * exceptions.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 06/27/03  * @interface           <code>new UnknownException(sMethodName)</code>  * @param sMethodName   the name of the method where the exception was thrown  */ function UnknownException(sMethodName) {     this.name = 'UnknownException';     this.message = 'An unknown error has occurred in ' + sMethodName + '.'; } UnknownException.prototype = new Error();         </script>         <!-- debug.js -->         <script type="text/javascript"> /**  * +-------------------------------------------------------------------------+  * | jsPro - Debug                                                           |  * +-------------------------------------------------------------------------+  * | Copyright (C) 2001-2003 Stuart Wigley                                   |  * +-------------------------------------------------------------------------+  * | This library is free software; you can redistribute it and/or modify it |  * | under the terms of the GNU Lesser General Public License as published by|  * | the Free Software Foundation; either version 2.1 of the License, or (at |  * | your option) any later version.                                         |  * |                                                                         |  * | This library is distributed in the hope that it will be useful, but     |  * | WITHOUT ANY WARRANTY; without even the implied warranty of              |  * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |  * | General Public License for more details.                                |  * |                                                                         |  * | You should have received a copy of the GNU Lesser General Public License|  * | along with this library; if not, write to the Free Software Foundation, |  * | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA             |  * +-------------------------------------------------------------------------+  * | Authors:   Stuart Wigley <stuartwigley@yahoo.co.uk>                     |  * |            Randolph Fielding <gator4life@cinci.rr.com>                  |  * +-------------------------------------------------------------------------+  * $Id: debug.js,v 1.6 2003/09/22 05:07:41 gator4life Exp $  */ /**  * Creates an object that opens a window for debugging.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 09/05/03  * @interface           <code>new Debug()</code>  */ function Debug() {     this.debugWindow = window.open('../debug/debug.html', 'debug', 'width=400,height=600,resizable=yes,scrollbars=yes'); } /**  * Clears the contents of the debug window.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 09/05/03  * @interface           <code>Debug.clear()</code>  * @return              <code>true</code> if no exceptions are encountered  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              UnknownException  */ Debug.prototype.clear = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments != 0) {             throw vError = new IllegalArgumentException('Debug.clear', 0, iNumArguments);         }         var oMessageContainer = document.getElementById('messageContainer');         if (!oMessageContainer) {             throw vError = new UnknownException('Debug.clear');         }         while (oMessageContainer.hasChildNodes()) {             oMessageContainer.removeChild(oMessageContainer.firstChild);         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : true;     } } /**  * Displays content within the debug window.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 09/05/03  * @interface           <code>Debug.print(vMixedValue)</code>  * @interface           <code>Debug.print(vMixedValue, iMessageType)</code>  * @param vMixedValue   content to be displayed within the debug window  * @param iMessageType  an integer representing the type of content to display  *                      within the debug window (information: 0; error: 1)  *                      (optional)  * @return              <code>true</code> if no exceptions are encountered  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              IllegalValueException  * @throws              TypeMismatchException  * @throws              UnknownException  */ Debug.prototype.print = function(vMixedValue) {     try {         var vError = null;         var iNumArguments = arguments.length;         var iMessageType = 0;         if ((iNumArguments < 1) || (iNumArguments > 2)) {             throw vError = new IllegalArgumentException('Debug.print', '1 or 2', iNumArguments);         } else if (iNumArguments == 2) {             iMessageType = arguments[1];         }         if ((typeof iMessageType != 'number') || (iMessageType.toString().indexOf('.') != -1)) {             throw vError = new TypeMismatchException('Debug.print', 'integer', typeof iMessageType);         }         if ((iMessageType != 0) && (iMessageType != 1)) {             throw vError = new IllegalValueException('Debug.print', 'iMessageType', '0 or 1', iMessageType);         }         var oDebugWindow = this.debugWindow;         if (!oDebugWindow || oDebugWindow.closed) {             throw vError = new UnknownException('Debug.print');         }         var oDocument = oDebugWindow.document;         if (!oDocument) {             throw vError = new UnknownException('Debug.print');         }         var oMessageContainer = oDocument.getElementById('messageContainer');         if (!oMessageContainer) {             throw vError = new UnknownException('Debug.print');         }         var oTitleRow = oDocument.createElement('tr');         var oTitleCell = oDocument.createElement('td');         var oBodyRow = oDocument.createElement('tr');         var oBodyCell = oDocument.createElement('td');         if (!oTitleRow || !oTitleCell || !oBodyRow || !oBodyCell) {             throw vError = new UnknownException('Debug.print');         }         var oTitleRowStyle = oTitleRow.style;         if (oTitleRowStyle) {             oTitleRowStyle.backgroundColor = '#EEE';             oTitleRowStyle.fontWeight = 700;         }         var sOutputString = vMixedValue.toString();         var sTitle = 'info';         var sBody = sOutputString;         if (iMessageType == 1) {             sTitle = sOutputString.match(/\w+/);             sBody = sOutputString.replace(/\w+/, '');             var oBodyCellStyle = oBodyCell.style;             if (oBodyCellStyle) {                 oBodyCell.style.backgroundColor = '#FCC';             }         }         oMessageContainer.appendChild(oTitleRow);         oTitleRow.appendChild(oTitleCell);         oTitleCell.appendChild(oDocument.createTextNode(sTitle));         oMessageContainer.appendChild(oBodyRow);         oBodyRow.appendChild(oBodyCell);         oBodyCell.appendChild(oDocument.createTextNode(sBody));         oDebugWindow.focus();     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : true;     } }         </script>         <!-- test.js -->         <script type="text/javascript"> /**  * +-------------------------------------------------------------------------+  * | jsPro - Test                                                            |  * +-------------------------------------------------------------------------+  * | Copyright (C) 2001-2003 Stuart Wigley                                   |  * +-------------------------------------------------------------------------+  * | This library is free software; you can redistribute it and/or modify it |  * | under the terms of the GNU Lesser General Public License as published by|  * | the Free Software Foundation; either version 2.1 of the License, or (at |  * | your option) any later version.                                         |  * |                                                                         |  * | This library is distributed in the hope that it will be useful, but     |  * | WITHOUT ANY WARRANTY; without even the implied warranty of              |  * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |  * | General Public License for more details.                                |  * |                                                                         |  * | You should have received a copy of the GNU Lesser General Public License|  * | along with this library; if not, write to the Free Software Foundation, |  * | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA             |  * +-------------------------------------------------------------------------+  * | Authors:   Stuart Wigley <stuartwigley@yahoo.co.uk>                     |  * |            Randolph Fielding <gator4life@cinci.rr.com>                  |  * +-------------------------------------------------------------------------+  * $Id: test.js,v 1.6 2003/09/15 05:07:09 gator4life Exp $  */ /**  * Creates an object that provides methods for testing all jsPro libraries.  *  * @author              Stuart Wigley  * @version             1.0, 07/24/03  * @interface           <code>new Test()</code>  */ function Test() { } /**  * Evaluates and returns the result of a jsPro method using assumptions about  * the structure and ids of HTML elements in the jsPro HTML test files.  *  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/20/03  * @interface           <code>Test.evaluateMethod(oButton, sClass)</code>  * @param oButton       the HTML input-button element that is clicked  * @param sClass        the name of the jsPro class instance being tested  * @return              the result of attempting to evaluate a jsPro method  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              TypeMismatchException  */ Test.prototype.evaluateMethod = function(oButton, sClass) {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments != 2) {             throw vError = new IllegalArgumentException('Error.evaluateMethod', 2, iNumArguments);         }         if (typeof oButton != 'object') {             throw vError = new TypeMismatchException('Error.evaluateMethod', 'object', typeof oButton);         }         if (typeof sClass != 'string') {             throw vError = new TypeMismatchException('Error.evaluateMethod', 'string', typeof sClass);         }         var sMethodName = oButton.id;         var oInput1 = document.getElementById(sMethodName + '1');         var oInput2 = document.getElementById(sMethodName + '2');         var oInput3 = document.getElementById(sMethodName + '3');         var oOutput = document.getElementById(sMethodName + 'Result');         var sArguments = '';         if (oInput1) {             var sInput1Value = oInput1.value;             if (sInput1Value != '') {                 var fInput1Value = parseFloat(sInput1Value);                 sArguments += (isNaN(fInput1Value)) ? '\'' + sInput1Value + '\'' : fInput1Value;             }         }         if (oInput2) {             var sInput2Value = oInput2.value;             if (sInput2Value != '') {                 var fInput2Value = parseFloat(sInput2Value);                 sArguments += (isNaN(fInput2Value)) ? ', \'' + sInput2Value + '\'' : ', ' + fInput2Value;             }         }         if (oInput3) {             var sInput3Value = oInput3.value;             if (sInput3Value != '') {                 var fInput3Value = parseFloat(sInput3Value);                 sArguments += (isNaN(fInput3Value)) ? ', \'' + sInput3Value + '\'' : ', ' + fInput3Value;             }         }         var vResult = eval(sClass + '.' + sMethodName + '(' + sArguments + ')');     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         if (oOutput) {             oOutput.value = vResult;         }     } }         </script>         <!-- date.js -->         <script type="text/javascript"> /**  * +-------------------------------------------------------------------------+  * | jsPro - Date                                                            |  * +-------------------------------------------------------------------------+  * | Copyright (C) 2001-2003 Stuart Wigley                                   |  * +-------------------------------------------------------------------------+  * | This library is free software; you can redistribute it and/or modify it |  * | under the terms of the GNU Lesser General Public License as published by|  * | the Free Software Foundation; either version 2.1 of the License, or (at |  * | your option) any later version.                                         |  * |                                                                         |  * | This library is distributed in the hope that it will be useful, but     |  * | WITHOUT ANY WARRANTY; without even the implied warranty of              |  * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser |  * | General Public License for more details.                                |  * |                                                                         |  * | You should have received a copy of the GNU Lesser General Public License|  * | along with this library; if not, write to the Free Software Foundation, |  * | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA             |  * +-------------------------------------------------------------------------+  * | Authors:   Stuart Wigley <stuartwigley@yahoo.co.uk>                     |  * |            Randolph Fielding <gator4life@cinci.rr.com>                  |  * +-------------------------------------------------------------------------+  * $Id: date.js,v 1.8 2003/10/01 10:02:14 wigleys Exp $  */ /**  * Implements the functionality within the date() function of PHP and returns  * this date formatted according to the specified format string. See  * http://www.php.net/manual/en/function.date.php for more information.  *  * The following list of string characters are recognized in the specified  * format string:  *  * a - Lowercase Ante Meridiem/Post Meridiem ('am' or 'pm')  * A - Uppercase Ante Meridiem/Post Meridiem ('AM' or 'PM')  * B - Swatch Internet Time ('@000' to '@999')  * d - Day of month with leading zeroes ('01' to '31')  * D - Three-letter, shortened name of day of week ('Mon' to 'Sun')  * F - Full name of month of year ('January' to 'December')  * g - 12-hour format of hour of day without leading zeros ('1' to '12')  * G - 24-hour format of hour of day without leading zeros ('0' to '23')  * h - 12-hour format of hour of day with leading zeros ('01' to '12')  * H - 24-hour format of hour of day with leading zeros ('00' to '23')  * i - Minutes of hour with leading zeros ('00' to '59')  * I - << NOT IMPLEMENTED >>  * j - Day of month without leading zeros ('1' to '31')  * l - Full name of day of week ('Monday' to 'Sunday')  * L - Leap year or not? ('1' for true or '0' for false)  * m - Month of year with leading zeros ('01' to '12')  * M - Three-letter, shortened name of month of year ('Jan' to 'Dec')  * n - Month of year without leading zeros ('1' to '12')  * O - Greenwich Mean Time (GMT) offset ('[+/-]HHMM')  * r - RFC 822 format (e.g. 'Thu, 21 Dec 2000 16:01:07 +0200')  * s - Seconds of minute with leading zeros ('00' to '59')  * S - Ordinal suffix (in English) of day of month ('st', 'nd', 'rd' or 'th')  * t - Days in month ('28' to '31')  * T - << NOT IMPLEMENTED >>  * U - Seconds since the UNIX epoch (1 Jan 1970 00:00:00 GMT)  * w - Day of week ('0' for Sunday to '6' for Saturday)  * W - ISO 8601 week number of year ('01' to '53')  * y - Two-digit year (e.g. '99' or '03')  * Y - Four-digit year (e.g. '1999' or '2003')  * z - Day of year ('1' to '366')  * Z - Greenwich Mean Time (GMT) offset in seconds ('-43200' to '43200')  *  * @summary             format date  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/18/03  * @interface           <code>Date.formatDate(sFormatString)</code>  * @requires            <code>Date.getDayOfYear()</code>  * @requires            <code>Date.getDaysInMonth()</code>  * @requires            <code>Date.getGMTOffset()</code>  * @requires            <code>Date.getLong12Hours()</code>  * @requires            <code>Date.getLong24Hours()</code>  * @requires            <code>Date.getLongDate()</code>  * @requires            <code>Date.getLongDayName()</code>  * @requires            <code>Date.getLongMinutes()</code>  * @requires            <code>Date.getLongMonth()</code>  * @requires            <code>Date.getLongMonthName()</code>  * @requires            <code>Date.getLongSeconds()</code>  * @requires            <code>Date.getMeridiem()</code>  * @requires            <code>Date.getOrdinalSuffix()</code>  * @requires            <code>Date.getRFC822Date()</code>  * @requires            <code>Date.getShort12Hours()</code>  * @requires            <code>Date.getShort24Hours()</code>  * @requires            <code>Date.getShortDayName()</code>  * @requires            <code>Date.getShortMonth()</code>  * @requires            <code>Date.getShortMonthName()</code>  * @requires            <code>Date.getShortYear()</code>  * @requires            <code>Date.getSwatchTime()</code>  * @requires            <code>Date.getTimeSeconds()</code>  * @requires            <code>Date.getTimezone()</code>  * @requires            <code>Date.getTimezoneOffsetSeconds()</code>  * @requires            <code>Date.getWeekOfYear()</code>  * @requires            <code>Date.isDaylightSavingsTime()</code>  * @requires            <code>Date.isLeapYear()</code>  * @param sFormatString the string to format against  * @return              the formatted date string  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              MethodNotAvailableException  * @throws              TypeMismatchException  * @throws              UnknownException  * @see                 <code>Date.getDayOfYear()</code>  * @see                 <code>Date.getDaysInMonth()</code>  * @see                 <code>Date.getGMTOffset()</code>  * @see                 <code>Date.getLong12Hours()</code>  * @see                 <code>Date.getLong24Hours()</code>  * @see                 <code>Date.getLongDate()</code>  * @see                 <code>Date.getLongDayName()</code>  * @see                 <code>Date.getLongMinutes()</code>  * @see                 <code>Date.getLongMonth()</code>  * @see                 <code>Date.getLongMonthName()</code>  * @see                 <code>Date.getLongSeconds()</code>  * @see                 <code>Date.getMeridiem()</code>  * @see                 <code>Date.getOrdinalSuffix()</code>  * @see                 <code>Date.getRFC822Date()</code>  * @see                 <code>Date.getShort12Hours()</code>  * @see                 <code>Date.getShort24Hours()</code>  * @see                 <code>Date.getShortDayName()</code>  * @see                 <code>Date.getShortMonth()</code>  * @see                 <code>Date.getShortMonthName()</code>  * @see                 <code>Date.getShortYear()</code>  * @see                 <code>Date.getSwatchTime()</code>  * @see                 <code>Date.getTimeSeconds()</code>  * @see                 <code>Date.getTimezone()</code>  * @see                 <code>Date.getTimezoneOffsetSeconds()</code>  * @see                 <code>Date.getWeekOfYear()</code>  * @see                 <code>Date.isDaylightSavingsTime()</code>  * @see                 <code>Date.isLeapYear()</code>  */ Date.prototype.formatDate = function(sFormatString) {     try {         var vError = null;         var iNumArguments = arguments.length;         if (!('getDayOfYear' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getDayOfYear');         }         if (!('getDaysInMonth' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getDaysInMonth');         }         if (!('getGMTOffset' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getGMTOffset');         }         if (!('getLong12Hours' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLong12Hours');         }         if (!('getLong24Hours' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLong24Hours');         }         if (!('getLongDate' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongDate');         }         if (!('getLongDayName' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongDayName');         }         if (!('getLongMinutes' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongMinutes');         }         if (!('getLongMonth' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongMonth');         }         if (!('getLongMonthName' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongMonthName');         }         if (!('getLongSeconds' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getLongSeconds');         }         if (!('getMeridiem' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getMeridiem');         }         if (!('getOrdinalSuffix' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getOrdinalSuffix');         }         if (!('getRFC822Date' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getRFC822Date');         }         if (!('getShort12Hours' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShort12Hours');         }         if (!('getShort24Hours' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShort24Hours');         }         if (!('getShortDayName' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShortDayName');         }         if (!('getShortMonth' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShortMonth');         }         if (!('getShortMonthName' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShortMonthName');         }         if (!('getShortYear' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getShortYear');         }         if (!('getSwatchTime' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getSwatchTime');         }         if (!('getTimeSeconds' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getTimeSeconds');         }         if (!('getTimezone' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getTimezone');         }         if (!('getTimezoneOffsetSeconds' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getTimezoneOffsetSeconds');         }         if (!('getWeekOfYear' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.getWeekOfYear');         }         if (!('isDaylightSavingsTime' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.isDaylightSavingsTime');         }         if (!('isLeapYear' in this)) {             throw vError = new MethodNotAvailableException('Date.formatDate', 'Date.isLeapYear');         }         if (iNumArguments != 1) {             throw vError = new IllegalArgumentException('Date.formatDate', 1, iNumArguments);         }         if (typeof sFormatString != 'string') {             throw vError = new TypeMismatchException('Date.formatDate', 'string', typeof sFormatString);         }         var sDayOfYear = this.getDayOfYear();         var sDaysInMonth = this.getDaysInMonth();         var sGMTOffset = this.getGMTOffset();         var sIsDaylightSavingsTime = this.isDaylightSavingsTime();         var sIsLeapYear = this.isLeapYear();         var sLong12Hours = this.getLong12Hours();         var sLong24Hours = this.getLong24Hours();         var sLongDate = this.getLongDate();         var sLongDayName = this.getLongDayName();         var sLongMinutes = this.getLongMinutes();         var sLongMonth = this.getLongMonth();         var sLongMonthName = this.getLongMonthName();         var sLongSeconds = this.getLongSeconds();         var sMeridiem = this.getMeridiem();         var sOrdinalSuffix = this.getOrdinalSuffix();         var sRFC822Date = this.getRFC822Date();         var sShort12Hours = this.getShort12Hours();         var sShort24Hours = this.getShort24Hours();         var sShortDayName = this.getShortDayName();         var sShortMonth = this.getShortMonth();         var sShortMonthName = this.getShortMonthName();         var sShortYear = this.getShortYear();         var sSwatchTime = this.getSwatchTime();         var sTimeSeconds = this.getTimeSeconds();         var sTimezone = this.getTimezone();         var sTimezoneOffsetSeconds = this.getTimezoneOffsetSeconds();         var sWeekOfYear = this.getWeekOfYear();         if (!sDayOfYear      || !sDaysInMonth           || !sGMTOffset     || !sIsDaylightSavingsTime ||             !sIsLeapYear     || !sLong12Hours           || !sLong24Hours   || !sLongDate              ||             !sLongDayName    || !sLongMinutes           || !sLongMonth     || !sLongMonthName         ||             !sLongSeconds    || !sMeridiem              || !sOrdinalSuffix || !sRFC822Date            ||             !sShort12Hours   || !sShort24Hours          || !sShortDayName  || !sShortMonth            ||             !sShortMonthName || !sShortYear             || !sSwatchTime    || !sTimeSeconds           ||             !sTimezone       || !sTimezoneOffsetSeconds || !sWeekOfYear) {             throw vError = new UnknownException('Date.formatDate');         }         var sFormatStringLength = sFormatString.length;         var sFormattedDate = '';         for (var i = 0; i < sFormatStringLength; i++) {             var sChar = sFormatString.charAt(i);             switch (sChar) {                 case 'a' : sFormattedDate += sMeridiem; break;                 case 'A' : sFormattedDate += sMeridiem.toUpperCase(); break;                 case 'B' : sFormattedDate += sSwatchTime; break;                 case 'd' : sFormattedDate += sLongDate; break;                 case 'D' : sFormattedDate += sShortDayName; break;                 case 'F' : sFormattedDate += sLongMonthName; break;                 case 'g' : sFormattedDate += sShort12Hours; break;                 case 'G' : sFormattedDate += sShort24Hours; break;                 case 'h' : sFormattedDate += sLong12Hours; break;                 case 'H' : sFormattedDate += sLong24Hours; break;                 case 'i' : sFormattedDate += sLongMinutes; break;                 case 'I' : sFormattedDate += sIsDaylightSavingsTime; break;                 case 'j' : sFormattedDate += this.getDate().toString(); break;                 case 'l' : sFormattedDate += sLongDayName; break;                 case 'L' : sFormattedDate += sIsLeapYear; break;                 case 'm' : sFormattedDate += sLongMonth; break;                 case 'M' : sFormattedDate += sShortMonthName; break;                 case 'n' : sFormattedDate += sShortMonth; break;                 case 'O' : sFormattedDate += sGMTOffset; break;                 case 'r' : sFormattedDate += sRFC822Date; break;                 case 's' : sFormattedDate += sLongSeconds; break;                 case 'S' : sFormattedDate += sOrdinalSuffix; break;                 case 't' : sFormattedDate += sDaysInMonth; break;                 case 'T' : sFormattedDate += sTimezone; break;                 case 'U' : sFormattedDate += sTimeSeconds; break;                 case 'w' : sFormattedDate += this.getDay().toString(); break;                 case 'W' : sFormattedDate += sWeekOfYear; break;                 case 'y' : sFormattedDate += sShortYear; break;                 case 'Y' : sFormattedDate += this.getFullYear().toString(); break;                 case 'z' : sFormattedDate += sDayOfYear; break;                 case 'Z' : sFormattedDate += sTimezoneOffsetSeconds; break;                 default  : sFormattedDate += sChar;             }         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sFormattedDate;     } } /**  * Returns the day of the year for this date as a one-, two-, or three-digit  * string between '1' and '366', inclusive.  *  * @summary             day of year  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/12/03  * @interface           <code>Date.getDayOfYear()</code>  * @requires            <code>Date.isLeapYear()</code>  * @return              the day of the year for this date as a one-, two-, or  *                      three-digit string between '1' and '366', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              MethodNotAvailableException  * @throws              UnknownException  * @see                 <code>Date.isLeapYear()</code>  */ Date.prototype.getDayOfYear = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (!('isLeapYear' in this)) {             throw vError = new MethodNotAvailableException('Date.getDayOfYear', 'Date.isLeapYear');         }         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getDayOfYear', 0, iNumArguments);         }         var iMonth = this.getMonth();         var sIsLeapYear = this.isLeapYear();         if (!sIsLeapYear) {             throw vError = new UnknownException('Date.getDayOfYear');         }         var iDaysInFebruary = (parseInt(sIsLeapYear) == 1) ? 29 : 28;         var aDaysInMonth = new Array(31, iDaysInFebruary, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);         var iDayOfYear = 0;         for (var i = 0; i < iMonth; i++) {             iDayOfYear += aDaysInMonth[i];         }         iDayOfYear += this.getDate();         var sDayOfYear = iDayOfYear.toString();     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sDayOfYear;     } } /**  * Returns the number of days in the month for this date as a two-digit string  * between '28' and '31', inclusive.  *  * @summary             days in month  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getDaysInMonth()</code>  * @requires            <code>Date.isLeapYear()</code>  * @return              the number of days in the month for this date as a  *                      two-digit string between '28' and '31', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              MethodNotAvailableException  * @throws              UnknownException  * @see                 <code>Date.isLeapYear()</code>  */ Date.prototype.getDaysInMonth = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (!('isLeapYear' in this)) {             throw vError = new MethodNotAvailableException('Date.getDaysInMonth', 'Date.isLeapYear');         }         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getDaysInMonth', 0, iNumArguments);         }         var iMonth = this.getMonth();         var sIsLeapYear = this.isLeapYear();         if (!sIsLeapYear) {             throw vError = new UnknownException('Date.getDaysInMonth');         }         switch (iMonth) {             case  1 : var iDaysInMonth = (parseInt(sIsLeapYear) == 1) ? 29 : 28; break;             case  3 :             case  5 :             case  8 :             case 10 : var iDaysInMonth = 30; break;             default : var iDaysInMonth = 31;         }         var sDaysInMonth = iDaysInMonth.toString();     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sDaysInMonth;     } } /**  * Returns the number of days in the year for this date as either 365 or 366.  *  * @summary             days in year  * @author              Stuart Wigley  * @version             1.0, 12/01/03  * @interface           <code>Date.getDaysInYear()</code>  * @requires            <code>Date.isLeapYear()</code>  * @return              the number of days in the year for this date as either  *                      365 or 366  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              MethodNotAvailableException  * @throws              UnknownException  * @see                 <code>Date.isLeapYear()</code>  */ Date.prototype.getDaysInYear = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (!('isLeapYear' in this)) {             throw vError = new MethodNotAvailableException('Date.getDaysInYear', 'Date.isLeapYear');         }         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getDaysInYear', 0, iNumArguments);         }         var sIsLeapYear = this.isLeapYear();         if (!sIsLeapYear) {             throw vError = new UnknownException('Date.getDaysInYear');         }         var sDaysInYear = (sIsLeapYear == '1') ? '366' : '365';     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sDaysInYear;     } } /**  * Calculates the day on which Easter Sunday falls for the current year using  * Butcher's Method. Returns an integer between '1' and '31'  *  * @summary             easter day  * @author              Stuart Wigley  * @version             1.0, 12/01/03  * @interface           <code>Date.getEasterDay()</code>  * @return              the day on which Easter Sunday falls  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getEasterDay = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getEasterDate', 0, iNumArguments);         }         var iYear = this.getFullYear();         var a = iYear % 19;         var b = Math.floor(iYear / 100);         var c = iYear % 100;         var d = Math.floor(b / 4);         var e = b % 4;         var f = Math.floor((b + 8) / 25);         var g = Math.floor((b - f + 1) / 3);         var h = (19 * a + b - d - g + 15) % 30;         var i = Math.floor(c / 4);         var k = c % 4;         var l = (32 + 2 * e + 2 * i - h - k) % 7;         var m = Math.floor((a + 11 * h + 22 * l) / 451);         var p = (h + l - 7 * m + 114) % 31;         var iEasterDay = p + 1;     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : iEasterDay;     } } /**  * Calculates the month in which Easter Sunday falls for the current year using  * Butcher's Method. Returns '3' for March or '4' for April.  *  * @summary             easter month  * @author              Stuart Wigley  * @version             1.0, 12/01/03  * @interface           <code>Date.getEasterMonth()</code>  * @return              the month in which Easter Sunday falls  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getEasterMonth = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getEasterMonth', 0, iNumArguments);         }         var iYear = this.getFullYear();         var a = iYear % 19;         var b = Math.floor(iYear / 100);         var c = iYear % 100;         var d = Math.floor(b / 4);         var e = b % 4;         var f = Math.floor((b + 8) / 25);         var g = Math.floor((b - f + 1) / 3);         var h = (19 * a + b - d - g + 15) % 30;         var i = Math.floor(c / 4);         var k = c % 4;         var l = (32 + 2 * e + 2 * i - h - k) % 7;         var m = Math.floor((a + 11 * h + 22 * l) / 451);         var iEasterMonth = Math.floor((h + l - 7 * m + 114) / 31);     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : iEasterMonth;     } } /**  * Returns the formatted Greenwich Mean Time (GMT) offset ('[+/-]HHMM') for  * this date that consists of a plus sign (+) or minus sign (-) followed by  * four digits representing hours (HH) and minutes (MM).  *  * @summary             GMT offset  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 08/17/03  * @interface           <code>Date.getGMTOffset()</code>  * @return              the formatted Greenwich Mean Time (GMT) offset  *                      ('[+/-]HHMM') for this date  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getGMTOffset = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getGMTOffset', 0, iNumArguments);         }         var iTimezoneOffset = this.getTimezoneOffset();         var iAbsTimezoneOffset = Math.abs(iTimezoneOffset);         var sTimezoneOffsetSign = (iTimezoneOffset != iAbsTimezoneOffset) ? '-' : '+';         var iTimezoneOffsetHours = iAbsTimezoneOffset / 60;         var sTempTimezoneOffsetHours = iTimezoneOffsetHours.toString();         var sTimezoneOffsetHours = (iTimezoneOffsetHours < 10) ? '0' + sTempTimezoneOffsetHours : sTempTimezoneOffsetHours;         var iTimezoneOffsetMinutes = iAbsTimezoneOffset % 60;         var sTempTimezoneOffsetMinutes = iTimezoneOffsetMinutes.toString();         var sTimezoneOffsetMinutes = (iTimezoneOffsetMinutes < 10) ? '0' + sTempTimezoneOffsetMinutes : sTempTimezoneOffsetMinutes;         var sGMTOffset = sTimezoneOffsetSign + sTimezoneOffsetHours + sTimezoneOffsetMinutes;     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sGMTOffset;     } } /**  * Returns the hour for this date as a two-digit string between '01' and '12',  * inclusive.  *  * @summary             12-hour two-digit hour (01-12)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getLong12Hours()</code>  * @return              the hour for this date as a two-digit string between  *                      '01' and '12', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getLong12Hours = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getLong12Hours', 0, iNumArguments);         }         var iShort12Hours = this.getHours() % 12;         var sLong12Hours = iShort12Hours.toString();         if (iShort12Hours == 0) {             sLong12Hours = '12';         } else if (iShort12Hours < 10) {             sLong12Hours = '0' + sLong12Hours;         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sLong12Hours;     } } /**  * Returns the hour for this date as a two-digit string between '00' and '23',  * inclusive.  *  * @summary             24-hour two-digit hour (00-23)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getLong24Hours()</code>  * @return              the hour for this date as a two-digit string between  *                      '00' and '23', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getLong24Hours = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getLong24Hours', 0, iNumArguments);         }         var iShort24Hours = this.getHours();         var sLong24Hours = iShort24Hours.toString();         if (iShort24Hours < 10) {             sLong24Hours = '0' + sLong24Hours;         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sLong24Hours;     } } /**  * Returns the day of the month for this date as a two-digit string between  * '01' and '31', inclusive.  *  * @summary             two-digit day of month (01-31)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 08/17/03  * @interface           <code>Date.getLongDate()</code>  * @return              the day of the month for this date as a two-digit  *                      string between '01' and '31', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getLongDate = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getLongDate', 0, iNumArguments);         }         var iShortDate = this.getDate();         var sLongDate = iShortDate.toString();         if (iShortDate < 10) {             sLongDate = '0' + sLongDate;         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sLongDate;     } } /**  * Returns the day name for this date (e.g. 'Monday', 'Tuesday', etc.).  *  * @summary             day name  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getLongDayName()</code>  * @return              the day name for this date  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getLongDayName = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getLongDayName', 0, iNumArguments);         }         var aLongDayNames = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');         var sLongDayName = aLongDayNames[this.getDay()];     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sLongDayName;     } } /**  * Returns the minutes for this date as a two-digit string between '00' and  * '59', inclusive.  *  * @summary             two-digit minutes (00-59)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 08/17/03  * @interface           <code>Date.getLongMinutes()</code>  * @return              the minutes for this date as a two-digit string  *                      between '00' and '59', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getLongMinutes = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getLongMinutes', 0, iNumArguments);         }         var iShortMinutes = this.getMinutes();         var sLongMinutes = iShortMinutes.toString();         if (iShortMinutes < 10) {             sLongMinutes = '0' + sLongMinutes;         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sLongMinutes;     } } /**  * Returns the month for this date as a two-digit string between '01' and  * '12', inclusive.  *  * @summary             two-digit month (01-12)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 08/17/03  * @interface           <code>Date.getLongMonth()</code>  * @return              the month for this date as a two-digit string between  *                      '01' and '12', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getLongMonth = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getLongMonth', 0, iNumArguments);         }         var iShortMonth = this.getMonth() + 1;         var sLongMonth = iShortMonth.toString();         if (iShortMonth < 10) {             sLongMonth = '0' + sLongMonth;         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sLongMonth;     } } /**  * Returns the month name for this date (e.g. 'January', 'February', etc.).  *  * @summary             month name  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getLongMonthName()</code>  * @return              the month name for this date  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getLongMonthName = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getLongMonthName', 0, iNumArguments);         }         var aLongMonthNames = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');         var sLongMonthName = aLongMonthNames[this.getMonth()];     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sLongMonthName;     } } /**  * Returns the seconds for this date as a two-digit string between '00' and  * '59', inclusive.  *  * @summary             two-digit seconds (00-59)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 08/17/03  * @interface           <code>Date.getLongSeconds()</code>  * @return              the seconds for this date as a two-digit string  *                      between '00' and '59', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getLongSeconds = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getLongSeconds', 0, iNumArguments);         }         var iShortSeconds = this.getSeconds();         var sLongSeconds = iShortSeconds.toString();         if (iShortSeconds < 10) {             sLongSeconds = '0' + sLongSeconds;         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sLongSeconds;     } } /**  * Returns the "meridiem" for this date as either 'am' (Ante Meridiem) or 'pm'  * (Post Meridiem).  *  * @summary             meridiem  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getMeridiem()</code>  * @return              the "meridiem" for this date as either 'am' or 'pm'  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getMeridiem = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getMeridiem', 0, iNumArguments);         }         var sMeridiem = (this.getHours() < 12) ? 'am' : 'pm';     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sMeridiem;     } } /**  * Returns the ordinal suffix (in English) of the day of the month for this  * date (i.e. 'st', 'nd', 'rd' or 'th').  *  * @summary             English ordinal suffix  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getOrdinalSuffix()</code>  * @return              the ordinal suffix (in English) of the day of the  *                      month for this date (i.e. 'st', 'nd', 'rd' or 'th')  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getOrdinalSuffix = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getOrdinalSuffix', 0, iNumArguments);         }         switch (this.getDate()) {             case  1 :             case 21 :             case 31 : var sOrdinalSuffix = 'st'; break;             case  2 :             case 22 : var sOrdinalSuffix = 'nd'; break;             case  3 :             case 23 : var sOrdinalSuffix = 'rd'; break;             default : var sOrdinalSuffix = 'th';         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sOrdinalSuffix;     } } /**  * Returns this date formatted according to the Date and Time Specification of  * RFC 822 (Standard for the Format of ARPA Internet Text Messages).  *  * @summary             RFC 822 date  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getRFC822Date()</code>  * @requires            <code>Date.getGMTOffset()</code>  * @requires            <code>Date.getLong24Hours()</code>  * @requires            <code>Date.getLongMinutes()</code>  * @requires            <code>Date.getLongSeconds()</code>  * @requires            <code>Date.getShortDayName()</code>  * @requires            <code>Date.getShortMonthName()</code>  * @return              this date formatted according to the Date and Time  *                      Specification of RFC 822  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              MethodNotAvailableException  * @throws              UnknownException  * @see                 <code>Date.getGMTOffset()</code>  * @see                 <code>Date.getLong24Hours()</code>  * @see                 <code>Date.getLongMinutes()</code>  * @see                 <code>Date.getLongSeconds()</code>  * @see                 <code>Date.getShortDayName()</code>  * @see                 <code>Date.getShortMonthName()</code>  */ Date.prototype.getRFC822Date = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (!('getGMTOffset' in this)) {             throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getGMTOffset');         }         if (!('getLong24Hours' in this)) {             throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getLong24Hours');         }         if (!('getLongMinutes' in this)) {             throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getLongMinutes');         }         if (!('getLongSeconds' in this)) {             throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getLongSeconds');         }         if (!('getShortDayName' in this)) {             throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getShortDayName');         }         if (!('getShortMonthName' in this)) {             throw vError = new MethodNotAvailableException('Date.getRFC822Date', 'Date.getShortMonthName');         }         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getRFC822Date', 0, iNumArguments);         }         var sGMTOffset = this.getGMTOffset();         var sLong24Hours = this.getLong24Hours();         var sLongMinutes = this.getLongMinutes();         var sLongSeconds = this.getLongSeconds();         var sShortDayName = this.getShortDayName();         var sShortMonthName = this.getShortMonthName();         if (!sGMTOffset || !sLong24Hours || !sLongMinutes || !sLongSeconds || !sShortDayName || !sShortMonthName) {             throw vError = new UnknownException('Date.getRFC822Date');         }         var sRFC822Date = sShortDayName + ', ' + this.getDate() + ' ' + sShortMonthName + ' ' + this.getFullYear() + ' ' + sLong24Hours + ':' + sLongMinutes + ':' + sLongSeconds + ' ' + sGMTOffset;     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sRFC822Date;     } } /**  * Returns the hour for this date as a one- or two-digit string between '1'  * and '12', inclusive.  *  * @summary             12-hour one-/two-digit hour (1-12)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getShort12Hours()</code>  * @return              the hour for this date as a one- or two-digit string  *                      between '1' and '12', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getShort12Hours = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getShort12Hours', 0, iNumArguments);         }         var iTempShort12Hours = this.getHours() % 12;         var sShort12Hours = ((iTempShort12Hours == 0) ? 12 : iTempShort12Hours).toString();     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sShort12Hours;     } } /**  * Returns the hour for this date as a one- or two-digit string between '0'  * and '23', inclusive.  *  * @summary             24-hour one-/two-digit hour (0-23)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getShort24Hours()</code>  * @return              the hour for this date as a one- or two-digit string  *                      between '0' and '23', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getShort24Hours = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getShort24Hours', 0, iNumArguments);         }         var sShort24Hours = this.getHours().toString();     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sShort24Hours;     } } /**  * Returns the shortened day name for this date (e.g. 'Mon', 'Tue', etc.).  *  * @summary             short day name  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getShortDayName()</code>  * @requires            <code>Date.getLongDayName()</code>  * @return              the shortened day name for this date  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              MethodNotAvailableException  * @throws              UnknownException  * @see                 <code>Date.getLongDayName()</code>  */ Date.prototype.getShortDayName = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (!('getLongDayName' in this)) {             throw vError = new MethodNotAvailableException('Date.getShortDayName', 'Date.getLongDayName');         }         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getShortDayName', 0, iNumArguments);         }         var sLongDayName = this.getLongDayName();         if (!sLongDayName) {             throw vError = new UnknownException('Date.getShortDayName');         }         var sShortDayName = sLongDayName.substr(0, 3);     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sShortDayName;     } } /**  * Returns the month for this date as a one- or two-digit string between '1'  * and '12', inclusive.  *  * @summary             one-/two-digit month (1-12)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 08/17/03  * @interface           <code>Date.getShortMonth()</code>  * @return              the month for this date as a one- or two-digit string  *                      between '1' and '12', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getShortMonth = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getShortMonth', 0, iNumArguments);         }         var sShortMonth = (this.getMonth() + 1).toString();     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sShortMonth;     } } /**  * Returns the shortened month name for this date (e.g. 'Jan', 'Feb', etc.).  *  * @summary             short month name  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/17/03  * @interface           <code>Date.getShortMonthName()</code>  * @requires            <code>Date.getLongMonthName()</code>  * @return              the shortened month name for this date  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              MethodNotAvailableException  * @throws              UnknownException  * @see                 <code>Date.getLongMonthName()</code>  */ Date.prototype.getShortMonthName = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (!('getLongMonthName' in this)) {             throw vError = new MethodNotAvailableException('Date.getShortMonthName', 'Date.getLongMonthName');         }         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getShortMonthName', 0, iNumArguments);         }         var sLongMonthName = this.getLongMonthName();         if (!sLongMonthName) {             throw vError = new UnknownException('Date.getShortMonthName');         }         var sShortMonthName = sLongMonthName.substr(0, 3);     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sShortMonthName;     } } /**  * Returns the year for this date as a two-digit string between '00' and '99',  * inclusive.  *  * @summary             two-digit year (00-99)  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 08/17/03  * @interface           <code>Date.getShortYear()</code>  * @return              the year for this date as a two-digit string between  *                      '00' and '99', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getShortYear = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getShortYear', 0, iNumArguments);         }         var sShortYear = this.getFullYear().toString().substr(2);     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sShortYear;     } } /**  * Returns the Swatch Internet Time for this date as a three-digit string  * between '000' and '999' prefixed by '@'. See http://www.swatch.com for more  * information.  *  * @summary             Swatch Internet Time  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/18/03  * @interface           <code>Date.getSwatchTime()</code>  * @return              the Swatch Internet Time for this date as a three-  *                      digit string between '000' and '999' prefixed by '@'  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getSwatchTime = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getSwatchTime', 0, iNumArguments);         }         var iTempSwatchTime = Math.floor(((this.getHours() * 3600) + ((this.getMinutes() + this.getTimezoneOffset() + 60) * 60) + this.getSeconds()) / 86.4);         var iSwatchTime = (iTempSwatchTime >= 1000) ? iTempSwatchTime - 1000 : iTempSwatchTime;         var sSwatchTime = iSwatchTime.toString();         if (iSwatchTime < 10) {             sSwatchTime = '@00' + sSwatchTime;         } else if (iSwatchTime < 100) {             sSwatchTime = '@0' + sSwatchTime;         } else {             sSwatchTime = '@' + sSwatchTime;         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sSwatchTime;     } } /**  * Returns the number of seconds elapsed since the UNIX epoch (1 Jan 1970  * 00:00:00 GMT) for this date.  *  * @summary             seconds since UNIX epoch  * @author              Randolph Fielding  * @version             1.0, 08/20/03  * @interface           <code>Date.getTimeSeconds()</code>  * @return              the number of seconds elapsed since the UNIX epoch (1  *                      Jan 1970 00:00:00 GMT) for this date  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getTimeSeconds = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getTimeSeconds', 0, iNumArguments);         }         var sTimeSeconds = Math.floor(this.getTime() / 1000).toString();     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sTimeSeconds;     } } /**  * Returns the abbreviation of the name of the local timezone.  *  * @summary             not implemented  * @author              Stuart Wigley  * @version             1.0, 08/07/03  * @interface           <code>Date.getTimezone()</code>  * @return              the abbreviation of the name of the local timezone  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getTimezone = function() {     return '<< NOT IMPLEMENTED >>'; } /**  * Returns the Greenwich Mean Time (GMT) offset for this date in seconds.  *  * @summary             timezone offset in seconds  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.2, 08/17/03  * @interface           <code>Date.getTimezoneOffsetSeconds()</code>  * @return              the Greenwich Mean Time (GMT) offset for this date in  *                      seconds  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getTimezoneOffsetSeconds = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getTimezoneOffsetSeconds', 0, iNumArguments);         }         var sTimezoneOffsetSeconds = (this.getTimezoneOffset() * 60).toString();     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sTimezoneOffsetSeconds;     } } /**  * Returns the ISO week (as specified in the ISO 8601 calendar) for this date  * as a two-digit string between '01' and '53', inclusive. The algorithm used  * is adopted from "Algorithm for Converting Gregorian Dates to ISO 8601 Week  * Date (Y2K Compliant)" by Rick McCarty, 1999. See  * http://personal.ecu.edu/mccartyr/ISOwdALG.txt for more information.  *  * @summary             week of year  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/25/03  * @interface           <code>Date.getWeekOfYear()</code>  * @requires            <code>Date.getDayOfYear()</code>  * @requires            <code>Date.isLeapYear()</code>  * @return              the ISO week for this date as a one- or two-digit  *                      string between '1' and '53', inclusive  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  * @throws              MethodNotAvailableException  * @throws              UnknownException  * @throws              <code>Date.getDayOfYear()</code>  * @see                 <code>Date.isLeapYear()</code>  */ Date.prototype.getWeekOfYear = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (!('getDayOfYear' in this)) {             throw vError = new MethodNotAvailableException('Date.getWeekOfYear', 'Date.getDayOfYear');         }         if (!('isLeapYear' in this)) {             throw vError = new MethodNotAvailableException('Date.getWeekOfYear', 'Date.isLeapYear');         }         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getWeekOfYear', 0, iNumArguments);         }         var iYear = this.getFullYear();         var iYearM1 = iYear - 1;         var sDayOfYear = this.getDayOfYear();         var sIsLeapYear = this.isLeapYear();         var sIsLeapYearM1 = (new Date('January 1, ' + iYearM1.toString())).isLeapYear();         if (!sDayOfYear || !sIsLeapYear || !sIsLeapYearM1) {             throw vError = new UnknownException('Date.getWeekOfYear');         }         var iYearM1Mod100 = iYearM1 % 100;         var iDayOfYear = parseInt(sDayOfYear);         var iJan1DayOfWeek = 1 + ((((Math.floor((iYearM1 - iYearM1Mod100) / 100) % 4) * 5) + (iYearM1Mod100 + Math.floor(iYearM1Mod100 / 4))) % 7);         var iDayOfWeek = 1 + (((iDayOfYear + (iJan1DayOfWeek - 1)) - 1) % 7);         var iDaysInYear = (parseInt(sIsLeapYear) == 1) ? 366 : 365;         var iWeekOfYear = 0;         if ((iDayOfYear <= (8 - iJan1DayOfWeek)) && (iJan1DayOfWeek > 4)) {             iWeekOfYear = ((iJan1DayOfWeek == 5) || ((iJan1DayOfWeek == 6) && (parseInt(sIsLeapYearM1) == 1))) ? 53 : 52;         } else if ((iDaysInYear - iDayOfYear) < (4 - iDayOfWeek)) {             iWeekOfYear = 1;         } else {             iWeekOfYear = Math.floor((iDayOfYear + (7 - iDayOfWeek) + (iJan1DayOfWeek - 1)) / 7);             if (iJan1DayOfWeek > 4) {                 iWeekOfYear -= 1;             }         }         var sWeekOfYear = iWeekOfYear.toString();         if (iWeekOfYear < 10) {             sWeekOfYear = '0' + sWeekOfYear;         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sWeekOfYear;     } } /**  * Returns Zodiac sign for the current date.  *  * @summary             zodiac sign  * @author              Stuart Wigley  * @version             1.0, 10/01/03  * @interface           <code>Date.getZodiacSign()</code>  * @return              the Zodiac sign for the current date  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.getZodiacSign = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.getZodiac', 0, iNumArguments);         }         var iMonth = this.getMonth() + 1;         var iDay = this.getDate();         var sZodiacSign = '';         if (iMonth == 1 && iDay >= 20 || iMonth == 2 && iDay <=18) {             sZodiacSign = "Aquarius";         } else if (iMonth == 2 && iDay >=19 || iMonth == 3 && iDay <=20) {             sZodiacSign = "Pisces";         } else if (iMonth == 3 && iDay >=21 || iMonth == 4 && iDay <=19) {             sZodiacSign = "Aries";         } else if (iMonth == 4 && iDay >=20 || iMonth == 5 && iDay <=20) {             sZodiacSign = "Taurus";         } else if (iMonth == 5 && iDay >=21 || iMonth == 6 && iDay <=21) {             sZodiacSign = "Gemini";         } else if (iMonth == 6 && iDay >=22 || iMonth == 7 && iDay <=22) {             sZodiacSign = "Cancer";         } else if (iMonth == 7 && iDay >=23 || iMonth == 8 && iDay <=22) {             sZodiacSign = "Leo";         } else if (iMonth == 8 && iDay >=23 || iMonth == 9 && iDay <=22) {             sZodiacSign = "Virgo";         } else if (iMonth == 9 && iDay >=23 || iMonth == 10 && iDay <=22) {             sZodiacSign = "Libra";         } else if (iMonth == 10 && iDay >=23 || iMonth == 11 && iDay <=21) {             sZodiacSign = "Scorpio";         } else if (iMonth == 11 && iDay >=22 || iMonth == 12 && iDay <=21) {             sZodiacSign = "Sagittarius";         } else if (iMonth == 12 && iDay >=22 || iMonth == 1 && iDay <=19) {             sZodiacSign = "Capricorn";         }     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sZodiacSign;     } } /**  * Determines if this date falls within Daylight Savings Time.  *  * @summary             not implemented  * @author              Stuart Wigley  * @version             1.0, 08/07/03  * @interface           <code>Date.isDaylightSavingsTime()</code>  * @return              '1' if this date falls within Daylight Savings Time  * @return              '0' if this date does not fall within Daylight Savings  *                      Time  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.isDaylightSavingsTime = function() {     return '<< NOT IMPLEMENTED >>'; } /**  * Determines if this date falls within a leap year.  *  * @summary             is leap year?  * @author              Stuart Wigley  * @author              Randolph Fielding  * @version             1.1, 08/08/03  * @interface           <code>Date.isLeapYear()</code>  * @return              '1' if this date falls within a leap year  * @return              '0' if this date does not fall within a leap year  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.isLeapYear = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.isLeapYear', 0, iNumArguments);         }         var iFullYear = this.getFullYear();         var sIsLeapYear = (((iFullYear % 4) == 0) && (((iFullYear % 100) != 0) || ((iFullYear % 400) == 0))) ? '1' : '0';     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sIsLeapYear;     } } /**  * Determines if the current day is a weekday in the range Monday to Friday.  *  * @summary             is weekday?  * @author              Stuart Wigley  * @version             1.0, 10/01/03  * @interface           <code>Date.isWeekday()</code>  * @return              '1' if the day is a weekday  * @return              '0' if the day is not a weekday  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.isWeekday = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.isWeekday', 0, iNumArguments);         }         var iDayOfWeek = this.getDay();         var sIsWeekDay = (iDayOfWeek > 0 && iDayOfWeek < 6) ? '1' : '0';     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sIsWeekDay;     } } /**  * Determines if the current day is a weekend ie Saturday or Sunday  *  * @summary             is weekend?  * @author              Stuart Wigley  * @version             1.0, 10/01/03  * @interface           <code>Date.isWeekend()</code>  * @return              '1' if the day is a weekend  * @return              '0' if the day is not a weekend  * @return              <code>null</code> if an exception is encountered  * @throws              IllegalArgumentException  */ Date.prototype.isWeekend = function() {     try {         var vError = null;         var iNumArguments = arguments.length;         if (iNumArguments > 0) {             throw vError = new IllegalArgumentException('Date.isWeekend', 0, iNumArguments);         }         var iDayOfWeek = this.getDay();         var sIsWeekEnd = (iDayOfWeek == 0 || iDayOfWeek == 6) ? '1' : '0';     }     catch (vError) {         if (vError instanceof Error) {             vError.handleError();         }     }     finally {         return vError ? null : sIsWeekEnd;     } }         </script>                 <script type="text/javascript">             var oTest = new Test();             var oDebug = new Debug();             var oDate = new Date();         </script>     </head>     <body>         <table>             <tbody>                 <tr>                     <td>Date.formatDate()</td>                     <td><input id="formatDate1" name="input" type="text" size="5" /></td>                     <td><input id="formatDate" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="formatDateResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getDayOfYear()</td>                     <td>&nbsp;</td>                     <td><input id="getDayOfYear" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getDayOfYearResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getDaysInMonth()</td>                     <td>&nbsp;</td>                     <td><input id="getDaysInMonth" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getDaysInMonthResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getDaysInYear()</td>                     <td>&nbsp;</td>                     <td><input id="getDaysInYear" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getDaysInYearResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getEasterDay()</td>                     <td>&nbsp;</td>                     <td><input id="getEasterDay" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getEasterDayResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getEasterMonth()</td>                     <td>&nbsp;</td>                     <td><input id="getEasterMonth" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getEasterMonthResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getGMTOffset()</td>                     <td>&nbsp;</td>                     <td><input id="getGMTOffset" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getGMTOffsetResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getLong12Hours()</td>                     <td>&nbsp;</td>                     <td><input id="getLong12Hours" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getLong12HoursResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getLong24Hours()</td>                     <td>&nbsp;</td>                     <td><input id="getLong24Hours" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getLong24HoursResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getLongDate()</td>                     <td>&nbsp;</td>                     <td><input id="getLongDate" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getLongDateResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getLongDayName()</td>                     <td>&nbsp;</td>                     <td><input id="getLongDayName" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getLongDayNameResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getLongMinutes()</td>                     <td>&nbsp;</td>                     <td><input id="getLongMinutes" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getLongMinutesResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getLongMonth()</td>                     <td>&nbsp;</td>                     <td><input id="getLongMonth" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getLongMonthResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getLongMonthName()</td>                     <td>&nbsp;</td>                     <td><input id="getLongMonthName" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getLongMonthNameResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getLongSeconds()</td>                     <td>&nbsp;</td>                     <td><input id="getLongSeconds" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getLongSecondsResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getMeridiem()</td>                     <td>&nbsp;</td>                     <td><input id="getMeridiem" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getMeridiemResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getOrdinalSuffix()</td>                     <td>&nbsp;</td>                     <td><input id="getOrdinalSuffix" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getOrdinalSuffixResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getRFC822Date()</td>                     <td>&nbsp;</td>                     <td><input id="getRFC822Date" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getRFC822DateResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getShort12Hours()</td>                     <td>&nbsp;</td>                     <td><input id="getShort12Hours" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getShort12HoursResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getShort24Hours()</td>                     <td>&nbsp;</td>                     <td><input id="getShort24Hours" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getShort24HoursResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getShortDayName()</td>                     <td>&nbsp;</td>                     <td><input id="getShortDayName" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getShortDayNameResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getShortMonth()</td>                     <td>&nbsp;</td>                     <td><input id="getShortMonth" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getShortMonthResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getShortMonthName()</td>                     <td>&nbsp;</td>                     <td><input id="getShortMonthName" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getShortMonthNameResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getShortYear()</td>                     <td>&nbsp;</td>                     <td><input id="getShortYear" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getShortYearResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getSwatchTime()</td>                     <td>&nbsp;</td>                     <td><input id="getSwatchTime" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getSwatchTimeResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getTimeSeconds()</td>                     <td>&nbsp;</td>                     <td><input id="getTimeSeconds" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getTimeSecondsResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getTimezone()</td>                     <td>&nbsp;</td>                     <td><input id="getTimezone" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getTimezoneResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getTimezoneOffsetSeconds()</td>                     <td>&nbsp;</td>                     <td><input id="getTimezoneOffsetSeconds" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getTimezoneOffsetSecondsResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getWeekOfYear()</td>                     <td>&nbsp;</td>                     <td><input id="getWeekOfYear" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getWeekOfYearResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.getZodiacSign()</td>                     <td>&nbsp;</td>                     <td><input id="getZodiacSign" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="getZodiacSignResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.isDaylightSavingsTime()</td>                     <td>&nbsp;</td>                     <td><input id="isDaylightSavingsTime" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="isDaylightSavingsTimeResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.isLeapYear()</td>                     <td>&nbsp;</td>                     <td><input id="isLeapYear" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="isLeapYearResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.isWeekday()</td>                     <td>&nbsp;</td>                     <td><input id="isWeekday" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="isWeekdayResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>                 <tr>                     <td>Date.isWeekend()</td>                     <td>&nbsp;</td>                     <td><input id="isWeekend" type="button" value="Calculate &gt;" onclick="oTest.evaluateMethod(this, 'oDate')" /></td>                     <td><input id="isWeekendResult" name="output" type="text" size="30" readonly="readonly" /></td>                 </tr>             </tbody>         </table>     </body> </html>